[gnome-settings-daemon] various: more fixing of the _stop() path



commit bf92d44a2bae61e59dc57c875f335f378b5b4ce6
Author: William Jon McCann <jmccann redhat com>
Date:   Mon Nov 22 23:38:21 2010 -0500

    various: more fixing of the _stop() path

 plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c |   15 ++++++++--
 plugins/clipboard/gsd-clipboard-manager.c         |   29 +++++++++++++-------
 plugins/keybindings/gsd-keybindings-manager.c     |   20 +++++++-------
 plugins/keyboard/gsd-keyboard-xkb.c               |    3 ++
 plugins/media-keys/gsd-media-keys-manager.c       |   30 ++++++++++++---------
 5 files changed, 61 insertions(+), 36 deletions(-)
---
diff --git a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c
index 733efd2..da211d5 100644
--- a/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c
+++ b/plugins/a11y-keyboard/gsd-a11y-keyboard-manager.c
@@ -984,6 +984,9 @@ gsd_a11y_keyboard_manager_start (GsdA11yKeyboardManager *manager,
 static void
 restore_server_xkb_config (GsdA11yKeyboardManager *manager)
 {
+        if (manager->priv->original_xkb_desc == NULL) {
+                return;
+        }
         gdk_error_trap_push ();
         XkbSetControls (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
                         XkbSlowKeysMask         |
@@ -1018,8 +1021,10 @@ gsd_a11y_keyboard_manager_stop (GsdA11yKeyboardManager *manager)
                 p->device_manager = NULL;
         }
 
-        if (p->status_icon)
+        if (p->status_icon) {
                 gtk_status_icon_set_visible (p->status_icon, FALSE);
+                p->status_icon = NULL;
+        }
 
         if (p->settings != NULL) {
                 g_object_unref (p->settings);
@@ -1034,11 +1039,15 @@ gsd_a11y_keyboard_manager_stop (GsdA11yKeyboardManager *manager)
          */
         restore_server_xkb_config (manager);
 
-        if (p->slowkeys_alert != NULL)
+        if (p->slowkeys_alert != NULL) {
                 gtk_widget_destroy (p->slowkeys_alert);
+                p->slowkeys_alert = NULL;
+        }
 
-        if (p->stickykeys_alert != NULL)
+        if (p->stickykeys_alert != NULL) {
                 gtk_widget_destroy (p->stickykeys_alert);
+                p->stickykeys_alert = NULL;
+        }
 
         p->slowkeys_shortcut_val = FALSE;
         p->stickykeys_shortcut_val = FALSE;
diff --git a/plugins/clipboard/gsd-clipboard-manager.c b/plugins/clipboard/gsd-clipboard-manager.c
index d0d28c3..2e0c76e 100644
--- a/plugins/clipboard/gsd-clipboard-manager.c
+++ b/plugins/clipboard/gsd-clipboard-manager.c
@@ -941,18 +941,27 @@ gsd_clipboard_manager_stop (GsdClipboardManager *manager)
 {
         g_debug ("Stopping clipboard manager");
 
-        clipboard_manager_watch_cb (manager,
-                                    manager->priv->window,
-                                    FALSE,
-                                    0,
-                                    NULL);
-        XDestroyWindow (manager->priv->display, manager->priv->window);
+        if (manager->priv->window != None) {
+                clipboard_manager_watch_cb (manager,
+                                            manager->priv->window,
+                                            FALSE,
+                                            0,
+                                            NULL);
+                XDestroyWindow (manager->priv->display, manager->priv->window);
+                manager->priv->window = None;
+        }
 
-        list_foreach (manager->priv->conversions, (Callback) conversion_free, NULL);
-        list_free (manager->priv->conversions);
+        if (manager->priv->conversions != NULL) {
+                list_foreach (manager->priv->conversions, (Callback) conversion_free, NULL);
+                list_free (manager->priv->conversions);
+                manager->priv->conversions = NULL;
+        }
 
-        list_foreach (manager->priv->contents, (Callback) target_data_unref, NULL);
-        list_free (manager->priv->contents);
+        if (manager->priv->contents != NULL) {
+                list_foreach (manager->priv->contents, (Callback) target_data_unref, NULL);
+                list_free (manager->priv->contents);
+                manager->priv->contents = NULL;
+        }
 }
 
 static void
diff --git a/plugins/keybindings/gsd-keybindings-manager.c b/plugins/keybindings/gsd-keybindings-manager.c
index 3d5435e..a5f7007 100644
--- a/plugins/keybindings/gsd-keybindings-manager.c
+++ b/plugins/keybindings/gsd-keybindings-manager.c
@@ -635,17 +635,17 @@ gsd_keybindings_manager_stop (GsdKeybindingsManager *manager)
                 p->screens = NULL;
         }
 
-        for (l = p->binding_list; l; l = l->next) {
-                Binding *b = l->data;
-                g_free (b->binding_str);
-                g_free (b->action);
-                g_free (b->gconf_key);
-                g_free (b->previous_key.keycodes);
-                g_free (b->key.keycodes);
-                g_free (b);
-        }
-
         if (p->binding_list != NULL) {
+                for (l = p->binding_list; l; l = l->next) {
+                        Binding *b = l->data;
+                        g_free (b->binding_str);
+                        g_free (b->action);
+                        g_free (b->gconf_key);
+                        g_free (b->previous_key.keycodes);
+                        g_free (b->key.keycodes);
+                        g_free (b);
+                }
+
                 g_slist_free (p->binding_list);
                 p->binding_list = NULL;
         }
diff --git a/plugins/keyboard/gsd-keyboard-xkb.c b/plugins/keyboard/gsd-keyboard-xkb.c
index f8ff618..6f0e3d7 100644
--- a/plugins/keyboard/gsd-keyboard-xkb.c
+++ b/plugins/keyboard/gsd-keyboard-xkb.c
@@ -715,6 +715,9 @@ gsd_keyboard_xkb_shutdown (void)
 {
 	guint i;
 
+	if (!inited_ok)
+		return;
+
 	pa_callback = NULL;
 	pa_callback_user_data = NULL;
 	manager = NULL;
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 5d5ebd4..bf305c4 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -1344,11 +1344,11 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                 priv->volume_monitor = NULL;
         }
 
-	if (priv->cancellable != NULL) {
-		g_cancellable_cancel (priv->cancellable);
-		g_object_unref (priv->cancellable);
-		priv->cancellable = NULL;
-	}
+        if (priv->cancellable != NULL) {
+                g_cancellable_cancel (priv->cancellable);
+                g_object_unref (priv->cancellable);
+                priv->cancellable = NULL;
+        }
 
         if (priv->owner_id > 0) {
                 g_bus_unown_name (priv->owner_id);
@@ -1380,8 +1380,10 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                 gdk_flush ();
         gdk_error_trap_pop ();
 
-        g_slist_free (priv->screens);
-        priv->screens = NULL;
+        if (priv->screens != NULL) {
+                g_slist_free (priv->screens);
+                priv->screens = NULL;
+        }
 
 #ifdef HAVE_PULSE
         if (priv->stream) {
@@ -1400,13 +1402,15 @@ gsd_media_keys_manager_stop (GsdMediaKeysManager *manager)
                 priv->dialog = NULL;
         }
 
-        for (l = priv->media_players; l; l = l->next) {
-                MediaPlayer *mp = l->data;
-                g_free (mp->application);
-                g_free (mp);
+        if (priv->media_players != NULL) {
+                for (l = priv->media_players; l; l = l->next) {
+                        MediaPlayer *mp = l->data;
+                        g_free (mp->application);
+                        g_free (mp);
+                }
+                g_list_free (priv->media_players);
+                priv->media_players = NULL;
         }
-        g_list_free (priv->media_players);
-        priv->media_players = NULL;
 }
 
 static void



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