[gnome-shell] grabHelper: Fix regression for dwelling with mouse down



commit 2acb09766269fbf0a4ac2738059ce353b9950fe1
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Tue Sep 18 23:04:57 2012 -0300

    grabHelper: Fix regression for dwelling with mouse down
    
    b203a95a786af60257e55881c19b45192a0655b8 introduced a regression
    where we forgot to bail out if the pushModal didn't succeed properly.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=684344

 js/ui/grabHelper.js |   50 ++++++++++++++++++++++++++------------------------
 1 files changed, 26 insertions(+), 24 deletions(-)
---
diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js
index 0387b80..fccc2fb 100644
--- a/js/ui/grabHelper.js
+++ b/js/ui/grabHelper.js
@@ -148,31 +148,32 @@ const GrabHelper = new Lang.Class({
             return true;
 
         params.savedFocus = focus;
-        this._grabStack.push(params);
 
-        if (params.modal)
-            this._takeModalGrab();
+        if (params.modal && !this._takeModalGrab())
+            return false;
 
-        if (params.grabFocus)
-            this._takeFocusGrab(hadFocus);
+        if (params.grabFocus && !this._takeFocusGrab(hadFocus))
+            return false;
 
         if (hadFocus || params.grabFocus)
             _navigateActor(newFocus);
 
+        this._grabStack.push(params);
         return true;
     },
 
     _takeModalGrab: function() {
         let firstGrab = (this._modalCount == 0);
-        this._modalCount++;
-        if (!firstGrab)
-            return;
+        if (firstGrab) {
+            if (!Main.pushModal(this._owner))
+                return false;
 
-        if (!Main.pushModal(this._owner))
-            return;
+            this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
+            this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent));
+        }
 
-        this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
-        this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent));
+        this._modalCount++;
+        return true;
     },
 
     _releaseModalGrab: function() {
@@ -196,23 +197,24 @@ const GrabHelper = new Lang.Class({
 
     _takeFocusGrab: function(hadFocus) {
         let firstGrab = (this._grabFocusCount == 0);
-        this._grabFocusCount++;
-        if (!firstGrab)
-            return;
+        if (firstGrab) {
+            let metaDisplay = global.screen.get_display();
 
-        let metaDisplay = global.screen.get_display();
+            this._grabbedFromKeynav = hadFocus;
+            this._preGrabInputMode = global.stage_input_mode;
+            this._prevFocusedWindow = metaDisplay.focus_window;
 
-        this._grabbedFromKeynav = hadFocus;
-        this._preGrabInputMode = global.stage_input_mode;
-        this._prevFocusedWindow = metaDisplay.focus_window;
+            if (this._preGrabInputMode == Shell.StageInputMode.NONREACTIVE ||
+                this._preGrabInputMode == Shell.StageInputMode.NORMAL) {
+                global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
+            }
 
-        if (this._preGrabInputMode == Shell.StageInputMode.NONREACTIVE ||
-            this._preGrabInputMode == Shell.StageInputMode.NORMAL) {
-            global.set_stage_input_mode(Shell.StageInputMode.FOCUSED);
+            this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));
+            this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged));
         }
 
-        this._keyFocusNotifyId = global.stage.connect('notify::key-focus', Lang.bind(this, this._onKeyFocusChanged));
-        this._focusWindowChangedId = metaDisplay.connect('notify::focus-window', Lang.bind(this, this._focusWindowChanged));
+        this._grabFocusCount++;
+        return true;
     },
 
     _releaseFocusGrab: function() {



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