Harden screen position check against missing monitors

This commit is contained in:
Salanto 2024-07-12 00:06:21 +02:00
parent b882917af8
commit 8fac2ada62
3 changed files with 16 additions and 2 deletions

View File

@ -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()
{

View File

@ -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);

View File

@ -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());