diff options
Diffstat (limited to 'svtools/source/control/fmtfield.cxx')
-rw-r--r-- | svtools/source/control/fmtfield.cxx | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/svtools/source/control/fmtfield.cxx b/svtools/source/control/fmtfield.cxx index 53ccc338e2a7..7e04e8ca54ec 100644 --- a/svtools/source/control/fmtfield.cxx +++ b/svtools/source/control/fmtfield.cxx @@ -487,13 +487,14 @@ void FormattedField::SetAutoColor(sal_Bool _bAutomatic) } //------------------------------------------------------------------------------ -void FormattedField::Modify() +void FormattedField::impl_Modify(bool makeValueDirty) { DBG_CHKTHIS(FormattedField, NULL); if (!IsStrictFormat()) { - m_bValueDirty = sal_True; + if(makeValueDirty) + m_bValueDirty = sal_True; SpinField::Modify(); return; } @@ -503,7 +504,8 @@ void FormattedField::Modify() { m_sLastValidText = sCheck; m_aLastSelection = GetSelection(); - m_bValueDirty = sal_True; + if(makeValueDirty) + m_bValueDirty = sal_True; } else { @@ -514,6 +516,14 @@ void FormattedField::Modify() } //------------------------------------------------------------------------------ +void FormattedField::Modify() +{ + DBG_CHKTHIS(FormattedField, NULL); + + impl_Modify(); +} + +//------------------------------------------------------------------------------ void FormattedField::ImplSetTextImpl(const OUString& rNew, Selection* pNewSel) { DBG_CHKTHIS(FormattedField, NULL); @@ -789,10 +799,12 @@ void FormattedField::Commit() // did the text change? if ( GetText() != sOld ) - { // consider the field as modified - Modify(); - // but we have the most recent value now - m_bValueDirty = sal_False; + { // consider the field as modified, + // but we already have the most recent value; + // don't reparse it from the text + // (can lead to data loss when the format is lossy, + // as is e.g. our default date format: 2-digit year!) + impl_Modify(false); } } |