diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp index a310feba20f..d69ab4c9cb8 100644 --- a/scene/gui/base_button.cpp +++ b/scene/gui/base_button.cpp @@ -114,6 +114,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: @@ -146,9 +151,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")); } @@ -175,9 +181,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 8405acb21db..e15539208b4 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;