gnome-bluetooth r555 - trunk/applet



Author: hadess
Date: Mon Mar 30 14:48:21 2009
New Revision: 555
URL: http://svn.gnome.org/viewvc/gnome-bluetooth?rev=555&view=rev

Log:
Fix devices not going away when removing them from the known devices (Closes: #576944)


Modified:
   trunk/applet/main.c

Modified: trunk/applet/main.c
==============================================================================
--- trunk/applet/main.c	(original)
+++ trunk/applet/main.c	Mon Mar 30 14:48:21 2009
@@ -60,7 +60,6 @@
 
 static GtkBuilder *xml = NULL;
 static GtkActionGroup *devices_action_group = NULL;
-static guint devices_ui_id = 0;
 
 /* Signal callbacks */
 void settings_callback(GObject *widget, gpointer user_data);
@@ -265,7 +264,10 @@
 	}
 
 	object = gtk_builder_get_object (xml, "bluetooth-applet-ui-manager");
-	devices_ui_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (object));
+	devices_action_group = gtk_action_group_new ("devices-action-group");
+	gtk_ui_manager_insert_action_group (GTK_UI_MANAGER (object),
+					    devices_action_group, -1);
+
 	action_set_bold (GTK_UI_MANAGER (object),
 			 GTK_ACTION (gtk_builder_get_object (xml, "devices-label")),
 			 "/bluetooth-applet-popup/devices-label");
@@ -354,8 +356,12 @@
 }
 
 static void
-remove_action_item (GtkAction *action, gpointer data)
+remove_action_item (GtkAction *action, GtkUIManager *manager)
 {
+	guint menu_merge_id;
+
+	menu_merge_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (action), "merge-id"));
+	gtk_ui_manager_remove_ui (GTK_UI_MANAGER (manager), menu_merge_id);
 	gtk_action_group_remove_action (devices_action_group, action);
 }
 
@@ -372,18 +378,11 @@
 
 	object = gtk_builder_get_object (xml, "bluetooth-applet-ui-manager");
 
-	if (devices_action_group == NULL) {
-		devices_action_group = gtk_action_group_new ("devices-action-group");
-		gtk_ui_manager_insert_action_group (GTK_UI_MANAGER (object),
-						    devices_action_group, -1); 
-	}
-
 	if (parent == NULL) {
 		/* No default adapter? Remove everything */
 		actions = gtk_action_group_list_actions (devices_action_group);
-		g_list_foreach (actions, (GFunc) remove_action_item, NULL);
+		g_list_foreach (actions, (GFunc) remove_action_item, object);
 		g_list_free (actions);
-		gtk_ui_manager_remove_ui (GTK_UI_MANAGER (object), devices_ui_id);
 		goto done;
 	}
 
@@ -417,13 +416,17 @@
 
 		if (table != NULL && address != NULL && proxy != NULL) {
 			if (action == NULL) {
+				guint menu_merge_id;
 				action = gtk_action_new (address, name, NULL, NULL);
 
 				gtk_action_group_add_action (devices_action_group, action);
 				g_object_unref (action);
-				gtk_ui_manager_add_ui (GTK_UI_MANAGER (object), devices_ui_id,
+				menu_merge_id = gtk_ui_manager_new_merge_id (GTK_UI_MANAGER (object));
+				gtk_ui_manager_add_ui (GTK_UI_MANAGER (object), menu_merge_id,
 						       "/bluetooth-applet-popup/devices-placeholder", address, address,
 						       GTK_UI_MANAGER_MENUITEM, FALSE);
+				g_object_set_data_full (G_OBJECT (action),
+							"merge-id", GUINT_TO_POINTER (menu_merge_id), NULL);
 				g_signal_connect (G_OBJECT (action), "activate",
 						  G_CALLBACK (on_connect_activate), NULL);
 			} else {
@@ -452,7 +455,7 @@
 	}
 
 	/* Remove the left-over devices */
-	g_list_foreach (actions, (GFunc) remove_action_item, NULL);
+	g_list_foreach (actions, (GFunc) remove_action_item, object);
 	g_list_free (actions);
 
 done:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]