diff options
author | toofar <toofar@spalge.com> | 2023-12-27 09:49:40 +1300 |
---|---|---|
committer | toofar <toofar@spalge.com> | 2024-01-06 21:02:56 +1300 |
commit | 76ddb89f29a4fb0be953cee7cf8f510f0e81d614 (patch) | |
tree | ae3c6521f52ce61e3082ce7c03b3e9a54982742a | |
parent | c6bcb496a2cbeb9dec06393e2566aa59e3a90021 (diff) | |
download | qutebrowser-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.py | 5 | ||||
-rw-r--r-- | qutebrowser/mainwindow/treetabbedbrowser.py | 10 |
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() |