summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoofar <toofar@spalge.com>2023-12-27 09:49:40 +1300
committertoofar <toofar@spalge.com>2024-01-06 21:02:56 +1300
commit76ddb89f29a4fb0be953cee7cf8f510f0e81d614 (patch)
treeae3c6521f52ce61e3082ce7c03b3e9a54982742a
parentc6bcb496a2cbeb9dec06393e2566aa59e3a90021 (diff)
downloadqutebrowser-76ddb89f29a4fb0be953cee7cf8f510f0e81d614.tar.gz
qutebrowser-76ddb89f29a4fb0be953cee7cf8f510f0e81d614.zip
Switch a couple more traversals to child first
I think when removing nodes it's less work to remove leaves first, so that children don't have to be reparented. We also don't need to save everything to a list. I don't know what the difference out of POST and POST_R, maybe if you remove the last sibling first it's less work? Not sure. Also take care of a fixme comment which is fixed (the comment it refers to is still there, but add_undo_entry is no longer modifying the tree).
-rw-r--r--qutebrowser/browser/commands.py5
-rw-r--r--qutebrowser/mainwindow/treetabbedbrowser.py10
2 files changed, 9 insertions, 6 deletions
diff --git a/qutebrowser/browser/commands.py b/qutebrowser/browser/commands.py
index aa720a747..caba596c3 100644
--- a/qutebrowser/browser/commands.py
+++ b/qutebrowser/browser/commands.py
@@ -522,7 +522,10 @@ class CommandDispatcher:
# third pass: remove tabs from old window, children first this time to
# avoid having to re-parent things when traversing.
if not keep:
- for node in reversed(traversed):
+ for node in self._current_widget().node.traverse(
+ notree.TraverseOrder.POST_R,
+ render_collapsed=False,
+ ):
self._tabbed_browser.close_tab(node.value,
add_undo=False,
transfer=True)
diff --git a/qutebrowser/mainwindow/treetabbedbrowser.py b/qutebrowser/mainwindow/treetabbedbrowser.py
index eacc9f4c3..2fe6d4c84 100644
--- a/qutebrowser/mainwindow/treetabbedbrowser.py
+++ b/qutebrowser/mainwindow/treetabbedbrowser.py
@@ -81,22 +81,22 @@ class TreeTabbedBrowser(TabbedBrowser):
def _remove_tab(self, tab, *, add_undo=True, new_undo=True, crashed=False):
"""Handle children positioning after a tab is removed."""
- node = tab.node
- # FIXME after the fixme in _add_undo_entry is resolved, no need
- # to save descendents
- descendents = tuple(node.traverse(render_collapsed=True))
if not tab.url().isEmpty() and tab.url().isValid() and add_undo:
idx = self.widget.indexOf(tab)
self._add_undo_entry(tab, idx, new_undo)
+ node = tab.node
parent = node.parent
if node.collapsed:
# Collapsed nodes have already been removed from the TabWidget so
# we can't ask super() to dispose of them and need to do it
# ourselves.
- for descendent in descendents:
+ for descendent in node.traverse(
+ order=notree.TraverseOrder.POST_R,
+ render_collapsed=True
+ ):
descendent.parent = None
descendent_tab = descendent.value
descendent_tab.private_api.shutdown()