Skip to content

Commit 739c36f

Browse files
committed
Minimization restores (almost) perfectly previous view.
1 parent e3ff942 commit 739c36f

1 file changed

Lines changed: 35 additions & 6 deletions

File tree

src/petab_gui/views/main_view.py

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import copy
44

5-
from PySide6.QtCore import QSettings, Qt
5+
from PySide6.QtCore import QEvent, QSettings, Qt, QTimer
66
from PySide6.QtWidgets import (
77
QDockWidget,
88
QMainWindow,
@@ -35,6 +35,8 @@
3535

3636

3737
class MainWindow(QMainWindow):
38+
DATA_TAB_INDEX = 0 # Index of the Data Tables tab
39+
3840
def __init__(self):
3941
super().__init__()
4042

@@ -131,13 +133,16 @@ def __init__(self):
131133

132134
self.find_replace_bar = None
133135

136+
# Track if we're in a minimize/restore cycle
137+
self._was_minimized = False
138+
134139
def default_view(self):
135140
"""Reset the view to a fixed 3x2 grid using manual geometry."""
136141
if hasattr(self, "dock_visibility"):
137142
for dock in self.dock_visibility:
138143
dock.setParent(None) # fully remove from layout
139144

140-
self.tab_widget.setCurrentIndex(0)
145+
self.tab_widget.setCurrentIndex(self.DATA_TAB_INDEX)
141146
self.data_tab.updateGeometry()
142147
self.data_tab.repaint()
143148

@@ -228,17 +233,41 @@ def add_menu_action(self, dock_widget, name):
228233

229234
def save_dock_visibility(self, visible):
230235
"""Save the visibility status of a QDockWidget when it changes."""
236+
# Don't save visibility when window is minimized - Qt hides docks automatically
237+
if self.isMinimized():
238+
return
231239
# if current tab is not the data tab return
232-
if self.tab_widget.currentIndex() != 0:
240+
if self.tab_widget.currentIndex() != self.DATA_TAB_INDEX:
233241
return
234242
dock = self.sender() # Get the QDockWidget that emitted the signal
235243
self.dock_visibility[dock] = dock.isVisible()
236244

237245
def set_docks_visible(self, index):
238246
"""Set all QDockWidgets to their previous visibility on tab-change."""
239-
if index != 0: # Another tab is selected
240-
for dock, visible in self.dock_visibility.items():
241-
dock.setVisible(visible)
247+
if index != self.DATA_TAB_INDEX: # Another tab is selected
248+
self._apply_dock_visibility()
249+
250+
def _apply_dock_visibility(self):
251+
"""Apply saved visibility state to all docks."""
252+
for dock, visible in self.dock_visibility.items():
253+
dock.setVisible(visible)
254+
255+
def changeEvent(self, event):
256+
"""Handle window state changes, including minimize/restore."""
257+
super().changeEvent(event)
258+
259+
if event.type() != QEvent.Type.WindowStateChange:
260+
return
261+
262+
if self.isMinimized():
263+
self._was_minimized = True
264+
elif (
265+
self._was_minimized
266+
and self.tab_widget.currentIndex() == self.DATA_TAB_INDEX
267+
):
268+
# Short delay to not create a segmentation fault.
269+
QTimer.singleShot(50, self._apply_dock_visibility)
270+
self._was_minimized = False
242271

243272
def closeEvent(self, event):
244273
"""Override the closeEvent to emit additional signal."""

0 commit comments

Comments
 (0)