summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2023-05-11 16:03:57 +0100
committerCaolán McNamara <caolanm@redhat.com>2023-05-11 21:39:21 +0200
commit4ae776b842a8b6f065206d3250113493fd688756 (patch)
tree67b32f2306cb4c8db91c36bd72b902d6c9faa0bc /vcl
parentc8cb7a658b33e296024044f3377378644a9a97ef (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.cxx7
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx13
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