From f39ce884e73f9504c1ef3c81ed8241789f705f71 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 14 Mar 2012 18:57:13 +0100 Subject: Use basename of the desktop file as key in the blacklist hash table This is superior to using symlinks, as this also allows copying the desktop files into the blacklist directory. Copying is the default when dragging and dropping an application into that folder. --- src/messages-service.c | 71 ++++++++++++++------------------------------------ 1 file changed, 20 insertions(+), 51 deletions(-) diff --git a/src/messages-service.c b/src/messages-service.c index a5ddaf4..1d9c162 100644 --- a/src/messages-service.c +++ b/src/messages-service.c @@ -321,56 +321,14 @@ desktop_file_from_keyfile (const gchar * definition_file) return desktopfile; } -static gchar * -get_symlink_target (const gchar *path, - GError **error) -{ - GFile *file; - GFileInfo *fileinfo; - gchar *target = NULL; - - file = g_file_new_for_path (path); - - fileinfo = g_file_query_info (file, "standard::*", - G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, - NULL, error); - g_object_unref (file); - - if (!fileinfo) - return NULL; - - if (!g_file_info_get_is_symlink (fileinfo) || - !(target = g_strdup (g_file_info_get_symlink_target (fileinfo)))) - { - g_set_error (error, - G_IO_ERROR, - G_IO_ERROR_NOT_SYMBOLIC_LINK, - "'%s' is not a symbolic link", - path); - } - - g_object_unref (fileinfo); - return target; -} - /* Add a definition file into the black list and eclipse any launchers that have the same file. */ static gboolean blacklist_add (gpointer udata) { gchar * definition_file = (gchar *)udata; - gchar * target; - GError *error = NULL; - - target = get_symlink_target (definition_file, &error); - if (!target) { - g_warning ("Error loading blacklist file: %s", error->message); - g_error_free (error); - return FALSE; - } - blacklist_add_core(target, definition_file); - g_free(target); + blacklist_add_core(definition_file, definition_file); return FALSE; } @@ -382,8 +340,10 @@ blacklist_add (gpointer udata) static void blacklist_add_core (gchar * desktop, gchar * definition) { + gchar *basename = g_path_get_basename(desktop); + /* Check for conflicts */ - gpointer data = g_hash_table_lookup(blacklist, desktop); + gpointer data = g_hash_table_lookup(blacklist, basename); if (data != NULL) { gchar * oldfile = (gchar *)data; if (!g_strcmp0(oldfile, definition)) { @@ -392,27 +352,31 @@ blacklist_add_core (gchar * desktop, gchar * definition) g_warning("Already have desktop file '%s' in blacklist file '%s' not adding from '%s'", desktop, oldfile, definition); } + g_free(basename); return; } /* Actually blacklist this thing */ - g_hash_table_insert(blacklist, g_strdup(desktop), g_strdup(definition)); + g_hash_table_insert(blacklist, g_strdup(basename), g_strdup(definition)); g_debug("Adding Blacklist item '%s' for desktop '%s'", definition, desktop); /* Go through and eclipse folks */ GList * launcher; for (launcher = launcherList; launcher != NULL; launcher = launcher->next) { launcherList_t * item = (launcherList_t *)launcher->data; - if (!g_strcmp0(desktop, launcher_menu_item_get_desktop(item->menuitem))) { + gchar * item_basename = g_path_get_basename(launcher_menu_item_get_desktop(item->menuitem)); + if (!g_strcmp0(basename, item_basename)) { launcher_menu_item_set_eclipsed(item->menuitem, TRUE); dbusmenu_menuitem_property_set_bool(item->separator, DBUSMENU_MENUITEM_PROP_VISIBLE, FALSE); } + g_free(item_basename); } check_hidden(); /* Shouldn't need a resort here as hiding shouldn't cause things to move other than this item disappearing. */ + g_free(basename); return; } @@ -474,15 +438,20 @@ blacklist_remove (gpointer data) static gboolean blacklist_check (const gchar * desktop_file) { - g_debug("Checking blacklist for: %s", desktop_file); - if (blacklist == NULL) return FALSE; + gchar *basename = g_path_get_basename(desktop_file); + gboolean found; + + g_debug("Checking blacklist for: %s", basename); - if (g_hash_table_lookup(blacklist, desktop_file)) { + if (blacklist && g_hash_table_lookup(blacklist, basename)) { g_debug("\tFound!"); - return TRUE; + found = TRUE; } + else + found = FALSE; - return FALSE; + g_free(basename); + return found; } /* A callback everytime the blacklist directory changes -- cgit v1.2.3