From 1341d00cb6130b960f6392aa0edf0b4bf66896b8 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 23 Feb 2011 14:46:22 -0600 Subject: Make sure to set the type of the item before all the values. --- src/launcher-menu-item.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index a47af03..60880ad 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -97,6 +97,8 @@ launcher_menu_item_init (LauncherMenuItem *self) priv->ids = NULL; priv->shortcuts = NULL; + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_TYPE, APPLICATION_MENUITEM_TYPE); + return; } -- cgit v1.2.3 From 7d26151bcb7009e853168af2e601b62522228976 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 Apr 2011 10:43:55 -0500 Subject: Making it so that we store the keyfile as well. Sad we need to do this. --- src/launcher-menu-item.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index 60880ad..22ab88f 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -44,6 +44,7 @@ typedef struct _LauncherMenuItemPrivate LauncherMenuItemPrivate; struct _LauncherMenuItemPrivate { GAppInfo * appinfo; + GKeyFile * keyfile; gchar * desktop; IndicatorDesktopShortcuts * ids; GList * shortcuts; @@ -93,6 +94,7 @@ launcher_menu_item_init (LauncherMenuItem *self) priv->appinfo = NULL; priv->desktop = NULL; + priv->keyfile = NULL; priv->ids = NULL; priv->shortcuts = NULL; @@ -120,6 +122,11 @@ launcher_menu_item_dispose (GObject *object) priv->appinfo = NULL; } + if (priv->keyfile != NULL) { + g_object_unref(priv->keyfile); + priv->keyfile = NULL; + } + if (priv->ids != NULL) { g_object_unref(priv->ids); priv->ids = NULL; @@ -160,6 +167,8 @@ launcher_menu_item_new (const gchar * desktop_file) /* Parse the desktop file we've been given. */ priv->appinfo = G_APP_INFO(g_desktop_app_info_new_from_filename(desktop_file)); + priv->keyfile = g_key_file_new(); + g_key_file_load_from_file(priv->keyfile, desktop_file, G_KEY_FILE_NONE, NULL); priv->desktop = g_strdup(desktop_file); /* Set the appropriate values on this menu item based on the -- cgit v1.2.3 From 84cfe5c355b60b18789eb3dafab2feff762955fd Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 Apr 2011 10:57:48 -0500 Subject: Checking for the ayatana override in the keyfile --- src/launcher-menu-item.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index 22ab88f..dd9ad5e 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -259,18 +259,37 @@ nick_activate_cb (LauncherMenuItem * self, guint timestamp, gpointer data) return; } +#define ICON_KEY "X-Ayatana-Messaging-Menu-Icon" + +/* Figure out the appropriate icon for this launcher */ gchar * launcher_menu_item_get_icon (LauncherMenuItem * appitem) { LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(appitem); + gchar * retval = NULL; - if (priv->appinfo == NULL) { - return NULL; - } else { + /* Check to see if there is a specific icon for the messaging + menu first. */ + if (g_key_file_has_key(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, ICON_KEY, NULL) && retval == NULL) { + GError * error = NULL; + + retval = g_key_file_get_string(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, ICON_KEY, &error); + + if (error != NULL) { + /* Can't figure out why this would happen, but sure, let's print something */ + g_warning("Error getting '" ICON_KEY "' from desktop file: %s", error->message); + g_error_free(error); + } + } + + /* If there's not, or there is an error, we'll use the one + from the application info */ + if (priv->appinfo != NULL && retval == NULL) { GIcon * icon = g_app_info_get_icon(priv->appinfo); - gchar * iconstr = g_icon_to_string(icon); - return iconstr; + retval = g_icon_to_string(icon); } + + return retval; } /* When the menu item is clicked on it tries to launch -- cgit v1.2.3 From 3138814a32a91aa0b635ce7059c3a2cd6de860a9 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 Apr 2011 11:02:08 -0500 Subject: Create the keyfile for the application icon as well --- src/app-menu-item.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/app-menu-item.c b/src/app-menu-item.c index e846914..575ac0a 100644 --- a/src/app-menu-item.c +++ b/src/app-menu-item.c @@ -52,6 +52,7 @@ struct _AppMenuItemPrivate gchar * type; GAppInfo * appinfo; + GKeyFile * keyfile; gchar * desktop; guint unreadcount; @@ -129,6 +130,7 @@ app_menu_item_init (AppMenuItem *self) priv->server = NULL; priv->type = NULL; priv->appinfo = NULL; + priv->keyfile = NULL; priv->desktop = NULL; priv->unreadcount = 0; @@ -179,6 +181,16 @@ app_menu_item_dispose (GObject *object) priv->client = NULL; } + if (priv->appinfo != NULL) { + g_object_unref(priv->appinfo); + priv->appinfo = NULL; + } + + if (priv->keyfile != NULL) { + g_object_unref(priv->keyfile); + priv->keyfile = NULL; + } + G_OBJECT_CLASS (app_menu_item_parent_class)->dispose (object); } @@ -192,14 +204,12 @@ app_menu_item_finalize (GObject *object) if (priv->type != NULL) { g_free(priv->type); + priv->type = NULL; } if (priv->desktop != NULL) { g_free(priv->desktop); - } - - if (priv->appinfo != NULL) { - g_object_unref(priv->appinfo); + priv->desktop = NULL; } G_OBJECT_CLASS (app_menu_item_parent_class)->finalize (object); @@ -298,7 +308,7 @@ count_cb (IndicateListener * listener, IndicateListenerServer * server, guint va /* Callback for when we ask the server for the path to it's desktop file. We then turn it into an app structure and start sucking data out of it. - Mostly the name. */ + Mostly the name. And the icon. */ static void desktop_cb (IndicateListener * listener, IndicateListenerServer * server, const gchar * value, gpointer data) { @@ -325,6 +335,9 @@ desktop_cb (IndicateListener * listener, IndicateListenerServer * server, const priv->appinfo = G_APP_INFO(g_desktop_app_info_new_from_filename(value)); g_return_if_fail(priv->appinfo != NULL); + priv->keyfile = g_key_file_new(); + g_key_file_load_from_file(priv->keyfile, value, G_KEY_FILE_NONE, NULL); + priv->desktop = g_strdup(value); dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); -- cgit v1.2.3 From de82ee23786da141cfea40a32a25722d09af24b1 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 Apr 2011 11:20:08 -0500 Subject: move ICON_KEY --- src/default-applications.h | 4 ++++ src/launcher-menu-item.c | 2 -- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/default-applications.h b/src/default-applications.h index 0a32e7c..df52b38 100644 --- a/src/default-applications.h +++ b/src/default-applications.h @@ -22,6 +22,10 @@ with this program. If not, see . #ifndef DEFAULT_APPLICATIONS_H__ #define DEFAULT_APPLICATIONS_H__ 1 +/* Used for override icons in the normal case, but didn't + have a better place to put it. */ +#define ICON_KEY "X-Ayatana-Messaging-Menu-Icon" + const gchar * get_default_name (const gchar * desktop_path); const gchar * get_default_setup (const gchar * desktop_path); const gchar * get_default_icon (const gchar * desktop_path); diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index dd9ad5e..e01806e 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -259,8 +259,6 @@ nick_activate_cb (LauncherMenuItem * self, guint timestamp, gpointer data) return; } -#define ICON_KEY "X-Ayatana-Messaging-Menu-Icon" - /* Figure out the appropriate icon for this launcher */ gchar * launcher_menu_item_get_icon (LauncherMenuItem * appitem) -- cgit v1.2.3 From d45817a878e1aa80c439e8b46015db238f06abdf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 6 Apr 2011 11:24:05 -0500 Subject: Look for the override icon in the keyfile --- src/app-menu-item.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/app-menu-item.c b/src/app-menu-item.c index 575ac0a..ef3fbc0 100644 --- a/src/app-menu-item.c +++ b/src/app-menu-item.c @@ -347,8 +347,28 @@ desktop_cb (IndicateListener * listener, IndicateListenerServer * server, const const gchar * def_icon = get_default_icon(priv->desktop); if (def_icon == NULL) { - GIcon * icon = g_app_info_get_icon(priv->appinfo); - gchar * iconstr = g_icon_to_string(icon); + gchar * iconstr = NULL; + + /* Check for the over ride key and see if we should be using that + icon. If we can't get it, then go back to the app info */ + if (g_key_file_has_key(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, ICON_KEY, NULL) && iconstr == NULL) { + GError * error = NULL; + + iconstr = g_key_file_get_string(priv->keyfile, G_KEY_FILE_DESKTOP_GROUP, ICON_KEY, &error); + + if (error != NULL) { + /* Can't figure out why this would happen, but sure, let's print something */ + g_warning("Error getting '" ICON_KEY "' from desktop file: %s", error->message); + g_error_free(error); + } + } + + /* For some reason that didn't work, let's try the app info */ + if (iconstr == NULL) { + GIcon * icon = g_app_info_get_icon(priv->appinfo); + iconstr = g_icon_to_string(icon); + } + dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), APPLICATION_MENUITEM_PROP_ICON, iconstr); g_free(iconstr); } else { -- cgit v1.2.3 -- cgit v1.2.3 From 18d9d74ea8e9ceb86d2e14d64e013a09d2f9ee64 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Thu, 7 Apr 2011 12:10:43 -0500 Subject: 0.4.0 --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 962b6f0..5518610 100644 --- a/configure.ac +++ b/configure.ac @@ -4,7 +4,7 @@ AC_INIT(src/indicator-messages.c) AC_PREREQ(2.53) AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(indicator-messages, 0.3.92) +AM_INIT_AUTOMAKE(indicator-messages, 0.4.0) AM_MAINTAINER_MODE -- cgit v1.2.3