aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-03-16 17:03:40 -0500
committerTed Gould <ted@gould.cx>2010-03-16 17:03:40 -0500
commitc5032805fc4e2ad6c95ddbab3ddbfb76762a312e (patch)
treeba07966ed1750caac35608a3824ab531a9f66e9d
parent87d0374245134a7a723ee6dd8a1a1aec90ca4776 (diff)
parent5bb98fd170f62423ed936fd19bab72f0ee118d81 (diff)
downloadayatana-indicator-session-c5032805fc4e2ad6c95ddbab3ddbfb76762a312e.tar.gz
ayatana-indicator-session-c5032805fc4e2ad6c95ddbab3ddbfb76762a312e.tar.bz2
ayatana-indicator-session-c5032805fc4e2ad6c95ddbab3ddbfb76762a312e.zip
Track whether we've setup GConf notification and unregister on update.
-rw-r--r--src/gconf-helper.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/gconf-helper.c b/src/gconf-helper.c
index 588b11c..77fde1d 100644
--- a/src/gconf-helper.c
+++ b/src/gconf-helper.c
@@ -34,6 +34,8 @@ with this program. If not, see <http://www.gnu.org/licenses/>.
#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 @@ update_logout_callback (GConfClient *client, guint cnxn_id, GConfEntry *entry,
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);
}