diff --git a/woman/qt.py b/woman/qt.py index 20099d552704b63ba7b5ed31e18e8f9ea8dbc251..eeb737a9e41f105b84d10d3c31269feee316f3ef 100755 --- a/woman/qt.py +++ b/woman/qt.py @@ -721,10 +721,19 @@ def qt_main(): f.move_to_workspace(target.workspace_widget.master, target.workspace_widget.slave) def move_to_workspace(self, master, slave, expand=False): - 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) + try: + with shared.lock: + shared.output_of_workspace[master][slave] + empty = False + except KeyError: + empty = True + if empty: + swap_workspace(self.master, self.slave, master, slave) + else: + 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): if self._tree.root_node is not None: @@ -732,6 +741,9 @@ def qt_main(): for f in self._tree.floating_nodes: f.quit_windows(*arg, **kvarg) + def swap_with_workspace(self, master, slave): + swap_workspace(self.master, self.slave, master, slave) + def clicked(self, pos, buttons): if buttons == Qt.RightButton: try: @@ -763,7 +775,13 @@ def qt_main(): m_win.cmd_msg_clean() button = s.press_event_buttons try: - s.move_to_workspace(self.master, self.slave, expand=button == Qt.RightButton) + if button == Qt.MiddleButton: + if isinstance(s, WorkspaceWidget): + s.swap_with_workspace(self.master, self.slave) + else: + self.move(s, swap=True) + else: + 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))