From e42c4d3174321c1fecd0a3b5ef376c753d891289 Mon Sep 17 00:00:00 2001 From: SuperDude88 <82904174+SuperDude88@users.noreply.github.com> Date: Fri, 8 May 2026 23:19:48 -0400 Subject: [PATCH] Number Button Fix - Add `is_editing` helper to BaseStringButton - Block left/right input from changing number while typing Resolves #706 --- src/dusk/ui/number_button.cpp | 4 ++-- src/dusk/ui/string_button.cpp | 10 +++++----- src/dusk/ui/string_button.hpp | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/dusk/ui/number_button.cpp b/src/dusk/ui/number_button.cpp index ab5095cf3f..3735855140 100644 --- a/src/dusk/ui/number_button.cpp +++ b/src/dusk/ui/number_button.cpp @@ -54,7 +54,7 @@ void NumberButton::set_value(Rml::String value) { } bool NumberButton::handle_nav_command(NavCommand cmd) { - if (cmd == NavCommand::Left || cmd == NavCommand::Right) { + if (!is_editing() && (cmd == NavCommand::Left || cmd == NavCommand::Right)) { const int newValue = std::clamp( mGetValue() + (cmd == NavCommand::Right ? mStep : -mStep), mMin, mMax); if (newValue != mGetValue()) { @@ -66,4 +66,4 @@ bool NumberButton::handle_nav_command(NavCommand cmd) { return BaseStringButton::handle_nav_command(cmd); } -} // namespace dusk::ui \ No newline at end of file +} // namespace dusk::ui diff --git a/src/dusk/ui/string_button.cpp b/src/dusk/ui/string_button.cpp index a267e5b0e0..7210e87803 100644 --- a/src/dusk/ui/string_button.cpp +++ b/src/dusk/ui/string_button.cpp @@ -24,7 +24,7 @@ void BaseStringButton::update() { } void BaseStringButton::start_editing() { - if (mInputElem != nullptr) { + if (is_editing()) { return; } @@ -79,14 +79,14 @@ void BaseStringButton::request_stop_editing(bool commit, bool refocusRoot) { bool BaseStringButton::handle_nav_command(NavCommand cmd) { if (cmd == NavCommand::Confirm) { - if (mInputElem == nullptr) { + if (!is_editing()) { start_editing(); } else { request_stop_editing(true, true); } return true; } else if (cmd == NavCommand::Cancel) { - if (mInputElem != nullptr) { + if (is_editing()) { request_stop_editing(false, true); return true; } @@ -95,7 +95,7 @@ bool BaseStringButton::handle_nav_command(NavCommand cmd) { } void BaseStringButton::focus_input() { - if (mInputElem == nullptr) { + if (!is_editing()) { return; } @@ -111,7 +111,7 @@ void BaseStringButton::focus_input() { void BaseStringButton::stop_editing(bool commit, bool refocusRoot) { mPendingStopEditing = false; mPendingInputFocusFrames = 0; - if (mInputElem == nullptr) { + if (!is_editing()) { return; } if (commit) { diff --git a/src/dusk/ui/string_button.hpp b/src/dusk/ui/string_button.hpp index d84b977f37..94f2cebcbe 100644 --- a/src/dusk/ui/string_button.hpp +++ b/src/dusk/ui/string_button.hpp @@ -20,6 +20,7 @@ public: void request_stop_editing(bool commit, bool refocusRoot); protected: + bool is_editing() { return mInputElem != nullptr; } bool handle_nav_command(NavCommand cmd) override; virtual void set_value(Rml::String value) = 0; virtual Rml::String input_value() { return format_value(); }