summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qutebrowser/mainwindow/treetabbedbrowser.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/qutebrowser/mainwindow/treetabbedbrowser.py b/qutebrowser/mainwindow/treetabbedbrowser.py
index a9f134bd2..f93e7c98d 100644
--- a/qutebrowser/mainwindow/treetabbedbrowser.py
+++ b/qutebrowser/mainwindow/treetabbedbrowser.py
@@ -94,11 +94,10 @@ class TreeTabbedBrowser(TabbedBrowser):
if node.collapsed:
# Collapsed nodes have already been removed from the TabWidget so
- # we can't ask super() to disposed of them and need to do it
+ # we can't ask super() to dispose of them and need to do it
# ourselves.
- # The node is removed from the tree in _add_undo_entry() currently
- # (see fixme comment).
for descendent in descendents:
+ descendent.parent = None
descendent_tab = descendent.value
descendent_tab.private_api.shutdown()
descendent_tab.deleteLater()
@@ -161,10 +160,15 @@ class TreeTabbedBrowser(TabbedBrowser):
else:
entries = []
for descendent in node.traverse(notree.TraverseOrder.POST_R):
- entries.append(_TreeUndoEntry.from_node(descendent, 0))
- # ensure descendent is not later saved as child as well
- descendent.parent = None # FIXME: Find a way not to change
- # the tree
+ entry = _TreeUndoEntry.from_node(descendent, 0)
+ # Recursively removed nodes will never have any children
+ # in the tree they are being added into. Children will
+ # always be added later as the undo stack is worked
+ # through.
+ # UndoEntry.from_node() is not clever enough enough to
+ # handle this case on its own currently.
+ entry.children_node_uids = []
+ entries.append(entry)
if new_undo:
self.undo_stack.append(entries)
else: