From 6610099c2604c13a7f4d10e7409b6cba0056cafe Mon Sep 17 00:00:00 2001
From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz>
Date: Sat, 27 Aug 2022 18:24:59 +0200
Subject: [PATCH] Qt: Fixes in container moves

---
 woman/qt.py | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/woman/qt.py b/woman/qt.py
index 1e8695b..147f29b 100755
--- a/woman/qt.py
+++ b/woman/qt.py
@@ -644,22 +644,22 @@ def qt_main():
             shared.i3_cmd(f"move workspace to output {output}")
 
         def move(self, target, swap=False, before=False, expand=False, new_container=None):
-            for f in self._tree.floating_nodes:
-                f.move_to_workspace(target.workspace_widget.master, target.workspace_widget.slave)
             if (w := self.root_i3_tree_widget()) is not None:
                 w.move(target, swap=swap, before=before, expand=expand, new_container=new_container)
+            for f in self._tree.floating_nodes:
+                f.move_to_workspace(target.workspace_widget.master, target.workspace_widget.slave)
 
         def move_to_workspace(self, master, slave, expand=False):
-            for f in self._tree.floating_nodes:
-                f.move_to_workspace(master, slave)
             if (w := self.root_i3_tree_widget()) is not None:
                 w.move_to_workspace(master, slave, expand=expand)
+            for f in self._tree.floating_nodes:
+                f.move_to_workspace(master, slave)
 
         def quit_windows(self, *arg, **kvarg):
-            for f in self._tree.floating_nodes:
-                f.quit_windows(*arg, **kvarg)
             if self._tree.root_node is not None:
                 self._tree.root_node.quit_windows(*arg, **kvarg)
+            for f in self._tree.floating_nodes:
+                f.quit_windows(*arg, **kvarg)
 
         def clicked(self, pos, buttons):
             if buttons == Qt.RightButton:
@@ -673,6 +673,7 @@ def qt_main():
 
         def root_i3_tree_widget(self):
             r = self._tree.root_node
+            if isinstance(r, I3WindowNodeWidget): return r
             if r is None: return None
             if len(r.nodes) == 1:
                 return r.nodes[0]
@@ -691,12 +692,7 @@ def qt_main():
                 m_win.cmd_msg_clean()
                 button = s.press_event_buttons
                 try:
-                    if isinstance(s, WorkspaceWidget):
-                        for f in s._tree.floating_nodes:
-                            f.move_to_workspace(self.master, self.slave)
-                        s.move_to_workspace(self.master, self.slave, expand = button == Qt.RightButton)
-                    else:
-                        s.move_to_workspace(self.master, self.slave, expand=button == Qt.RightButton)
+                    s.move_to_workspace(self.master, self.slave, expand=button == Qt.RightButton)
                     m_win.load_i3_tree()
                 except I3CmdException as e:
                     m_win.cmd_msg(e.error, QColor(255, 100, 100))
-- 
GitLab