[gnome-shell/wip/exalm/gestures: 8/8] tmp: Use clones



commit 22d19ca6c5b8306cbaad88f21beedcf118425699
Author: Alexander Mikhaylenko <exalm7659 gmail com>
Date:   Mon Jul 1 18:18:07 2019 +0500

    tmp: Use clones
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/605

 js/ui/windowManager.js | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index e3e07461e..e3b30fc68 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -1628,6 +1628,8 @@ var WindowManager = class {
             return;
         return;
 
+        // TODO: rewrite this whole thing
+
         let windows = global.get_window_actors();
         let lastCurSibling = null;
         let lastDirSibling = [];
@@ -1767,21 +1769,22 @@ var WindowManager = class {
                 if (window.is_on_all_workspaces())
                     continue;
 
-                // TODO: what if a window is between monitors?
-//                r(0).get_frame_rect().intersect(global.display.get_monitor_geometry(1))
-                if (window.get_monitor() != monitor.index)
+                if 
(!window.get_frame_rect().intersect(global.display.get_monitor_geometry(monitor.index))[0])
                     continue;
 
                 let record = { window: actor,
-                               parent: actor.get_parent() };
+                               parent: actor.get_parent(),
+                               clone: new Clutter.Clone({ source: actor,
+                                                          x: actor.x,
+                                                          y: actor.y }) };
 
                 if (this._movingWindow && window == this._movingWindow) {
                     switchData.movingWindow = record;
                     switchData.windows.push(switchData.movingWindow);
-                    actor.reparent(switchData.movingWindowBin);
+                    switchData.movingWindowBin.add_actor(record.clone);
                 } else if (window.get_workspace().index() == from) {
                     switchData.windows.push(record);
-                    actor.reparent(monitorData.curGroup);
+                    monitorData.curGroup.add_actor(record.clone);
                 } else {
                     let visible = false;
                     for (let dir of Object.values(Meta.MotionDirection)) {
@@ -1791,13 +1794,14 @@ var WindowManager = class {
                             continue;
 
                         switchData.windows.push(record);
-                        actor.reparent(info.actor);
+                        info.actor.add_actor(record.clone);
                         visible = true;
                         break;
                     }
 
-                    actor.visible = visible;
+                    record.clone.visible = visible;
                 }
+                actor.hide();
             }
 
             switchData.monitors[monitorData.index] = monitorData;
@@ -1807,6 +1811,7 @@ var WindowManager = class {
             let w = switchData.windows[i];
 
             w.windowDestroyId = w.window.connect('destroy', () => {
+                w.clone.destroy();
                 switchData.windows.splice(switchData.windows.indexOf(w), 1);
             });
         }
@@ -1819,11 +1824,11 @@ var WindowManager = class {
             let w = switchData.windows[i];
 
             w.window.disconnect(w.windowDestroyId);
-            w.window.reparent(w.parent);
+            w.clone.destroy();
 
-            if (w.window.get_meta_window().get_workspace() !=
+            if (w.window.get_meta_window().get_workspace() ==
                 global.workspace_manager.get_active_workspace())
-                w.window.hide();
+                w.window.show();
         }
         Tweener.removeTweens(switchData);
         for (let monitorData of switchData.monitors) {


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