diff --git a/js/ui/layout.js b/js/ui/layout.js index 29703c8b0..7020c3053 100644 --- a/js/ui/layout.js +++ b/js/ui/layout.js @@ -446,11 +446,22 @@ const LayoutManager = new Lang.Class({ MESSAGE_TRAY_PRESSURE_TIMEOUT, Shell.KeyBindingMode.NORMAL | Shell.KeyBindingMode.OVERVIEW); + this._trayPressure.setEventFilter(this._trayBarrierEventFilter); this._trayPressure.connect('trigger', function(barrier) { Main.messageTray.openTray(); }); }, + _trayBarrierEventFilter: function(event) { + // Throw out all events where the pointer was grabbed by another + // client, as the client that grabbed the pointer expects to have + // complete control over it + if (event.grabbed && Main.modalCount == 0) + return true; + + return false; + }, + _monitorsChanged: function() { this._updateMonitors(); this._updateBoxes(); @@ -1268,6 +1279,7 @@ const PressureBarrier = new Lang.Class({ this._timeout = timeout; this._keybindingMode = keybindingMode; this._orientation = (barrier.y1 == barrier.y2) ? Clutter.Orientation.HORIZONTAL : Clutter.Orientation.VERTICAL; + this._eventFilter = null; this._isTriggered = false; this._reset(); @@ -1282,6 +1294,10 @@ const PressureBarrier = new Lang.Class({ this._barrier = null; }, + setEventFilter: function(filter) { + this._eventFilter = filter; + }, + _reset: function() { this._barrierEvents = []; this._currentPressure = 0; @@ -1343,10 +1359,7 @@ const PressureBarrier = new Lang.Class({ if (this._isTriggered) return; - // Throw out all events where the pointer was grabbed by another - // client, as the client that grabbed the pointer expects to have - // complete control over it - if (event.grabbed && Main.modalCount == 0) + if (this._eventFilter && this._eventFilter(event)) return; // Throw out all events not in the proper keybinding mode