diff options
Diffstat (limited to 'scene/main/window.cpp')
-rw-r--r-- | scene/main/window.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 44df648552..9092be93e6 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -569,6 +569,12 @@ void Window::_update_from_window() { void Window::_clear_window() { ERR_FAIL_COND(window_id == DisplayServer::INVALID_WINDOW_ID); + DisplayServer::get_singleton()->window_set_rect_changed_callback(Callable(), window_id); + DisplayServer::get_singleton()->window_set_window_event_callback(Callable(), window_id); + DisplayServer::get_singleton()->window_set_input_event_callback(Callable(), window_id); + DisplayServer::get_singleton()->window_set_input_text_callback(Callable(), window_id); + DisplayServer::get_singleton()->window_set_drop_files_callback(Callable(), window_id); + if (transient_parent && transient_parent->window_id != DisplayServer::INVALID_WINDOW_ID) { DisplayServer::get_singleton()->window_set_transient(window_id, DisplayServer::INVALID_WINDOW_ID); } @@ -1422,6 +1428,9 @@ void Window::popup_centered_clamped(const Size2i &p_size, float p_fallback_ratio ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); + // Consider the current size when calling with the default value. + Size2i expected_size = p_size == Size2i() ? size : p_size; + Rect2 parent_rect; if (is_embedded()) { @@ -1436,7 +1445,7 @@ void Window::popup_centered_clamped(const Size2i &p_size, float p_fallback_ratio Vector2i size_ratio = parent_rect.size * p_fallback_ratio; Rect2i popup_rect; - popup_rect.size = Vector2i(MIN(size_ratio.x, p_size.x), MIN(size_ratio.y, p_size.y)); + popup_rect.size = Vector2i(MIN(size_ratio.x, expected_size.x), MIN(size_ratio.y, expected_size.y)); popup_rect.size = _clamp_window_size(popup_rect.size); if (parent_rect != Rect2()) { @@ -1450,6 +1459,9 @@ void Window::popup_centered(const Size2i &p_minsize) { ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); + // Consider the current size when calling with the default value. + Size2i expected_size = p_minsize == Size2i() ? size : p_minsize; + Rect2 parent_rect; if (is_embedded()) { @@ -1462,7 +1474,7 @@ void Window::popup_centered(const Size2i &p_minsize) { } Rect2i popup_rect; - popup_rect.size = _clamp_window_size(p_minsize); + popup_rect.size = _clamp_window_size(expected_size); if (parent_rect != Rect2()) { popup_rect.position = parent_rect.position + (parent_rect.size - popup_rect.size) / 2; |