Compare commits

...

2 Commits

Author SHA1 Message Date
Carlos Garnacho
708a198abf windowManager: Add TouchpadWorkspaceSwitchAction
This object (not really a Clutter.GestureAction) sets up a captured-event
handler, which exclusively looks for 4 finger touchpad swipes, emitting
an ::activated signal under the same terms than WorkspaceSwitchAction.
2015-07-09 12:42:38 +02:00
Carlos Garnacho
8270d84b80 windowManager: refactor WorkspaceSwitchAction callback into separate function
This will be used too by the touchpad-specific "action", so put it in a
shared place.
2015-07-09 12:42:38 +02:00

View File

@ -477,6 +477,64 @@ const TilePreview = new Lang.Class({
}
});
const TouchpadWorkspaceSwitchAction = new Lang.Class({
Name: 'TouchpadWorkspaceSwitchAction',
_checkActivated: function() {
const MOTION_THRESHOLD = 50;
let allowedModes = Shell.ActionMode.NORMAL | Shell.ActionMode.OVERVIEW;
let dir;
if ((allowedModes & Main.actionMode) == 0)
return;
if (this._dy < MOTION_THRESHOLD)
dir = Meta.MotionDirection.DOWN;
else if (this._dy > MOTION_THRESHOLD)
dir = Meta.MotionDirection.UP;
else if (this._dx < MOTION_THRESHOLD)
dir = Meta.MotionDirection.RIGHT;
else if (this._dx > MOTION_THRESHOLD)
dir = Meta.MotionDirection.LEFT;
else
return;
this.emit('activated', dir);
},
_handleEvent: function(actor, event) {
if (event.type() != Clutter.EventType.TOUCHPAD_SWIPE_BEGIN &&
event.type() != Clutter.EventType.TOUCHPAD_SWIPE_UPDATE &&
event.type() != Clutter.EventType.TOUCHPAD_SWIPE_END)
return Clutter.EVENT_PROPAGATE;
if (event.get_gesture_swipe_finger_count() != 4)
return Clutter.EVENT_PROPAGATE;
if (event.type() == Clutter.EventType.TOUCHPAD_SWIPE_UPDATE) {
let [dx, dy] = event.get_gesture_motion_delta(event);
this._dx += dx;
this._dy += dy;
} else {
if (event.type() == Clutter.EventType.TOUCHPAD_SWIPE_END)
this._checkActivated();
this._dx = 0;
this._dy = 0;
}
return Clutter.EVENT_STOP;
},
_init: function(actor) {
this._dx = 0;
this._dy = 0;
actor.connect('captured-event', Lang.bind(this, this._handleEvent));
},
});
Signals.addSignalMethods(TouchpadWorkspaceSwitchAction.prototype);
const WorkspaceSwitchAction = new Lang.Class({
Name: 'WorkspaceSwitchAction',
Extends: Clutter.SwipeAction,
@ -866,15 +924,22 @@ const WindowManager = new Lang.Class({
false, -1, 1);
let gesture = new WorkspaceSwitchAction();
gesture.connect('activated', Lang.bind(this, function(action, direction) {
let newWs = global.screen.get_active_workspace().get_neighbor(direction);
this.actionMoveWorkspace(newWs);
}));
gesture.connect('activated', Lang.bind(this, this._actionSwitchWorkspace));
global.stage.add_action(gesture);
// This is not a normal Clutter.GestureAction, doesn't need add_action()
gesture = new TouchpadWorkspaceSwitchAction(global.stage);
gesture.connect('activated', Lang.bind(this, this._actionSwitchWorkspace));
gesture = new AppSwitchAction();
gesture.connect('activated', Lang.bind(this, this._switchApp));
global.stage.add_action(gesture);
},
_actionSwitchWorkspace: function(action, direction) {
let newWs = global.screen.get_active_workspace().get_neighbor(direction);
this.actionMoveWorkspace(newWs);
},
_lookupIndex: function (windows, metaWindow) {