From c628695a4e42ff7346dd7aab9f06075e6534ecc2 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Mon, 28 Feb 2022 18:08:40 -0800 Subject: [PATCH] Persist window geometry on close. Re-opens the window in the configuration it was in (size, maximized, correct display, etc) when it was closed. --- qt_ui/windows/QLiberationWindow.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/qt_ui/windows/QLiberationWindow.py b/qt_ui/windows/QLiberationWindow.py index eb22d0d5..142da325 100644 --- a/qt_ui/windows/QLiberationWindow.py +++ b/qt_ui/windows/QLiberationWindow.py @@ -3,7 +3,7 @@ import traceback import webbrowser from typing import Optional -from PySide2.QtCore import Qt +from PySide2.QtCore import QSettings, Qt from PySide2.QtGui import QCloseEvent, QIcon from PySide2.QtWidgets import ( QAction, @@ -72,10 +72,15 @@ class QLiberationWindow(QMainWindow): self.initMenuBar() self.connectSignals() + # Default to maximized on the main display if we don't have any persistent + # configuration. screen = QDesktopWidget().screenGeometry() self.setGeometry(0, 0, screen.width(), screen.height()) self.setWindowState(Qt.WindowMaximized) + # But override it with the saved configuration if it exists. + self._restore_window_geometry() + if self.game is None: last_save_file = liberation_install.get_last_save_file() if last_save_file: @@ -412,6 +417,19 @@ class QLiberationWindow(QMainWindow): self.debriefing = QDebriefingWindow(debrief) self.debriefing.show() + def _qsettings(self) -> QSettings: + return QSettings("DCS Liberation", "Qt UI") + + def _restore_window_geometry(self) -> None: + settings = self._qsettings() + self.restoreGeometry(settings.value("geometry")) + self.restoreState(settings.value("windowState")) + + def _save_window_geometry(self) -> None: + settings = self._qsettings() + settings.setValue("geometry", self.saveGeometry()) + settings.setValue("windowState", self.saveState()) + def closeEvent(self, event: QCloseEvent) -> None: result = QMessageBox.question( self, @@ -420,6 +438,7 @@ class QLiberationWindow(QMainWindow): QMessageBox.Yes | QMessageBox.No, ) if result == QMessageBox.Yes: + self._save_window_geometry() super().closeEvent(event) self.dialog = None else: