layout: Move tray-specific event filtration to the user of PressureBarrier

For the HotCorner, we want to have different logic for tossing out
specific events based on the grabbed state, etc. so make us have
to pass in an event filter callback.
This commit is contained in:
Jasper St. Pierre 2013-03-01 15:33:39 -05:00
parent df848aa084
commit 337d2da38a

View File

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