diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index 34f5095493..85aa90cfee 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -115,6 +115,11 @@ void BaseButton::_notification(int p_what) { } else if (status.hovering) { queue_redraw(); } + + if (status.pressed_down_with_focus) { + status.pressed_down_with_focus = false; + emit_signal(SNAME("button_up")); + } } break; case NOTIFICATION_VISIBILITY_CHANGED: @@ -147,9 +152,10 @@ void BaseButton::_toggled(bool p_pressed) { void BaseButton::on_action_event(Ref p_event) { Ref mouse_button = p_event; - if (p_event->is_pressed() && (mouse_button.is_null() || status.hovering)) { + if (!status.pressed_down_with_focus && p_event->is_pressed() && (mouse_button.is_null() || status.hovering)) { status.press_attempt = true; status.pressing_inside = true; + status.pressed_down_with_focus = true; emit_signal(SNAME("button_down")); } @@ -176,9 +182,10 @@ void BaseButton::on_action_event(Ref p_event) { } } - if (!p_event->is_pressed()) { + if (status.pressed_down_with_focus && !p_event->is_pressed()) { status.press_attempt = false; status.pressing_inside = false; + status.pressed_down_with_focus = false; emit_signal(SNAME("button_up")); } diff --git a/scene/gui/base_button.h b/scene/gui/base_button.h index 8405acb21d..e15539208b 100644 --- a/scene/gui/base_button.h +++ b/scene/gui/base_button.h @@ -61,7 +61,7 @@ private: bool hovering = false; bool press_attempt = false; bool pressing_inside = false; - + bool pressed_down_with_focus = false; bool disabled = false; } status;