From fec2a7db01efbc3b8ea312b4dae459b3ac14544d Mon Sep 17 00:00:00 2001
From: Chris Meyer <34664+cmeyer@users.noreply.github.com>
Date: Fri, 31 Jan 2025 09:08:12 -0800
Subject: [PATCH] Fix #1324. Inspector now shows selected data panel item.

---
 nion/swift/DataPanel.py           | 16 ++++------------
 nion/swift/test/DataPanel_test.py | 12 ++++++------
 2 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/nion/swift/DataPanel.py b/nion/swift/DataPanel.py
index 213b9bbf..e7b71f81 100644
--- a/nion/swift/DataPanel.py
+++ b/nion/swift/DataPanel.py
@@ -679,8 +679,6 @@ def unmap_display_item_to_display_item_adapter(display_item_adapter: DisplayItem
 
         self.__selection = self.document_controller.selection
 
-        self.__focused = False
-
         def selection_changed() -> None:
             # called when the selection changes; notify selected display item changed if focused.
             self.__notify_focus_changed()
@@ -688,7 +686,7 @@ def selection_changed() -> None:
         self.__selection_changed_event_listener = self.__selection.changed_event.listen(selection_changed)
 
         def focus_changed(focused: bool) -> None:
-            self.focused = focused
+            self.__notify_focus_changed()
 
         def delete_display_item_adapters(display_item_adapters: typing.List[DisplayItemAdapter]) -> None:
             document_controller.delete_display_items([display_item_adapter.display_item for display_item_adapter in display_item_adapters if display_item_adapter.display_item])
@@ -885,14 +883,8 @@ def __notify_focus_changed(self) -> None:
         # this is called when the keyboard focus for the data panel is changed.
         # if we are receiving focus, tell the window (document_controller) that
         # we now have the focus.
-        if self.__focused:
+        if self._data_list_widget.focused or self._data_grid_widget.focused:
             self.document_controller.data_panel_focused()
 
-    @property
-    def focused(self) -> bool:
-        return self.__focused
-
-    @focused.setter
-    def focused(self, value: bool) -> None:
-        self.__focused = value
-        self.__notify_focus_changed()
+    def _request_focus_for_test(self) -> None:
+        self._data_list_widget.focused = True
diff --git a/nion/swift/test/DataPanel_test.py b/nion/swift/test/DataPanel_test.py
index 9cc97db7..edbc2738 100644
--- a/nion/swift/test/DataPanel_test.py
+++ b/nion/swift/test/DataPanel_test.py
@@ -183,7 +183,7 @@ def test_selected_group_persistence(self):
             document_model.append_data_group(data_group2)
             data_panel = document_controller.find_dock_panel("data-panel")
             project_panel = document_controller.find_dock_panel("collections-panel")
-            data_panel.focused = True
+            data_panel._request_focus_for_test()
             self.assertSetEqual({0}, project_panel._collection_selection.indexes)
             self.assertEqual(document_controller.selection.indexes, set())
             document_controller.select_data_group_in_data_panel(data_group=data_group1, data_item=data_item1)
@@ -236,7 +236,7 @@ def test_data_panel_updates_focused_data_item_when_single_item_selected_when_foc
             document_model.append_data_item(DataItem.DataItem(numpy.zeros((2, 2))))
             document_model.append_data_item(DataItem.DataItem(numpy.zeros((2, 2))))
             data_panel = document_controller.find_dock_panel("data-panel")
-            data_panel.focused = True
+            data_panel._request_focus_for_test()
             document_controller.select_data_item_in_data_panel(document_model.data_items[0])
             self.assertEqual(document_model.data_items[0], document_controller.selected_data_item)
             document_controller.select_data_item_in_data_panel(document_model.data_items[1])
@@ -249,7 +249,7 @@ def test_data_panel_clears_selected_data_item_when_multiple_items_selected_when_
             document_model.append_data_item(DataItem.DataItem(numpy.zeros((2, 2))))
             document_model.append_data_item(DataItem.DataItem(numpy.zeros((2, 2))))
             data_panel = document_controller.find_dock_panel("data-panel")
-            data_panel.focused = True
+            data_panel._request_focus_for_test()
             document_controller.select_data_item_in_data_panel(document_model.data_items[0])
             self.assertEqual(document_model.data_items[0], document_controller.selected_data_item)
             document_controller.select_data_items_in_data_panel(document_model.data_items)
@@ -262,7 +262,7 @@ def test_data_panel_clears_selected_data_item_when_clearing_selection_when_focus
             document_model.append_data_item(DataItem.DataItem(numpy.zeros((2, 2))))
             document_model.append_data_item(DataItem.DataItem(numpy.zeros((2, 2))))
             data_panel = document_controller.find_dock_panel("data-panel")
-            data_panel.focused = True
+            data_panel._request_focus_for_test()
             document_controller.select_data_item_in_data_panel(document_model.data_items[0])
             self.assertEqual(document_model.data_items[0], document_controller.selected_data_item)
             document_controller.select_data_items_in_data_panel([])
@@ -283,7 +283,7 @@ def test_selection_during_operations(self):
             document_model.append_data_item(data_item2)
             # finished setting up
             data_panel = document_controller.find_dock_panel("data-panel")
-            data_panel.focused = True
+            data_panel._request_focus_for_test()
             document_controller.select_data_item_in_data_panel(data_item=data_item1)
             # make sure our preconditions are right
             self.assertEqual(document_controller.selected_data_item, data_item1)
@@ -427,7 +427,7 @@ def test_select_after_receive_files(self):
             data_item.title = "data_item"
             document_model.append_data_item(data_item)
             data_panel = document_controller.find_dock_panel("data-panel")
-            data_panel.focused = True
+            data_panel._request_focus_for_test()
             self.assertIsNone(document_controller.selected_display_item)
             document_controller.receive_files([pathlib.Path(":/app/scroll_gem.png")], index=0)
             document_controller.periodic()