diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index eac388994..51203610c 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -513,17 +513,25 @@ var TouchpadWorkspaceSwitchAction = new Lang.Class({ if (event.get_touchpad_gesture_finger_count() != 4) return Clutter.EVENT_PROPAGATE; - if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) { + let workspacesDisplay = Main.overview.viewSelector._workspacesDisplay; + + if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.BEGIN) { + workspacesDisplay._onPanStart(); + } else if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.UPDATE) { let [dx, dy] = event.get_gesture_motion_delta(event); this._dx += dx; this._dy += dy; + + workspacesDisplay._onPan(dy); + } else if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.CANCEL) { + workspacesDisplay._onPanCancel(); } else { - if (event.get_gesture_phase() == Clutter.TouchpadGesturePhase.END) - this._checkActivated(); + this._checkActivated(); this._dx = 0; this._dy = 0; + workspacesDisplay._onPanEnd(); } return Clutter.EVENT_STOP; diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 8e08cb126..21e5b6067 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -435,28 +435,14 @@ var WorkspacesDisplay = new Lang.Class({ this.actor.bind_property('mapped', clickAction, 'enabled', GObject.BindingFlags.SYNC_CREATE); let panAction = new Clutter.PanAction({ threshold_trigger_edge: Clutter.GestureTriggerEdge.AFTER }); - panAction.connect('pan', Lang.bind(this, this._onPan)); - panAction.connect('gesture-begin', Lang.bind(this, function() { - if (this._workspacesOnlyOnPrimary) { - let event = Clutter.get_current_event(); - if (this._getMonitorIndexForEvent(event) != this._primaryIndex) - return false; - } - - for (let i = 0; i < this._workspacesViews.length; i++) - this._workspacesViews[i].startSwipeScroll(); - return true; - })); - panAction.connect('gesture-cancel', Lang.bind(this, function() { - clickAction.release(); - for (let i = 0; i < this._workspacesViews.length; i++) - this._workspacesViews[i].endSwipeScroll(); - })); - panAction.connect('gesture-end', Lang.bind(this, function() { - clickAction.release(); - for (let i = 0; i < this._workspacesViews.length; i++) - this._workspacesViews[i].endSwipeScroll(); + panAction.connect('pan', Lang.bind(this, function (action) { + let [dist, dx, dy] = action.get_motion_delta(0); + this._onPan(dy); })); + //panAction.connect('pan', Lang.bind(this, this._onPan)); + panAction.connect('gesture-begin', Lang.bind(this, this._onPanStart)); + panAction.connect('gesture-cancel', Lang.bind(this, this._onPanCancel)); + panAction.connect('gesture-end', Lang.bind(this, this._onPanEnd)); Main.overview.addAction(panAction); this.actor.bind_property('mapped', panAction, 'enabled', GObject.BindingFlags.SYNC_CREATE); @@ -480,13 +466,36 @@ var WorkspacesDisplay = new Lang.Class({ this._fullGeometry = null; }, - _onPan: function(action) { - let [dist, dx, dy] = action.get_motion_delta(0); + _onPan: function(dy) { let adjustment = this._scrollAdjustment; adjustment.value -= (dy / this.actor.height) * adjustment.page_size; return false; }, + _onPanStart: function() { + if (this._workspacesOnlyOnPrimary) { + let event = Clutter.get_current_event(); + if (this._getMonitorIndexForEvent(event) != this._primaryIndex) + return false; + } + + for (let i = 0; i < this._workspacesViews.length; i++) + this._workspacesViews[i].startSwipeScroll(); + return true; + }, + + _onPanCancel: function() { + //clickAction.release(); + for (let i = 0; i < this._workspacesViews.length; i++) + this._workspacesViews[i].endSwipeScroll(); + }, + + _onPanEnd: function() { + //clickAction.release(); + for (let i = 0; i < this._workspacesViews.length; i++) + this._workspacesViews[i].endSwipeScroll(); + }, + navigateFocus: function(from, direction) { return this._getPrimaryView().actor.navigate_focus(from, direction, false); },