From 07913c0224e9a57933444455f458f9d128706f88 Mon Sep 17 00:00:00 2001 From: Martin Tranberg Date: Tue, 31 Mar 2026 10:48:55 +0200 Subject: [PATCH] fix: add safety checks to path display and tree selection to prevent runtime errors during object destruction --- sharepoint_browser.py | 53 ++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/sharepoint_browser.py b/sharepoint_browser.py index d247847..48d221e 100644 --- a/sharepoint_browser.py +++ b/sharepoint_browser.py @@ -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"):