From de406e516344899c4006ce989e5915d7e39a1267 Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Tue, 16 Feb 2010 10:18:03 -0600 Subject: Check priv->menu for non-NULL --- src/libappindicator/app-indicator.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 0324a34..88f6bb6 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -1252,9 +1252,12 @@ setup_dbusmenu (AppIndicator *self) priv = self->priv; root = dbusmenu_menuitem_new (); - gtk_container_forall (GTK_CONTAINER (priv->menu), - container_iterate, - root); + if (priv->menu) + { + gtk_container_forall (GTK_CONTAINER (priv->menu), + container_iterate, + root); + } if (priv->menuservice == NULL) { -- cgit v1.2.3 From 715d75230d1164601639043303bc869289e7e9ae Mon Sep 17 00:00:00 2001 From: Cody Russell Date: Wed, 17 Feb 2010 16:04:09 -0600 Subject: Disconnect 'client_menu_changed' in dispose method. --- src/libappindicator/app-indicator.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 88f6bb6..7fb7996 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -141,6 +141,7 @@ static void status_icon_changes (AppIndicator * self, gpointer data); 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); /* GObject type */ G_DEFINE_TYPE (AppIndicator, app_indicator, G_TYPE_OBJECT); @@ -364,7 +365,10 @@ app_indicator_dispose (GObject *object) } if (priv->menu != NULL) { - g_object_unref(G_OBJECT(priv->menu)); + g_signal_handlers_disconnect_by_func (G_OBJECT (priv->menu), + client_menu_changed, + self); + g_object_unref(G_OBJECT(priv->menu)); priv->menu = NULL; } -- cgit v1.2.3 From 9012c49ff3299dc4c1b965fc49c3d0638a927846 Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Fri, 19 Feb 2010 09:20:34 -0600 Subject: Fix to unregister the object --- src/libappindicator/app-indicator.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 7fb7996..c0ccaec 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -598,6 +598,9 @@ check_connect (AppIndicator *self) if (priv->id == NULL) return; gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s", priv->clean_id); + + g_warning ("%s. %s", __FUNCTION__, path); + dbus_g_connection_register_g_object(priv->connection, path, G_OBJECT(self)); @@ -612,6 +615,8 @@ check_connect (AppIndicator *self) /* Unable to get proxy, but we're handling that now so it's not a warning anymore. */ g_error_free(error); + dbus_g_connection_unregister_g_object(priv->connection, + G_OBJECT(self)); start_fallback_timer(self, FALSE); g_free(path); return; @@ -632,6 +637,8 @@ watcher_proxy_destroyed (GObject * object, gpointer data) AppIndicator * self = APP_INDICATOR(data); g_return_if_fail(self != NULL); + dbus_g_connection_unregister_g_object(self->priv->connection, + G_OBJECT(self)); self->priv->watcher_proxy = NULL; start_fallback_timer(self, FALSE); return; @@ -649,6 +656,8 @@ register_service_cb (DBusGProxy * proxy, GError * error, gpointer data) /* They didn't respond, ewww. Not sure what they could be doing */ g_warning("Unable to connect to the Notification Watcher: %s", error->message); + dbus_g_connection_unregister_g_object(priv->connection, + G_OBJECT(data)); g_object_unref(G_OBJECT(priv->watcher_proxy)); priv->watcher_proxy = NULL; start_fallback_timer(APP_INDICATOR(data), TRUE); -- cgit v1.2.3 From b79a5bb8b9f21aedfefeb48429dc62f7f51978b6 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Fri, 19 Feb 2010 09:21:19 -0600 Subject: Removing debug output --- src/libappindicator/app-indicator.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index c0ccaec..027f794 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -599,8 +599,6 @@ check_connect (AppIndicator *self) gchar * path = g_strdup_printf(DEFAULT_ITEM_PATH "/%s", priv->clean_id); - g_warning ("%s. %s", __FUNCTION__, path); - dbus_g_connection_register_g_object(priv->connection, path, G_OBJECT(self)); -- cgit v1.2.3 From 271d86bb751d95eb901ca7dc60455cf646b9d74f Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Mon, 22 Feb 2010 09:55:55 -0600 Subject: Set the sensitive state when starting out. --- src/libappindicator/app-indicator.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 027f794..62e8905 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -1245,6 +1245,10 @@ container_iterate (GtkWidget *widget, } } + dbusmenu_menuitem_property_set_bool (child, + DBUSMENU_MENUITEM_PROP_ENABLED, + GTK_WIDGET_IS_SENSITIVE (widget)); + g_signal_connect (widget, "notify", G_CALLBACK (widget_notify_cb), child); -- cgit v1.2.3 From 75ccac53fc05f24633c76ac5d956b91a9a6640fb Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Mon, 22 Feb 2010 14:47:03 -0600 Subject: Creates and event handler for the add and remove signals to recreate the menu --- src/libappindicator/app-indicator.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 62e8905..361875d 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,6 +1243,16 @@ 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); } } @@ -1258,6 +1269,27 @@ container_iterate (GtkWidget *widget, dbusmenu_menuitem_child_append (root, child); } +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) { -- cgit v1.2.3 From 1d6eba2448b2753cb3cc38e05d763a576d40b978 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 22 Feb 2010 15:57:12 -0600 Subject: Looking at children with foreach instead of forall --- src/libappindicator/app-indicator.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 361875d..0490031 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -1240,7 +1240,7 @@ container_iterate (GtkWidget *widget, submenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (widget)); if (submenu != NULL) { - gtk_container_forall (GTK_CONTAINER (submenu), + gtk_container_foreach (GTK_CONTAINER (submenu), container_iterate, child); g_signal_connect_object (submenu, @@ -1285,7 +1285,7 @@ submenu_changed (GtkWidget *widget, dbusmenu_menuitem_child_delete (root, c); } - gtk_container_forall (GTK_CONTAINER (widget), + gtk_container_foreach (GTK_CONTAINER (widget), container_iterate, root); } @@ -1301,7 +1301,7 @@ setup_dbusmenu (AppIndicator *self) if (priv->menu) { - gtk_container_forall (GTK_CONTAINER (priv->menu), + gtk_container_foreach (GTK_CONTAINER (priv->menu), container_iterate, root); } -- cgit v1.2.3 From 78429e88e6fd7354ec8a2dcbfe0931368a5b7fa2 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Mon, 22 Feb 2010 16:46:37 -0600 Subject: NO TEARY! --- src/libappindicator/app-indicator.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/libappindicator/app-indicator.c') diff --git a/src/libappindicator/app-indicator.c b/src/libappindicator/app-indicator.c index 0490031..70ca6a2 100644 --- a/src/libappindicator/app-indicator.c +++ b/src/libappindicator/app-indicator.c @@ -1158,6 +1158,10 @@ container_iterate (GtkWidget *widget, const gchar *label = NULL; gboolean label_set = FALSE; + if (GTK_IS_TEAROFF_MENU_ITEM(widget)) { + return; + } + child = dbusmenu_menuitem_new (); if (GTK_IS_SEPARATOR_MENU_ITEM (widget)) -- cgit v1.2.3 From 44ff7ab931ed1cfadb8d18db1756ea656755d3ab Mon Sep 17 00:00:00 2001 From: Jan Arne Petersen Date: Tue, 23 Feb 2010 08:33:29 -0600 Subject: Second patch on 524150 --- src/libappindicator/app-indicator.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/libappindicator/app-indicator.c') 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); @@ -1258,6 +1272,27 @@ container_iterate (GtkWidget *widget, dbusmenu_menuitem_child_append (root, child); } +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) { -- cgit v1.2.3