Skip to content

Commit

Permalink
Merge pull request #79084 from Sauermann/revert-78363
Browse files Browse the repository at this point in the history
Revert "Fix focusloss of non-exclusive `AcceptDialog` with `close_on_escape`"
  • Loading branch information
akien-mga committed Jul 7, 2023
2 parents 5d23586 + bfa7497 commit 26cde77
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
35 changes: 32 additions & 3 deletions scene/gui/dialogs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Window::_update_theme_item_cache();

Expand All @@ -64,6 +70,16 @@ void AcceptDialog::_notification(int p_what) {
get_ok_button()->grab_focus();
}
_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;

Expand All @@ -76,9 +92,10 @@ void AcceptDialog::_notification(int p_what) {
}
} break;

case NOTIFICATION_WM_WINDOW_FOCUS_OUT: {
if (close_on_escape && !is_exclusive()) {
_cancel_pressed();
case NOTIFICATION_EXIT_TREE: {
if (parent_visible) {
parent_visible->disconnect("focus_entered", callable_mp(this, &AcceptDialog::_parent_focused));
parent_visible = nullptr;
}
} break;

Expand Down Expand Up @@ -112,9 +129,21 @@ void AcceptDialog::_ok_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"));

emit_signal(SNAME("canceled"));

cancel_pressed();

if (parent_window) {
//parent_window->grab_focus();
}
set_input_as_handled();
}

Expand Down
3 changes: 3 additions & 0 deletions scene/gui/dialogs.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ class LineEdit;
class AcceptDialog : public Window {
GDCLASS(AcceptDialog, Window);

Window *parent_visible = nullptr;

Panel *bg_panel = nullptr;
Label *message_label = nullptr;
HBoxContainer *buttons_hbox = nullptr;
Expand All @@ -63,6 +65,7 @@ class AcceptDialog : public Window {
static bool swap_cancel_ok;

void _input_from_window(const Ref<InputEvent> &p_event);
void _parent_focused();

protected:
virtual Size2 _get_contents_minimum_size() const override;
Expand Down

0 comments on commit 26cde77

Please sign in to comment.