Browse Source

Merge pull request #66712 from Cykyrios/fix-invalid-popup-position

Fix invalid popup position for embedded popups
Rémi Verschelde 2 years ago
parent
commit
1c6e8f7e62
1 changed files with 9 additions and 5 deletions
  1. 9 5
      scene/main/window.cpp

+ 9 - 5
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();