diff options
author | Caolán McNamara <caolanm@redhat.com> | 2023-05-11 16:03:57 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2023-05-14 15:05:02 +0200 |
commit | 6e49eeeb20c035132811dcb3197b3f3cb2ac64f0 (patch) | |
tree | 69248ed18c69d8dc262463fa618a8b708b6a6294 /vcl | |
parent | 5942f2eaa6411d52411dab69a0f037234c3e0a85 (diff) |
tdf#155241 keep current MetricSpinButton value if unparseable junk input
Change-Id: I0f13c9ae25c1788924fd81ed77307e96400f6220
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151617
Tested-by: Jenkins
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/control/fmtfield.cxx | 7 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 13 |
2 files changed, 18 insertions, 2 deletions
diff --git a/vcl/source/control/fmtfield.cxx b/vcl/source/control/fmtfield.cxx index d48f4c7560b0..d8e8231e7bfa 100644 --- a/vcl/source/control/fmtfield.cxx +++ b/vcl/source/control/fmtfield.cxx @@ -266,6 +266,7 @@ Formatter::Formatter() ,m_bAutoColor(false) ,m_bEnableNaN(false) ,m_bDisableRemainderFactor(false) + ,m_bDefaultValueSet(false) ,m_ValueState(valueDirty) ,m_dCurrentValue(0) ,m_dDefaultValue(0) @@ -791,7 +792,11 @@ bool Formatter::ImplGetValue(double& dNewVal) if (m_ValueState == valueDouble) return true; - dNewVal = m_dDefaultValue; + // tdf#155241 default to m_dDefaultValue only if explicitly set + // otherwise default to m_dCurrentValue + if (m_bDefaultValueSet) + dNewVal = m_dDefaultValue; + OUString sText(GetEntryText()); if (sText.isEmpty()) return true; diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 172ac4ce13f7..2d4a2c7cf70f 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -17447,6 +17447,11 @@ public: m_aCustomFont.use_custom_font(&rFont, u"spinbutton"); } + void set_update_policy_if_valid() + { + gtk_spin_button_set_update_policy(m_pButton, GTK_UPDATE_IF_VALID); + } + virtual void disable_notify_events() override { g_signal_handler_block(m_pButton, m_nValueChangedSignalId); @@ -24293,7 +24298,13 @@ public: virtual std::unique_ptr<weld::MetricSpinButton> weld_metric_spin_button(const OString& id, FieldUnit eUnit) override { - return std::make_unique<weld::MetricSpinButton>(weld_spin_button(id), eUnit); + std::unique_ptr<weld::SpinButton> xButton(weld_spin_button(id)); + if (xButton) + { + GtkInstanceSpinButton& rButton = dynamic_cast<GtkInstanceSpinButton&>(*xButton); + rButton.set_update_policy_if_valid(); + } + return std::make_unique<weld::MetricSpinButton>(std::move(xButton), eUnit); } virtual std::unique_ptr<weld::FormattedSpinButton> weld_formatted_spin_button(const OString &id) override |