summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Guthrie <cguthrie@mandriva.org>2010-01-31 16:35:41 +0000
committerColin Guthrie <cguthrie@mandriva.org>2010-09-29 22:10:23 +0100
commit858abe6cb977de4474d5243d53ff245ef0e0fb49 (patch)
tree5acd2e5bb367bb50cb8262334ce7fb8041eba481
parenta7a6f4427d77e60d62abae120791c3300e477c24 (diff)
augment-properties: Search for .desktop files in subfolders too.
-rw-r--r--src/modules/module-augment-properties.c44
1 files changed, 39 insertions, 5 deletions
diff --git a/src/modules/module-augment-properties.c b/src/modules/module-augment-properties.c
index 15aa3a1e..f80c9ce7 100644
--- a/src/modules/module-augment-properties.c
+++ b/src/modules/module-augment-properties.c
@@ -24,6 +24,7 @@
#endif
#include <sys/stat.h>
+#include <dirent.h>
#include <pulse/xmalloc.h>
#include <pulse/volume.h>
@@ -168,20 +169,53 @@ static void update_rule(struct rule *r) {
{ NULL, catch_all, NULL, NULL },
{ NULL, NULL, NULL, NULL },
};
+ pa_bool_t found = FALSE;
pa_assert(r);
fn = pa_sprintf_malloc(DESKTOPFILEDIR PA_PATH_SEP "%s.desktop", r->process_name);
- if (stat(fn, &st) < 0) {
+ if (stat(fn, &st) == 0)
+ found = TRUE;
+ else {
+ DIR *desktopfiles_dir;
+ struct dirent *dir;
+
+ /* Let's try a more aggressive search, but only one level */
+ if ((desktopfiles_dir = opendir(DESKTOPFILEDIR))) {
+ while ((dir = readdir(desktopfiles_dir))) {
+ if (dir->d_type != DT_DIR
+ || strcmp(dir->d_name, ".") == 0
+ || strcmp(dir->d_name, "..") == 0)
+ continue;
+
+ pa_xfree(fn);
+ fn = pa_sprintf_malloc(DESKTOPFILEDIR
+ PA_PATH_SEP "%s" PA_PATH_SEP "%s.desktop",
+ dir->d_name, r->process_name);
+
+ if (stat(fn, &st) == 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ closedir(desktopfiles_dir);
+ }
+ }
+ if (!found) {
r->good = FALSE;
pa_xfree(fn);
return;
}
- if (r->good && st.st_mtime == r->mtime) {
- pa_xfree(fn);
- return;
- }
+ if (r->good)
+ if (st.st_mtime == r->mtime) {
+ /* Theoretically the filename could have changed, but if so
+ having the same mtime is very unlikely so not worth tracking it in r */
+ pa_xfree(fn);
+ return;
+ }
+ else
+ pa_log_debug("Found %s.", fn);
r->good = TRUE;
r->mtime = st.st_mtime;