← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/indicator-session/gconf-notify-remove into lp:indicator-session

 

Ted Gould has proposed merging lp:~ted/indicator-session/gconf-notify-remove into lp:indicator-session.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)


Making it so that we track the gconf registrations so that we can remove
them as well.
-- 
https://code.launchpad.net/~ted/indicator-session/gconf-notify-remove/+merge/21489
Your team ayatana-commits is subscribed to branch lp:indicator-session.
=== modified file 'src/gconf-helper.c'
--- src/gconf-helper.c	2010-03-16 02:50:48 +0000
+++ src/gconf-helper.c	2010-03-16 20:50:33 +0000
@@ -34,6 +34,8 @@
 #include "gconf-helper.h"
 
 static GConfClient * gconf_client = NULL;
+static guint confirmation_notify = 0;
+static guint logout_notify = 0;
 
 gboolean
 supress_confirmations (void) {
@@ -82,14 +84,31 @@
 
 void
 update_menu_entries(RestartShutdownLogoutMenuItems * restart_shutdown_logout_mi, DbusmenuMenuitem * logoutitem) {
+	/* If we don't have a client, build one. */
 	if(!gconf_client) {
 		gconf_client = gconf_client_get_default ();
 	}
-	gconf_client_add_dir (gconf_client, GLOBAL_DIR,
-				GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-	gconf_client_notify_add (gconf_client, SUPPRESS_KEY,
+
+	/* If we've not gotten any notifications, then we need
+	   to add the directory for notifications to come from. */
+	if (confirmation_notify == 0 || logout_notify == 0) {
+		gconf_client_add_dir (gconf_client, GLOBAL_DIR,
+		                      GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+	}
+
+	if (confirmation_notify != 0) {
+		gconf_client_notify_remove (gconf_client, confirmation_notify);
+		confirmation_notify = 0;
+	}
+
+	if (logout_notify != 0) {
+		gconf_client_notify_remove (gconf_client, logout_notify);
+		logout_notify = 0;
+	}
+
+	confirmation_notify = gconf_client_notify_add (gconf_client, SUPPRESS_KEY,
 				update_menu_entries_callback, restart_shutdown_logout_mi, NULL, NULL);
-	gconf_client_notify_add (gconf_client, LOGOUT_KEY,
+	logout_notify = gconf_client_notify_add (gconf_client, LOGOUT_KEY,
 				update_logout_callback, logoutitem, NULL, NULL);
 }
 


Follow ups