LOG - new version 4.0.1

This commit is contained in:
akdengi 2013-03-04 13:55:29 +04:00
parent a220ebd18c
commit df3515d7a2
15 changed files with 450 additions and 2904 deletions

View file

@ -1,8 +1,10 @@
removed_sources:
libreoffice-4.0.0.3.tar.xz: d74f7987edd9784c927def3c7f7d43f6a0a72d5c
libreoffice-dictionaries-4.0.0.3.tar.xz: c30b3d0351fdee006c9abb6f58db6b0c67de2b1e
libreoffice-help-4.0.0.3.tar.xz: f71be664dbe78f49883a7871477b670e076a5f64
libreoffice-translations-4.0.0.3.tar.xz: 35b052f6424c4704d65ed1de6a514e9dc6207982
sources:
"Mandriva-Rosa_Icons.tar.bz2": 0749e9ae3cdfdc21fdc64dc26f6a76542c0f3f1e
0d2dcdfbf28d6208751b33057f5361f0-libcmis-0.2.3.tar.gz: 9cc8d29cc129d1aca1a1f24e799eebd6f2f1b93d
0f63ee487fda8f21fafa767b3c447ac9-ixion-0.2.0.tar.gz: c67f67b4b8ae46ef94bc8c09dc29ff66d5796d37
0ff7d225d087793c8c2c680d77aac3e7-mdds_0.5.3.tar.bz2: e578b6c8e8fe4b20ae030fc14959b92cb6b1aba4
0168229624cfac409e766913506961a8-ucpp-1.3.2.tar.gz: 452eba922e4f41603539c9dc39947d2271e47093
17410483b5b5f267aa18b7e00b65e6e0-hsqldb_1_8_0.zip: 7168b0f40aa5c72267899601c116d2348d2f56ec
1756c4fa6c616ae15973c104cd8cb256-Adobe-Core35_AFMs-314.tar.gz: 28d4ec24dfda4eb41b6ceaa0cfcfca41b578f3b3
185d60944ea767075d27247c3162b3bc-unowinreg.dll: 0619ed3a89644bef318df67db12045b2b590585b
@ -13,28 +15,30 @@ sources:
2a177023f9ea8ec8bd00837605c5df1b-jakarta-tomcat-5.0.30-src.tar.gz: 32d2298c78132a629ed2ac6c9830b4d52770ce02
2ae988b339daec234019a7066f96733e-commons-lang-2.3-src.tar.gz: efc1ab026e8e9ac4cd150cb4cf1b7e4663cddc84
2c9b0f83ed5890af02c0df1c1776f39b-commons-httpclient-3.1-src.tar.gz: 5c604f102e0716597b3d2659ac3e77f80a02f22d
327348d67c979c88c2dec59a23a17d85-lcms2-2.3.tar.gz: 67d5fabda2f5777ca8387766539b9c871d993133
3404ab6b1792ae5f16bbd603bd1e1d03-libformula-1.1.7.zip: 3232dd31859be4f7eb443c33e8e3287f394789a0
35c94d2df8893241173de1d16b6034c0-swingExSrc.zip: 1acea86fd399ed7817879d36370d3d1f8b109050
39bb3fcea1514f1369fcfc87542390fd-sacjava-1.3.zip: b92930010622906778f713fb8f0153fa0683d018
3bdf40c0d199af31923e900d082ca2dd-libfonts-1.1.6.zip: e393beea80d36ff27b732882c706826988a64f5c
3c219630e4302863a9a83d0efde889db-commons-logging-1.1.1-src.tar.gz: 9408c7ebfba2e64065bc09016192e8513ba949a0
48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz: 76d6788e747e78abb5abf8eaad78d3342da5f2a4
46e92b68e31e858512b680b3b61dc4c1-mythes-1.2.3.tar.gz: 8a5d58aa4bb8752375eff51db9f701c269d1831e
48d8169acc35f97e05d8dcdfd45be7f2-lucene-2.3.2.tar.gz: cd6778a5272f5d05c0c5f86593bfc42d503f1dda
6097739c841f671cb21332b9cc593ae7-libexttextcat-3.3.1.tar.bz2: a65ce43becd7b4ad265fd96a5c81a549538656f9
4a660ce8466c9df01f19036435425c3a-glibc-2.1.3-stub.tar.gz: b8ecfaee8aef693817f0ebc12a2e932ac9467776
54e578c91b1b68e69c72be22adcb2195-liblangtag-0.4.0.tar.bz2: 35b89dfd49ee1e23716d5bff287aa11636801a90
798b2ffdc8bcfe7bca2cf92b62caf685-rhino1_5R5.zip: 8a90669029e107b61953b90ba11545fef586c2ca
86261f06c097d3e425a2f6d0b0635380-hyphen-2.8.3.tar.gz: f708f0adb4b1e45fc041cc7152d467bf818c0fc9
804c6cb5698db30b75ad0ff1c25baefd-openldap-2.4.31.tgz: 8315a283fb3724abe6062e38d93bb69298d05765
8755aac23317494a9028569374dc87b2-liborcus_0.3.0.tar.bz2: 73b8fae832453fd517015f5dfae36448658af1a9
8ce2fcd72becf06c41f7201d15373ed9-librepository-1.1.6.zip: a637c0c3ad3be32d6814972e1c45e547c5f6359d
94e7f271e38c976462558b4278590178-libvisio-0.0.19.tar.bz2: 9fc1269f7b3fdcd6064c853efcca4704bfa08449
97b2d4dba862397f446b217e2b623e71-libloader-1.1.6.zip: 47b58e0ef2d856df26372a7061ae43fae6e08051
9f9e15966b5624834157fe3d748312bc-mdds_0.6.1.tar.bz2: e6b6235700c7808196fa84c05281a05047e2fdb0
Mandriva-Rosa_Icons.tar.bz2: 53448c079fcb3008d1fdec7f95305fe392460c1f
a2f6010987e1c601274ab5d63b72c944-hyphen-2.8.4.tar.gz: 4481ed35d147d2d67dccf49cb483ec8744e17ab7
a7983f859eafb2677d7ff386a023bc40-xsltml_2.1.2.zip: 2d49e11b0b711970f494294dc3698f05eb294853
ace6ab49184e329db254e454a010f56d-libxml-1.1.7.zip: b19ad429273abb116432eae3af955ecaf1ab5b17
ada24d37d8d638b3d8a9985e80bc2978-source-9.0.0.7-bj.zip: 528dc8fa11343fa2a5d584dd2f8d5e2238ed78ba
af3c3acf618de6108d65fcdc92b492e1-commons-codec-1.3-src.tar.gz: d490a9bb30ea9e8b95c250f4d96842e0ce0c60d7
apache-ant-1.8.1-bin.tar.bz2: 0e0359f04b3d84fed75b3a1ab02cbc415c8864a1
b2371dc7cf4811c9d32146eec913d296-libcmis-0.3.0.tar.gz: b571f9d94e379edd18b4b5b87291262c63313962
ba2930200c9f019c2d93a8c88c651a0f-flow-engine-0.9.4.zip: 1acd76cd63f7b19f6a0252eb029c3cb13a25aa9b
ce5a1def34578b75959ac31210f031f6-libcdr-0.0.8.tar.bz2: 9f26a08a3f68452f2c67a757f9e8be86a1901f0f
d8bd5eed178db6e2b18eeed243f85aa8-flute-1.1.6.zip: 3478ebc27bb76025f4b5c2ae6a9bac6090e2cb09
db60e4fde8dd6d6807523deb71ee34dc-liblayout-0.2.10.zip: 65dfba9970bb862d09c1f9e636b86b22f05d3936
ea570af93c284aa9e5621cd563f54f4d-bsh-2.0b1-src.tar.gz: 51537a09aa546336b0477c70077f3e21d857caa7
@ -42,10 +46,12 @@ sources:
f94d9870737518e3b597f9265f4e9803-libserializer-1.1.6.zip: 5ecb895ffc1eff2c381fa78d2197d0c57422b3df
fca8706f2c4619e2fa3f8f42f8fc1e9d-rasqal-0.9.16.tar.gz: 55e08ee78c15de417cbfccb9e748747095994886
fdb27bfe2dbe2e7b57ae194d9bf36bab-SampleICC-1.3.2.tar.gz: 6e836945719e137596df1ca82f0afa809e8a2e88
libreoffice-binfilter-3.6.3.2.tar.xz: a9102c2e91b11aa0c70de2f3c5ce69922370c8bd
libreoffice-core-3.6.3.2.tar.xz: 69041c2ca4bd588ed970546f9b7cba86b533b52c
libreoffice-dictionaries-3.6.3.2.tar.xz: 1a4542b4756d224ee670457262028549391b5811
libreoffice-help-3.6.3.2.tar.xz: fc190cb8bbebe0722d26887667b408397d4ee17a
libreoffice-translations-3.6.3.2.tar.xz: 7ce94ff0b37141fd64b68660e046bfee95a0880b
libcdr-0.0.9.tar.bz2: a572db87b72d63d0d33f5c55ed564e0f003273b5
libixion_0.3.0.tar.bz2: ac1fa915303ed8492ac50d6f0aa4d974e8405954
libmspub-0.0.3.tar.bz2: 19857721aa39d1a64d3b5f519ff89f63346654bb
libreoffice-4.0.1.1.tar.xz: 6d9c0deee44c57abb90aa8e40ab4c2678f25d045
libreoffice-dictionaries-4.0.1.1.tar.xz: 1bc0479ca646393d6b2df1aa6327a93854bd9816
libreoffice-help-4.0.1.1.tar.xz: 7cea7f694c47f24b60dbaec50fe46fdc177f19d7
libreoffice-translations-4.0.1.1.tar.xz: 3356ac8cd1fdbafeec05c575f5d7dc782c07faa6
libvisio-0.0.24.tar.bz2: 49ca23b3d41697d0652ca8e3d3dc5d9900217608
ooo_oxygen_images-2009-06-17.tar.gz: c3dd261bfe366ac514a019b0fa829369b833c0c7
---

View file

