From 012db280e2706e277a1f22503b83189a144c60cb Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Sun, 14 Aug 2022 12:28:36 +0600 Subject: [PATCH] qt: Remember maximized state of monitor windows if enabled --- src/config.c | 15 +++++++++++++-- src/include/86box/video.h | 1 + src/qt/qt_main.cpp | 8 +++++++- src/qt/qt_mainwindow.cpp | 7 +++++++ src/qt/qt_rendererstack.cpp | 8 ++++++++ src/qt/qt_rendererstack.hpp | 1 + 6 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/config.c b/src/config.c index 768bbe3e4..79fd7433b 100644 --- a/src/config.c +++ b/src/config.c @@ -649,10 +649,14 @@ load_monitor(int monitor_index) if (p == NULL) p = temp; - if (window_remember) + if (window_remember) { sscanf(p, "%i, %i, %i, %i", &monitor_settings[monitor_index].mon_window_x, &monitor_settings[monitor_index].mon_window_y, &monitor_settings[monitor_index].mon_window_w, &monitor_settings[monitor_index].mon_window_h); + monitor_settings[monitor_index].mon_window_maximized = !!config_get_int(cat, "window_maximized", 0); + } else { + monitor_settings[monitor_index].mon_window_maximized = 0; + } } /* Load "Machine" section. */ @@ -2415,8 +2419,15 @@ save_monitor(int monitor_index) monitor_settings[monitor_index].mon_window_w, monitor_settings[monitor_index].mon_window_h); config_set_string(cat, "window_coordinates", temp); - } else + if (monitor_settings[monitor_index].mon_window_maximized != 0) { + config_set_int(cat, "window_maximized", monitor_settings[monitor_index].mon_window_maximized); + } else { + config_delete_var(cat, "window_maximized"); + } + } else { config_delete_var(cat, "window_coordinates"); + config_delete_var(cat, "window_maximized"); + } } /* Save "Machine" section. */ diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 85c95c98d..34cc2cb81 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -124,6 +124,7 @@ typedef struct monitor_settings_t { int mon_window_y; int mon_window_w; int mon_window_h; + int mon_window_maximized; } monitor_settings_t; #define MONITORS_NUM 2 diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index 694a0e5f6..de2fef1bd 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -173,6 +173,7 @@ int main(int argc, char* argv[]) { return 0; } + bool startMaximized = window_remember && monitor_settings[0].mon_window_maximized; fprintf(stderr, "Qt: version %s, platform \"%s\"\n", qVersion(), QApplication::platformName().toUtf8().data()); ProgSettings::loadTranslators(&app); #ifdef Q_OS_WINDOWS @@ -200,7 +201,12 @@ int main(int argc, char* argv[]) { discord_load(); main_window = new MainWindow(); - main_window->show(); + if (startMaximized) { + main_window->showMaximized(); + } else { + main_window->show(); + } + app.installEventFilter(main_window); #ifdef Q_OS_WINDOWS diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index c19dc4f54..0ee5a3161 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -657,6 +657,9 @@ void MainWindow::initRendererMonitorSlot(int monitor_index) monitor_settings[monitor_index].mon_window_w > 2048 ? 2048 : monitor_settings[monitor_index].mon_window_w, monitor_settings[monitor_index].mon_window_h > 2048 ? 2048 : monitor_settings[monitor_index].mon_window_h); } + if (monitor_settings[monitor_index].mon_window_maximized) { + secondaryRenderer->showMaximized(); + } secondaryRenderer->switchRenderer((RendererStack::Renderer)vid_api); } @@ -2070,6 +2073,10 @@ void MainWindow::changeEvent(QEvent* event) } #endif QWidget::changeEvent(event); + if (isVisible()) { + monitor_settings[0].mon_window_maximized = isMaximized(); + config_save(); + } } void MainWindow::on_actionRenderer_options_triggered() diff --git a/src/qt/qt_rendererstack.cpp b/src/qt/qt_rendererstack.cpp index c5ae2b423..6beb37516 100644 --- a/src/qt/qt_rendererstack.cpp +++ b/src/qt/qt_rendererstack.cpp @@ -48,6 +48,7 @@ extern "C" { #include <86box/86box.h> +#include <86box/config.h> #include <86box/mouse.h> #include <86box/plat.h> #include <86box/video.h> @@ -481,3 +482,10 @@ void RendererStack::closeEvent(QCloseEvent* event) main_window->close(); } +void RendererStack::changeEvent(QEvent *event) +{ + if (m_monitor_index != 0 && isVisible()) { + monitor_settings[m_monitor_index].mon_window_maximized = isMaximized(); + config_save(); + } +} diff --git a/src/qt/qt_rendererstack.hpp b/src/qt/qt_rendererstack.hpp index b2eccc84a..4d06ed1cf 100644 --- a/src/qt/qt_rendererstack.hpp +++ b/src/qt/qt_rendererstack.hpp @@ -32,6 +32,7 @@ public: void wheelEvent(QWheelEvent *event) override; void leaveEvent(QEvent *event) override; void closeEvent(QCloseEvent *event) override; + void changeEvent(QEvent* event) override; void resizeEvent(QResizeEvent *event) override { onResize(event->size().width(), event->size().height());