diff options
author | Jan Arne Petersen <jpetersen@openismus.com> | 2010-02-23 08:33:29 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2010-02-23 08:33:29 -0600 |
commit | 44ff7ab931ed1cfadb8d18db1756ea656755d3ab (patch) | |
tree | dae182041ce5d5deb3e85bb40f00741c35b1eb26 /src/libappindicator | |
parent | 225f2911ff99822cdb77c4e74f75c0e21f63b943 (diff) | |
download | libayatana-appindicator-44ff7ab931ed1cfadb8d18db1756ea656755d3ab.tar.gz libayatana-appindicator-44ff7ab931ed1cfadb8d18db1756ea656755d3ab.tar.bz2 libayatana-appindicator-44ff7ab931ed1cfadb8d18db1756ea656755d3ab.zip |
Second patch on 524150
Diffstat (limited to 'src/libappindicator')
-rw-r--r-- | src/libappindicator/app-indicator.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 62e8905..97d5cd8 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -142,6 +142,7 @@ static void status_icon_activate (GtkStatusIcon * icon, gpointer data); static void unfallback (AppIndicator * self, GtkStatusIcon * status_icon); static void watcher_proxy_destroyed (GObject * object, gpointer data); static void client_menu_changed (GtkWidget *widget, GtkWidget *child, AppIndicator *indicator); +static void submenu_changed (GtkWidget *widget, GtkWidget *child, gpointer data); /* GObject type */ G_DEFINE_TYPE (AppIndicator, app_indicator, G_TYPE_OBJECT); @@ -1242,12 +1243,25 @@ container_iterate (GtkWidget *widget, gtk_container_forall (GTK_CONTAINER (submenu), container_iterate, child); + g_signal_connect_object (submenu, + "add", + G_CALLBACK (submenu_changed), + child, + 0); + g_signal_connect_object (submenu, + "remove", + G_CALLBACK (submenu_changed), + child, + 0); } } dbusmenu_menuitem_property_set_bool (child, DBUSMENU_MENUITEM_PROP_ENABLED, GTK_WIDGET_IS_SENSITIVE (widget)); + dbusmenu_menuitem_property_set_bool (child, + DBUSMENU_MENUITEM_PROP_VISIBLE, + gtk_widget_get_visible (widget)); g_signal_connect (widget, "notify", G_CALLBACK (widget_notify_cb), child); @@ -1259,6 +1273,27 @@ container_iterate (GtkWidget *widget, } static void +submenu_changed (GtkWidget *widget, + GtkWidget *child, + gpointer data) +{ + DbusmenuMenuitem *root = (DbusmenuMenuitem *)data; + GList *children, *l; + children = dbusmenu_menuitem_get_children (root); + + for (l = children; l;) + { + DbusmenuMenuitem *c = (DbusmenuMenuitem *)l->data; + l = l->next; + dbusmenu_menuitem_child_delete (root, c); + } + + gtk_container_forall (GTK_CONTAINER (widget), + container_iterate, + root); +} + +static void setup_dbusmenu (AppIndicator *self) { AppIndicatorPrivate *priv; |