ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #01203
[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