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:
Florian Müllner 2016-06-24 18:15:48 +02:00
parent c39ffa111f
commit e16f63a8e4

View File

@ -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;