workspacesView: Allow activating empty workspaces on any monitor
We allow activating a workspace by clicking it when we know that the user did not try to select a window and missed (namely: the workspace is empty). However we currently always check for an empty workspace on the primary monitor, which doesn't make sense when the click happened on a different monitor. https://bugzilla.gnome.org/show_bug.cgi?id=766883
This commit is contained in:
parent
c39ffa111f
commit
e16f63a8e4
@ -374,6 +374,10 @@ const ExtraWorkspaceView = new Lang.Class({
|
|||||||
this._workspace.setActualGeometry(this._actualGeometry);
|
this._workspace.setActualGeometry(this._actualGeometry);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getActiveWorkspace: function() {
|
||||||
|
return this._workspace;
|
||||||
|
},
|
||||||
|
|
||||||
animateToOverview: function(animationType) {
|
animateToOverview: function(animationType) {
|
||||||
if (animationType == AnimationType.ZOOM)
|
if (animationType == AnimationType.ZOOM)
|
||||||
this._workspace.zoomToOverview();
|
this._workspace.zoomToOverview();
|
||||||
@ -421,8 +425,10 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
// Only switch to the workspace when there's no application
|
// Only switch to the workspace when there's no application
|
||||||
// windows open. The problem is that it's too easy to miss
|
// windows open. The problem is that it's too easy to miss
|
||||||
// an app window and get the wrong one focused.
|
// an app window and get the wrong one focused.
|
||||||
|
let event = Clutter.get_current_event();
|
||||||
|
let index = this._getMonitorIndexForEvent(event);
|
||||||
if ((action.get_button() == 1 || action.get_button() == 0) &&
|
if ((action.get_button() == 1 || action.get_button() == 0) &&
|
||||||
this._getPrimaryView().getActiveWorkspace().isEmpty())
|
this._workspacesViews[index].getActiveWorkspace().isEmpty())
|
||||||
Main.overview.hide();
|
Main.overview.hide();
|
||||||
}));
|
}));
|
||||||
Main.overview.addAction(clickAction);
|
Main.overview.addAction(clickAction);
|
||||||
@ -582,6 +588,12 @@ const WorkspacesDisplay = new Lang.Class({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_getMonitorIndexForEvent: function(event) {
|
||||||
|
let [x, y] = event.get_coords();
|
||||||
|
let rect = new Meta.Rectangle({ x: x, y: y, width: 1, height: 1 });
|
||||||
|
return global.screen.get_monitor_index_for_rect(rect);
|
||||||
|
},
|
||||||
|
|
||||||
_getPrimaryView: function() {
|
_getPrimaryView: function() {
|
||||||
if (!this._workspacesViews.length)
|
if (!this._workspacesViews.length)
|
||||||
return null;
|
return null;
|
||||||
|
Loading…
Reference in New Issue
Block a user