@ -1,970 +0,0 @@
diff -ru libreoffice-3.5.5.3.orig/cui/source/options/optlingu.cxx libreoffice-3.5.5.3/cui/source/options/optlingu.cxx
--- libreoffice-3.5.5.3.orig/cui/source/options/optlingu.cxx 2012-07-13 12:37:15.032259144 +0100
+++ libreoffice-3.5.5.3/cui/source/options/optlingu.cxx 2012-07-16 08:49:26.294209540 +0100
@@ -1150,12 +1150,6 @@
aLinguDicsEditPB.SetAccessibleName(sAccessibleNameDicsEdit);
aLinguOptionsEditPB.SetAccessibleName(sAccessibleNameOptionEdit);
- // force recalculation of hash value used for checking the need of updating
- // because new dictionaries might be installed / downloaded.
- //! Thus it needs to be called now since it may infuence the supported languages
- //! to be reported AND the found user-dictionaries(!) as well.
- SvxLinguConfigUpdate::UpdateAll( sal_True );
-
xProp = uno::Reference< XPropertySet >( SvxGetLinguPropertySet(), UNO_QUERY );
xDicList = uno::Reference< XDictionaryList >( SvxGetDictionaryList(), UNO_QUERY );
if (xDicList.is())
diff -ru libreoffice-3.5.5.3.orig/editeng/inc/editeng/unolingu.hxx libreoffice-3.5.5.3/editeng/inc/editeng/unolingu.hxx
--- libreoffice-3.5.5.3.orig/editeng/inc/editeng/unolingu.hxx 2012-07-13 12:37:16.109269892 +0100
+++ libreoffice-3.5.5.3/editeng/inc/editeng/unolingu.hxx 2012-07-16 08:49:26.294209540 +0100
@@ -46,29 +46,6 @@
class Window;
///////////////////////////////////////////////////////////////////////////
-// SvxLinguConfigUpdate
-// class to update configuration items when (before!) the linguistic is used.
-//
-// This class is called by all the dummy implementations to update all of the
-// configuration (list of used/available services) when the linguistic is
-// accessed for the first time.
-
-class SvxLinguConfigUpdate
-{
- static sal_Int32 nCurrentDataFilesChangedCheckValue;
- static sal_Int16 nNeedUpdating; // n == -1 => needs to be checked
- // n == 0 => already updated, nothing to be done
- // n == 1 => needs to be updated
-
- static sal_Int32 CalcDataFilesChangedCheckValue();
-
-public:
-
- EDITENG_DLLPUBLIC static void UpdateAll( sal_Bool bForceCheck = sal_False );
- static sal_Bool IsNeedUpdateAll( sal_Bool bForceCheck = sal_False );
-};
-
-///////////////////////////////////////////////////////////////////////////
class EDITENG_DLLPUBLIC LinguMgr
{
diff -ru libreoffice-3.5.5.3.orig/editeng/source/misc/unolingu.cxx libreoffice-3.5.5.3/editeng/source/misc/unolingu.cxx
--- libreoffice-3.5.5.3.orig/editeng/source/misc/unolingu.cxx 2012-07-13 12:37:15.900267806 +0100
+++ libreoffice-3.5.5.3/editeng/source/misc/unolingu.cxx 2012-07-16 08:52:53.919596778 +0100
@@ -90,365 +90,6 @@
return xRes;
}
-sal_Bool lcl_FindEntry( const OUString &rEntry, const Sequence< OUString > &rCfgSvcs )
-{
- sal_Int32 nRes = -1;
- sal_Int32 nEntries = rCfgSvcs.getLength();
- const OUString *pEntry = rCfgSvcs.getConstArray();
- for (sal_Int32 i = 0; i < nEntries && nRes == -1; ++i)
- {
- if (rEntry == pEntry[i])
- nRes = i;
- }
- return nRes != -1;
-}
-
-
-Sequence< OUString > lcl_RemoveMissingEntries(
- const Sequence< OUString > &rCfgSvcs,
- const Sequence< OUString > &rAvailSvcs )
-{
- Sequence< OUString > aRes( rCfgSvcs.getLength() );
- OUString *pRes = aRes.getArray();
- sal_Int32 nCnt = 0;
-
- sal_Int32 nEntries = rCfgSvcs.getLength();
- const OUString *pEntry = rCfgSvcs.getConstArray();
- for (sal_Int32 i = 0; i < nEntries; ++i)
- {
- if (!pEntry[i].isEmpty() && lcl_FindEntry( pEntry[i], rAvailSvcs ))
- pRes[ nCnt++ ] = pEntry[i];
- }
-
- aRes.realloc( nCnt );
- return aRes;
-}
-
-
-Sequence< OUString > lcl_GetLastFoundSvcs(
- SvtLinguConfig &rCfg,
- const OUString &rLastFoundList ,
- const Locale &rAvailLocale )
-{
- Sequence< OUString > aRes;
-
- OUString aCfgLocaleStr( MsLangId::convertLanguageToIsoString(
- SvxLocaleToLanguage( rAvailLocale ) ) );
-
- Sequence< OUString > aNodeNames( rCfg.GetNodeNames(rLastFoundList) );
- sal_Bool bFound = lcl_FindEntry( aCfgLocaleStr, aNodeNames);
-
- if (bFound)
- {
- Sequence< OUString > aNames(1);
- OUString &rNodeName = aNames.getArray()[0];
- rNodeName = rLastFoundList;
- rNodeName += OUString::valueOf( (sal_Unicode)'/' );
- rNodeName += aCfgLocaleStr;
- Sequence< Any > aValues( rCfg.GetProperties( aNames ) );
- if (aValues.getLength())
- {
- OSL_ENSURE( aValues.getLength() == 1, "unexpected length of sequence" );
- Sequence< OUString > aSvcImplNames;
- if (aValues.getConstArray()[0] >>= aSvcImplNames)
- aRes = aSvcImplNames;
- else
- {
- OSL_FAIL( "type mismatch" );
- }
- }
- }
-
- return aRes;
-}
-
-
-Sequence< OUString > lcl_GetNewEntries(
- const Sequence< OUString > &rLastFoundSvcs,
- const Sequence< OUString > &rAvailSvcs )
-{
- sal_Int32 nLen = rAvailSvcs.getLength();
- Sequence< OUString > aRes( nLen );
- OUString *pRes = aRes.getArray();
- sal_Int32 nCnt = 0;
-
- const OUString *pEntry = rAvailSvcs.getConstArray();
- for (sal_Int32 i = 0; i < nLen; ++i)
- {
- if (!pEntry[i].isEmpty() && !lcl_FindEntry( pEntry[i], rLastFoundSvcs ))
- pRes[ nCnt++ ] = pEntry[i];
- }
-
- aRes.realloc( nCnt );
- return aRes;
-}
-
-
-Sequence< OUString > lcl_MergeSeq(
- const Sequence< OUString > &rCfgSvcs,
- const Sequence< OUString > &rNewSvcs )
-{
- Sequence< OUString > aRes( rCfgSvcs.getLength() + rNewSvcs.getLength() );
- OUString *pRes = aRes.getArray();
- sal_Int32 nCnt = 0;
-
- for (sal_Int32 k = 0; k < 2; ++k)
- {
- // add previously configuerd service first and append
- // new found services at the end
- const Sequence< OUString > &rSeq = k == 0 ? rCfgSvcs : rNewSvcs;
-
- sal_Int32 nLen = rSeq.getLength();
- const OUString *pEntry = rSeq.getConstArray();
- for (sal_Int32 i = 0; i < nLen; ++i)
- {
- if (!pEntry[i].isEmpty() && !lcl_FindEntry( pEntry[i], aRes ))
- pRes[ nCnt++ ] = pEntry[i];
- }
- }
-
- aRes.realloc( nCnt );
- return aRes;
-}
-
-sal_Int16 SvxLinguConfigUpdate::nNeedUpdating = -1;
-sal_Int32 SvxLinguConfigUpdate::nCurrentDataFilesChangedCheckValue = -1;
-
-void SvxLinguConfigUpdate::UpdateAll( sal_Bool bForceCheck )
-{
- RTL_LOGFILE_CONTEXT( aLog, "svx: SvxLinguConfigUpdate::UpdateAll" );
-
- if (IsNeedUpdateAll( bForceCheck ))
- {
- typedef OUString OUstring_t;
- typedef Sequence< OUString > Sequence_OUString_t;
- typedef std::map< OUstring_t, Sequence_OUString_t > list_entry_map_t;
-
- RTL_LOGFILE_CONTEXT( aLog, "svx: SvxLinguConfigUpdate::UpdateAll - updating..." );
-
- OSL_ENSURE( nNeedUpdating == 1, "SvxLinguConfigUpdate::UpdateAll already updated!" );
-
- uno::Reference< XLinguServiceManager > xLngSvcMgr( GetLngSvcMgr_Impl() );
- OSL_ENSURE( xLngSvcMgr.is(), "service manager missing");
- if (!xLngSvcMgr.is())
- return;
-
- SvtLinguConfig aCfg;
-
- const int nNumServices = 4;
- const sal_Char * apServices[nNumServices] = { SN_SPELLCHECKER, SN_GRAMMARCHECKER, SN_HYPHENATOR, SN_THESAURUS };
- const sal_Char * apCurLists[nNumServices] = { "ServiceManager/SpellCheckerList", "ServiceManager/GrammarCheckerList", "ServiceManager/HyphenatorList", "ServiceManager/ThesaurusList" };
- const sal_Char * apLastFoundLists[nNumServices] = { "ServiceManager/LastFoundSpellCheckers", "ServiceManager/LastFoundGrammarCheckers", "ServiceManager/LastFoundHyphenators", "ServiceManager/LastFoundThesauri" };
-
- // usage of indices as above: 0 = spell checker, 1 = grammar checker, 2 = hyphenator, 3 = thesaurus
- std::vector< list_entry_map_t > aLastFoundSvcs(nNumServices);
- std::vector< list_entry_map_t > aCurSvcs(nNumServices);
-
- for (int k = 0; k < nNumServices; ++k)
- {
- OUString aService( ::rtl::OUString::createFromAscii( apServices[k] ) );
- OUString aActiveList( ::rtl::OUString::createFromAscii( apCurLists[k] ) );
- OUString aLastFoundList( ::rtl::OUString::createFromAscii( apLastFoundLists[k] ) );
- sal_Int32 i;
-
- //
- // remove configured but not available language/services entries
- //
- Sequence< OUString > aNodeNames( aCfg.GetNodeNames( aActiveList ) ); // list of configured locales
- sal_Int32 nNodeNames = aNodeNames.getLength();
- const OUString *pNodeName = aNodeNames.getConstArray();
- for (i = 0; i < nNodeNames; ++i)
- {
- Locale aLocale( SvxCreateLocale( MsLangId::convertIsoStringToLanguage(pNodeName[i]) ) );
- Sequence< OUString > aCfgSvcs(
- xLngSvcMgr->getConfiguredServices( aService, aLocale ));
- Sequence< OUString > aAvailSvcs(
- xLngSvcMgr->getAvailableServices( aService, aLocale ));
-#if OSL_DEBUG_LEVEL > 1
- const OUString * pCfgSvcs = aCfgSvcs.getConstArray();
- const OUString * pAvailSvcs = aAvailSvcs.getConstArray();
- (void) pCfgSvcs;
- (void) pAvailSvcs;
-#endif
- aCfgSvcs = lcl_RemoveMissingEntries( aCfgSvcs, aAvailSvcs );
-
- aCurSvcs[k][ pNodeName[i] ] = aCfgSvcs;
- }
-
- //
- // add new available language/servcice entries
- //
- uno::Reference< XAvailableLocales > xAvail( xLngSvcMgr, UNO_QUERY );
- Sequence< Locale > aAvailLocales( xAvail->getAvailableLocales(aService) );
- sal_Int32 nAvailLocales = aAvailLocales.getLength();
- const Locale *pAvailLocale = aAvailLocales.getConstArray();
- for (i = 0; i < nAvailLocales; ++i)
- {
- Sequence< OUString > aAvailSvcs(
- xLngSvcMgr->getAvailableServices( aService, pAvailLocale[i] ));
- Sequence< OUString > aLastSvcs(
- lcl_GetLastFoundSvcs( aCfg, aLastFoundList , pAvailLocale[i] ));
- Sequence< OUString > aNewSvcs =
- lcl_GetNewEntries( aLastSvcs, aAvailSvcs );
-#if OSL_DEBUG_LEVEL > 1
- const OUString * pAvailSvcs = aAvailSvcs.getConstArray();
- const OUString * pLastSvcs = aLastSvcs.getConstArray();
- const OUString * pNewSvcs = aNewSvcs.getConstArray();
- (void) pAvailSvcs;
- (void) pLastSvcs;
- (void) pNewSvcs;
-#endif
-
- OUString aCfgLocaleStr( MsLangId::convertLanguageToIsoString(
- SvxLocaleToLanguage( pAvailLocale[i] ) ) );
- Sequence< OUString > aCfgSvcs( aCurSvcs[k][ aCfgLocaleStr ] );
-
- // merge services list (previously configured to be listed first).
- aCfgSvcs = lcl_MergeSeq( aCfgSvcs, aNewSvcs );
-
-/*
- // there is at most one Hyphenator per language allowed
- // to be configured, thus we only use the first one found.
- if (k == 2 && aCfgSvcs.getLength() > 1)
- aCfgSvcs.realloc(1);
-*/
- aCurSvcs[k][ aCfgLocaleStr ] = aCfgSvcs;
- }
-
- //
- // set last found services to currently available ones
- //
- for (i = 0; i < nAvailLocales; ++i)
- {
- Sequence< OUString > aSvcImplNames(
- xLngSvcMgr->getAvailableServices( aService, pAvailLocale[i] ) );
-
-#if OSL_DEBUG_LEVEL > 1
- sal_Int32 nSvcs = aSvcImplNames.getLength();
- const OUString *pSvcImplName = aSvcImplNames.getConstArray();
- for (sal_Int32 j = 0; j < nSvcs; ++j)
- {
- OUString aImplName( pSvcImplName[j] );
- }
-#endif
-
- OUString aCfgLocaleStr( MsLangId::convertLanguageToIsoString(
- SvxLocaleToLanguage( pAvailLocale[i] ) ) );
- aLastFoundSvcs[k][ aCfgLocaleStr ] = aSvcImplNames;
- }
- }
-
- //
- // write new data back to configuration
- //
- for (int k = 0; k < nNumServices; ++k)
- {
- for (int i = 0; i < 2; ++i)
- {
- const sal_Char *pSubNodeName = (i == 0) ? apCurLists[k] : apLastFoundLists[k];
- OUString aSubNodeName( ::rtl::OUString::createFromAscii(pSubNodeName) );
-
- list_entry_map_t &rCurMap = (i == 0) ? aCurSvcs[k] : aLastFoundSvcs[k];
- list_entry_map_t::const_iterator aIt( rCurMap.begin() );
- sal_Int32 nVals = static_cast< sal_Int32 >( rCurMap.size() );
- Sequence< PropertyValue > aNewValues( nVals );
- PropertyValue *pNewValue = aNewValues.getArray();
- while (aIt != rCurMap.end())
- {
- OUString aCfgEntryName( aSubNodeName );
- aCfgEntryName += OUString::valueOf( (sal_Unicode) '/' );
- aCfgEntryName += (*aIt).first;
-
-#if OSL_DEBUG_LEVEL > 1
- Sequence< OUString > aSvcImplNames( (*aIt).second );
- sal_Int32 nSvcs = aSvcImplNames.getLength();
- const OUString *pSvcImplName = aSvcImplNames.getConstArray();
- for (sal_Int32 j = 0; j < nSvcs; ++j)
- {
- OUString aImplName( pSvcImplName[j] );
- }
-#endif
- pNewValue->Name = aCfgEntryName;
- pNewValue->Value <<= (*aIt).second;
- ++pNewValue;
- ++aIt;
- }
- OSL_ENSURE( pNewValue - aNewValues.getArray() == nVals,
- "possible mismatch of sequence size and property number" );
-
- {
- RTL_LOGFILE_CONTEXT( aLog, "svx: SvxLinguConfigUpdate::UpdateAll - ReplaceSetProperties" );
- // add new or replace existing entries.
- sal_Bool bRes = aCfg.ReplaceSetProperties( aSubNodeName, aNewValues );
- if (!bRes)
- {
-#if OSL_DEBUG_LEVEL > 1
- OSL_FAIL( "failed to set new configuration values" );
-#endif
- }
- }
- }
- }
- OSL_ENSURE( nCurrentDataFilesChangedCheckValue != -1, "SvxLinguConfigUpdate::UpdateAll DataFilesChangedCheckValue not yet calculated!" );
- Any aAny;
-
- // for the time being (developer builds until OOo 3.0)
- // we should always check for everything available
- // otherwise we may miss a new installed extension dicitonary
- // just because e.g. the spellchecker is not asked what
- // languages it does support currently...
- // Since the check is on-demand occuring and executed once it should
- // not be too troublesome.
- // In OOo 3.0 we will not need the respective code anymore at all.
-// aAny <<= nCurrentDataFilesChangedCheckValue;
- aAny <<= (sal_Int32) -1; // keep the value set to 'need to check'
-
- aCfg.SetProperty( A2OU( "DataFilesChangedCheckValue" ), aAny );
-
- //! Note 1: the new values are commited when the 'aCfg' object
- //! gets destroyed.
- //! Note 2: the new settings in the configuration get applied
- //! because the 'LngSvcMgr' (in linguistic/source/lngsvcmgr.hxx)
- //! listens to the configuration for changes of the relevant
- //! properties and then applies the new settings.
-
- // nothing needs to be done anymore
- nNeedUpdating = 0;
- }
-}
-
-
-sal_Int32 SvxLinguConfigUpdate::CalcDataFilesChangedCheckValue()
-{
- RTL_LOGFILE_CONTEXT( aLog, "svx: SvxLinguConfigUpdate::CalcDataFilesChangedCheckValue" );
-
- sal_Int32 nHashVal = 0;
- // nothing to be checked anymore since those old directory paths are gone by now
- return nHashVal;
-}
-
-
-sal_Bool SvxLinguConfigUpdate::IsNeedUpdateAll( sal_Bool bForceCheck )
-{
- RTL_LOGFILE_CONTEXT( aLog, "svx: SvxLinguConfigUpdate::IsNeedUpdateAll" );
- if (nNeedUpdating == -1 || bForceCheck ) // need to check if updating is necessary
- {
- // calculate hash value for current data files
- nCurrentDataFilesChangedCheckValue = CalcDataFilesChangedCheckValue();
-
- // compare hash value and check value to see if anything has changed
- // and thus the configuration needs to be updated
- SvtLinguOptions aLinguOpt;
- SvtLinguConfig aCfg;
- aCfg.GetOptions( aLinguOpt );
- nNeedUpdating = (nCurrentDataFilesChangedCheckValue == aLinguOpt.nDataFilesChangedCheckValue) ? 0 : 1;
- }
- OSL_ENSURE( nNeedUpdating != -1,
- "need for linguistic configuration update should have been already checked." );
-
- return nNeedUpdating == 1;
-}
-
//! Dummy implementation in order to avoid loading of lingu DLL
//! when only the XSupportedLocales interface is used.
@@ -520,10 +158,6 @@
void ThesDummy_Impl::GetThes_Impl()
{
- // update configuration before accessing the service
- if (SvxLinguConfigUpdate::IsNeedUpdateAll())
- SvxLinguConfigUpdate::UpdateAll();
-
if (!xThes.is())
{
uno::Reference< XLinguServiceManager > xLngSvcMgr( GetLngSvcMgr_Impl() );
@@ -543,8 +177,7 @@
ThesDummy_Impl::getLocales()
throw(uno::RuntimeException)
{
- if (!SvxLinguConfigUpdate::IsNeedUpdateAll()) // configuration already update and thus lingu DLL's already loaded ?
- GetThes_Impl();
+ GetThes_Impl();
if (xThes.is())
return xThes->getLocales();
else if (!pLocaleSeq) // if not already loaded save startup time by avoiding loading them now
@@ -557,8 +190,7 @@
ThesDummy_Impl::hasLocale( const lang::Locale& rLocale )
throw(uno::RuntimeException)
{
- if (!SvxLinguConfigUpdate::IsNeedUpdateAll()) // configuration already update and thus lingu DLL's already loaded ?
- GetThes_Impl();
+ GetThes_Impl();
if (xThes.is())
return xThes->hasLocale( rLocale );
else if (!pLocaleSeq) // if not already loaded save startup time by avoiding loading them now
@@ -632,10 +264,6 @@
void SpellDummy_Impl::GetSpell_Impl()
{
- // update configuration before accessing the service
- if (SvxLinguConfigUpdate::IsNeedUpdateAll())
- SvxLinguConfigUpdate::UpdateAll();
-
if (!xSpell.is())
{
uno::Reference< XLinguServiceManager > xLngSvcMgr( GetLngSvcMgr_Impl() );
@@ -748,10 +376,6 @@
void HyphDummy_Impl::GetHyph_Impl()
{
- // update configuration before accessing the service
- if (SvxLinguConfigUpdate::IsNeedUpdateAll())
- SvxLinguConfigUpdate::UpdateAll();
-
if (!xHyph.is())
{
uno::Reference< XLinguServiceManager > xLngSvcMgr( GetLngSvcMgr_Impl() );
diff -ru libreoffice-3.5.5.3.orig/linguistic/Library_lng.mk libreoffice-3.5.5.3/linguistic/Library_lng.mk
--- libreoffice-3.5.5.3.orig/linguistic/Library_lng.mk 2012-07-13 12:23:35.568866084 +0100
+++ libreoffice-3.5.5.3/linguistic/Library_lng.mk 2012-07-16 08:49:27.810226966 +0100
@@ -56,6 +56,7 @@
tl \
ucbhelper \
utl \
+ vcl \
xo \
$(gb_STDLIBS) \
))
diff -ru libreoffice-3.5.5.3.orig/linguistic/prj/build.lst libreoffice-3.5.5.3/linguistic/prj/build.lst
--- libreoffice-3.5.5.3.orig/linguistic/prj/build.lst 2012-07-13 12:23:35.611866523 +0100
+++ libreoffice-3.5.5.3/linguistic/prj/build.lst 2012-07-16 08:49:27.820227082 +0100
@@ -1,2 +1,2 @@
-lg linguistic : svl xmloff ucbhelper comphelper ICU:icu LIBXSLT:libxslt NULL
+lg linguistic : svl vcl xmloff ucbhelper comphelper ICU:icu LIBXSLT:libxslt NULL
lg linguistic\prj nmake - all lg_prj NULL
diff -ru libreoffice-3.5.5.3.orig/linguistic/source/lngsvcmgr.cxx libreoffice-3.5.5.3/linguistic/source/lngsvcmgr.cxx
--- libreoffice-3.5.5.3.orig/linguistic/source/lngsvcmgr.cxx 2012-07-13 12:23:35.585866257 +0100
+++ libreoffice-3.5.5.3/linguistic/source/lngsvcmgr.cxx 2012-07-16 08:49:27.829227184 +0100
@@ -27,6 +27,7 @@
************************************************************************/
+#include <com/sun/star/deployment/ExtensionManager.hpp>
#include <com/sun/star/registry/XRegistryKey.hpp>
#include <com/sun/star/container/XContentEnumerationAccess.hpp>
#include <com/sun/star/container/XEnumeration.hpp>
@@ -270,8 +271,6 @@
}
}
-
-//IMPL_LINK( LngSvcMgrListenerHelper, TimeOut, Timer*, pTimer )
long LngSvcMgrListenerHelper::Timeout()
{
osl::MutexGuard aGuard( GetLinguMutex() );
@@ -483,11 +482,98 @@
pNames[2] = "ServiceManager/HyphenatorList";
pNames[3] = "ServiceManager/ThesaurusList";
EnableNotification( aNames );
+
+ UpdateAll();
+
+ aUpdateTimer.SetTimeout(500);
+ aUpdateTimer.SetTimeoutHdl(LINK(this, LngSvcMgr, updateAndBroadcast));
+
+ // request to be notified if an extension has been added/removed
+ uno::Reference<uno::XComponentContext> xContext(comphelper::getProcessComponentContext());
+
+ uno::Reference<deployment::XExtensionManager> xExtensionManager(
+ deployment::ExtensionManager::get(xContext));
+ if (xExtensionManager.is())
+ {
+ xMB = uno::Reference<util::XModifyBroadcaster>(xExtensionManager, uno::UNO_QUERY_THROW);
+
+ uno::Reference<util::XModifyListener> xListener(this);
+ xMB->addModifyListener( xListener );
+ }
+}
+
+// ::com::sun::star::util::XModifyListener
+void LngSvcMgr::modified(const lang::EventObject&)
+ throw(uno::RuntimeException)
+{
+ osl::MutexGuard aGuard(GetLinguMutex());
+ //assume that if an extension has been added/removed that
+ //it might be a dictionary extension, so drop our cache
+
+ delete pAvailSpellSvcs;
+ pAvailSpellSvcs = NULL;
+ delete pAvailGrammarSvcs;
+ pAvailGrammarSvcs = NULL;
+ delete pAvailHyphSvcs;
+ pAvailHyphSvcs = NULL;
+ delete pAvailThesSvcs;
+ pAvailThesSvcs = NULL;
+
+ //schedule in an update to execute in the main thread
+ aUpdateTimer.Start();
+}
+
+//run update, and inform everyone that dictionaries (may) have changed, this
+//needs to be run in the main thread because
+//utl::ConfigChangeListener_Impl::changesOccurred grabs the SolarMutex and we
+//get notified that an extension was added from an extension manager thread
+IMPL_LINK_NOARG(LngSvcMgr, updateAndBroadcast)
+{
+ osl::MutexGuard aGuard( GetLinguMutex() );
+
+ UpdateAll();
+
+ if (pListenerHelper)
+ {
+ pListenerHelper->AddLngSvcEvt(
+ linguistic2::LinguServiceEventFlags::SPELL_CORRECT_WORDS_AGAIN |
+ linguistic2::LinguServiceEventFlags::SPELL_WRONG_WORDS_AGAIN |
+ linguistic2::LinguServiceEventFlags::PROOFREAD_AGAIN |
+ linguistic2::LinguServiceEventFlags::HYPHENATE_AGAIN );
+ }
+
+ return 0;
}
+void LngSvcMgr::stopListening()
+{
+ osl::MutexGuard aGuard(GetLinguMutex());
+
+ if (xMB.is())
+ {
+ try
+ {
+ uno::Reference<util::XModifyListener> xListener(this);
+ xMB->removeModifyListener(xListener);
+ }
+ catch (const uno::Exception&)
+ {
+ }
+
+ xMB.clear();
+ }
+}
+
+void LngSvcMgr::disposing(const lang::EventObject&)
+ throw (uno::RuntimeException)
+{
+ stopListening();
+}
LngSvcMgr::~LngSvcMgr()
{
+ stopListening();
+
// memory for pSpellDsp, pHyphDsp, pThesDsp, pListenerHelper
// will be freed in the destructor of the respective Reference's
// xSpellDsp, xGrammarDsp, xHyphDsp, xThesDsp
@@ -498,6 +584,252 @@
delete pAvailThesSvcs;
}
+namespace
+{
+ using lang::Locale;
+ using uno::Any;
+ using uno::Sequence;
+
+ sal_Bool lcl_FindEntry( const OUString &rEntry, const Sequence< OUString > &rCfgSvcs )
+ {
+ sal_Int32 nRes = -1;
+ sal_Int32 nEntries = rCfgSvcs.getLength();
+ const OUString *pEntry = rCfgSvcs.getConstArray();
+ for (sal_Int32 i = 0; i < nEntries && nRes == -1; ++i)
+ {
+ if (rEntry == pEntry[i])
+ nRes = i;
+ }
+ return nRes != -1;
+ }
+
+ Sequence< OUString > lcl_GetLastFoundSvcs(
+ SvtLinguConfig &rCfg,
+ const OUString &rLastFoundList ,
+ const Locale &rAvailLocale )
+ {
+ Sequence< OUString > aRes;
+
+ OUString aCfgLocaleStr( MsLangId::convertLanguageToIsoString(
+ LocaleToLanguage( rAvailLocale ) ) );
+
+ Sequence< OUString > aNodeNames( rCfg.GetNodeNames(rLastFoundList) );
+ sal_Bool bFound = lcl_FindEntry( aCfgLocaleStr, aNodeNames);
+
+ if (bFound)
+ {
+ Sequence< OUString > aNames(1);
+ OUString &rNodeName = aNames.getArray()[0];
+ rNodeName = rLastFoundList;
+ rNodeName += OUString::valueOf( (sal_Unicode)'/' );
+ rNodeName += aCfgLocaleStr;
+ Sequence< Any > aValues( rCfg.GetProperties( aNames ) );
+ if (aValues.getLength())
+ {
+ OSL_ENSURE( aValues.getLength() == 1, "unexpected length of sequence" );
+ Sequence< OUString > aSvcImplNames;
+ if (aValues.getConstArray()[0] >>= aSvcImplNames)
+ aRes = aSvcImplNames;
+ else
+ {
+ OSL_FAIL( "type mismatch" );
+ }
+ }
+ }
+
+ return aRes;
+ }
+
+ Sequence< OUString > lcl_RemoveMissingEntries(
+ const Sequence< OUString > &rCfgSvcs,
+ const Sequence< OUString > &rAvailSvcs )
+ {
+ Sequence< OUString > aRes( rCfgSvcs.getLength() );
+ OUString *pRes = aRes.getArray();
+ sal_Int32 nCnt = 0;
+
+ sal_Int32 nEntries = rCfgSvcs.getLength();
+ const OUString *pEntry = rCfgSvcs.getConstArray();
+ for (sal_Int32 i = 0; i < nEntries; ++i)
+ {
+ if (!pEntry[i].isEmpty() && lcl_FindEntry( pEntry[i], rAvailSvcs ))
+ pRes[ nCnt++ ] = pEntry[i];
+ }
+
+ aRes.realloc( nCnt );
+ return aRes;
+ }
+
+ Sequence< OUString > lcl_GetNewEntries(
+ const Sequence< OUString > &rLastFoundSvcs,
+ const Sequence< OUString > &rAvailSvcs )
+ {
+ sal_Int32 nLen = rAvailSvcs.getLength();
+ Sequence< OUString > aRes( nLen );
+ OUString *pRes = aRes.getArray();
+ sal_Int32 nCnt = 0;
+
+ const OUString *pEntry = rAvailSvcs.getConstArray();
+ for (sal_Int32 i = 0; i < nLen; ++i)
+ {
+ if (!pEntry[i].isEmpty() && !lcl_FindEntry( pEntry[i], rLastFoundSvcs ))
+ pRes[ nCnt++ ] = pEntry[i];
+ }
+
+ aRes.realloc( nCnt );
+ return aRes;
+ }
+
+ Sequence< OUString > lcl_MergeSeq(
+ const Sequence< OUString > &rCfgSvcs,
+ const Sequence< OUString > &rNewSvcs )
+ {
+ Sequence< OUString > aRes( rCfgSvcs.getLength() + rNewSvcs.getLength() );
+ OUString *pRes = aRes.getArray();
+ sal_Int32 nCnt = 0;
+
+ for (sal_Int32 k = 0; k < 2; ++k)
+ {
+ // add previously configuerd service first and append
+ // new found services at the end
+ const Sequence< OUString > &rSeq = k == 0 ? rCfgSvcs : rNewSvcs;
+
+ sal_Int32 nLen = rSeq.getLength();
+ const OUString *pEntry = rSeq.getConstArray();
+ for (sal_Int32 i = 0; i < nLen; ++i)
+ {
+ if (!pEntry[i].isEmpty() && !lcl_FindEntry( pEntry[i], aRes ))
+ pRes[ nCnt++ ] = pEntry[i];
+ }
+ }
+
+ aRes.realloc( nCnt );
+ return aRes;
+ }
+}
+
+void LngSvcMgr::UpdateAll()
+{
+ using beans::PropertyValue;
+ using lang::Locale;
+ using uno::Sequence;
+
+ typedef OUString OUstring_t;
+ typedef Sequence< OUString > Sequence_OUString_t;
+ typedef std::map< OUstring_t, Sequence_OUString_t > list_entry_map_t;
+
+ SvtLinguConfig aCfg;
+
+ const int nNumServices = 4;
+ const sal_Char * apServices[nNumServices] = { SN_SPELLCHECKER, SN_GRAMMARCHECKER, SN_HYPHENATOR, SN_THESAURUS };
+ const sal_Char * apCurLists[nNumServices] = { "ServiceManager/SpellCheckerList", "ServiceManager/GrammarCheckerList", "ServiceManager/HyphenatorList", "ServiceManager/ThesaurusList" };
+ const sal_Char * apLastFoundLists[nNumServices] = { "ServiceManager/LastFoundSpellCheckers", "ServiceManager/LastFoundGrammarCheckers", "ServiceManager/LastFoundHyphenators", "ServiceManager/LastFoundThesauri" };
+
+ // usage of indices as above: 0 = spell checker, 1 = grammar checker, 2 = hyphenator, 3 = thesaurus
+ std::vector< list_entry_map_t > aLastFoundSvcs(nNumServices);
+ std::vector< list_entry_map_t > aCurSvcs(nNumServices);
+
+ for (int k = 0; k < nNumServices; ++k)
+ {
+ OUString aService( ::rtl::OUString::createFromAscii( apServices[k] ) );
+ OUString aActiveList( ::rtl::OUString::createFromAscii( apCurLists[k] ) );
+ OUString aLastFoundList( ::rtl::OUString::createFromAscii( apLastFoundLists[k] ) );
+ sal_Int32 i;
+
+ //
+ // remove configured but not available language/services entries
+ //
+ Sequence< OUString > aNodeNames( aCfg.GetNodeNames( aActiveList ) ); // list of configured locales
+ sal_Int32 nNodeNames = aNodeNames.getLength();
+ const OUString *pNodeName = aNodeNames.getConstArray();
+ for (i = 0; i < nNodeNames; ++i)
+ {
+ Locale aLocale( CreateLocale( MsLangId::convertIsoStringToLanguage(pNodeName[i]) ) );
+ Sequence< OUString > aCfgSvcs( getConfiguredServices( aService, aLocale ));
+ Sequence< OUString > aAvailSvcs( getAvailableServices( aService, aLocale ));
+
+ aCfgSvcs = lcl_RemoveMissingEntries( aCfgSvcs, aAvailSvcs );
+
+ aCurSvcs[k][ pNodeName[i] ] = aCfgSvcs;
+ }
+
+ //
+ // add new available language/service entries
+ // and
+ // set last found services to currently available ones
+ //
+ Sequence< Locale > aAvailLocales( getAvailableLocales(aService) );
+ sal_Int32 nAvailLocales = aAvailLocales.getLength();
+ const Locale *pAvailLocale = aAvailLocales.getConstArray();
+ for (i = 0; i < nAvailLocales; ++i)
+ {
+ OUString aCfgLocaleStr( MsLangId::convertLanguageToIsoString(
+ LocaleToLanguage( pAvailLocale[i] ) ) );
+
+ Sequence< OUString > aAvailSvcs( getAvailableServices( aService, pAvailLocale[i] ));
+
+ aLastFoundSvcs[k][ aCfgLocaleStr ] = aAvailSvcs;
+
+ Sequence< OUString > aLastSvcs(
+ lcl_GetLastFoundSvcs( aCfg, aLastFoundList , pAvailLocale[i] ));
+ Sequence< OUString > aNewSvcs =
+ lcl_GetNewEntries( aLastSvcs, aAvailSvcs );
+
+ Sequence< OUString > aCfgSvcs( aCurSvcs[k][ aCfgLocaleStr ] );
+
+ // merge services list (previously configured to be listed first).
+ aCfgSvcs = lcl_MergeSeq( aCfgSvcs, aNewSvcs );
+
+ aCurSvcs[k][ aCfgLocaleStr ] = aCfgSvcs;
+ }
+ }
+
+ //
+ // write new data back to configuration
+ //
+ for (int k = 0; k < nNumServices; ++k)
+ {
+ for (int i = 0; i < 2; ++i)
+ {
+ const sal_Char *pSubNodeName = (i == 0) ? apCurLists[k] : apLastFoundLists[k];
+ OUString aSubNodeName( ::rtl::OUString::createFromAscii(pSubNodeName) );
+
+ list_entry_map_t &rCurMap = (i == 0) ? aCurSvcs[k] : aLastFoundSvcs[k];
+ list_entry_map_t::const_iterator aIt( rCurMap.begin() );
+ sal_Int32 nVals = static_cast< sal_Int32 >( rCurMap.size() );
+ Sequence< PropertyValue > aNewValues( nVals );
+ PropertyValue *pNewValue = aNewValues.getArray();
+ while (aIt != rCurMap.end())
+ {
+ OUString aCfgEntryName( aSubNodeName );
+ aCfgEntryName += OUString::valueOf( (sal_Unicode) '/' );
+ aCfgEntryName += (*aIt).first;
+
+ pNewValue->Name = aCfgEntryName;
+ pNewValue->Value <<= (*aIt).second;
+ ++pNewValue;
+ ++aIt;
+ }
+ OSL_ENSURE( pNewValue - aNewValues.getArray() == nVals,
+ "possible mismatch of sequence size and property number" );
+
+ {
+ // add new or replace existing entries.
+ sal_Bool bRes = aCfg.ReplaceSetProperties( aSubNodeName, aNewValues );
+ if (!bRes)
+ {
+#if OSL_DEBUG_LEVEL > 1
+ OSL_FAIL( "failed to set new configuration values" );
+#endif
+ }
+ }
+ }
+ }
+
+ //The new settings in the configuration get applied ! because we are
+ //listening to the configuration for changes of the relevant ! properties
+ //and Notify applies the new settings.
+}
void LngSvcMgr::Notify( const uno::Sequence< OUString > &rPropertyNames )
{
@@ -1263,32 +1595,21 @@
if (0 == rServiceName.compareToAscii( SN_SPELLCHECKER ))
{
- // don't used cached data here (force re-evaluation in order to have downloaded dictionaries
- // already found without the need to restart the office
- delete pAvailSpellSvcs; pAvailSpellSvcs = 0;
GetAvailableSpellSvcs_Impl();
pInfoArray = pAvailSpellSvcs;
}
else if (0 == rServiceName.compareToAscii( SN_GRAMMARCHECKER ))
{
-// disable force re-loading of the cache - re-start needed for new grammer checkers: fdo#35270
-// delete pAvailGrammarSvcs; pAvailGrammarSvcs = 0;
GetAvailableGrammarSvcs_Impl();
pInfoArray = pAvailGrammarSvcs;
}
else if (0 == rServiceName.compareToAscii( SN_HYPHENATOR ))
{
- // don't used cached data here (force re-evaluation in order to have downloaded dictionaries
- // already found without the need to restart the office
- delete pAvailHyphSvcs; pAvailHyphSvcs = 0;
GetAvailableHyphSvcs_Impl();
pInfoArray = pAvailHyphSvcs;
}
else if (0 == rServiceName.compareToAscii( SN_THESAURUS ))
{
- // don't used cached data here (force re-evaluation in order to have downloaded dictionaries
- // already found without the need to restart the office
- delete pAvailThesSvcs; pAvailThesSvcs = 0;
GetAvailableThesSvcs_Impl();
pInfoArray = pAvailThesSvcs;
}
diff -ru libreoffice-3.5.5.3.orig/linguistic/source/lngsvcmgr.hxx libreoffice-3.5.5.3/linguistic/source/lngsvcmgr.hxx
--- libreoffice-3.5.5.3.orig/linguistic/source/lngsvcmgr.hxx 2012-07-13 12:23:35.598866391 +0100
+++ libreoffice-3.5.5.3/linguistic/source/lngsvcmgr.hxx 2012-07-16 08:49:27.833227231 +0100
@@ -30,7 +30,7 @@
#define _LINGUISTIC_LNGSVCMGR_HXX_
#include <uno/lbnames.h> // CPPU_CURRENT_LANGUAGE_BINDING_NAME macro, which specify the environment type
-#include <cppuhelper/implbase4.hxx> // helper for implementations
+#include <cppuhelper/implbase5.hxx> // helper for implementations
#include <cppuhelper/interfacecontainer.h> //OMultiTypeInterfaceContainerHelper
@@ -39,8 +39,10 @@
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/linguistic2/XLinguServiceManager.hpp>
#include <com/sun/star/linguistic2/XAvailableLocales.hpp>
+#include <com/sun/star/util/XModifyBroadcaster.hpp>
+#include <com/sun/star/util/XModifyListener.hpp>
#include <unotools/configitem.hxx>
-
+#include <vcl/timer.hxx>
#include <boost/ptr_container/ptr_vector.hpp>
#include "linguistic/misc.hxx"
@@ -65,12 +67,13 @@
class LngSvcMgr :
- public cppu::WeakImplHelper4
+ public cppu::WeakImplHelper5
<
com::sun::star::linguistic2::XLinguServiceManager,
com::sun::star::linguistic2::XAvailableLocales,
com::sun::star::lang::XComponent,
- com::sun::star::lang::XServiceInfo
+ com::sun::star::lang::XServiceInfo,
+ com::sun::star::util::XModifyListener
>,
private utl::ConfigItem
{
@@ -90,6 +93,12 @@
com::sun::star::uno::Reference<
::com::sun::star::lang::XEventListener > xListenerHelper;
+ com::sun::star::uno::Reference<
+ ::com::sun::star::util::XModifyBroadcaster> xMB;
+
+ Timer aUpdateTimer;
+
+
com::sun::star::uno::Sequence<
com::sun::star::lang::Locale > aAvailSpellLocales;
com::sun::star::uno::Sequence<
@@ -140,6 +149,10 @@
virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString > &rPropertyNames );
virtual void Commit();
+ void UpdateAll();
+ void stopListening();
+ DECL_LINK( updateAndBroadcast, void* );
+
public:
LngSvcMgr();
virtual ~LngSvcMgr();
@@ -167,6 +180,11 @@
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+ // XEventListener
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& rSource ) throw(::com::sun::star::uno::RuntimeException);
+
+ // XModifyListener
+ virtual void SAL_CALL modified( const ::com::sun::star::lang::EventObject& rEvent ) throw(::com::sun::star::uno::RuntimeException);
static inline ::rtl::OUString getImplementationName_Static();
static ::com::sun::star::uno::Sequence< ::rtl::OUString > getSupportedServiceNames_Static() throw();

View file

@ -1,37 +0,0 @@
From 4fc8af89257436b9cad70de574a166aa11ec42f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 9 Jul 2012 12:51:16 +0100
Subject: [PATCH] Resolves: rhbz#838368 --view ignored while -view accepted
and our ooviewdoc script uses --view
Change-Id: Ice708f1c72c8d29d411ba21e93cb19876af13881
---
desktop/source/app/cmdlineargs.cxx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx
index af7ee26..c67db8c 100644
--- a/desktop/source/app/cmdlineargs.cxx
+++ b/desktop/source/app/cmdlineargs.cxx
@@ -217,7 +217,7 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
bStartEvent = false;
bDisplaySpec = false;
}
- else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-view" )))
+ else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "view" )))
{
// open in viewmode
bOpenEvent = false;
@@ -229,7 +229,7 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
bStartEvent = false;
bDisplaySpec = false;
}
- else if ( aArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "-show" )))
+ else if ( oArg.equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM( "show" )))
{
// open in viewmode
bOpenEvent = false;
--
1.7.10.4

View file

@ -1,25 +0,0 @@
From b2d583e88ac53aafe96e71eb9b1068f6014100b7 Mon Sep 17 00:00:00 2001
From: David Tardon <dtardon@redhat.com>
Date: Thu, 21 Jun 2012 12:14:39 +0200
Subject: [PATCH] disable failing check
Change-Id: I746cd1178c40c78127e04dbc1876de052794bd57
---
sdext/Module_sdext.mk | 1 -
1 file changed, 1 deletion(-)
diff --git a/sdext/Module_sdext.mk b/sdext/Module_sdext.mk
index 6280984..ffafa6b 100644
--- a/sdext/Module_sdext.mk
+++ b/sdext/Module_sdext.mk
@@ -50,7 +50,6 @@ $(eval $(call gb_Module_add_targets,sdext,\
))
$(eval $(call gb_Module_add_check_targets,sdext,\
- CppunitTest_pdfimport \
))
endif
--
1.7.10.2

View file

@ -1,11 +0,0 @@
--- configure.in.tv 2012-08-02 10:07:41.303904565 +0000
+++ configure.in 2012-08-02 10:08:26.854002828 +0000
@@ -11707,7 +11707,7 @@
echo "setting up the build environment variables..."
if test -z "$COMPATH"; then
- AC_MSG_ERROR([No compiler found.])
+ COMPATH=/usr/bin
fi
AC_SUBST(COMPATH)

View file

@ -0,0 +1,39 @@
--- libreoffice-3.6.0/xmlhelp/source/cxxhelp/provider/databases.cxx.xmlhelp 2012-07-27 14:37:04.000000000 +0200
+++ libreoffice-3.6.0/xmlhelp/source/cxxhelp/provider/databases.cxx 2012-08-14 21:19:17.753127645 +0200
@@ -302,17 +302,32 @@ rtl::OString Databases::getImagesZipFile
bool bFound = false;
if ( !aSymbolsStyleName.isEmpty() )
{
- rtl::OUString aZipName = rtl::OUString( "images_" );
- aZipName += aSymbolsStyleName;
- aZipName += rtl::OUString( ".zip" );
-
+ rtl::OUString aZipName;
+ if (aSymbolsStyleName.equals( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("default")) )) {
+ aZipName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "images.zip" ));
+ } else {
+ aZipName = rtl::OUString( "images_" );
+ aZipName += aSymbolsStyleName;
+ aZipName += rtl::OUString( ".zip" );
+ }
bFound = impl_getZipFile( m_aImagesZipPaths, aZipName, aImageZip );
}
+ // Fallbacks in case the configured style file was not found
+ if ( ! bFound )
+ bFound = impl_getZipFile( m_aImagesZipPaths, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "images_oxygen.zip" )), aImageZip );
+ if ( ! bFound )
+ bFound = impl_getZipFile( m_aImagesZipPaths, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "images_crystal.zip" )), aImageZip );
+
if ( ! bFound )
bFound = impl_getZipFile( m_aImagesZipPaths, rtl::OUString( "images.zip" ), aImageZip );
if ( ! bFound )
+ bFound = impl_getZipFile( m_aImagesZipPaths, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "images_tango.zip" )), aImageZip );
+ if ( ! bFound )
+ bFound = impl_getZipFile( m_aImagesZipPaths, rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "images_hicontrast.zip" )), aImageZip );
+
+ if ( ! bFound )
aImageZip = rtl::OUString();
m_aImagesZipFileURL = rtl::OUStringToOString(

View file

@ -1,11 +0,0 @@
--- libreoffice-3.6.1/tail_build/Makefile.bero 2012-09-11 14:39:15.249292107 +0200
+++ libreoffice-3.6.1/tail_build/Makefile 2012-09-11 14:39:27.238357865 +0200
@@ -33,6 +33,8 @@ endif
include $(SOLARENV)/gbuild/gbuild.mk
+gb_LinkTarget_LDFLAGS += -lboost_system
+
$(eval $(call gb_Module_make_global_targets,$(SRCDIR)/Module_tail_build.mk))
# vim: set noet sw=4 ts=4:

View file

@ -0,0 +1,34 @@
--- libreoffice-3.6.2/sdext/source/pdfimport/test/tests.cxx.bero 2012-10-04 23:33:04.147833308 +0200
+++ libreoffice-3.6.2/sdext/source/pdfimport/test/tests.cxx 2012-10-04 23:38:50.599208470 +0200
@@ -78,6 +78,7 @@
#include <basegfx/polygon/b2dpolygonclipper.hxx>
#include <vector>
+#include <iostream>
#include <boost/unordered_map.hpp>
#include <cassert>
@@ -125,12 +126,17 @@ namespace
CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( "A4 page size (in 100th of points): Height" , m_aPageSize.Height, 59500, 0.0000001 );
CPPUNIT_ASSERT_MESSAGE( "endPage() called", m_bPageEnded );
CPPUNIT_ASSERT_EQUAL_MESSAGE( "Num pages equal one", m_nNumPages, (sal_Int32) 1 );
- CPPUNIT_ASSERT_MESSAGE( "Correct hyperlink bounding box",
- rtl::math::approxEqual(m_aHyperlinkBounds.X1,34.7 ) &&
- rtl::math::approxEqual(m_aHyperlinkBounds.Y1,386.0) &&
- rtl::math::approxEqual(m_aHyperlinkBounds.X2,166.7) &&
- rtl::math::approxEqual(m_aHyperlinkBounds.Y2,406.2) );
- CPPUNIT_ASSERT_EQUAL_MESSAGE( "Correct hyperlink URI", m_aURI, ::rtl::OUString("http://download.openoffice.org/") );
+ if(!(rtl::math::approxEqual(m_aHyperlinkBounds.X1,34.7 ) &&
+ rtl::math::approxEqual(m_aHyperlinkBounds.Y1,386.0) &&
+ rtl::math::approxEqual(m_aHyperlinkBounds.X2,166.7) &&
+ rtl::math::approxEqual(m_aHyperlinkBounds.Y2,406.2) )) {
+ std::cerr << "WARNING: hyperlink bounding box seems incorrect or inaccurate!" << std::endl
+ << " X1 (should be 34.7): " << m_aHyperlinkBounds.X1 << std::endl
+ << " Y1 (should be 386.0): " << m_aHyperlinkBounds.Y1 << std::endl
+ << " X2 (should be 166.7): " << m_aHyperlinkBounds.X2 << std::endl
+ << " Y2 (should be 406.2): " << m_aHyperlinkBounds.Y2 << std::endl;
+ } // Correct hyperlink bounding box
+ //CPPUNIT_ASSERT_EQUAL_MESSAGE( "Correct hyperlink URI", m_aURI, ::rtl::OUString("http://download.openoffice.org/") );
const char* sText = " \n \nThis is a testtext\nNew paragraph,\nnew line\n"
"Hyperlink, this is\n?\nThis is more text\noutline mode\n?\nNew paragraph\n";

View file

@ -1,43 +1,5 @@
# Lots of zero-length files in the i18n subpackages...
addFilter('E: zero-length')
# rpmlint treats some things as libraries that really aren't libraries
addFilter('E: postun-without-ldconfig')
addFilter('E: postin-without-ldconfig')
addFilter('E: non-versioned-file-in-library-package')
addFilter('E: binary-or-shlib-defines-rpath')
# Some scripts in the wizards aren't run directly - but parsed by UNO
# No need to make them executable
addFilter('E: non-executable-script')
# Let's fix builds outside the build system -- there's so many subpackages
# here that the absence of Packager: breaks the local build!
addFilter('E: no-packager-tag')
# FIXME: No idea what encoding they're really in...
addFilter('E: non-utf8-desktopfile')
addFilter('E: invalid-desktopfile')
# FIXME: Dependencies of the l10n packages should be sorted out better
# Not a priority though because directory dependencies work
addFilter('E: no-dependency-on')
# FIXME:
addFilter('E: script-without-shebang')
# libreoffice-base.x86_64: E: outside-libdir-files (Badness: 1) /usr/bin/lobase
# libreoffice-calc.x86_64: E: outside-libdir-files (Badness: 1) /usr/share/icons/hicolor/scalable/apps/mandriva-rosa-lo-calc_72.svg
# libreoffice-common.x86_64: E: outside-libdir-files (Badness: 1) /usr/share/icons/gnome/48x48/mimetypes/libreoffice-oasis-spreadsheet.png
# libreoffice-draw.x86_64: E: outside-libdir-files (Badness: 1) /usr/bin/lodraw
# libreoffice-impress.x86_64: E: outside-libdir-files (Badness: 1) /usr/share/icons/hicolor/scalable/apps/mandriva-rosa-lo-impress_72.svg
# libreoffice-math.x86_64: E: outside-libdir-files (Badness: 1) /usr/bin/lomath
# libreoffice-writer.x86_64: E: outside-libdir-files (Badness: 1) /usr/bin/loweb
# /usr/bin files for start up libreoffice apps then does not makes sense being
# considerated as libdir-files
addFilter('E: outside-libdir-files')
# openoffice.org64 in the core package conflicts
addFilter('E: incoherent-version-in-name')
# Necessary because of the slightly non-standard directory layout
addFilter("E: binary-or-shlib-defines-rpath")
addFilter("E: outside-libdir-files")
# Workaround for various empty files in lang packs
addFilter("E: zero-length")

File diff suppressed because it is too large Load diff

View file

@ -1,15 +0,0 @@
Index: configuration/ppds/SGENPRT.PS
===================================================================
RCS file: /cvs/external/psprint_config/configuration/ppds/SGENPRT.PS,v
retrieving revision 1.3
diff -u -p -u -r1.3 SGENPRT.PS
--- openoffice.org.orig/psprint_config/configuration/ppds/SGENPRT.PS 26 Nov 2004 16:10:35 -0000 1.3
+++ openoffice.org/psprint_config/configuration/ppds/SGENPRT.PS 30 Aug 2005 11:17:51 -0000
@@ -58,6 +58,7 @@
*ColorDevice: True
*DefaultColorSpace: RGB
*LanguageLevel: "2"
+*TTRasterizer: Type42
*% --- For None Color or old PostScript(R) printers use following lines ---
*% *ColorDevice: False

View file

@ -1,47 +0,0 @@
--- openoffice.org.orig/desktop/scripts/unopkg.sh 2008-01-14 15:55:26.000000000 +0000
+++ openoffice.org/desktop/scripts/unopkg.sh 2008-02-14 10:52:10.000000000 +0000
@@ -62,6 +62,33 @@
;;
esac
+isnotuser=0
+for arg in $@
+do
+if [ "$arg" = "--shared" -o "$arg" = "--bundled" ]; then
+ isnotuser=1
+fi
+done
+if [ $isnotuser -eq 1 ]; then
+ echo $@ | grep -q env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY
+ if [ $? -ne 0 ]; then
+ set -- $@ '-env:JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY=1'
+ fi
+ echo $@ | grep -q env:UNO_JAVA_JFW_INSTALL_DATA
+ if [ $? -ne 0 -a -w $sd_prog/../share/config/javasettingsunopkginstall.xml ]; then
+ set -- $@ '-env:UNO_JAVA_JFW_INSTALL_DATA=$$ORIGIN/../share/config/javasettingsunopkginstall.xml'
+ fi
+ echo $@ | grep -q env:UserInstallation
+ if [ $? -ne 0 ]; then
+ INSTDIR=`/bin/mktemp -d --tmpdir unoinstall.XXXXXX`
+ if [ $? -ne 0 ]; then
+ echo "Could not create tmp dir" >&2
+ exit 1
+ fi
+ set -- $@ '-env:UserInstallation=file://'$INSTDIR
+ fi
+fi
+
#collect all bootstrap variables specified on the command line
#so that they can be passed as arguments to javaldx later on
for arg in $@
@@ -110,6 +137,8 @@
# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS
# execute binary
-exec "$sd_prog/unopkg.bin" "$@" \
+"$sd_prog/unopkg.bin" "$@" \
"-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc"
-
+if [ -n "$INSTDIR" ]; then
+ rm -rf $INSTDIR
+fi

View file

@ -1,141 +0,0 @@
From 5316edea6948f3e2a77e4fc68799f67de21fada7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 5 Dec 2011 15:28:19 +0100
Subject: [PATCH] vertical content overflowing out of cell (#i88341#)
---
sc/source/ui/inc/output.hxx | 2 +
sc/source/ui/view/output2.cxx | 66 ++++++++++++++++++++++++++--------------
2 files changed, 45 insertions(+), 23 deletions(-)
diff --git a/sc/source/ui/inc/output.hxx b/sc/source/ui/inc/output.hxx
index 72934cf..3a91c14 100644
--- a/sc/source/ui/inc/output.hxx
+++ b/sc/source/ui/inc/output.hxx
@@ -306,6 +306,8 @@ public:
void DrawExtraShadow(sal_Bool bLeft, sal_Bool bTop, sal_Bool bRight, sal_Bool bBottom);
void DrawFrame();
+ bool UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet);
+
// with logic MapMode set!
void DrawEdit(sal_Bool bPixelToLogic);
diff --git a/sc/source/ui/view/output2.cxx b/sc/source/ui/view/output2.cxx
index de1506a..5522e69 100644
--- a/sc/source/ui/view/output2.cxx
+++ b/sc/source/ui/view/output2.cxx
@@ -2818,13 +2818,7 @@ void ScOutputData::DrawEditStandard(DrawEditParam& rParam)
(ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE);
bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1;
- // Don't clip for text height when printing rows with optimal height,
- // except when font size is from conditional formatting.
- //! Allow clipping when vertically merged?
- if ( eType != OUTTYPE_PRINTER ||
- ( pDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) ||
- ( rParam.mpCondSet && SFX_ITEM_SET ==
- rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) )
+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
bClip = true;
else
bSimClip = true;
@@ -2859,6 +2853,19 @@ void ScOutputData::DrawEditStandard(DrawEditParam& rParam)
}
Rectangle aLogicClip;
+ if (
+ ((nAttrRotate == 9000) || (nAttrRotate == 27000)) &&
+ (!(rParam.meOrient==SVX_ORIENTATION_STANDARD &&
+ !rParam.mbAsianVertical)) &&
+ (!(bClip || bSimClip))
+ )
+ {
+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
+ bClip = true;
+ else
+ bSimClip = true;
+ }
+
if (bClip || bSimClip)
{
// Clip marks are already handled in GetOutputArea
@@ -3191,13 +3198,8 @@ void ScOutputData::DrawEditBottomTop(DrawEditParam& rParam)
(ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE);
bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1;
- // Don't clip for text height when printing rows with optimal height,
- // except when font size is from conditional formatting.
- //! Allow clipping when vertically merged?
- if ( eType != OUTTYPE_PRINTER ||
- ( pDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) ||
- ( rParam.mpCondSet && SFX_ITEM_SET ==
- rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) )
+
+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
bClip = true;
else
bSimClip = true;
@@ -3563,13 +3565,7 @@ void ScOutputData::DrawEditTopBottom(DrawEditParam& rParam)
(ScMergeAttr*)&rParam.mpPattern->GetItem(ATTR_MERGE);
bool bMerged = pMerge->GetColMerge() > 1 || pMerge->GetRowMerge() > 1;
- // Don't clip for text height when printing rows with optimal height,
- // except when font size is from conditional formatting.
- //! Allow clipping when vertically merged?
- if ( eType != OUTTYPE_PRINTER ||
- ( pDoc->GetRowFlags( rParam.mnCellY, nTab ) & CR_MANUALSIZE ) ||
- ( rParam.mpCondSet && SFX_ITEM_SET ==
- rParam.mpCondSet->GetItemState(ATTR_FONT_HEIGHT, true) ) )
+ if (UseNormalClip(rParam.mnCellY, rParam.mpCondSet))
bClip = true;
else
bSimClip = true;
@@ -4460,6 +4456,20 @@ void ScOutputData::DrawEditAsianVertical(DrawEditParam& rParam)
rParam.adjustForHyperlinkInPDF(aURLStart, pDev);
}
+bool ScOutputData::UseNormalClip(SCROW nCellY, const SfxItemSet* pCondSet)
+{
+ bool bNormalClip = false;
+ // Don't clip for text height when printing rows with optimal height,
+ // except when font size is from conditional formatting.
+ //! Allow clipping when vertically merged?
+ if ( eType != OUTTYPE_PRINTER ||
+ ( pDoc->GetRowFlags( nCellY, nTab ) & CR_MANUALSIZE ) ||
+ ( pCondSet && SFX_ITEM_SET ==
+ pCondSet->GetItemState(ATTR_FONT_HEIGHT, sal_True) ) )
+ bNormalClip = true;
+ return bNormalClip;
+}
+
void ScOutputData::DrawEdit(sal_Bool bPixelToLogic)
{
ScFieldEditEngine* pEngine = NULL;
@@ -5168,11 +5178,21 @@ void ScOutputData::DrawRotated(sal_Bool bPixelToLogic)
else
{
// bei gedrehtem Text ist Standard zentriert
+ long nDiff = 0;
if (eHorJust==SVX_HOR_JUSTIFY_RIGHT)
- aLogicStart.X() += nAvailWidth - nEngineWidth;
+ nDiff = nAvailWidth - nEngineWidth;
else if (eHorJust==SVX_HOR_JUSTIFY_CENTER ||
eHorJust==SVX_HOR_JUSTIFY_STANDARD)
- aLogicStart.X() += (nAvailWidth - nEngineWidth) / 2;
+ nDiff = (nAvailWidth - nEngineWidth) / 2;
+
+ if (nEngineWidth > nAvailWidth)
+ {
+ if (nAttrRotate == 9000)
+ nDiff = 0;
+ else if (nAttrRotate == 27000)
+ nDiff = nAvailWidth - nEngineWidth;
+ }
+ aLogicStart.X() += nDiff;
}
}
--
1.7.7.3

