aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSalanto <62221668+Salanto@users.noreply.github.com>2024-07-12 00:06:21 +0200
committerSalanto <62221668+Salanto@users.noreply.github.com>2024-07-12 00:06:21 +0200
commit8fac2ada62a5256bb0ba563d3e696762cf861a7d (patch)
tree7b7fe2fba7ebd784afbbd9a93a6817f97ad1bb2d /src
parentb882917af845b4d792daafeadccd05e7840d2395 (diff)
Harden screen position check against missing monitors
Diffstat (limited to 'src')
-rw-r--r--src/aoapplication.cpp14
-rw-r--r--src/aoapplication.h2
-rw-r--r--src/courtroom.cpp2
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());