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;
+ }

Reply via email to