Hello community,

here is the log from the commit of package gnome-shell for openSUSE:12.3 
checked in at 2013-02-08 07:07:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:12.3/gnome-shell (Old)
 and      /work/SRC/openSUSE:12.3/.gnome-shell.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnome-shell", Maintainer is ""

Changes:
--------
--- /work/SRC/openSUSE:12.3/gnome-shell/gnome-shell.changes     2013-01-31 
01:18:25.000000000 +0100
+++ /work/SRC/openSUSE:12.3/.gnome-shell.new/gnome-shell.changes        
2013-02-08 07:08:00.000000000 +0100
@@ -1,0 +2,8 @@
+Mon Feb  4 14:06:10 UTC 2013 - badshah...@gmail.com
+
+- Add gnome-shell-ScreenShield-become-modal-and-catch.patch: fix an
+  issue where the screen would not return to the desktop properly
+  when resuming from screen lock (bnc#801797, rh#878736,
+  bgo#689106).
+
+-------------------------------------------------------------------

New:
----
  gnome-shell-ScreenShield-become-modal-and-catch.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnome-shell.spec ++++++
--- /var/tmp/diff_new_pack.vkD978/_old  2013-02-08 07:08:03.000000000 +0100
+++ /var/tmp/diff_new_pack.vkD978/_new  2013-02-08 07:08:03.000000000 +0100
@@ -30,6 +30,8 @@
 Patch2:         g-s-honor-lock-delay-GSettings.patch
 # PATCH-FIX-UPSTREAM g-s-use-the-right-getter.patch bgo#691170 
zai...@opensuse.org -- org.gnome.desktop.screensaver lock-delay is an integer, 
not a boolean, so don't use get_bool() on it.
 Patch3:         g-s-use-the-right-getter.patch
+# PATCH-FIX-UPSTREAM gnome-shell-ScreenShield-become-modal-and-catch.patch 
bnc#801797 bgo#689106 badshah...@gmail.com --  Fix an issue where the screen 
would not return to the desktop properly when resuming from screen lock; patch 
taken from the upstream bug and rebased
+Patch4:         gnome-shell-ScreenShield-become-modal-and-catch.patch
 BuildRequires:  docbook-xsl-stylesheets
 BuildRequires:  intltool
 BuildRequires:  translation-update-upstream
@@ -136,6 +138,7 @@
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
 translation-update-upstream
 
 %build


++++++ gnome-shell-ScreenShield-become-modal-and-catch.patch ++++++
>From cdcebae636d80f53fc3fde02d1c026144042a6c5 Mon Sep 17 00:00:00 2001
From: Giovanni Campagna <gcampa...@src.gnome.org>
Date: Mon, 26 Nov 2012 20:18:57 +0100
Subject: [PATCH] ScreenShield: try harder to become modal, and catch failures

The screenshield was not checking the return value of pushModal(), meaning
that it believed it was fully locked when it was not. Later, calling
popModal() would fail, causing an exception and blocking the unlock.
Now we do nothing for user initiated actions, and fail with an explanatory
message at idle time.

https://bugzilla.gnome.org/show_bug.cgi?id=689106

Conflicts:
        js/ui/screenShield.js
---
 js/ui/screenShield.js | 43 +++++++++++++++++++++++++++++++++----------
 1 file changed, 33 insertions(+), 10 deletions(-)

Index: gnome-shell-3.6.2/js/ui/screenShield.js
===================================================================
--- gnome-shell-3.6.2.orig/js/ui/screenShield.js
+++ gnome-shell-3.6.2/js/ui/screenShield.js
@@ -441,6 +441,21 @@ const ScreenShield = new Lang.Class({
         this.idleMonitor = Shell.IdleMonitor.get();
     },
 
+    _becomeModal: function() {
+        if (this._isModal)
+            return true;
+
+        this._isModal = Main.pushModal(this.actor, { keybindingMode: 
Main.KeybindingMode.LOCK_SCREEN });
+        if (this._isModal)
+            return true;
+
+        // We failed to get a pointer grab, it means that
+        // something else has it. Try with a keyboard grab only
+        this._isModal = Main.pushModal(this.actor, { options: 
Meta.ModalOptions.POINTER_ALREADY_GRABBED,
+                                                     keybindingMode: 
Main.KeybindingMode.LOCK_SCREEN });
+        return this._isModal;
+    },
+
     _onLockScreenKeyRelease: function(actor, event) {
         let symbol = event.get_key_symbol();
 
@@ -558,9 +573,17 @@ const ScreenShield = new Lang.Class({
             }
         }
 
-        if (!this._isModal) {
-            Main.pushModal(this.actor);
-            this._isModal = true;
+        if (!this._becomeModal()) {
+            // We could not become modal, so we can't activate the
+            // screenshield. The user is probably very upset at this
+            // point, but any application using global grabs is broken
+            // Just tell him to stop using this app
+            //
+            // XXX: another option is to kick the user into the gdm login
+            // screen, where we're not affected by grabs
+            Main.notifyError(_("Failed to activate screen lock"),
+                             _("The activation of the screen lock was blocked 
by an application that captured the keyboard."));
+            return;
         }
 
         if (!this._isActive) {
@@ -598,9 +621,10 @@ const ScreenShield = new Lang.Class({
         // Ensure that the stage window is mapped, before taking a grab
         // otherwise X errors out
         Meta.later_add(Meta.LaterType.BEFORE_REDRAW, Lang.bind(this, 
function() {
-            if (!this._isModal) {
-                Main.pushModal(this.actor);
-                this._isModal = true;
+            if (!this._becomeModal()) {
+                // In the login screen, this is a hard error. Fail-whale
+                log('Could not acquire modal grab for the login screen. 
Aborting login process.');
+                Meta.quit(Meta.ExitCode.ERROR);
             }
 
             return false;
@@ -854,9 +878,11 @@ const ScreenShield = new Lang.Class({
     },
 
     lock: function(animate) {
-        if (!this._isModal) {
-            Main.pushModal(this.actor);
-            this._isModal = true;
+        // Warn the user if we can't become modal
+        if (!this._becomeModal()) {
+            Main.notifyError(_("Failed to activate screen lock"),
+                             _("The screen lock is inhibited by an application 
capturing the keyboard."));
+            return;
         }
 
         if (this._activationTime == 0)
-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to