aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/client.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdbusmenu-gtk/client.c')
-rw-r--r--libdbusmenu-gtk/client.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/libdbusmenu-gtk/client.c b/libdbusmenu-gtk/client.c
index 60af93f..d345313 100644
--- a/libdbusmenu-gtk/client.c
+++ b/libdbusmenu-gtk/client.c
@@ -130,16 +130,31 @@ dbusmenu_gtkclient_init (DbusmenuGtkClient *self)
return;
}
+static void
+clear_shortcut_foreach (DbusmenuMenuitem *mi, gpointer gclient)
+{
+ guint key = 0;
+ GtkMenuItem * gmi;
+ GdkModifierType mod = 0;
+ DbusmenuGtkClient * client = DBUSMENU_GTKCLIENT (gclient);
+
+ gmi = dbusmenu_gtkclient_menuitem_get (client, mi);
+ dbusmenu_gtkclient_menuitem_get (client, mi);
+ dbusmenu_menuitem_property_get_shortcut (mi, &key, &mod);
+ if (key)
+ gtk_widget_remove_accelerator (GTK_WIDGET (gmi), client->priv->agroup, key, mod);
+}
+
/* Just calling the super class. Future use. */
static void
dbusmenu_gtkclient_dispose (GObject *object)
{
- DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT_GET_PRIVATE(object);
+ DbusmenuMenuitem * root;
+ DbusmenuGtkClientPrivate * priv = DBUSMENU_GTKCLIENT(object)->priv;
- if (priv->agroup != NULL) {
- g_object_unref(priv->agroup);
- priv->agroup = NULL;
- }
+ if ((root = dbusmenu_client_get_root (DBUSMENU_CLIENT(object))))
+ dbusmenu_menuitem_foreach (root, clear_shortcut_foreach, object);
+ g_clear_object (&priv->agroup);
if (priv->old_themedirs) {
remove_theme_dirs(gtk_icon_theme_get_default(), priv->old_themedirs);
@@ -161,7 +176,6 @@ dbusmenu_gtkclient_dispose (GObject *object)
static void
dbusmenu_gtkclient_finalize (GObject *object)
{
-
G_OBJECT_CLASS (dbusmenu_gtkclient_parent_class)->finalize (object);
return;
}
@@ -193,7 +207,7 @@ theme_dir_ref (GtkIconTheme * theme, GHashTable * db, const gchar * dir)
return;
}
-/* Unreference the theme directory, and if it's count goes to zero then
+/* Unreference the theme directory, and if its count goes to zero then
we need to remove it from the search path. */
static void
theme_dir_unref (GtkIconTheme * theme, GHashTable * db, const gchar * dir)
@@ -361,8 +375,6 @@ do_swap_agroup (DbusmenuMenuitem * mi, gpointer userdata) {
static void
swap_agroup (DbusmenuMenuitem *mi, gpointer userdata) {
do_swap_agroup (mi, userdata);
-
- return; /* See what I did here, Ted? :) */
}
/* Refresh the shortcut for an entry */
@@ -462,7 +474,7 @@ static const gchar * data_delayed_close = "dbusmenugtk-data-delayed-close";
static void
menu_item_start_activating(DbusmenuMenuitem * mi)
{
- /* Mark this item and all it's parents as activating */
+ /* Mark this item and all its parents as activating */
DbusmenuMenuitem * parent = mi;
do {
g_object_set_data(G_OBJECT(parent), data_activating,
@@ -485,7 +497,7 @@ menu_item_stop_activating(DbusmenuMenuitem * mi)
if (!menu_item_is_activating(mi))
return;
- /* Mark this item and all it's parents as not activating and finally
+ /* Mark this item and all its parents as not activating and finally
send their queued close event. */
g_object_set_data(G_OBJECT(mi), data_activating, GINT_TO_POINTER(FALSE));
@@ -1180,7 +1192,11 @@ image_property_handle (DbusmenuMenuitem * item, const gchar * property, GVariant
/* If we have an image already built from a name that is
way better than a pixbuf. Keep it. */
if (gtkimage != NULL && (gtk_image_get_storage_type(GTK_IMAGE(gtkimage)) == GTK_IMAGE_ICON_NAME || gtk_image_get_storage_type(GTK_IMAGE(gtkimage)) == GTK_IMAGE_EMPTY)) {
- return;
+ const gchar *icon_name = NULL;
+ gtk_image_get_icon_name (GTK_IMAGE(gtkimage), &icon_name, NULL);
+ if ((icon_name != NULL) && gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), icon_name)) {
+ return;
+ }
}
}