[gnome-shell] XDND: Allow workspace switching using the thumbnails



commit 528fc9bc4766dd40f61bf045e1af8b5e9b2e4b23
Author: Adel Gadllah <adel gadllah gmail com>
Date:   Mon Mar 21 23:20:36 2011 +0100

    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

 js/ui/overview.js           |    4 +++-
 js/ui/workspaceThumbnail.js |    5 +++++
 js/ui/workspacesView.js     |    8 ++++++++
 3 files changed, 16 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/overview.js b/js/ui/overview.js
index 40cd852..351ba7c 100644
--- a/js/ui/overview.js
+++ b/js/ui/overview.js
@@ -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();
 
diff --git a/js/ui/workspaceThumbnail.js b/js/ui/workspaceThumbnail.js
index d6334c6..9d92f7b 100644
--- a/js/ui/workspaceThumbnail.js
+++ b/js/ui/workspaceThumbnail.js
@@ -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;
 
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index f7250c6..f791f9f 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -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;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]