diff options
author | Caolán McNamara <caolanm@redhat.com> | 2023-05-11 16:03:57 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2023-05-11 21:39:21 +0200 |
commit | 4ae776b842a8b6f065206d3250113493fd688756 (patch) | |
tree | 67b32f2306cb4c8db91c36bd72b902d6c9faa0bc /vcl | |
parent | c8cb7a658b33e296024044f3377378644a9a97ef (diff) |
tdf#155241 keep current MetricSpinButton value if unparseable junk input
Change-Id: I0f13c9ae25c1788924fd81ed77307e96400f6220
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151677
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.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 ed73accd3c7c..de5713261e83 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 0106507edad6..adea2d9a7c10 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -17494,6 +17494,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); @@ -24323,7 +24328,13 @@ public: virtual std::unique_ptr<weld::MetricSpinButton> weld_metric_spin_button(const OUString& 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 OUString &id) override |