From 8fac2ada62a5256bb0ba563d3e696762cf861a7d Mon Sep 17 00:00:00 2001 From: Salanto <62221668+Salanto@users.noreply.github.com> Date: Fri, 12 Jul 2024 00:06:21 +0200 Subject: [PATCH] Harden screen position check against missing monitors --- src/aoapplication.cpp | 14 +++++++++++++- src/aoapplication.h | 2 ++ src/courtroom.cpp | 2 +- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 9abc958..686c88c 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -52,7 +52,7 @@ void AOApplication::construct_lobby() w_lobby = new Lobby(this, net_manager); auto point = Options::getInstance().windowPosition("lobby"); - if (!Options::getInstance().restoreWindowPositionEnabled() || !point.has_value()) + if (!Options::getInstance().restoreWindowPositionEnabled() || !point.has_value() || !pointExistsOnScreen(point.value())) { QRect geometry = QGuiApplication::primaryScreen()->geometry(); int x = (geometry.width() - w_lobby->width()) / 2; @@ -233,6 +233,18 @@ void AOApplication::initBASS() } } +bool AOApplication::pointExistsOnScreen(QPoint point) +{ + for (QScreen *screen : QApplication::screens()) + { + if (screen->availableGeometry().contains(point)) + { + return true; + } + } + return false; +} + #if (defined(_WIN32) || defined(_WIN64)) void AOApplication::load_bass_plugins() { diff --git a/src/aoapplication.h b/src/aoapplication.h index b5d7fb5..998f349 100644 --- a/src/aoapplication.h +++ b/src/aoapplication.h @@ -325,6 +325,8 @@ public: // The file name of the log file in base/logs. QString log_filename; + bool pointExistsOnScreen(QPoint point); + void initBASS(); static void load_bass_plugins(); static void CALLBACK BASSreset(HSTREAM handle, DWORD channel, DWORD data, void *user); diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 45fb7d6..39d6ff9 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -1373,7 +1373,7 @@ void Courtroom::done_received() if (Options::getInstance().restoreWindowPositionEnabled()) { auto maybe_point = Options::getInstance().windowPosition("courtroom"); - if (maybe_point.has_value()) + if (maybe_point.has_value() && ao_app->pointExistsOnScreen(maybe_point.value())) { qDebug() << maybe_point.value(); QMainWindow::move(maybe_point.value());