Persist window geometry on close.

Re-opens the window in the configuration it was in (size, maximized,
correct display, etc) when it was closed.
This commit is contained in:
Dan Albert 2022-02-28 18:08:40 -08:00
parent 155f9d4052
commit c628695a4e

View File

@ -3,7 +3,7 @@ import traceback
import webbrowser import webbrowser
from typing import Optional from typing import Optional
from PySide2.QtCore import Qt from PySide2.QtCore import QSettings, Qt
from PySide2.QtGui import QCloseEvent, QIcon from PySide2.QtGui import QCloseEvent, QIcon
from PySide2.QtWidgets import ( from PySide2.QtWidgets import (
QAction, QAction,
@ -72,10 +72,15 @@ class QLiberationWindow(QMainWindow):
self.initMenuBar() self.initMenuBar()
self.connectSignals() self.connectSignals()
# Default to maximized on the main display if we don't have any persistent
# configuration.
screen = QDesktopWidget().screenGeometry() screen = QDesktopWidget().screenGeometry()
self.setGeometry(0, 0, screen.width(), screen.height()) self.setGeometry(0, 0, screen.width(), screen.height())
self.setWindowState(Qt.WindowMaximized) self.setWindowState(Qt.WindowMaximized)
# But override it with the saved configuration if it exists.
self._restore_window_geometry()
if self.game is None: if self.game is None:
last_save_file = liberation_install.get_last_save_file() last_save_file = liberation_install.get_last_save_file()
if last_save_file: if last_save_file:
@ -412,6 +417,19 @@ class QLiberationWindow(QMainWindow):
self.debriefing = QDebriefingWindow(debrief) self.debriefing = QDebriefingWindow(debrief)
self.debriefing.show() 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: def closeEvent(self, event: QCloseEvent) -> None:
result = QMessageBox.question( result = QMessageBox.question(
self, self,
@ -420,6 +438,7 @@ class QLiberationWindow(QMainWindow):
QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes | QMessageBox.No,
) )
if result == QMessageBox.Yes: if result == QMessageBox.Yes:
self._save_window_geometry()
super().closeEvent(event) super().closeEvent(event)
self.dialog = None self.dialog = None
else: else: