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

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