summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svl/zforlist.hxx2
-rw-r--r--svl/source/numbers/zforlist.cxx8
-rw-r--r--sw/source/core/table/swtable.cxx15
3 files changed, 23 insertions, 2 deletions
diff --git a/include/svl/zforlist.hxx b/include/svl/zforlist.hxx
index 8b1574cf8a08..e8afdb225a7b 100644
--- a/include/svl/zforlist.hxx
+++ b/include/svl/zforlist.hxx
@@ -601,6 +601,8 @@ public:
sal_uInt16& nPrecision, sal_uInt16& nLeadingCnt,
LanguageType eLnge = LANGUAGE_DONTKNOW );
+ bool IsUserDefinedAndNotOverloaded(sal_uInt32 F_Index) const;
+
/// Check if format code string may be deleted by user
bool IsUserDefined( const OUString& sStr, LanguageType eLnge = LANGUAGE_DONTKNOW );
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 3da7ab43c449..caa07e5002e9 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -3044,6 +3044,14 @@ OUString SvNumberFormatter::GenerateFormat(sal_uInt32 nIndex,
return sString.makeStringAndClear();
}
+bool SvNumberFormatter::IsUserDefinedAndNotOverloaded(sal_uInt32 F_Index) const
+{
+ ::osl::MutexGuard aGuard( GetInstanceMutex() );
+ const SvNumberformat* pFormat = GetFormatEntry(F_Index);
+
+ return pFormat && (pFormat->GetType() & SvNumFormatType::DEFINED);
+}
+
bool SvNumberFormatter::IsUserDefined(const OUString& sStr,
LanguageType eLnge)
{
diff --git a/sw/source/core/table/swtable.cxx b/sw/source/core/table/swtable.cxx
index fdc1633e7c73..c6a527abdb36 100644
--- a/sw/source/core/table/swtable.cxx
+++ b/sw/source/core/table/swtable.cxx
@@ -2326,6 +2326,7 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew
// format contents with the new value assigned and write to paragraph
Color* pCol = nullptr;
OUString sNewText;
+ bool bChangeFormat = true;
if( DBL_MAX == fVal )
{
sNewText = SwViewShell::GetShellRes()->aCalc_Error;
@@ -2350,6 +2351,14 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew
#else
sNewText = aOrigText;
#endif
+ // Remove the newly assigned numbering format as well if text actually exists.
+ // Exception: assume user-defined formats are always intentional.
+ if (bChgText && pNumFormatr->IsTextFormat(nOldFormat)
+ && !pNumFormatr->IsUserDefinedAndNotOverloaded(nNewFormat))
+ {
+ pBox->GetFrameFormat()->ResetFormatAttr(RES_BOXATR_FORMAT);
+ bChangeFormat = false;
+ }
}
if( !bChgText )
@@ -2359,9 +2368,11 @@ void SwTableBoxFormat::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew
}
// across all boxes
- ChgTextToNum( *pBox, sNewText, pCol,
+ if (bChangeFormat)
+ {
+ ChgTextToNum( *pBox, sNewText, pCol,
GetDoc()->IsInsTableAlignNum() );
-
+ }
}
else if( bNewIsTextFormat && nOldFormat != nNewFormat )
{