瀏覽代碼

Merge pull request #61001 from derammo/derammo_popup_conditional_hide

Rémi Verschelde 3 年之前
父節點
當前提交
ccdd85d8e7
共有 4 個文件被更改,包括 26 次插入2 次删除
  1. 2 0
      editor/rename_dialog.cpp
  2. 5 1
      platform/windows/display_server_windows.cpp
  3. 15 1
      scene/gui/popup.cpp
  4. 4 0
      scene/gui/popup.h

+ 2 - 0
editor/rename_dialog.cpp

@@ -356,6 +356,8 @@ void RenameDialog::_update_substitute() {
 }
 
 void RenameDialog::_post_popup() {
+	ConfirmationDialog::_post_popup();
+
 	EditorSelection *editor_selection = EditorNode::get_singleton()->get_editor_selection();
 	preview_node = nullptr;
 

+ 5 - 1
platform/windows/display_server_windows.cpp

@@ -2158,7 +2158,10 @@ void DisplayServerWindows::popup_close(WindowID p_window) {
 		WindowID win_id = E->get();
 		popup_list.erase(E);
 
-		_send_window_event(windows[win_id], DisplayServerWindows::WINDOW_EVENT_CLOSE_REQUEST);
+		if (win_id != p_window) {
+			// Only request close on related windows, not this window.  We are already processing it.
+			_send_window_event(windows[win_id], DisplayServerWindows::WINDOW_EVENT_CLOSE_REQUEST);
+		}
 		E = F;
 	}
 }
@@ -2173,6 +2176,7 @@ LRESULT DisplayServerWindows::MouseProc(int code, WPARAM wParam, LPARAM lParam)
 			case WM_NCRBUTTONDOWN:
 			case WM_NCMBUTTONDOWN:
 			case WM_LBUTTONDOWN:
+			case WM_RBUTTONDOWN:
 			case WM_MBUTTONDOWN: {
 				MOUSEHOOKSTRUCT *ms = (MOUSEHOOKSTRUCT *)lParam;
 				Point2i pos = Point2i(ms->pt.x, ms->pt.y);

+ 15 - 1
scene/gui/popup.cpp

@@ -108,11 +108,25 @@ void Popup::_close_pressed() {
 
 	_deinitialize_visible_parents();
 
-	call_deferred(SNAME("hide"));
+	// Hide after returning to process events, but only if we don't
+	// get popped up in the interim.
+	call_deferred(SNAME("_popup_conditional_hide"));
+}
+
+void Popup::_post_popup() {
+	Window::_post_popup();
+	popped_up = true;
+}
+
+void Popup::_popup_conditional_hide() {
+	if (!popped_up) {
+		hide();
+	}
 }
 
 void Popup::_bind_methods() {
 	ADD_SIGNAL(MethodInfo("popup_hide"));
+	ClassDB::bind_method(D_METHOD("_popup_conditional_hide"), &Popup::_popup_conditional_hide);
 }
 
 Rect2i Popup::_popup_adjust_rect() const {

+ 4 - 0
scene/gui/popup.h

@@ -57,6 +57,10 @@ protected:
 	void _notification(int p_what);
 	static void _bind_methods();
 
+	void _popup_conditional_hide();
+
+	virtual void _post_popup() override;
+
 public:
 	Popup();
 	~Popup();