[gnome-shell] Always reserve space in all workspaces on a drag



commit 05736ba0a1facaea873822fbc73221f2eed37414
Author: Alexander Larsson <alexl redhat com>
Date:   Fri Mar 4 15:49:13 2011 +0100

    Always reserve space in all workspaces on a drag
    
    We used to do this only on automatic workspace switch, but that
    doesn't work for the multiple monitors case where we want to reserve
    space on the extra monitors.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=609258

 js/ui/workspacesView.js |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)
---
diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js
index e9b548a..d288c2c 100644
--- a/js/ui/workspacesView.js
+++ b/js/ui/workspacesView.js
@@ -385,6 +385,7 @@ WorkspacesView.prototype = {
             return;
 
         this._inDrag = true;
+        this._firstDragMotion = true;
 
         this._dragMonitor = {
             dragMotion: Lang.bind(this, this._onDragMotion)
@@ -396,6 +397,14 @@ WorkspacesView.prototype = {
         if (Main.overview.animationInProgress)
              return DND.DragMotionResult.CONTINUE;
 
+        if (this._firstDragMotion) {
+            this._firstDragMotion = false;
+            for (let i = 0; i < this._workspaces.length; i++)
+                this._workspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
+            for (let i = 0; i < this._extraWorkspaces.length; i++)
+                this._extraWorkspaces[i].setReservedSlot(dragEvent.dragActor._delegate);
+        }
+
         let primary = global.get_primary_monitor();
 
         let activeWorkspaceIndex = global.screen.get_active_workspace_index();
@@ -409,7 +418,6 @@ WorkspacesView.prototype = {
         let switchTop = (dragEvent.y <= topEdge && topWorkspace);
         if (switchTop && this._dragOverLastY != topEdge) {
             topWorkspace.metaWorkspace.activate(global.get_current_time());
-            topWorkspace.setReservedSlot(dragEvent.dragActor._delegate);
             this._dragOverLastY = topEdge;
 
             return DND.DragMotionResult.CONTINUE;
@@ -418,7 +426,6 @@ WorkspacesView.prototype = {
         let switchBottom = (dragEvent.y >= bottomEdge && bottomWorkspace);
         if (switchBottom && this._dragOverLastY != bottomEdge) {
             bottomWorkspace.metaWorkspace.activate(global.get_current_time());
-            bottomWorkspace.setReservedSlot(dragEvent.dragActor._delegate);
             this._dragOverLastY = bottomEdge;
 
             return DND.DragMotionResult.CONTINUE;
@@ -453,7 +460,6 @@ WorkspacesView.prototype = {
                 this._timeoutId = Mainloop.timeout_add_seconds(1,
                     Lang.bind(this, function() {
                        hoverWorkspace.metaWorkspace.activate(global.get_current_time());
-                       hoverWorkspace.setReservedSlot(dragEvent.dragActor._delegate);
                        return false;
                     }));
         } else {
@@ -476,6 +482,8 @@ WorkspacesView.prototype = {
 
         for (let i = 0; i < this._workspaces.length; i++)
             this._workspaces[i].setReservedSlot(null);
+        for (let i = 0; i < this._extraWorkspaces.length; i++)
+            this._extraWorkspaces[i].setReservedSlot(null);
     },
 
     _swipeScrollBegin: function() {



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