diff --git a/src/qtile_bonsai/core/tree.py b/src/qtile_bonsai/core/tree.py index 9f67b80..91cc1b7 100644 --- a/src/qtile_bonsai/core/tree.py +++ b/src/qtile_bonsai/core/tree.py @@ -540,8 +540,10 @@ def merge_tabs(self, src: Tab, dest: Tab, axis: AxisParam): axis = Axis(axis) removed_nodes = [] - br_rm, _, _, _removed_nodes = self._remove(src) + br_rm, _, br_sib, _removed_nodes = self._remove(src) removed_nodes.extend(_removed_nodes) + if br_sib is not None: + removed_nodes.extend(self._do_post_removal_pruning(br_sib)) br_rm_sc = br_rm.children[0] dest_sc = dest.children[0] diff --git a/tests/unit/core/test_tree.py b/tests/unit/core/test_tree.py index cc03275..79362d5 100644 --- a/tests/unit/core/test_tree.py +++ b/tests/unit/core/test_tree.py @@ -4021,6 +4021,32 @@ def test_merge_to_y_axis(self, tree: Tree, add_subscribers_to_tree): assert cb_add.mock_calls == [] assert cb_remove.mock_calls == [mock.call([t1])] + def test_when_tc_is_pruned_out(self, tree: Tree): + tree.set_config("tab_bar.hide_when", "single_tab") + + p1 = tree.tab() + p2 = tree.split(p1, "x") + p3 = tree.tab() + p4 = tree.split(p3, "y") + + t1 = p2.get_first_ancestor(Tab) + t2 = p4.get_first_ancestor(Tab) + tree.merge_tabs(t1, t2, "x") + + assert tree_matches_repr( + tree, + """ + - tc:1 + - t:6 + - sc.x:10 + - sc.y:7 + - p:8 | {x: 0, y: 0, w: 200, h: 150} + - p:9 | {x: 0, y: 150, w: 200, h: 150} + - p:4 | {x: 200, y: 0, w: 100, h: 300} + - p:5 | {x: 300, y: 0, w: 100, h: 300} + """, + ) + class TestMergeToSubtab: def test_when_src_and_dest_resolve_to_same_node_then_error_is_raised(