Revert "Fix focusloss of non-exclusive `AcceptDialog` with `close_on_escape`"

This reverts commit 7f547fcf09.

(cherry picked from commit bfa7497c1b)
This commit is contained in:
Markus Sauermann 2023-07-06 01:04:16 +02:00 committed by Yuri Sizov
parent 71d5827228
commit 0ec599473d
2 changed files with 35 additions and 3 deletions

View File

@ -44,6 +44,12 @@ void AcceptDialog::_input_from_window(const Ref<InputEvent> &p_event) {
} }
} }
void AcceptDialog::_parent_focused() {
if (close_on_escape && !is_exclusive()) {
_cancel_pressed();
}
}
void AcceptDialog::_update_theme_item_cache() { void AcceptDialog::_update_theme_item_cache() {
Window::_update_theme_item_cache(); Window::_update_theme_item_cache();
@ -64,6 +70,16 @@ void AcceptDialog::_notification(int p_what) {
get_ok_button()->grab_focus(); get_ok_button()->grab_focus();
} }
_update_child_rects(); _update_child_rects();
parent_visible = get_parent_visible_window();
if (parent_visible) {
parent_visible->connect("focus_entered", callable_mp(this, &AcceptDialog::_parent_focused));
}
} else {
if (parent_visible) {
parent_visible->disconnect("focus_entered", callable_mp(this, &AcceptDialog::_parent_focused));
parent_visible = nullptr;
}
} }
} break; } break;
@ -76,9 +92,10 @@ void AcceptDialog::_notification(int p_what) {
} }
} break; } break;
case NOTIFICATION_WM_WINDOW_FOCUS_OUT: { case NOTIFICATION_EXIT_TREE: {
if (close_on_escape && !is_exclusive()) { if (parent_visible) {
_cancel_pressed(); parent_visible->disconnect("focus_entered", callable_mp(this, &AcceptDialog::_parent_focused));
parent_visible = nullptr;
} }
} break; } break;
@ -112,9 +129,21 @@ void AcceptDialog::_ok_pressed() {
} }
void AcceptDialog::_cancel_pressed() { void AcceptDialog::_cancel_pressed() {
Window *parent_window = parent_visible;
if (parent_visible) {
parent_visible->disconnect("focus_entered", callable_mp(this, &AcceptDialog::_parent_focused));
parent_visible = nullptr;
}
call_deferred(SNAME("hide")); call_deferred(SNAME("hide"));
emit_signal(SNAME("canceled")); emit_signal(SNAME("canceled"));
cancel_pressed(); cancel_pressed();
if (parent_window) {
//parent_window->grab_focus();
}
set_input_as_handled(); set_input_as_handled();
} }

View File

@ -44,6 +44,8 @@ class LineEdit;
class AcceptDialog : public Window { class AcceptDialog : public Window {
GDCLASS(AcceptDialog, Window); GDCLASS(AcceptDialog, Window);
Window *parent_visible = nullptr;
Panel *bg_panel = nullptr; Panel *bg_panel = nullptr;
Label *message_label = nullptr; Label *message_label = nullptr;
HBoxContainer *buttons_hbox = nullptr; HBoxContainer *buttons_hbox = nullptr;
@ -63,6 +65,7 @@ class AcceptDialog : public Window {
static bool swap_cancel_ok; static bool swap_cancel_ok;
void _input_from_window(const Ref<InputEvent> &p_event); void _input_from_window(const Ref<InputEvent> &p_event);
void _parent_focused();
protected: protected:
virtual Size2 _get_contents_minimum_size() const override; virtual Size2 _get_contents_minimum_size() const override;