vcl/unx/gtk3/gtk3gtkinst.cxx | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-)
New commits: commit 5e440f5f7ced4ddf1533de9e8ea722e3b99db02f Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Jul 14 15:34:02 2020 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Wed Jul 15 10:24:35 2020 +0200 support IsEmptyFieldEnabled like vcl::FormattedField so a formatted spinbutton will stay blank when set empty as used by the databrowser as a special mode Change-Id: I24cd6fb0560b20d17574e3b5266fff8dd9f0acb0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/98789 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index fb2cc20ca61f..375526d595a5 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -12196,10 +12196,15 @@ private: gulong m_nValueChangedSignalId; gulong m_nOutputSignalId; gulong m_nInputSignalId; + bool m_bEmptyField; + double m_dValueWhenEmpty; bool signal_output() { - GetFormatter().SetValue(gtk_spin_button_get_value(m_pButton)); + double fValue = gtk_spin_button_get_value(m_pButton); + m_bEmptyField &= fValue == m_dValueWhenEmpty; + if (!m_bEmptyField) + GetFormatter().SetValue(fValue); return true; } @@ -12214,7 +12219,18 @@ private: { Formatter& rFormatter = GetFormatter(); rFormatter.Modify(); - *value = rFormatter.GetValue(); + // if the blank-mode is enabled then if the input is empty don't parse + // the input but keep the value as it is. store what the value the + // blank is associated with and until the value is changed, or the text + // is updated from the outside, don't output that value + m_bEmptyField = rFormatter.IsEmptyFieldEnabled() && get_text().isEmpty(); + if (m_bEmptyField) + { + m_dValueWhenEmpty = gtk_spin_button_get_value(m_pButton); + *value = m_dValueWhenEmpty; + } + else + *value = rFormatter.GetValue(); return 1; } @@ -12239,7 +12255,18 @@ public: , m_nValueChangedSignalId(g_signal_connect(pButton, "value-changed", G_CALLBACK(signalValueChanged), this)) , m_nOutputSignalId(g_signal_connect(pButton, "output", G_CALLBACK(signalOutput), this)) , m_nInputSignalId(g_signal_connect(pButton, "input", G_CALLBACK(signalInput), this)) + , m_bEmptyField(false) + , m_dValueWhenEmpty(0.0) + { + } + + virtual void set_text(const OUString& rText) override { + GtkInstanceEntry::set_text(rText); + Formatter& rFormatter = GetFormatter(); + m_bEmptyField = rFormatter.IsEmptyFieldEnabled() && rText.isEmpty(); + if (m_bEmptyField) + m_dValueWhenEmpty = gtk_spin_button_get_value(m_pButton); } virtual void connect_changed(const Link<weld::Entry&, void>& rLink) override _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits