Compare commits
	
		
			2 Commits
		
	
	
		
			3.17.4
			...
			wip/garnac
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					708a198abf | ||
| 
						 | 
					8270d84b80 | 
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user