From 2973ec25b946eb9ae7032639a2d6391c60b738ad68ad38671b1ca300e4cb7271 Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Mon, 11 Feb 2013 17:58:59 +0000 Subject: [PATCH] Accepting request 155129 from home:badshah400:branches:GNOME:Factory Revert previous patch because it caused lock screen and suspend to be blocked completely. OBS-URL: https://build.opensuse.org/request/show/155129 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gnome-shell?expand=0&rev=143 --- ...-ScreenShield-become-modal-and-catch.patch | 95 ------------------- gnome-shell.changes | 6 ++ gnome-shell.spec | 3 - 3 files changed, 6 insertions(+), 98 deletions(-) delete mode 100644 gnome-shell-ScreenShield-become-modal-and-catch.patch diff --git a/gnome-shell-ScreenShield-become-modal-and-catch.patch b/gnome-shell-ScreenShield-become-modal-and-catch.patch deleted file mode 100644 index 36c863a..0000000 --- a/gnome-shell-ScreenShield-become-modal-and-catch.patch +++ /dev/null @@ -1,95 +0,0 @@ -From cdcebae636d80f53fc3fde02d1c026144042a6c5 Mon Sep 17 00:00:00 2001 -From: Giovanni Campagna -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) diff --git a/gnome-shell.changes b/gnome-shell.changes index 546b8e2..d75b4df 100644 --- a/gnome-shell.changes +++ b/gnome-shell.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Mon Feb 11 14:45:23 UTC 2013 - badshah400@gmail.com + +- Remove gnome-shell-ScreenShield-become-modal-and-catch.patch: it + caused screen lock and suspend to fail completely. + ------------------------------------------------------------------- Mon Feb 4 14:06:10 UTC 2013 - badshah400@gmail.com diff --git a/gnome-shell.spec b/gnome-shell.spec index cb2aa68..bd4b3a8 100644 --- a/gnome-shell.spec +++ b/gnome-shell.spec @@ -30,8 +30,6 @@ Patch1: gnome-shell-private-connection.patch Patch2: g-s-honor-lock-delay-GSettings.patch # PATCH-FIX-UPSTREAM g-s-use-the-right-getter.patch bgo#691170 zaitor@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 badshah400@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 @@ -138,7 +136,6 @@ to enable, disable and install them. %patch1 -p1 %patch2 -p1 %patch3 -p1 -%patch4 -p1 translation-update-upstream %build