From a4c3551dc6582a9cfe25655a0119a73a099ea8bc Mon Sep 17 00:00:00 2001 From: kobewi Date: Mon, 23 May 2022 23:00:29 +0200 Subject: [PATCH] Force window position if spawned outside screen --- scene/main/window.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scene/main/window.cpp b/scene/main/window.cpp index cf30ca259d7..73f278bb502 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -1251,6 +1251,15 @@ void Window::popup(const Rect2i &p_screen_rect) { set_transient(true); set_visible(true); + + int screen_id = DisplayServer::get_singleton()->window_get_current_screen(get_window_id()); + Rect2i screen_rect = DisplayServer::get_singleton()->screen_get_usable_rect(screen_id); + if (screen_rect != Rect2i() && !screen_rect.intersects(Rect2i(position, size))) { + ERR_PRINT(vformat("Window %d spawned at invalid position: %s.", get_window_id(), position)); + // Window appeared on unavailable screen area, so force it to the center. + set_position(screen_rect.size / 2 - size / 2); + } + _post_popup(); notification(NOTIFICATION_POST_POPUP); }