gnome-settings-daemon r662 - in trunk: . plugins/media-keys



Author: jensg
Date: Thu Jan 15 18:38:06 2009
New Revision: 662
URL: http://svn.gnome.org/viewvc/gnome-settings-daemon?rev=662&view=rev

Log:
2009-01-15  Jens Granseuer  <jensgr gmx net>

	* plugins/media-keys/gsd-media-keys-manager.c:
	(gsd_media_keys_manager_stop): ungrab shortcut keys when the plugin
	is disabled (bug #567867)


Modified:
   trunk/ChangeLog
   trunk/plugins/media-keys/gsd-media-keys-manager.c

Modified: trunk/plugins/media-keys/gsd-media-keys-manager.c
==============================================================================
--- trunk/plugins/media-keys/gsd-media-keys-manager.c	(original)
+++ trunk/plugins/media-keys/gsd-media-keys-manager.c	Thu Jan 15 18:38:06 2009
@@ -724,7 +724,7 @@
                 }
         }
 
-        g_debug ("Registering %s at %ld", application, time);
+        g_debug ("Registering %s at %u", application, time);
         media_player = g_new0 (MediaPlayer, 1);
         media_player->application = g_strdup (application);
         media_player->time = time;
@@ -997,6 +997,7 @@
         GSList *ls;
         GList *l;
         int i;
+        gboolean need_flush;
 
         g_debug ("Stopping media_keys manager");
 
@@ -1006,9 +1007,6 @@
                                           manager);
         }
 
-        g_slist_free (priv->screens);
-        priv->screens = NULL;
-
         if (priv->conf_client) {
                 gconf_client_remove_dir (priv->conf_client,
                                          GCONF_BINDING_DIR,
@@ -1030,14 +1028,27 @@
                 priv->connection = NULL;
         }
 
+        need_flush = FALSE;
+        gdk_error_trap_push ();
+
         for (i = 0; i < HANDLED_KEYS; ++i) {
                 if (keys[i].key) {
+                        need_flush = TRUE;
+                        grab_key_unsafe (keys[i].key, FALSE, priv->screens);
+
                         g_free (keys[i].key->keycodes);
                         g_free (keys[i].key);
                         keys[i].key = NULL;
                 }
         }
 
+        if (need_flush)
+                gdk_flush ();
+        gdk_error_trap_pop ();
+
+        g_slist_free (priv->screens);
+        priv->screens = NULL;
+
         if (priv->volume) {
                 g_object_unref (priv->volume);
                 priv->volume = NULL;



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