viewSelector: Show the overview on 3-finger pinch gestures
This commit is contained in:
parent
9c4ffc4bf3
commit
932b895127
@ -120,6 +120,68 @@ const EdgeDragAction = new Lang.Class({
|
|||||||
});
|
});
|
||||||
Signals.addSignalMethods(EdgeDragAction.prototype);
|
Signals.addSignalMethods(EdgeDragAction.prototype);
|
||||||
|
|
||||||
|
const ShowOverviewAction = new Lang.Class({
|
||||||
|
Name: 'ShowOverviewAction',
|
||||||
|
Extends: Clutter.GestureAction,
|
||||||
|
|
||||||
|
_init : function() {
|
||||||
|
this.parent();
|
||||||
|
this.set_n_touch_points(3);
|
||||||
|
|
||||||
|
global.display.connect('grab-op-begin', Lang.bind(this, function() {
|
||||||
|
this.cancel();
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_prepare : function(action, actor) {
|
||||||
|
return this.get_n_current_points() == this.get_n_touch_points();
|
||||||
|
},
|
||||||
|
|
||||||
|
_getBoundingRect : function(motion) {
|
||||||
|
let minX, minY, maxX, maxY;
|
||||||
|
|
||||||
|
for (let i = 0; i < this.get_n_current_points(); i++) {
|
||||||
|
let x, y;
|
||||||
|
|
||||||
|
if (motion == true) {
|
||||||
|
[x, y] = this.get_motion_coords(i);
|
||||||
|
} else {
|
||||||
|
[x, y] = this.get_press_coords(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
minX = maxX = x;
|
||||||
|
minY = maxY = y;
|
||||||
|
} else {
|
||||||
|
minX = Math.min(minX, x);
|
||||||
|
minY = Math.min(minY, y);
|
||||||
|
maxX = Math.max(maxX, x);
|
||||||
|
maxY = Math.max(maxY, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Meta.Rectangle({ x: minX,
|
||||||
|
y: minY,
|
||||||
|
width: maxX - minX,
|
||||||
|
height: maxY - minY });
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_begin : function(action, actor) {
|
||||||
|
this._initialRect = this._getBoundingRect(false);
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
vfunc_gesture_end : function(action, actor) {
|
||||||
|
let rect = this._getBoundingRect(true);
|
||||||
|
let oldArea = this._initialRect.width * this._initialRect.height;
|
||||||
|
let newArea = rect.width * rect.height;
|
||||||
|
let areaDiff = newArea / oldArea;
|
||||||
|
|
||||||
|
this.emit('activated', areaDiff);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Signals.addSignalMethods(ShowOverviewAction.prototype);
|
||||||
|
|
||||||
const ViewSelector = new Lang.Class({
|
const ViewSelector = new Lang.Class({
|
||||||
Name: 'ViewSelector',
|
Name: 'ViewSelector',
|
||||||
|
|
||||||
@ -216,7 +278,9 @@ const ViewSelector = new Lang.Class({
|
|||||||
Shell.KeyBindingMode.OVERVIEW,
|
Shell.KeyBindingMode.OVERVIEW,
|
||||||
Lang.bind(Main.overview, Main.overview.toggle));
|
Lang.bind(Main.overview, Main.overview.toggle));
|
||||||
|
|
||||||
let gesture = new EdgeDragAction(St.Side.RIGHT);
|
let gesture;
|
||||||
|
|
||||||
|
gesture = new EdgeDragAction(St.Side.RIGHT);
|
||||||
gesture.connect('activated', Lang.bind(this, function() {
|
gesture.connect('activated', Lang.bind(this, function() {
|
||||||
if (Main.overview.visible)
|
if (Main.overview.visible)
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
@ -224,6 +288,13 @@ const ViewSelector = new Lang.Class({
|
|||||||
this.showApps();
|
this.showApps();
|
||||||
}));
|
}));
|
||||||
global.stage.add_action(gesture);
|
global.stage.add_action(gesture);
|
||||||
|
|
||||||
|
gesture = new ShowOverviewAction();
|
||||||
|
gesture.connect('activated', Lang.bind(this, function(action, areaDiff) {
|
||||||
|
if (areaDiff < 0.7)
|
||||||
|
Main.overview.show();
|
||||||
|
}));
|
||||||
|
global.stage.add_action(gesture);
|
||||||
},
|
},
|
||||||
|
|
||||||
_toggleAppsPage: function() {
|
_toggleAppsPage: function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user