diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 26dbe1cb0cf..bd549a6e4a0 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -40,7 +40,7 @@ Size2 SpinBox::get_minimum_size() const { return ms; } -void SpinBox::_update_text() { +void SpinBox::_update_text(bool p_keep_line_edit) { String value = String::num(get_value(), Math::range_step_decimals(get_step())); if (is_localizing_numeral_system()) { value = TS->format_number(value); @@ -55,7 +55,12 @@ void SpinBox::_update_text() { } } + if (p_keep_line_edit && value == last_updated_text && value != line_edit->get_text()) { + return; + } + line_edit->set_text_with_selection(value); + last_updated_text = value; } void SpinBox::_text_submitted(const String &p_string) { @@ -245,7 +250,7 @@ inline void SpinBox::_adjust_width_for_icon(const Ref &icon) { void SpinBox::_notification(int p_what) { switch (p_what) { case NOTIFICATION_DRAW: { - _update_text(); + _update_text(true); _adjust_width_for_icon(theme_cache.updown_icon); RID ci = get_canvas_item(); diff --git a/scene/gui/spin_box.h b/scene/gui/spin_box.h index bbb1db637ac..4d49626d71d 100644 --- a/scene/gui/spin_box.h +++ b/scene/gui/spin_box.h @@ -46,12 +46,13 @@ class SpinBox : public Range { void _range_click_timeout(); void _release_mouse(); - void _update_text(); + void _update_text(bool p_keep_line_edit = false); void _text_submitted(const String &p_string); void _text_changed(const String &p_string); String prefix; String suffix; + String last_updated_text; double custom_arrow_step = 0.0; void _line_edit_input(const Ref &p_event);