Package: gnome-screensaver
Version: 2.28.0-1
Severity: normal
Tags: patch
User: [email protected]
Usertags: origin-ubuntu karmic ubuntu-patch
*** /tmp/tmpDxlqfP
In Ubuntu, we've applied the attached patch to achieve the following:
* debian/patches/09_remove_session_inhibitors.patch:
- Fix issue when applications leave inhibitors behind. (LP: #411350)
We thought you might be interested in doing the same.
Upstream bug report:
https://bugzilla.gnome.org/show_bug.cgi?id=600488
-- System Information:
Debian Release: squeeze/sid
APT prefers karmic-updates
APT policy: (500, 'karmic-updates'), (500, 'karmic-security'), (500,
'karmic-proposed'), (500, 'karmic')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.31-15-generic (SMP w/2 CPU cores)
Locale: LANG=en_CA.UTF-8, LC_CTYPE=en_CA.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -u gnome-screensaver-2.28.0/debian/changelog gnome-screensaver-2.28.0/debian/changelog
only in patch2:
unchanged:
--- gnome-screensaver-2.28.0.orig/debian/patches/09_remove_session_inhibitors.patch
+++ gnome-screensaver-2.28.0/debian/patches/09_remove_session_inhibitors.patch
@@ -0,0 +1,79 @@
+Description: Fix issue when applications leave inhibitors behind.
+Origin: upstream, http://git.gnome.org/cgit/gnome-screensaver/commit/?id=284c9924969a49dbf2d5fae1d680d3310c4df4a3
+Bug: https://bugzilla.gnome.org/show_bug.cgi?id=600488
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gnome-screensaver/+bug/411350
+
+diff -Nur -x '*.orig' -x '*~' gnome-screensaver-2.28.0/src/gs-listener-dbus.c gnome-screensaver-2.28.0.new/src/gs-listener-dbus.c
+--- gnome-screensaver-2.28.0/src/gs-listener-dbus.c 2009-08-19 19:19:14.000000000 -0400
++++ gnome-screensaver-2.28.0.new/src/gs-listener-dbus.c 2009-12-07 08:07:11.000000000 -0500
+@@ -985,47 +985,40 @@
+ }
+
+ static gboolean
+-listener_ref_entry_has_connection (gpointer key,
+- gpointer value,
+- gpointer user_data)
+-{
+- GSListenerRefEntry *entry;
+- const char *connection;
+- gboolean matches;
+-
+- entry = (GSListenerRefEntry *)value;
+- connection = (const char *) user_data;
+-
+- matches = FALSE;
+- if (connection != NULL && entry->connection != NULL) {
+- matches = (strcmp (connection, entry->connection) == 0);
+- if (matches) {
+- gs_debug ("removing %s from %s for reason '%s' on connection %s",
+- get_name_for_entry_type (entry->entry_type),
+- entry->application,
+- entry->reason,
+- entry->connection);
+- }
+- }
+-
+- return matches;
+-}
+-
+-static gboolean
+ listener_ref_entry_remove_for_connection (GSListener *listener,
+ int entry_type,
+ const char *connection)
+ {
+ gboolean removed;
+- guint n_removed;
+ GHashTable *hash;
++ GHashTableIter iter;
++ GSListenerRefEntry *entry;
++
++ if (connection == NULL)
++ return FALSE;
+
+ hash = get_hash_for_entry_type (listener, entry_type);
+
+ removed = FALSE;
+- n_removed = g_hash_table_foreach_remove (hash, listener_ref_entry_has_connection, (gpointer)connection);
++ g_hash_table_iter_init (&iter, hash);
++ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&entry)) {
++ if (entry->connection != NULL &&
++ strcmp (connection, entry->connection) == 0) {
++ gs_debug ("removing %s from %s for reason '%s' on connection %s",
++ get_name_for_entry_type (entry->entry_type),
++ entry->application,
++ entry->reason,
++ entry->connection);
++
++ if (entry->entry_type == REF_ENTRY_TYPE_INHIBIT) {
++ /* remove inhibit from gnome session */
++ remove_session_inhibit (listener, entry);
++ }
+
+- removed = (n_removed > 0);
++ g_hash_table_iter_remove (&iter);
++ removed = TRUE;
++ }
++ }
+
+ return removed;
+ }