From 68186d284bf770ecd458475d621634e0210ec322 Mon Sep 17 00:00:00 2001 From: Jiri Kalvoda <jirikalvoda@kam.mff.cuni.cz> Date: Sat, 27 Aug 2022 21:23:18 +0200 Subject: [PATCH] Qt: I3Tree commands: wrap_if_is_root --- woman/qt.py | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/woman/qt.py b/woman/qt.py index 19e16ca..ceb6e0b 100755 --- a/woman/qt.py +++ b/woman/qt.py @@ -125,8 +125,9 @@ def qt_main(): class I3NodeWidget(QFrame, DragFeature): - def __init__(self, t, workspace_widget, parent=None): + def __init__(self, t, workspace_widget, is_root, parent=None): super().__init__(parent) + self.is_root = is_root self.workspace_widget = workspace_widget self.container_id = t.id self.shortcut = None @@ -153,6 +154,27 @@ def qt_main(): def focus(self): shared.i3_cmd(f'[con_id={self.container_id}] focus') + def wrap_if_is_root(self): + if self.is_root: + self.is_root = False + master, slave = (self.workspace_widget.master, self.workspace_widget.slave) + shared.i3_cmd(f'[con_id={self.container_id}] move container to workspace tmp') + # ID is changed, need reload + t = shared.i3.value.get_tree() + def go(x): + if x.type == "workspace": + print(x.name) + if x.name == "tmp": + self.container_id = x.nodes[0].id + else: + for y in x.nodes: + go(y) + go(t) + shared.i3_cmd(f'[con_id={self.container_id}] move container to workspace {workspace(master, slave)}') + for f in self.workspace_widget._tree.floating_nodes: + shared.i3_cmd(f'[con_id={f.container_id}] move container to workspace {workspace(master, slave)}') + return self + def move_to_workspace(self, master, slave, expand=False): self.workspace_widget.screenshot_changed() m_win._workspaces[(master, slave)].screenshot_changed() @@ -175,11 +197,15 @@ def qt_main(): self.workspace_widget.screenshot_changed() target.workspace_widget.screenshot_changed() if swap: + self.wrap_if_is_root() + target.wrap_if_is_root() shared.i3_cmd(f'[con_id={self.container_id}] mark tmp') shared.i3_cmd(f'[con_id={target.container_id}] swap container with mark tmp') else: if new_container is not None: target.put_in_new_container(None if new_container is True else new_container) + else: + target.wrap_if_is_root() if expand and type(self) != I3InnerNodeWidget: if before: self.move(target, expand=True) @@ -326,8 +352,8 @@ def qt_main(): self.setStyleSheet(f"#{id(self)} {{ {style} }}"); class I3WindowNodeWidget(I3NodeWidget): - def __init__(self, t, workspace_widget, parent=None): - super().__init__(t, workspace_widget, parent) + def __init__(self, t, workspace_widget, is_root, parent=None): + super().__init__(t, workspace_widget, is_root, parent) self._hlay = no_space(QHBoxLayout(self)) self.title = t.name self.urgent = t.urgent @@ -370,8 +396,8 @@ def qt_main(): class I3InnerNodeWidget(I3NodeWidget): - def __init__(self, t, workspace_widget, parent=None): - super().__init__(t, workspace_widget, parent) + def __init__(self, t, workspace_widget, is_root, parent=None): + super().__init__(t, workspace_widget, is_root, parent) self._hlay = no_space(QHBoxLayout(self)) self._head = QLabel(self) self._list = no_space(QVBoxLayout()) @@ -429,11 +455,11 @@ def qt_main(): else: super().clicked(pos, buttons) - def i3_tree_widget_create(t, workspace_widget, parent): + def i3_tree_widget_create(t, workspace_widget, parent, is_root=False): if t.nodes: - return I3InnerNodeWidget(t, workspace_widget, parent) + return I3InnerNodeWidget(t, workspace_widget, is_root, parent) else: - return I3WindowNodeWidget(t, workspace_widget, parent) + return I3WindowNodeWidget(t, workspace_widget, is_root, parent) class I3TreeWidget(QWidget): def __init__(self, parent=None): @@ -469,7 +495,7 @@ def qt_main(): self.all_inner_nides.append(x) for i in x.nodes: go(i) - r = i3_tree_widget_create(t, self.workspace_widget, self) + r = i3_tree_widget_create(t, self.workspace_widget, self, is_root=True) self.root_node = r go(r) self._lay.addWidget(r) -- GitLab