XDND: Allow workspace switching using the thumbnails
Currently activating a window on a different workspace requires very long drag distances, which is very inconvenient to use. Fix that by allowing switching workspaces using the thumbnails which is consistent with window and launcher dnd and much easier to use. https://bugzilla.gnome.org/show_bug.cgi?id=643945
This commit is contained in:
parent
c58b8498b3
commit
528fc9bc47
@ -24,6 +24,7 @@ const PlaceDisplay = imports.ui.placeDisplay;
|
||||
const Tweener = imports.ui.tweener;
|
||||
const ViewSelector = imports.ui.viewSelector;
|
||||
const WorkspacesView = imports.ui.workspacesView;
|
||||
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
||||
|
||||
// Time for initial animation going into Overview mode
|
||||
const ANIMATION_TIME = 0.25;
|
||||
@ -243,7 +244,8 @@ Overview.prototype = {
|
||||
_onDragMotion: function(dragEvent) {
|
||||
let targetIsWindow = dragEvent.targetActor &&
|
||||
dragEvent.targetActor._delegate &&
|
||||
dragEvent.targetActor._delegate.metaWindow;
|
||||
dragEvent.targetActor._delegate.metaWindow &&
|
||||
!(dragEvent.targetActor._delegate instanceof WorkspaceThumbnail.WindowClone);
|
||||
|
||||
this._windowSwitchTimestamp = global.get_current_time();
|
||||
|
||||
|
@ -379,6 +379,11 @@ WorkspaceThumbnail.prototype = {
|
||||
|
||||
// Draggable target interface
|
||||
handleDragOver : function(source, actor, x, y, time) {
|
||||
if (source == Main.xdndHandler) {
|
||||
this.metaWorkspace.activate(time);
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
}
|
||||
|
||||
if (this.state > ThumbnailState.NORMAL)
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
|
@ -598,6 +598,14 @@ WorkspacesDisplay.prototype = {
|
||||
this._updateAlwaysZoom();
|
||||
|
||||
global.screen.connect('monitors-changed', Lang.bind(this, this._updateAlwaysZoom));
|
||||
Main.xdndHandler.connect('drag-begin', Lang.bind(this, function(){
|
||||
this._alwaysZoomOut = true;
|
||||
}));
|
||||
|
||||
Main.xdndHandler.connect('drag-end', Lang.bind(this, function(){
|
||||
this._alwaysZoomOut = false;
|
||||
this._updateAlwaysZoom();
|
||||
}));
|
||||
|
||||
this._nWorkspacesNotifyId = 0;
|
||||
this._switchWorkspaceNotifyId = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user