popup deferred hide suppressed if reopened

popup no longer tries to close itself a second time
popup no longer closes after having been reopened
fixed bug in RenameDialog not calling base (by inspection)
fixes #59181
fixes #60921
reverts #59287
This commit is contained in:
derammo 2022-05-13 08:22:29 -04:00
parent 677b63d765
commit 47d0dc8a41
4 changed files with 26 additions and 2 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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 {

View File

@ -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();