[ooo-build-commit] .: patches/dev300
Kohei Yoshida
kohei at kemper.freedesktop.org
Mon Feb 1 18:24:15 PST 2010
patches/dev300/calc-formula-variable-sep-config-check-sc.diff | 121 ++++------
patches/dev300/calc-formula-variable-sep-config-check-sfx2.diff | 2
2 files changed, 50 insertions(+), 73 deletions(-)
New commits:
commit fdceb60abbb84c79889becf0dda3edb7f399895e
Author: Kohei Yoshida <kyoshida at novell.com>
Date: Mon Feb 1 21:06:36 2010 -0500
Re-worked the config check to get it to work properly.
Previous fix caused the formula separator values to be out-of-sync
between the UI and the configuration tree. We should not directly
access configuration tree to change values from the application
code. (n#556142)
* patches/dev300/calc-formula-variable-sep-config-check-sc.diff:
* patches/dev300/calc-formula-variable-sep-config-check-sfx2.diff:
diff --git a/patches/dev300/calc-formula-variable-sep-config-check-sc.diff b/patches/dev300/calc-formula-variable-sep-config-check-sc.diff
index b2cce34..4bb3351 100644
--- a/patches/dev300/calc-formula-variable-sep-config-check-sc.diff
+++ b/patches/dev300/calc-formula-variable-sep-config-check-sc.diff
@@ -1,5 +1,5 @@
diff --git sc/inc/docoptio.hxx sc/inc/docoptio.hxx
-index 1184554..e95a9d0 100644
+index 1184554..ba45526 100644
--- sc/inc/docoptio.hxx
+++ sc/inc/docoptio.hxx
@@ -120,7 +120,8 @@ public:
@@ -7,7 +7,7 @@ index 1184554..e95a9d0 100644
::rtl::OUString GetFormulaSepArrayCol() const { return aFormulaSepArrayCol; }
- const LocaleDataWrapper& GetLocaleDataWrapper() const;
-+ static void ResetFormulaSeparators(::rtl::OUString& rArgSep, ::rtl::OUString& rColSep, ::rtl::OUString& rRowSep);
++ void ResetFormulaSeparators();
+ static const LocaleDataWrapper& GetLocaleDataWrapper();
};
@@ -29,7 +29,7 @@ index 8a72b7e..94e2b98 100644
#endif
diff --git sc/source/core/tool/docoptio.cxx sc/source/core/tool/docoptio.cxx
-index b0188ee..f4c744e 100644
+index b0188ee..8f035d8 100644
--- sc/source/core/tool/docoptio.cxx
+++ sc/source/core/tool/docoptio.cxx
@@ -140,63 +140,62 @@ void ScDocOptions::ResetDocOptions()
@@ -44,23 +44,22 @@ index b0188ee..f4c744e 100644
- // Don't do automatic guess for these languages, and fall back to
- // the old separator set.
- break;
--
++ ResetFormulaSeparators();
++}
+
- const LocaleDataWrapper& rLocaleData = GetLocaleDataWrapper();
- const OUString& rDecSep = rLocaleData.getNumDecimalSep();
- const OUString& rListSep = rLocaleData.getListSep();
-+ ResetFormulaSeparators(aFormulaSepArg, aFormulaSepArrayCol, aFormulaSepArrayRow);
-+}
++void ScDocOptions::ResetFormulaSeparators()
++{
++ // Defaults to the old separator values.
++ aFormulaSepArg = OUString::createFromAscii(";");
++ aFormulaSepArrayCol = OUString::createFromAscii(";");
++ aFormulaSepArrayRow = OUString::createFromAscii("|");
- if (!rDecSep.getLength() || !rListSep.getLength())
- // Something is wrong. Stick with the default separators.
- break;
-+void ScDocOptions::ResetFormulaSeparators(OUString& rArgSep, OUString& rColSep, OUString& rRowSep)
-+{
-+ // Defaults to the old separator values.
-+ rArgSep = OUString::createFromAscii(";");
-+ rColSep = OUString::createFromAscii(";");
-+ rRowSep = OUString::createFromAscii("|");
-+
+ const Locale& rLocale = *ScGlobal::GetLocale();
+ const OUString& rLang = rLocale.Language;
+ if (rLang.equalsAscii("ru"))
@@ -126,18 +125,18 @@ index b0188ee..f4c744e 100644
+
+ // by default, the parameter separator equals the locale-specific
+ // list separator.
-+ rArgSep = OUString(cListSep);
++ aFormulaSepArg = OUString(cListSep);
+
+ if (cDecSep == cListSep && cDecSep != sal_Unicode(';'))
+ // if the decimal and list separators are equal, set the
+ // parameter separator to be ';', unless they are both
+ // semicolon in which case don't change the decimal separator.
-+ rArgSep = OUString::createFromAscii(";");
++ aFormulaSepArg = OUString::createFromAscii(";");
+
-+ rColSep = OUString::createFromAscii(",");
++ aFormulaSepArrayCol = OUString::createFromAscii(",");
+ if (cDecSep == sal_Unicode(','))
-+ rColSep = OUString::createFromAscii(".");
-+ rRowSep = OUString::createFromAscii(";");
++ aFormulaSepArrayCol = OUString::createFromAscii(".");
++ aFormulaSepArrayRow = OUString::createFromAscii(";");
}
-const LocaleDataWrapper& ScDocOptions::GetLocaleDataWrapper() const
@@ -146,15 +145,16 @@ index b0188ee..f4c744e 100644
return *ScGlobal::pLocaleData;
}
diff --git sc/source/ui/docshell/docsh6.cxx sc/source/ui/docshell/docsh6.cxx
-index e356bed..e2ddad1 100644
+index e356bed..b88e537 100644
--- sc/source/ui/docshell/docsh6.cxx
+++ sc/source/ui/docshell/docsh6.cxx
-@@ -56,6 +56,30 @@
+@@ -56,6 +56,31 @@
#include "tabvwsh.hxx"
#include "tablink.hxx"
#include "collect.hxx"
+#include "docoptio.hxx"
+#include "globstr.hrc"
++#include "scmod.hxx"
+
+#include "formula/FormulaCompiler.hxx"
+#include "comphelper/processfactory.hxx"
@@ -180,7 +180,7 @@ index e356bed..e2ddad1 100644
struct ScStylePair
{
-@@ -63,6 +87,12 @@ struct ScStylePair
+@@ -63,6 +88,12 @@ struct ScStylePair
SfxStyleSheetBase *pDest;
};
@@ -193,7 +193,7 @@ index e356bed..e2ddad1 100644
// STATIC DATA -----------------------------------------------------------
-@@ -469,4 +499,68 @@ BOOL ScDocShell::ReloadTabLinks()
+@@ -469,4 +500,45 @@ BOOL ScDocShell::ReloadTabLinks()
return TRUE; //! Fehler erkennen
}
@@ -203,59 +203,36 @@ index e356bed..e2ddad1 100644
+ // no need to check repeatedly.
+ return;
+
-+ try
-+ {
-+ Reference<XMultiServiceFactory> xMSF = ::comphelper::getProcessServiceFactory();
-+ Reference<XMultiServiceFactory> theConfigProvider =
-+ Reference<XMultiServiceFactory>(
-+ xMSF->createInstance(C2U("com.sun.star.configuration.ConfigurationProvider")), UNO_QUERY_THROW);
++ OUString aDecSep = ScGlobal::GetpLocaleData()->getNumDecimalSep();
+
-+ Sequence<Any> theArgs(1);
-+ theArgs[0] <<= C2U("org.openoffice.Office.Calc/Formula/Syntax");
-+ Reference<XNameAccess> xNA = Reference<XNameAccess>(
-+ theConfigProvider->createInstanceWithArguments(
-+ C2U("com.sun.star.configuration.ConfigurationUpdateAccess"), theArgs), UNO_QUERY_THROW);
++ ScModule* pScMod = SC_MOD();
++ const ScDocOptions& rOpt = pScMod->GetDocOptions();
++ OUString aSepArg = rOpt.GetFormulaSepArg();
++ OUString aSepArrRow = rOpt.GetFormulaSepArrayRow();
++ OUString aSepArrCol = rOpt.GetFormulaSepArrayCol();
+
-+ Reference<XPropertySet> xPropSet(xNA, UNO_QUERY_THROW);
-+ OUString aSepArg, aSepArrRow, aSepArrCol;
-+ xPropSet->getPropertyValue(C2U("SeparatorArg")) >>= aSepArg;
-+ xPropSet->getPropertyValue(C2U("SeparatorArrayCol")) >>= aSepArrCol;
-+ xPropSet->getPropertyValue(C2U("SeparatorArrayRow")) >>= aSepArrRow;
++ if (aDecSep == aSepArg || aDecSep == aSepArrRow || aDecSep == aSepArrCol)
++ {
++ // One of arg separators conflicts with the current decimal
++ // separator. Reset them to default.
++ ScDocOptions aNew = rOpt;
++ aNew.ResetFormulaSeparators();
++ aDocument.SetDocOptions(aNew);
++ pScMod->SetDocOptions(aNew);
+
-+ OUString aDecSep = ScGlobal::GetpLocaleData()->getNumDecimalSep();
-+ if (aDecSep == aSepArg || aDecSep == aSepArrRow || aDecSep == aSepArrCol)
++ // Launch a nice warning dialog to let the users know of this change.
++ ScTabViewShell* pViewShell = GetBestViewShell();
++ if (pViewShell)
+ {
-+ // One of arg separators conflicts with the current decimal
-+ // separator. Reset them to default.
-+ ScDocOptions::ResetFormulaSeparators(aSepArg, aSepArrCol, aSepArrRow);
-+ Any any;
-+ any <<= aSepArg;
-+ xPropSet->setPropertyValue(C2U("SeparatorArg"), any);
-+ any <<= aSepArrCol;
-+ xPropSet->setPropertyValue(C2U("SeparatorArrayCol"), any);
-+ any <<= aSepArrRow;
-+ xPropSet->setPropertyValue(C2U("SeparatorArrayRow"), any);
-+ Reference<XChangesBatch>(xPropSet, UNO_QUERY_THROW)->commitChanges();
-+
-+ ::formula::FormulaCompiler::UpdateSeparatorsNative(aSepArg, aSepArrCol, aSepArrRow);
-+
-+ // Launch a nice warning dialog to let the users know of this change.
-+ ScTabViewShell* pViewShell = GetBestViewShell();
-+ if (pViewShell)
-+ {
-+ Window* pParent = pViewShell->GetFrameWin();
-+ InfoBox aBox(pParent, ScGlobal::GetRscString(STR_OPTIONS_WARN_SEPARATORS));
-+ aBox.Execute();
-+ }
-+
-+ // For now, this is the only option setting that could launch info
-+ // dialog. But in the future we may want to implement a nicer
-+ // dialog to display a list of warnings in case we have several
-+ // pieces of information to display.
++ Window* pParent = pViewShell->GetFrameWin();
++ InfoBox aBox(pParent, ScGlobal::GetRscString(STR_OPTIONS_WARN_SEPARATORS));
++ aBox.Execute();
+ }
-+ }
-+ catch (const Exception&)
-+ {
++
++ // For now, this is the only option setting that could launch info
++ // dialog. But in the future we may want to implement a nicer
++ // dialog to display a list of warnings in case we have several
++ // pieces of information to display.
+ }
+
+ SetConfigOptionsChecked(true);
@@ -302,10 +279,10 @@ index 0f48b1d..2d0fd78 100644
};
diff --git sc/source/ui/view/gridwin.cxx sc/source/ui/view/gridwin.cxx
-index 014dbde..a8a01e6 100644
+index 9b9337e..2500129 100644
--- sc/source/ui/view/gridwin.cxx
+++ sc/source/ui/view/gridwin.cxx
-@@ -4577,6 +4577,7 @@ void __EXPORT ScGridWindow::GetFocus()
+@@ -4581,6 +4581,7 @@ void __EXPORT ScGridWindow::GetFocus()
// auf dem Mac
}
diff --git a/patches/dev300/calc-formula-variable-sep-config-check-sfx2.diff b/patches/dev300/calc-formula-variable-sep-config-check-sfx2.diff
index 9e15edd..bd6b1c8 100644
--- a/patches/dev300/calc-formula-variable-sep-config-check-sfx2.diff
+++ b/patches/dev300/calc-formula-variable-sep-config-check-sfx2.diff
@@ -74,7 +74,7 @@ index fb43eaf..3ed6815 100644
,bSaveVersionOnClose( sal_False )
,m_bSharedXMLFlag( sal_False )
,m_bAllowShareControlFileClean( sal_True )
-+ ,m_bConfigOptionsChecked( sal_True )
++ ,m_bConfigOptionsChecked( sal_False )
,lErr(ERRCODE_NONE)
,nEventId ( 0)
,bDoNotTouchDocInfo( sal_False )
More information about the ooo-build-commit
mailing list