diff --git a/src/duckstation-qt/mainwindow.cpp b/src/duckstation-qt/mainwindow.cpp index 9aff7d1cb..015c673c6 100644 --- a/src/duckstation-qt/mainwindow.cpp +++ b/src/duckstation-qt/mainwindow.cpp @@ -97,6 +97,7 @@ QtDisplayWidget* MainWindow::createDisplay(QThread* worker_thread, const QString } else if (!render_to_main) { + restoreDisplayWindowGeometryFromConfig(); m_display_widget->showNormal(); } else @@ -149,6 +150,7 @@ QtDisplayWidget* MainWindow::updateDisplay(QThread* worker_thread, bool fullscre } else if (!render_to_main) { + restoreDisplayWindowGeometryFromConfig(); m_display_widget->showNormal(); } else @@ -195,6 +197,10 @@ void MainWindow::destroyDisplayWidget() switchToGameListView(); m_ui.mainContainer->removeWidget(m_display_widget); } + else if (!m_display_widget->isFullScreen()) + { + saveDisplayWindowGeometryToConfig(); + } delete m_display_widget; m_display_widget = nullptr; @@ -943,6 +949,23 @@ void MainWindow::restoreStateFromConfig() } } +void MainWindow::saveDisplayWindowGeometryToConfig() +{ + const QByteArray geometry = m_display_widget->saveGeometry(); + const QByteArray geometry_b64 = geometry.toBase64(); + const std::string old_geometry_b64 = m_host_interface->GetStringSettingValue("UI", "DisplayWindowGeometry"); + if (old_geometry_b64 != geometry_b64.constData()) + m_host_interface->SetStringSettingValue("UI", "DisplayWindowGeometry", geometry_b64.constData()); +} + +void MainWindow::restoreDisplayWindowGeometryFromConfig() +{ + const std::string geometry_b64 = m_host_interface->GetStringSettingValue("UI", "DisplayWindowGeometry"); + const QByteArray geometry = QByteArray::fromBase64(QByteArray::fromStdString(geometry_b64)); + if (!geometry.isEmpty()) + m_display_widget->restoreGeometry(geometry); +} + SettingsDialog* MainWindow::getSettingsDialog() { if (!m_settings_dialog) diff --git a/src/duckstation-qt/mainwindow.h b/src/duckstation-qt/mainwindow.h index d39bd5903..07c0a4dd8 100644 --- a/src/duckstation-qt/mainwindow.h +++ b/src/duckstation-qt/mainwindow.h @@ -98,6 +98,8 @@ private: void switchToEmulationView(); void saveStateToConfig(); void restoreStateFromConfig(); + void saveDisplayWindowGeometryToConfig(); + void restoreDisplayWindowGeometryFromConfig(); void destroyDisplayWidget(); SettingsDialog* getSettingsDialog(); void doSettings(SettingsDialog::Category category = SettingsDialog::Category::Count);