Fix duplicate AcceptDialog cancel/confirm events.
This commit is contained in:
parent
be56cab58c
commit
3e691e026b
2 changed files with 19 additions and 1 deletions
|
@ -47,7 +47,7 @@ void AcceptDialog::_input_from_window(const Ref<InputEvent> &p_event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcceptDialog::_parent_focused() {
|
void AcceptDialog::_parent_focused() {
|
||||||
if (!is_exclusive() && get_flag(FLAG_POPUP)) {
|
if (popped_up && !is_exclusive() && get_flag(FLAG_POPUP)) {
|
||||||
_cancel_pressed();
|
_cancel_pressed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,6 +71,7 @@ void AcceptDialog::_notification(int p_what) {
|
||||||
parent_visible->connect(SceneStringName(focus_entered), callable_mp(this, &AcceptDialog::_parent_focused));
|
parent_visible->connect(SceneStringName(focus_entered), callable_mp(this, &AcceptDialog::_parent_focused));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
popped_up = false;
|
||||||
if (parent_visible) {
|
if (parent_visible) {
|
||||||
parent_visible->disconnect(SceneStringName(focus_entered), callable_mp(this, &AcceptDialog::_parent_focused));
|
parent_visible->disconnect(SceneStringName(focus_entered), callable_mp(this, &AcceptDialog::_parent_focused));
|
||||||
parent_visible = nullptr;
|
parent_visible = nullptr;
|
||||||
|
@ -78,6 +79,14 @@ void AcceptDialog::_notification(int p_what) {
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case NOTIFICATION_WM_WINDOW_FOCUS_IN: {
|
||||||
|
if (!is_in_edited_scene_root()) {
|
||||||
|
if (has_focus()) {
|
||||||
|
popped_up = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
case NOTIFICATION_THEME_CHANGED: {
|
case NOTIFICATION_THEME_CHANGED: {
|
||||||
bg_panel->add_theme_style_override("panel", theme_cache.panel_style);
|
bg_panel->add_theme_style_override("panel", theme_cache.panel_style);
|
||||||
|
|
||||||
|
@ -114,8 +123,14 @@ void AcceptDialog::_text_submitted(const String &p_text) {
|
||||||
_ok_pressed();
|
_ok_pressed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AcceptDialog::_post_popup() {
|
||||||
|
Window::_post_popup();
|
||||||
|
popped_up = true;
|
||||||
|
}
|
||||||
|
|
||||||
void AcceptDialog::_ok_pressed() {
|
void AcceptDialog::_ok_pressed() {
|
||||||
if (hide_on_ok) {
|
if (hide_on_ok) {
|
||||||
|
popped_up = false;
|
||||||
set_visible(false);
|
set_visible(false);
|
||||||
}
|
}
|
||||||
ok_pressed();
|
ok_pressed();
|
||||||
|
@ -124,6 +139,7 @@ void AcceptDialog::_ok_pressed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AcceptDialog::_cancel_pressed() {
|
void AcceptDialog::_cancel_pressed() {
|
||||||
|
popped_up = false;
|
||||||
Window *parent_window = parent_visible;
|
Window *parent_window = parent_visible;
|
||||||
if (parent_visible) {
|
if (parent_visible) {
|
||||||
parent_visible->disconnect(SceneStringName(focus_entered), callable_mp(this, &AcceptDialog::_parent_focused));
|
parent_visible->disconnect(SceneStringName(focus_entered), callable_mp(this, &AcceptDialog::_parent_focused));
|
||||||
|
|
|
@ -51,6 +51,7 @@ class AcceptDialog : public Window {
|
||||||
HBoxContainer *buttons_hbox = nullptr;
|
HBoxContainer *buttons_hbox = nullptr;
|
||||||
Button *ok_button = nullptr;
|
Button *ok_button = nullptr;
|
||||||
|
|
||||||
|
bool popped_up = false;
|
||||||
bool hide_on_ok = true;
|
bool hide_on_ok = true;
|
||||||
bool close_on_escape = true;
|
bool close_on_escape = true;
|
||||||
|
|
||||||
|
@ -72,6 +73,7 @@ class AcceptDialog : public Window {
|
||||||
protected:
|
protected:
|
||||||
virtual Size2 _get_contents_minimum_size() const override;
|
virtual Size2 _get_contents_minimum_size() const override;
|
||||||
virtual void _input_from_window(const Ref<InputEvent> &p_event) override;
|
virtual void _input_from_window(const Ref<InputEvent> &p_event) override;
|
||||||
|
virtual void _post_popup() override;
|
||||||
|
|
||||||
void _notification(int p_what);
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
Loading…
Reference in a new issue