fix: add safety checks to path display and tree selection to prevent runtime errors during object destruction

This commit is contained in:
Martin Tranberg
2026-03-31 10:48:55 +02:00
parent dfbef36558
commit 07913c0224

View File

@@ -239,30 +239,37 @@ class SharePointApp(wx.Frame):
self.update_path_display()
def update_path_display(self):
self.path_sizer.Clear(True)
if not self:
return
# Find alle noder fra rod til nuværende selektion
nodes = []
curr = self.tree_ctrl.GetSelection()
while curr.IsOk() and curr != self.tree_root:
nodes.insert(0, curr)
curr = self.tree_ctrl.GetItemParent(curr)
try:
self.path_sizer.Clear(True)
# Start ikon/label
self._add_path_segment("📍 SharePoint", "ROOT")
for node in nodes:
arrow = wx.StaticText(self.path_panel, label=" > ")
arrow.SetForegroundColour(wx.Colour(150, 150, 150))
self.path_sizer.Add(arrow, 0, wx.ALIGN_CENTER_VERTICAL)
# Find alle noder fra rod til nuværende selektion
nodes = []
curr = self.tree_ctrl.GetSelection()
name = self.tree_ctrl.GetItemText(node)
self._add_path_segment(name, node)
while curr.IsOk() and curr != self.tree_root:
nodes.insert(0, curr)
curr = self.tree_ctrl.GetItemParent(curr)
# Start ikon/label
self._add_path_segment("📍 SharePoint", "ROOT")
self.path_panel.Layout()
self.path_panel.Refresh()
self.Layout() # Tving rammen til at opdatere, så stien kommer frem
for node in nodes:
arrow = wx.StaticText(self.path_panel, label=" > ")
arrow.SetForegroundColour(wx.Colour(150, 150, 150))
self.path_sizer.Add(arrow, 0, wx.ALIGN_CENTER_VERTICAL)
name = self.tree_ctrl.GetItemText(node)
self._add_path_segment(name, node)
self.path_panel.Layout()
self.path_panel.Refresh()
self.Layout() # Tving rammen til at opdatere, så stien kommer frem
except RuntimeError:
# Sker oftest ved lukning hvor objekter er slettet
pass
def _add_path_segment(self, label, node):
btn = wx.Button(self.path_panel, label=label, style=wx.BU_EXACTFIT | wx.BORDER_NONE)
@@ -429,7 +436,8 @@ class SharePointApp(wx.Frame):
return
self.current_path = data["path"]
self.update_path_display()
if self:
self.update_path_display()
if not self.is_navigating_back:
self.history.append(item)
@@ -518,6 +526,9 @@ class SharePointApp(wx.Frame):
def _sync_tree_selection(self, target_id):
selected = self.tree_ctrl.GetSelection()
if not selected.IsOk():
selected = self.tree_root
if selected.IsOk():
data = self.tree_item_data.get(selected)
if data and not data.get("loaded"):