summaryrefslogtreecommitdiff
path: root/libmdock/matcher.c
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2015-01-19 00:44:17 +0100
committerJavier <dev.git@javispedro.com>2015-01-19 00:44:17 +0100
commit8069ebf9a157ce0952fd9f3ed6a4edcdce071911 (patch)
tree50249ee1554cc8353c427a2c7f336e7d710754be /libmdock/matcher.c
parentcd89c60570d17cad28928f3495eded7af2b45431 (diff)
downloadmdock-8069ebf9a157ce0952fd9f3ed6a4edcdce071911.tar.gz
mdock-8069ebf9a157ce0952fd9f3ed6a4edcdce071911.zip
fixing enums
Diffstat (limited to 'libmdock/matcher.c')
-rw-r--r--libmdock/matcher.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/libmdock/matcher.c b/libmdock/matcher.c
index 25e2b2f..5c1bd8b 100644
--- a/libmdock/matcher.c
+++ b/libmdock/matcher.c
@@ -18,6 +18,7 @@
*/
#include <ftw.h>
+#include <stdlib.h>
#include <string.h>
#include <glib/gstdio.h>
#include <gio/gio.h>
@@ -107,6 +108,18 @@ static void add_desktop_item_by_wmclass(const gchar *wmclass, GDesktopAppInfo *i
elist->list = g_slist_append(elist->list, item);
}
+static gchar *resolve_path(const gchar *path)
+{
+ char *buf = realpath(path, NULL);
+ if (buf) {
+ gchar *str = g_strdup(buf);
+ free(buf);
+ return str;
+ } else {
+ return NULL;
+ }
+}
+
static void add_desktop_info(GDesktopAppInfo *info)
{
const char *quoted_executable = g_app_info_get_executable(G_APP_INFO(info));
@@ -117,11 +130,19 @@ static void add_desktop_info(GDesktopAppInfo *info)
if (executable && executable[0]) {
if (g_path_is_absolute(executable)) {
- add_desktop_item_by_exec(executable, info, 4000);
+ gchar *resolved_exec = resolve_path(executable);
+ add_desktop_item_by_exec(resolved_exec, info, 4000);
+ g_free(resolved_exec);
} else {
gchar *execpath = g_find_program_in_path(executable);
if (execpath) {
- add_desktop_item_by_exec(execpath, info, 0);
+ gchar *resolved_exec = resolve_path(execpath);
+ if (resolved_exec) {
+ add_desktop_item_by_exec(resolved_exec, info, 0);
+ } else {
+ g_warning("Could not realpath executable: '%s'", execpath);
+ }
+ g_free(resolved_exec);
} else {
g_warning("Could not find executable in path: '%s'", executable);
}
@@ -199,6 +220,7 @@ static GSList * matches_by_executable(const gchar *exec)
if (elist) {
return g_slist_copy(elist->list);
} else {
+ g_debug("Executable %s not matched", exec);
return NULL;
}
}
@@ -214,7 +236,7 @@ static GSList * matches_by_wmclass(const gchar *wmclass)
}
}
-const gchar * match_application_to_desktop_file(AppId *appid)
+const gchar * match_appid_to_desktopid(AppId *appid)
{
if (!init_matcher()) return NULL;
@@ -229,6 +251,12 @@ const gchar * match_application_to_desktop_file(AppId *appid)
if (list) {
list = g_slist_sort(list, desktop_item_compare);
+
+ for (GSList *l = list; l; l = l->next) {
+ DesktopItem *item = l->data;
+ g_debug(" match %d %s", item->priority, item->desktop_file);
+ }
+
DesktopItem *best = list->data;
g_slist_free(list);
return best->desktop_file;