diff options
| author | Salanto <62221668+Salanto@users.noreply.github.com> | 2024-07-12 00:06:21 +0200 |
|---|---|---|
| committer | Salanto <62221668+Salanto@users.noreply.github.com> | 2024-07-12 00:06:21 +0200 |
| commit | 8fac2ada62a5256bb0ba563d3e696762cf861a7d (patch) | |
| tree | 7b7fe2fba7ebd784afbbd9a93a6817f97ad1bb2d /src | |
| parent | b882917af845b4d792daafeadccd05e7840d2395 (diff) | |
Harden screen position check against missing monitors
Diffstat (limited to 'src')
| -rw-r--r-- | src/aoapplication.cpp | 14 | ||||
| -rw-r--r-- | src/aoapplication.h | 2 | ||||
| -rw-r--r-- | src/courtroom.cpp | 2 |
3 files changed, 16 insertions, 2 deletions
diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 9abc958c..686c88c0 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 b5d7fb5e..998f3499 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 45fb7d61..39d6ff9e 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()); |
