summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2023-05-11 16:03:57 +0100
committerAndras Timar <andras.timar@collabora.com>2023-05-14 15:05:02 +0200
commit6e49eeeb20c035132811dcb3197b3f3cb2ac64f0 (patch)
tree69248ed18c69d8dc262463fa618a8b708b6a6294 /vcl
parent5942f2eaa6411d52411dab69a0f037234c3e0a85 (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.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 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