diff options
author | Cykyrios <cykyrios@gmail.com> | 2022-10-01 17:44:33 +0200 |
---|---|---|
committer | Cykyrios <cykyrios@gmail.com> | 2022-10-03 21:23:32 +0200 |
commit | 2237df62734c28c9a1dc3f8c50bf969bd743a126 (patch) | |
tree | d4687be9c1d01bf2a9aace37ca47cd425c9b5705 /scene/main | |
parent | e69b7083d45c5d8698508cce7086d361c4b1f44c (diff) |
Fix invalid popup position for embedded popups
Diffstat (limited to 'scene/main')
-rw-r--r-- | scene/main/window.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 64869b2936..f7099f3765 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -1264,12 +1264,16 @@ 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))) { + Rect2i parent_rect; + if (is_embedded()) { + parent_rect = _get_embedder()->get_visible_rect(); + } else { + int screen_id = DisplayServer::get_singleton()->window_get_current_screen(get_window_id()); + parent_rect = DisplayServer::get_singleton()->screen_get_usable_rect(screen_id); + } + if (parent_rect != Rect2i() && !parent_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); + set_position((parent_rect.size - size) / 2); } _post_popup(); |