summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-09-26 15:51:22 +0200
committerRémi Verschelde <rverschelde@gmail.com>2022-09-26 15:51:22 +0200
commit6fcf2a2862ee406873aebd0bd8afcd99ed45564b (patch)
treea84f6217b52953268ec3198acc87e324b82406e8
parent9cc4511031a2a522088b5a45ac7b770cc8e7c67c (diff)
parenta4c3551dc6582a9cfe25655a0119a73a099ea8bc (diff)
Merge pull request #61336 from KoBeWi/where_are_you_going
Force window position if spawned outside screen
-rw-r--r--scene/main/window.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/scene/main/window.cpp b/scene/main/window.cpp
index cf30ca259d..73f278bb50 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);
}