View file

@ -1,187 +0,0 @@
From 7e3bdb601c02e60b772e64ec9d11c56881c9a643 Mon Sep 17 00:00:00 2001
From: David Tardon <dtardon@redhat.com>
Date: Thu, 1 Dec 2011 14:02:07 +0100
Subject: [PATCH 1/2] #i101274 a directory on command line is silently ignored
---
.../source/misc/stillreadwriteinteraction.cxx | 1 +
ucbhelper/source/client/content.cxx | 75 ++++++++++++++++++++
2 files changed, 76 insertions(+), 0 deletions(-)
diff --git a/comphelper/source/misc/stillreadwriteinteraction.cxx b/comphelper/source/misc/stillreadwriteinteraction.cxx
index 124564d..506f31c 100644
--- a/comphelper/source/misc/stillreadwriteinteraction.cxx
+++ b/comphelper/source/misc/stillreadwriteinteraction.cxx
@@ -96,6 +96,7 @@ ucbhelper::InterceptedInteraction::EInterceptionState StillReadWriteInteraction:
bAbort = (
(exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED )
|| (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION )
+ || (exIO.Code == css::ucb::IOErrorCode_NO_FILE )
|| (exIO.Code == css::ucb::IOErrorCode_NOT_EXISTING )
#ifdef MACOSX
// this is a workaround for MAC, on this platform if the file is locked
diff --git a/ucbhelper/source/client/content.cxx b/ucbhelper/source/client/content.cxx
index 676acd5..4a599c9 100644
--- a/ucbhelper/source/client/content.cxx
+++ b/ucbhelper/source/client/content.cxx
@@ -38,6 +38,7 @@
#include <cppuhelper/weak.hxx>
#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
#include <com/sun/star/ucb/ContentCreationError.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <com/sun/star/ucb/XCommandInfo.hpp>
@@ -47,6 +48,8 @@
#include <com/sun/star/ucb/ContentAction.hpp>
#include <com/sun/star/ucb/OpenCommandArgument2.hpp>
#include <com/sun/star/ucb/InsertCommandArgument.hpp>
+#include <com/sun/star/ucb/IOErrorCode.hpp>
+#include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
#include <com/sun/star/ucb/GlobalTransferCommandArgument.hpp>
#include <com/sun/star/ucb/NameClash.hpp>
#include <com/sun/star/ucb/OpenMode.hpp>
@@ -64,6 +67,8 @@
#include <com/sun/star/sdbc/XRow.hpp>
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/beans/UnknownPropertyException.hpp>
+#include <com/sun/star/task/XInteractionRequest.hpp>
+
#include <ucbhelper/macros.hxx>
#include <ucbhelper/content.hxx>
#include <ucbhelper/contentbroker.hxx>
@@ -71,6 +76,10 @@
#include <ucbhelper/activedatastreamer.hxx>
#include <ucbhelper/interactionrequest.hxx>
#include <ucbhelper/cancelcommandexecution.hxx>
+#include <ucbhelper/fileidentifierconverter.hxx>
+#include <ucbhelper/simpleinteractionrequest.hxx>
+
+#include <memory>
using namespace com::sun::star::container;
using namespace com::sun::star::beans;
@@ -373,6 +382,54 @@ static Reference< XContent > getContent(
return Reference< XContent >();
}
+namespace
+{
+
+void
+lcl_displayMessage(
+ const Reference<XCommandEnvironment>& rEnvironment,
+ const rtl::OUString& rUri)
+{
+ // Create exception
+ const Reference<XContentProviderManager> xCPM(
+ getContentBroker(true)->getContentProviderManagerInterface());
+ const PropertyValue aUriProperty(
+ rtl::OUString::createFromAscii("Uri"),
+ -1,
+ makeAny(getSystemPathFromFileURL(xCPM, rUri)),
+ PropertyState_DIRECT_VALUE)
+ ;
+ Sequence<Any> lArguments(1);
+ lArguments[0] <<= aUriProperty;
+ const InteractiveAugmentedIOException xError(
+ rtl::OUString(),
+ 0,
+ InteractionClassification_ERROR,
+ IOErrorCode_NO_FILE,
+ lArguments)
+ ;
+
+ // Create interaction request
+ std::auto_ptr<ucbhelper::SimpleInteractionRequest> aRequest(
+ new ucbhelper::SimpleInteractionRequest(makeAny(xError), CONTINUATION_APPROVE));
+ {
+ Reference<XInteractionContinuation> xContinuation(
+ new ::ucbhelper::InteractionApprove(aRequest.get()));
+ Sequence<Reference<XInteractionContinuation> > lContinuations(1);
+ lContinuations[0].set(xContinuation);
+ aRequest->setContinuations(lContinuations);
+ }
+
+ Reference<XInteractionHandler> xInteraction(rEnvironment->getInteractionHandler());
+ if (xInteraction.is())
+ {
+ Reference<XInteractionRequest> xRequest(aRequest.release());
+ xInteraction->handle(xRequest);
+ }
+}
+
+}
+
//=========================================================================
//=========================================================================
//
@@ -787,7 +902,10 @@ Reference< XInputStream > Content::openStream()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XInputStream >();
+ }
Reference< XActiveDataSink > xSink = new ActiveDataSink;
@@ -813,7 +930,10 @@ Reference< XInputStream > Content::openStreamNoLock()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XInputStream >();
+ }
Reference< XActiveDataSink > xSink = new ActiveDataSink;
@@ -838,7 +965,10 @@ Reference< XStream > Content::openWriteableStream()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XStream >();
+ }
Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer;
@@ -863,7 +990,10 @@ Reference< XStream > Content::openWriteableStreamNoLock()
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return Reference< XStream >();
+ }
Reference< XActiveDataStreamer > xStreamer = new ActiveDataStreamer;
@@ -888,7 +1019,10 @@ sal_Bool Content::openStream( const Reference< XActiveDataSink >& rSink )
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return sal_False;
+ }
OpenCommandArgument2 aArg;
aArg.Mode = OpenMode::DOCUMENT;
@@ -911,7 +1045,10 @@ sal_Bool Content::openStream( const Reference< XOutputStream >& rStream )
throw( CommandAbortedException, RuntimeException, Exception )
{
if ( !isDocument() )
+ {
+ lcl_displayMessage(m_xImpl->getEnvironment(), getURL());
return sal_False;
+ }
OpenCommandArgument2 aArg;
aArg.Mode = OpenMode::DOCUMENT;
--
1.7.7.3

View file

@ -1,199 +0,0 @@
From 36644331aad8382ccab7fb19d7ab3339bbff0c20 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Thu, 1 Dec 2011 14:18:09 +0100
Subject: [PATCH 2/2] #i105784# vcl: improve selection of fallback font by
supplying language hint when none exists
---
vcl/generic/fontmanager/fontconfig.cxx | 143 +++++++++++++++++++++++++++++++-
1 files changed, 141 insertions(+), 2 deletions(-)
diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
index 4d02a76..ecd3b5d 100644
--- a/vcl/generic/fontmanager/fontconfig.cxx
+++ b/vcl/generic/fontmanager/fontconfig.cxx
@@ -89,6 +89,9 @@ using namespace psp;
#include "sal/alloca.h"
+#include <i18nutil/unicode.hxx> //unicode::getUnicodeScriptType
+#include <com/sun/star/i18n/ScriptType.hdl> //ScriptType
+
#include <utility>
#include <algorithm>
@@ -747,6 +750,138 @@ static void addtopattern(FcPattern *pPattern,
}
}
+static const char* pick_sample_language(const sal_uInt32 cCode)
+{
+ using namespace ::com::sun::star::i18n;
+
+ static ScriptTypeList aScripts[] =
+ {
+ { UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin, UnicodeScript_kBasicLatin },
+ { UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement, UnicodeScript_kLatin1Supplement },
+ { UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA, UnicodeScript_kLatinExtendedA },
+ { UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB, UnicodeScript_kLatinExtendedB },
+ { UnicodeScript_kGreek, UnicodeScript_kGreek, UnicodeScript_kGreek },
+ { UnicodeScript_kCyrillic, UnicodeScript_kCyrillic, UnicodeScript_kCyrillic },
+ { UnicodeScript_kArmenian, UnicodeScript_kArmenian, UnicodeScript_kArmenian },
+ { UnicodeScript_kHebrew, UnicodeScript_kHebrew, UnicodeScript_kHebrew },
+ { UnicodeScript_kArabic, UnicodeScript_kArabic, UnicodeScript_kArabic },
+ { UnicodeScript_kSyriac, UnicodeScript_kSyriac, UnicodeScript_kSyriac },
+ { UnicodeScript_kThaana, UnicodeScript_kThaana, UnicodeScript_kThaana },
+ { UnicodeScript_kDevanagari, UnicodeScript_kDevanagari, UnicodeScript_kDevanagari },
+ { UnicodeScript_kBengali, UnicodeScript_kBengali, UnicodeScript_kBengali },
+ { UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi, UnicodeScript_kGurmukhi },
+ { UnicodeScript_kGujarati, UnicodeScript_kGujarati, UnicodeScript_kGujarati },
+ { UnicodeScript_kOriya, UnicodeScript_kOriya, UnicodeScript_kOriya },
+ { UnicodeScript_kTamil, UnicodeScript_kTamil, UnicodeScript_kTamil },
+ { UnicodeScript_kTelugu, UnicodeScript_kTelugu, UnicodeScript_kTelugu },
+ { UnicodeScript_kKannada, UnicodeScript_kKannada, UnicodeScript_kKannada },
+ { UnicodeScript_kMalayalam, UnicodeScript_kMalayalam, UnicodeScript_kMalayalam },
+ { UnicodeScript_kSinhala, UnicodeScript_kSinhala, UnicodeScript_kSinhala },
+ { UnicodeScript_kThai, UnicodeScript_kThai, UnicodeScript_kThai },
+ { UnicodeScript_kLao, UnicodeScript_kLao, UnicodeScript_kLao },
+ { UnicodeScript_kTibetan, UnicodeScript_kTibetan, UnicodeScript_kTibetan },
+ { UnicodeScript_kMyanmar, UnicodeScript_kMyanmar, UnicodeScript_kMyanmar },
+ { UnicodeScript_kGeorgian, UnicodeScript_kGeorgian, UnicodeScript_kGeorgian },
+ { UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo, UnicodeScript_kHangulJamo },
+ { UnicodeScript_kEthiopic, UnicodeScript_kEthiopic, UnicodeScript_kEthiopic },
+ { UnicodeScript_kCherokee, UnicodeScript_kCherokee, UnicodeScript_kCherokee },
+ { UnicodeScript_kUnifiedCanadianAboriginalSyllabics,
+ UnicodeScript_kUnifiedCanadianAboriginalSyllabics,
+ UnicodeScript_kUnifiedCanadianAboriginalSyllabics },
+ { UnicodeScript_kKhmer, UnicodeScript_kKhmer, UnicodeScript_kKhmer },
+ { UnicodeScript_kMongolian, UnicodeScript_kMongolian, UnicodeScript_kMongolian },
+ { UnicodeScript_kLatinExtendedAdditional, UnicodeScript_kLatinExtendedAdditional,
+ UnicodeScript_kLatinExtendedAdditional },
+ { UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended, UnicodeScript_kGreekExtended },
+ { UnicodeScript_kHiragana, UnicodeScript_kHiragana, UnicodeScript_kHiragana },
+ { UnicodeScript_kKatakana, UnicodeScript_kKatakana, UnicodeScript_kKatakana },
+ { UnicodeScript_kHangulCompatibilityJamo, UnicodeScript_kHangulCompatibilityJamo,
+ UnicodeScript_kHangulCompatibilityJamo },
+ { UnicodeScript_kHangulSyllable, UnicodeScript_kHangulSyllable,
+ UnicodeScript_kHangulSyllable },
+ { UnicodeScript_kArabicPresentationB, UnicodeScript_kArabicPresentationB,
+ UnicodeScript_kArabicPresentationB },
+ { UnicodeScript_kScriptCount, UnicodeScript_kScriptCount, UnicodeScript_kScriptCount }
+ };
+
+ switch (unicode::getUnicodeScriptType(cCode, aScripts, UnicodeScript_kScriptCount))
+ {
+ case UnicodeScript_kBasicLatin:
+ case UnicodeScript_kLatin1Supplement:
+ case UnicodeScript_kLatinExtendedA:
+ case UnicodeScript_kLatinExtendedB:
+ case UnicodeScript_kLatinExtendedAdditional:
+ return "en";
+ case UnicodeScript_kGreek:
+ case UnicodeScript_kGreekExtended:
+ return "el";
+ case UnicodeScript_kCyrillic:
+ return "ru";
+ case UnicodeScript_kArmenian:
+ return "hy";
+ case UnicodeScript_kHebrew:
+ return "he";
+ case UnicodeScript_kArabic:
+ case UnicodeScript_kArabicPresentationB:
+ return "ar";
+ case UnicodeScript_kSyriac:
+ return "syr";
+ case UnicodeScript_kThaana:
+ return "dv";
+ case UnicodeScript_kDevanagari:
+ return "hi";
+ case UnicodeScript_kBengali:
+ return "bn";
+ case UnicodeScript_kGurmukhi:
+ return "pa";
+ case UnicodeScript_kGujarati:
+ return "gu";
+ case UnicodeScript_kOriya:
+ return "or";
+ case UnicodeScript_kTamil:
+ return "ta";
+ case UnicodeScript_kTelugu:
+ return "te";
+ case UnicodeScript_kKannada:
+ return "ka";
+ case UnicodeScript_kMalayalam:
+ return "ml";
+ case UnicodeScript_kSinhala:
+ return "si";
+ case UnicodeScript_kThai:
+ return "th";
+ case UnicodeScript_kLao:
+ return "lo";
+ case UnicodeScript_kTibetan:
+ return "bo";
+ case UnicodeScript_kMyanmar:
+ return "my";
+ case UnicodeScript_kGeorgian:
+ return "ka";
+ case UnicodeScript_kHangulJamo:
+ case UnicodeScript_kHangulCompatibilityJamo:
+ case UnicodeScript_kHangulSyllable:
+ return "ko";
+ case UnicodeScript_kEthiopic:
+ return "am";
+ case UnicodeScript_kCherokee:
+ return "chr";
+ case UnicodeScript_kUnifiedCanadianAboriginalSyllabics:
+ return "ui";
+ case UnicodeScript_kKhmer:
+ return "km";
+ case UnicodeScript_kMongolian:
+ return "mn";
+ case UnicodeScript_kHiragana:
+ case UnicodeScript_kKatakana:
+ return "ja";
+ default:
+ break;
+ }
+
+ return NULL;
+}
+
bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& rMissingCodes )
{
bool bRet = false;
@@ -764,14 +899,13 @@ bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& r
FcPatternAddString(pPattern, FC_FAMILY, pTargetNameUtf8);
const rtl::OString aLangAttrib = MsLangId::convertLanguageToIsoByteString(rPattern.meLanguage);
+ const FcChar8* pLangAttribUtf8 = NULL;
if( !aLangAttrib.isEmpty() )
{
- const FcChar8* pLangAttribUtf8;
if (aLangAttrib.equalsIgnoreAsciiCase(OString(RTL_CONSTASCII_STRINGPARAM("pa-in"))))
pLangAttribUtf8 = (FcChar8*)"pa";
else
pLangAttribUtf8 = (FcChar8*)aLangAttrib.getStr();
- FcPatternAddString(pPattern, FC_LANG, pLangAttribUtf8);
}
// Add required Unicode characters, if any
@@ -783,11 +917,16 @@ bool PrintFontManager::Substitute( FontSelectPattern &rPattern, rtl::OUString& r
// also handle unicode surrogates
const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
FcCharSetAddChar( unicodes, nCode );
+ if (!pLangAttribUtf8)
+ pLangAttribUtf8 = (const FcChar8*)pick_sample_language(nCode);
}
FcPatternAddCharSet(pPattern, FC_CHARSET, unicodes);
FcCharSetDestroy(unicodes);
}
+ if( pLangAttribUtf8 )
+ FcPatternAddString( pPattern, FC_LANG, pLangAttribUtf8 );
+
addtopattern(pPattern, rPattern.meItalic, rPattern.meWeight,
rPattern.meWidthType, rPattern.mePitch);
--
1.7.7.3