parent
ae0cf6b030
commit
a0d2c2deeb
@ -1,138 +0,0 @@
|
||||
From 163116da07b5b277b9f0489e2542fac6eef43cc9 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Wielaard <mark@klomp.org>
|
||||
Date: Fri, 31 May 2013 00:10:58 +0200
|
||||
Subject: [PATCH] Make charmap.cxx compile with icu >= 4.4.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
configure.ac claims ICU >= 4.2 is supported. Make it so.
|
||||
|
||||
Change-Id: Ia08bb492f41dcb88bc84550edb51ce5e89fe1103
|
||||
Reviewed-on: https://gerrit.libreoffice.org/4112
|
||||
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
||||
Tested-by: Caolán McNamara <caolanm@redhat.com>
|
||||
(cherry picked from commit 30c3032920be91741ab089966f7e458ce08d09a4)
|
||||
---
|
||||
i18npool/qa/cppunit/test_breakiterator.cxx | 4 +++-
|
||||
i18nutil/source/utility/unicode.cxx | 6 +++---
|
||||
svx/source/dialog/charmap.cxx | 5 +++++
|
||||
sw/source/core/text/porlay.cxx | 4 ++++
|
||||
4 files changed, 15 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx
|
||||
index 41e4077..b121f6d 100644
|
||||
--- a/i18npool/qa/cppunit/test_breakiterator.cxx
|
||||
+++ b/i18npool/qa/cppunit/test_breakiterator.cxx
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <com/sun/star/i18n/WordType.hpp>
|
||||
#include <unotest/bootstrapfixturebase.hxx>
|
||||
|
||||
-#include <unicode/uvernum.h>
|
||||
+#include <unicode/uversion.h>
|
||||
|
||||
#include <rtl/strbuf.hxx>
|
||||
#include <rtl/ustrbuf.hxx>
|
||||
@@ -233,6 +233,8 @@ void TestBreakIterator::testWordBoundaries()
|
||||
}
|
||||
|
||||
//See https://bugs.freedesktop.org/show_bug.cgi?id=49629
|
||||
+ //Note that the breakiterator test will fail on older icu versions
|
||||
+ //(4.2.1) for the 200B (ZWSP) Zero Width Space testcase.
|
||||
sal_Unicode aBreakTests[] = { ' ', 1, 2, 3, 4, 5, 6, 7, 0x91, 0x92, 0x200B, 0xE8FF, 0xF8FF };
|
||||
for (int mode = i18n::WordType::ANY_WORD; mode <= i18n::WordType::WORD_COUNT; ++mode)
|
||||
{
|
||||
diff --git a/i18nutil/source/utility/unicode.cxx b/i18nutil/source/utility/unicode.cxx
|
||||
index 2c2dd42..b46a7f6 100644
|
||||
--- a/i18nutil/source/utility/unicode.cxx
|
||||
+++ b/i18nutil/source/utility/unicode.cxx
|
||||
@@ -826,6 +826,9 @@ OString SAL_CALL unicode::getExemplerLanguageForUScriptCode(UScriptCode eScript)
|
||||
case USCRIPT_TAI_VIET:
|
||||
sRet = "blt";
|
||||
break;
|
||||
+ case USCRIPT_MANDAEAN: /* Aliased to USCRIPT_MANDAIC in icu 4.6. */
|
||||
+ sRet = "mic";
|
||||
+ break;
|
||||
#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 4)
|
||||
case USCRIPT_NABATAEAN: //no language with an assigned code yet
|
||||
sRet = "mis";
|
||||
@@ -833,9 +836,6 @@ OString SAL_CALL unicode::getExemplerLanguageForUScriptCode(UScriptCode eScript)
|
||||
case USCRIPT_PALMYRENE: //no language with an assigned code yet
|
||||
sRet = "mis";
|
||||
break;
|
||||
- case USCRIPT_MANDAIC:
|
||||
- sRet = "mic";
|
||||
- break;
|
||||
case USCRIPT_BAMUM:
|
||||
sRet = "bax";
|
||||
break;
|
||||
diff --git a/svx/source/dialog/charmap.cxx b/svx/source/dialog/charmap.cxx
|
||||
index 82239d8..be165f8 100644
|
||||
--- a/svx/source/dialog/charmap.cxx
|
||||
+++ b/svx/source/dialog/charmap.cxx
|
||||
@@ -1302,6 +1302,7 @@ void SubsetMap::InitList()
|
||||
case UBLOCK_DOMINO_TILES:
|
||||
aAllSubsets.push_back( Subset( 0x1F030, 0x1F09F, RID_SUBSETSTR_DOMINO_TILES ) );
|
||||
break;
|
||||
+#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 4)
|
||||
case UBLOCK_SAMARITAN:
|
||||
aAllSubsets.push_back( Subset( 0x0800, 0x083F, RID_SUBSETSTR_SAMARITAN ) );
|
||||
break;
|
||||
@@ -1380,6 +1381,8 @@ void SubsetMap::InitList()
|
||||
case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C:
|
||||
aAllSubsets.push_back( Subset( 0x2A700, 0x2B73F, RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C ) );
|
||||
break;
|
||||
+#endif
|
||||
+#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 6)
|
||||
case UBLOCK_MANDAIC:
|
||||
aAllSubsets.push_back( Subset( 0x0840, 0x085F, RID_SUBSETSTR_MANDAIC ) );
|
||||
break;
|
||||
@@ -1416,6 +1419,8 @@ void SubsetMap::InitList()
|
||||
case UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D:
|
||||
aAllSubsets.push_back( Subset( 0x2B740, 0x2B81F, RID_SUBSETSTR_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D ) );
|
||||
break;
|
||||
+#endif
|
||||
+// Note ICU version 49 (NOT 4.9), so the MAJOR_NUM is two digits.
|
||||
#if U_ICU_VERSION_MAJOR_NUM >= 49
|
||||
case UBLOCK_ARABIC_EXTENDED_A:
|
||||
aAllSubsets.push_back( Subset( 0x08A0, 0x08FF, RID_SUBSETSTR_ARABIC_EXTENDED_A ) );
|
||||
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
|
||||
index b820b8b..edc8458 100644
|
||||
--- a/sw/source/core/text/porlay.cxx
|
||||
+++ b/sw/source/core/text/porlay.cxx
|
||||
@@ -72,7 +72,11 @@ using namespace i18n::ScriptType;
|
||||
#define isRehChar(c) IS_JOINING_GROUP((c), REH)
|
||||
#define isTehMarbutaChar(c) IS_JOINING_GROUP((c), TEH_MARBUTA)
|
||||
#define isWawChar(c) IS_JOINING_GROUP((c), WAW)
|
||||
+#if (U_ICU_VERSION_MAJOR_NUM > 4) || (U_ICU_VERSION_MAJOR_NUM == 4 && U_ICU_VERSION_MINOR_NUM >= 4)
|
||||
#define isYehChar(c) (IS_JOINING_GROUP((c), YEH) || IS_JOINING_GROUP((c), FARSI_YEH))
|
||||
+#else
|
||||
+#define isYehChar(c) IS_JOINING_GROUP((c), YEH)
|
||||
+#endif
|
||||
#define isSeenOrSadChar(c) (IS_JOINING_GROUP((c), SAD) || IS_JOINING_GROUP((c), SEEN))
|
||||
|
||||
bool isTransparentChar ( sal_Unicode cCh )
|
||||
diff --git a/i18npool/qa/cppunit/test_breakiterator.cxx b/i18npool/qa/cppunit/test_breakiterator.cxx
|
||||
--- a/i18npool/qa/cppunit/test_breakiterator.cxx
|
||||
+++ b/i18npool/qa/cppunit/test_breakiterator.cxx
|
||||
@@ -233,14 +233,18 @@
|
||||
}
|
||||
|
||||
//See https://bugs.freedesktop.org/show_bug.cgi?id=49629
|
||||
- //Note that the breakiterator test will fail on older icu versions
|
||||
- //(4.2.1) for the 200B (ZWSP) Zero Width Space testcase.
|
||||
sal_Unicode aBreakTests[] = { ' ', 1, 2, 3, 4, 5, 6, 7, 0x91, 0x92, 0x200B, 0xE8FF, 0xF8FF };
|
||||
for (int mode = i18n::WordType::ANY_WORD; mode <= i18n::WordType::WORD_COUNT; ++mode)
|
||||
{
|
||||
//make sure that in all cases isBeginWord and isEndWord matches getWordBoundary
|
||||
for (size_t i = 0; i < SAL_N_ELEMENTS(aBreakTests); ++i)
|
||||
{
|
||||
+#if (U_ICU_VERSION_MAJOR_NUM == 4) && (U_ICU_VERSION_MINOR_NUM <= 2)
|
||||
+ //Note the breakiterator test is known to fail on older icu
|
||||
+ //versions (4.2.1) for the 200B (ZWSP) Zero Width Space testcase.
|
||||
+ if (aBreakTests[i] == 0x200B)
|
||||
+ continue;
|
||||
+#endif
|
||||
OUString aTest("Word");
|
||||
aTest += OUString(aBreakTests[i]) + OUString("Word");
|
||||
aBounds = m_xBreak->getWordBoundary(aTest, 0, aLocale, mode, true);
|
@ -1,209 +0,0 @@
|
||||
From 82bce2c10fe5718a3a51125ce0c284c13315d00d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Fri, 15 Nov 2013 17:06:21 +0000
|
||||
Subject: [PATCH] Related: rhbz#1014990 valgrind reports uninitialized variable
|
||||
|
||||
(cherry picked from commit f3660062ce8a2c65d483b83c2800d9b958d12f08)
|
||||
|
||||
Conflicts:
|
||||
sd/source/filter/eppt/epptbase.hxx
|
||||
|
||||
Change-Id: Ibaa2ed0ee2f1f3f00bceec91ccced968e4913e47
|
||||
|
||||
Related: rhbz#1014990 valgrind reports uninitialized another variable
|
||||
|
||||
Change-Id: I77f082ea145b0f20daa93c3ee04067ecb6c3b108
|
||||
(cherry picked from commit b7069ad07dc651f5326cd3a671588d8c1ecf2534)
|
||||
|
||||
Related: rhbz#1014990 valgrind reports yet another uninitialized variable
|
||||
|
||||
Change-Id: Idf15ee825a34aa7788c422475aa6cea8ff802581
|
||||
(cherry picked from commit e0840f70565062b712e544f952640ee35cfb6a27)
|
||||
|
||||
Related: rhbz#1014990 valgrind reports yet another unint variable
|
||||
|
||||
Change-Id: Idf6a0a1e12fffee6c090add41247723f1d9cf576
|
||||
(cherry picked from commit b211b8b2e14bd961a7b32033468a94cbff52b5c4)
|
||||
Reviewed-on: https://gerrit.libreoffice.org/6712
|
||||
Reviewed-by: Michael Stahl <mstahl@redhat.com>
|
||||
Tested-by: Michael Stahl <mstahl@redhat.com>
|
||||
---
|
||||
sd/source/filter/eppt/epptbase.hxx | 3 +++
|
||||
sd/source/filter/eppt/pptx-stylesheet.cxx | 4 +--
|
||||
sd/source/filter/eppt/pptx-text.cxx | 41 +++++++++++++++++++++++--------
|
||||
sd/source/filter/eppt/text.hxx | 28 +++++++++++++--------
|
||||
vcl/source/filter/wmf/emfwr.cxx | 19 ++++++--------
|
||||
5 files changed, 62 insertions(+), 33 deletions(-)
|
||||
|
||||
diff --git a/sd/source/filter/eppt/epptbase.hxx b/sd/source/filter/eppt/epptbase.hxx
|
||||
index f84360d..2566b98 100644
|
||||
--- a/sd/source/filter/eppt/epptbase.hxx
|
||||
+++ b/sd/source/filter/eppt/epptbase.hxx
|
||||
@@ -157,6 +157,9 @@ struct FontCollectionEntry
|
||||
|
||||
FontCollectionEntry( const String& rName ) :
|
||||
Scaling ( 1.0 ),
|
||||
+ Family ( 0 ),
|
||||
+ Pitch ( 0 ),
|
||||
+ CharSet ( 0 ),
|
||||
Original( rName )
|
||||
{
|
||||
ImplInit( rName );
|
||||
diff --git a/sd/source/filter/eppt/pptx-stylesheet.cxx b/sd/source/filter/eppt/pptx-stylesheet.cxx
|
||||
index d9fd8fd..24e98f1 100644
|
||||
--- a/sd/source/filter/eppt/pptx-stylesheet.cxx
|
||||
+++ b/sd/source/filter/eppt/pptx-stylesheet.cxx
|
||||
@@ -286,8 +286,8 @@ void PPTExParaSheet::SetStyleSheet( const ::com::sun::star::uno::Reference< ::co
|
||||
|
||||
if ( !nLevel )
|
||||
{
|
||||
- if ( ( aParagraphObj.meBullet == ::com::sun::star::beans::PropertyState_DIRECT_VALUE )
|
||||
- && aParagraphObj.bExtendedParameters )
|
||||
+ if (aParagraphObj.bExtendedParameters &&
|
||||
+ aParagraphObj.meBullet == ::com::sun::star::beans::PropertyState_DIRECT_VALUE)
|
||||
{
|
||||
for ( sal_Int16 i = 0; i < 5; i++ )
|
||||
{
|
||||
diff --git a/sd/source/filter/eppt/pptx-text.cxx b/sd/source/filter/eppt/pptx-text.cxx
|
||||
index adadc44..cc0c769 100644
|
||||
--- a/sd/source/filter/eppt/pptx-text.cxx
|
||||
+++ b/sd/source/filter/eppt/pptx-text.cxx
|
||||
@@ -628,10 +628,21 @@ PortionObj& PortionObj::operator=( const PortionObj& rPortionObj )
|
||||
return *this;
|
||||
}
|
||||
|
||||
-ParagraphObj::ParagraphObj( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
|
||||
- PPTExBulletProvider& rProv ) :
|
||||
- maMapModeSrc ( MAP_100TH_MM ),
|
||||
- maMapModeDest ( MAP_INCH, Point(), Fraction( 1, 576 ), Fraction( 1, 576 ) )
|
||||
+ParagraphObj::ParagraphObj(const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
|
||||
+ PPTExBulletProvider& rProv)
|
||||
+ : maMapModeSrc(MAP_100TH_MM)
|
||||
+ , maMapModeDest(MAP_INCH, Point(), Fraction( 1, 576 ), Fraction( 1, 576 ))
|
||||
+ , mnTextSize(0)
|
||||
+ , mbFirstParagraph(false)
|
||||
+ , mbLastParagraph(false)
|
||||
+ , mnTextAdjust(0)
|
||||
+ , mnLineSpacing(0)
|
||||
+ , mbFixedLineSpacing(false)
|
||||
+ , mnLineSpacingTop(0)
|
||||
+ , mnLineSpacingBottom(0)
|
||||
+ , mbForbiddenRules(false)
|
||||
+ , mbParagraphPunctation(false)
|
||||
+ , mnBiDi(0)
|
||||
{
|
||||
mXPropSet = rXPropSet;
|
||||
|
||||
@@ -644,12 +655,22 @@ ParagraphObj::ParagraphObj( const ::com::sun::star::uno::Reference< ::com::sun::
|
||||
ImplGetParagraphValues( rProv, sal_False );
|
||||
}
|
||||
|
||||
- ParagraphObj::ParagraphObj( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > & rXTextContent,
|
||||
- ParaFlags aParaFlags, FontCollection& rFontCollection, PPTExBulletProvider& rProv ) :
|
||||
- maMapModeSrc ( MAP_100TH_MM ),
|
||||
- maMapModeDest ( MAP_INCH, Point(), Fraction( 1, 576 ), Fraction( 1, 576 ) ),
|
||||
- mbFirstParagraph ( aParaFlags.bFirstParagraph ),
|
||||
- mbLastParagraph ( aParaFlags.bLastParagraph )
|
||||
+ParagraphObj::ParagraphObj(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > & rXTextContent,
|
||||
+ ParaFlags aParaFlags, FontCollection& rFontCollection, PPTExBulletProvider& rProv )
|
||||
+ : maMapModeSrc(MAP_100TH_MM)
|
||||
+ , maMapModeDest(MAP_INCH, Point(), Fraction( 1, 576 ), Fraction( 1, 576 ))
|
||||
+ , mnTextSize(0)
|
||||
+ , mbIsBullet(false)
|
||||
+ , mbFirstParagraph( aParaFlags.bFirstParagraph )
|
||||
+ , mbLastParagraph( aParaFlags.bLastParagraph )
|
||||
+ , mnTextAdjust(0)
|
||||
+ , mnLineSpacing(0)
|
||||
+ , mbFixedLineSpacing(false)
|
||||
+ , mnLineSpacingTop(0)
|
||||
+ , mnLineSpacingBottom(0)
|
||||
+ , mbForbiddenRules(false)
|
||||
+ , mbParagraphPunctation(false)
|
||||
+ , mnBiDi(0)
|
||||
{
|
||||
bExtendedParameters = sal_False;
|
||||
|
||||
diff --git a/sd/source/filter/eppt/text.hxx b/sd/source/filter/eppt/text.hxx
|
||||
index 06bc4e0..c60ae43 100644
|
||||
--- a/sd/source/filter/eppt/text.hxx
|
||||
+++ b/sd/source/filter/eppt/text.hxx
|
||||
@@ -26,6 +26,7 @@
|
||||
#include <rtl/textenc.h>
|
||||
#include <com/sun/star/awt/FontDescriptor.hpp>
|
||||
#include <com/sun/star/lang/Locale.hpp>
|
||||
+#include <editeng/svxenum.hxx>
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
|
||||
@@ -62,17 +63,24 @@ struct SOParagraph
|
||||
sal_Bool bNumberingIsNumber;
|
||||
|
||||
SOParagraph()
|
||||
+ : bExtendedParameters(false)
|
||||
+ , nParaFlags(0)
|
||||
+ , nBulletFlags(0)
|
||||
+ , nNumberingType(SVX_NUM_NUMBER_NONE)
|
||||
+ , nHorzAdjust(0)
|
||||
+ , nBulletColor(0)
|
||||
+ , nBulletOfs(0)
|
||||
+ , nStartWith(0)
|
||||
+ , nTextOfs(0)
|
||||
+ , nBulletRealSize(0)
|
||||
+ , nDepth(0)
|
||||
+ , cBulletId(0)
|
||||
+ , bExtendedBulletsUsed(false)
|
||||
+ , nBulletId(0xffff)
|
||||
+ , nMappedNumType(0)
|
||||
+ , bNumberingIsNumber(true)
|
||||
{
|
||||
- nDepth = 0;
|
||||
- bExtendedParameters = sal_False;
|
||||
- nParaFlags = 0;
|
||||
- nBulletFlags = 0;
|
||||
- nBulletOfs = 0;
|
||||
- nTextOfs = 0;
|
||||
- bExtendedBulletsUsed = sal_False;
|
||||
- nBulletId = 0xffff;
|
||||
- bNumberingIsNumber = sal_True;
|
||||
- };
|
||||
+ }
|
||||
};
|
||||
|
||||
class PropStateValue : public PropValue
|
||||
diff --git a/vcl/source/filter/wmf/emfwr.cxx b/vcl/source/filter/wmf/emfwr.cxx
|
||||
index e4e3e51..841aa98 100644
|
||||
--- a/vcl/source/filter/wmf/emfwr.cxx
|
||||
+++ b/vcl/source/filter/wmf/emfwr.cxx
|
||||
@@ -282,21 +282,18 @@ sal_Bool EMFWriter::WriteEMF( const GDIMetaFile& rMtf, FilterConfigItem* pFilter
|
||||
{
|
||||
const sal_uLong nHeaderPos = m_rStm.Tell();
|
||||
|
||||
- mpHandlesUsed = new sal_Bool[ MAXHANDLES ];
|
||||
- memset( mpHandlesUsed, 0, MAXHANDLES * sizeof( sal_Bool ) );
|
||||
- mnHorTextAlign = mnHandleCount = mnLastPercent = mnRecordPos = mnRecordCount = 0;
|
||||
- mnRecordPlusPos = 0;
|
||||
- mnLineHandle = mnFillHandle = mnTextHandle = HANDLE_INVALID;
|
||||
- mbRecordOpen = sal_False;
|
||||
- mbRecordPlusOpen = false;
|
||||
-
|
||||
-
|
||||
maVDev.EnableOutput( sal_False );
|
||||
maVDev.SetMapMode( rMtf.GetPrefMapMode() );
|
||||
- mpFilterConfigItem = pFilterConfigItem;
|
||||
-
|
||||
// don't work with pixel as destination map mode -> higher resolution preferrable
|
||||
maDestMapMode.SetMapUnit( MAP_100TH_MM );
|
||||
+ mpFilterConfigItem = pFilterConfigItem;
|
||||
+ mpHandlesUsed = new sal_Bool[ MAXHANDLES ];
|
||||
+ memset( mpHandlesUsed, 0, MAXHANDLES * sizeof( sal_Bool ) );
|
||||
+ mnHandleCount = mnLastPercent = mnRecordCount = mnRecordPos = mnRecordPlusPos = 0;
|
||||
+ mbRecordOpen = mbRecordPlusOpen = false;
|
||||
+ mbLineChanged = mbFillChanged = mbTextChanged = false;
|
||||
+ mnLineHandle = mnFillHandle = mnTextHandle = HANDLE_INVALID;
|
||||
+ mnHorTextAlign = 0;
|
||||
|
||||
const Size aMtfSizePix( maVDev.LogicToPixel( rMtf.GetPrefSize(), rMtf.GetPrefMapMode() ) );
|
||||
const Size aMtfSizeLog( maVDev.LogicToLogic( rMtf.GetPrefSize(), rMtf.GetPrefMapMode(), MAP_100TH_MM ) );
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,134 +0,0 @@
|
||||
From e3bde35198d8a5420b7106c983766b88ccfba51a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Fri, 18 Oct 2013 15:36:28 +0100
|
||||
Subject: [PATCH] Related: rhbz#1020712 wrong default font shown in editengine
|
||||
|
||||
Only in editengine could we have this fiasco.
|
||||
|
||||
There are two ImpEditEngine::GetScriptType's
|
||||
|
||||
a) sal_uInt16 ImpEditEngine::GetScriptType(const EditPaM& rPaM, sal_uInt16* pEndPos) const
|
||||
this one returns i18n::ScriptType
|
||||
|
||||
b) sal_uInt16 ImpEditEngine::GetScriptType(const EditSelection& rSel) const
|
||||
this one returns SCRIPTTYPE
|
||||
|
||||
Could there be a better way to ensure that mistakes will be made.
|
||||
|
||||
Anyway, within variant b, with an empty edit engine
|
||||
ImpEditEngine::GetScriptType calls GetI18NScriptTypeOfLanguage but *that*
|
||||
returns i18n::ScriptType's not SCRIPTTYPEs but when there is content then a
|
||||
SCRIPTTYPE is truly returned.
|
||||
|
||||
Change-Id: I3a4a7c8746728e0fdfb25d961004c8339a24c93d
|
||||
(cherry picked from commit e63a0d5657c7b9c7431525ba669b3edab0e56af3)
|
||||
|
||||
Related: rhbz#1020712 more i18n::ScriptType being compared against SCRIPTTYPE
|
||||
|
||||
Change-Id: I5da9114a3fd8330df2b63dc9187323765d305791
|
||||
(cherry picked from commit b57ffef61afd61b57087150b1a9245e21079e15b)
|
||||
|
||||
Resolves: rhbz#1020712 return all the selected scripts
|
||||
|
||||
What we want here is *all* the scripts in the range, that's the whole point of
|
||||
using SCRIPTTYPE. We use this to determine the font to show in the fontbox. If
|
||||
it's an exclusive script then we can show the font that that script, and if
|
||||
there are multiple scripts we know to set it empty.
|
||||
|
||||
With the other intermediate bugs out of the way, this now appears to work
|
||||
correctly.
|
||||
|
||||
(cherry picked from commit f1a8aefec91f51a15c951f53f283a38a2edcd141)
|
||||
|
||||
Conflicts:
|
||||
editeng/source/editeng/impedit2.cxx
|
||||
|
||||
Change-Id: I58426123602d70c151bd878e96fa5cbab7d3fd3e
|
||||
---
|
||||
editeng/source/editeng/impedit2.cxx | 39 ++++++++++++++++++++-----------------
|
||||
editeng/source/editeng/impedit4.cxx | 4 ++--
|
||||
2 files changed, 23 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
|
||||
index 4bc6d70..21d0d32 100644
|
||||
--- a/editeng/source/editeng/impedit2.cxx
|
||||
+++ b/editeng/source/editeng/impedit2.cxx
|
||||
@@ -1788,32 +1788,35 @@ sal_uInt16 ImpEditEngine::GetScriptType( const EditSelection& rSel ) const
|
||||
|
||||
const ScriptTypePosInfos& rTypes = pParaPortion->aScriptInfos;
|
||||
|
||||
- // find the first(!) script type position that holds the
|
||||
- // complete selection. Thus it will work for selections as
|
||||
- // well as with just moving the cursor from char to char.
|
||||
+ // find all the scripts of this range
|
||||
sal_uInt16 nS = ( nPara == nStartPara ) ? aSel.Min().GetIndex() : 0;
|
||||
sal_uInt16 nE = ( nPara == nEndPara ) ? aSel.Max().GetIndex() : pParaPortion->GetNode()->Len();
|
||||
- for ( size_t n = 0; n < rTypes.size(); n++ )
|
||||
+
|
||||
+ //no selection, just bare cursor
|
||||
+ if (nStartPara == nEndPara && nS == nE)
|
||||
{
|
||||
- if (rTypes[n].nStartPos <= nS && nE <= rTypes[n].nEndPos)
|
||||
- {
|
||||
+ //If we are not at the start of the paragraph we want the properties of the
|
||||
+ //preceding character. Otherwise get the properties of the next (or what the
|
||||
+ //next would have if it existed)
|
||||
+ if (nS != 0)
|
||||
+ --nS;
|
||||
+ else
|
||||
+ ++nE;
|
||||
+ }
|
||||
+
|
||||
+ for (size_t n = 0; n < rTypes.size(); ++n)
|
||||
+ {
|
||||
+ bool bStartInRange = rTypes[n].nStartPos <= nS && nS < rTypes[n].nEndPos;
|
||||
+ bool bEndInRange = rTypes[n].nStartPos < nE && nE <= rTypes[n].nEndPos;
|
||||
+
|
||||
+ if (bStartInRange || bEndInRange)
|
||||
+ {
|
||||
if ( rTypes[n].nScriptType != i18n::ScriptType::WEAK )
|
||||
- {
|
||||
nScriptType |= GetItemScriptType ( rTypes[n].nScriptType );
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- if ( !nScriptType && n )
|
||||
- {
|
||||
- // #93548# When starting with WEAK, use prev ScriptType...
|
||||
- nScriptType = rTypes[n-1].nScriptType;
|
||||
- }
|
||||
- }
|
||||
- break;
|
||||
}
|
||||
}
|
||||
}
|
||||
- return nScriptType ? nScriptType : GetI18NScriptTypeOfLanguage( GetDefaultLanguage() );
|
||||
+ return nScriptType ? nScriptType : SvtLanguageOptions::GetScriptTypeOfLanguage( GetDefaultLanguage() );
|
||||
}
|
||||
|
||||
sal_Bool ImpEditEngine::IsScriptChange( const EditPaM& rPaM ) const
|
||||
diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx
|
||||
index 39e8156..5e0fa09 100644
|
||||
--- a/editeng/source/editeng/impedit4.cxx
|
||||
+++ b/editeng/source/editeng/impedit4.cxx
|
||||
@@ -2124,7 +2124,7 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
|
||||
rEditView.pImpEditView->SetEditSelection( aCurrentOldPosition->Max() );
|
||||
}
|
||||
|
||||
- sal_uInt16 nScriptType = GetI18NScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
|
||||
+ sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
|
||||
sal_uInt16 nLangWhichId = EE_CHAR_LANGUAGE;
|
||||
switch(nScriptType)
|
||||
{
|
||||
@@ -2171,7 +2171,7 @@ void ImpEditEngine::ApplyChangedSentence(EditView& rEditView,
|
||||
LanguageType eCurLanguage = GetLanguage( aCurrentPaM );
|
||||
if(eCurLanguage != aCurrentNewPortion->eLanguage)
|
||||
{
|
||||
- sal_uInt16 nScriptType = GetI18NScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
|
||||
+ sal_uInt16 nScriptType = SvtLanguageOptions::GetScriptTypeOfLanguage( aCurrentNewPortion->eLanguage );
|
||||
sal_uInt16 nLangWhichId = EE_CHAR_LANGUAGE;
|
||||
switch(nScriptType)
|
||||
{
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,463 +0,0 @@
|
||||
From eb27eda272dd9fe6dfa4ebcfef24069bd117e5b3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Fri, 18 Oct 2013 10:04:45 +0100
|
||||
Subject: [PATCH] Related: rhbz#919070 display -1 means span all displays
|
||||
|
||||
So try to set size to full "screen" size. most window managers
|
||||
will ignore this however unless _NET_WM_FULLSCREEN_MONITORS is
|
||||
set, Under gtk3 we can use gdk_window_set_fullscreen_mode to
|
||||
do that. Its effectively impractical for LibreOffice to itself
|
||||
calculate the right parameters for _NET_WM_FULLSCREEN_MONITORS
|
||||
as far as I can see
|
||||
|
||||
Change-Id: Ia725f21048bfcec3dbf1478b4303ccd9cfec0b36
|
||||
(cherry picked from commit a8dd794356cb62480b2dc12504ad9e0158a0b583)
|
||||
|
||||
Resolves: rhbz#919070 offload set span-all-displays to a gtk3 utility
|
||||
|
||||
Jaw dropping hack to set a slideshow to span all
|
||||
monitors if gtk3 is available at runtime
|
||||
|
||||
(cherry picked from commit 14bb85e0a3d95419c484bfa23881f03c54031c5d)
|
||||
|
||||
Conflicts:
|
||||
Repository.mk
|
||||
|
||||
Change-Id: I363f63c9855d5cb1f92d65d0b34add0c60f7263c
|
||||
|
||||
missing .mk
|
||||
|
||||
Change-Id: I923153579d6cc50354450a5b3a55ecc133ae5e41
|
||||
(cherry picked from commit 2d3dd8594ee3e43fcf9a65887f90d187a4393297)
|
||||
|
||||
move xid-fullscreen into gnome package
|
||||
|
||||
Change-Id: I2ad0838a12ce06b2c6e77b7f55cdc2cd0627a38b
|
||||
(cherry picked from commit 9c1170b25a9fab13084d2677aa4fc986db5ab675)
|
||||
|
||||
pScreen uninitialized
|
||||
|
||||
Change-Id: I244c3b5a949ae5c8a5bf46d1b58439e080b2c848
|
||||
(cherry picked from commit 1b4aa55ecd7b2c3f6e0d281642d0ed0a066dec69)
|
||||
---
|
||||
Repository.mk | 3 +
|
||||
scp2/source/gnome/module_gnome.scp | 3 +-
|
||||
scp2/source/ooo/file_library_ooo.scp | 10 ++
|
||||
vcl/Executable_xid_fullscreen_on_all_monitors.mk | 20 +++
|
||||
vcl/Module_vcl.mk | 1 +
|
||||
vcl/inc/unx/gtk/gtkframe.hxx | 1 +
|
||||
vcl/unx/gtk/window/gtksalframe.cxx | 134 ++++++++++++++++-----
|
||||
.../gtk/window/xid_fullscreen_on_all_monitors.c | 99 +++++++++++++++
|
||||
8 files changed, 243 insertions(+), 28 deletions(-)
|
||||
create mode 100644 vcl/Executable_xid_fullscreen_on_all_monitors.mk
|
||||
create mode 100644 vcl/unx/gtk/window/xid_fullscreen_on_all_monitors.c
|
||||
|
||||
diff --git a/Repository.mk b/Repository.mk
|
||||
index e0d4d7c..99278bc 100644
|
||||
--- a/Repository.mk
|
||||
+++ b/Repository.mk
|
||||
@@ -89,6 +89,9 @@ endif
|
||||
$(eval $(call gb_Helper_register_executables,OOO, \
|
||||
gnome-open-url.bin \
|
||||
spadmin.bin \
|
||||
+ $(if $(filter $(GUIBASE)$(ENABLE_GTK),unxTRUE), \
|
||||
+ xid-fullscreen-on-all-monitors \
|
||||
+ ) \
|
||||
$(if $(filter $(GUIBASE)$(ENABLE_TDE),unxTRUE), \
|
||||
tdefilepicker \
|
||||
) \
|
||||
diff --git a/scp2/source/gnome/module_gnome.scp b/scp2/source/gnome/module_gnome.scp
|
||||
index e8a22bf..75214d5 100644
|
||||
--- a/scp2/source/gnome/module_gnome.scp
|
||||
+++ b/scp2/source/gnome/module_gnome.scp
|
||||
@@ -34,7 +34,8 @@ Module gid_Module_Optional_Gnome
|
||||
gid_File_Share_Registry_Gnome_Xcd,
|
||||
#endif
|
||||
gid_File_Bin_Gnome_Open_Url,
|
||||
- gid_File_Bin_Gnome_Open_Url_Bin
|
||||
+ gid_File_Bin_Gnome_Open_Url_Bin,
|
||||
+ gid_File_Bin_XidFullscreen
|
||||
);
|
||||
End
|
||||
|
||||
diff --git a/scp2/source/ooo/file_library_ooo.scp b/scp2/source/ooo/file_library_ooo.scp
|
||||
index 36ec8d4..417f483 100644
|
||||
--- a/scp2/source/ooo/file_library_ooo.scp
|
||||
+++ b/scp2/source/ooo/file_library_ooo.scp
|
||||
@@ -343,6 +343,16 @@ File gid_File_Bin_KdeFilePicker
|
||||
Name = "kdefilepicker";
|
||||
End
|
||||
#endif
|
||||
+
|
||||
+#ifdef ENABLE_GTK
|
||||
+File gid_File_Bin_XidFullscreen
|
||||
+ BIN_FILE_BODY;
|
||||
+ Styles = (PACKED);
|
||||
+ Dir = gid_Brand_Dir_Program;
|
||||
+ Name = "xid-fullscreen-on-all-monitors";
|
||||
+End
|
||||
+#endif
|
||||
+
|
||||
#endif
|
||||
|
||||
#ifdef MACOSX
|
||||
diff --git a/vcl/Executable_xid_fullscreen_on_all_monitors.mk b/vcl/Executable_xid_fullscreen_on_all_monitors.mk
|
||||
new file mode 100644
|
||||
index 0000000..5f9c127
|
||||
--- /dev/null
|
||||
+++ b/vcl/Executable_xid_fullscreen_on_all_monitors.mk
|
||||
@@ -0,0 +1,20 @@
|
||||
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
|
||||
+#
|
||||
+# This file is part of the LibreOffice project.
|
||||
+#
|
||||
+# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+#
|
||||
+
|
||||
+$(eval $(call gb_Executable_Executable,xid-fullscreen-on-all-monitors))
|
||||
+
|
||||
+$(eval $(call gb_Executable_add_libs,xid-fullscreen-on-all-monitors,\
|
||||
+ -ldl \
|
||||
+))
|
||||
+
|
||||
+$(eval $(call gb_Executable_add_cobjects,xid-fullscreen-on-all-monitors,\
|
||||
+ vcl/unx/gtk/window/xid_fullscreen_on_all_monitors \
|
||||
+))
|
||||
+
|
||||
+# vim: set noet sw=4 ts=4:
|
||||
diff --git a/vcl/Module_vcl.mk b/vcl/Module_vcl.mk
|
||||
index fd2be4c5..47031b3 100644
|
||||
--- a/vcl/Module_vcl.mk
|
||||
+++ b/vcl/Module_vcl.mk
|
||||
@@ -39,6 +39,7 @@ $(eval $(call gb_Module_add_targets,vcl,\
|
||||
|
||||
ifneq ($(ENABLE_GTK),)
|
||||
$(eval $(call gb_Module_add_targets,vcl,\
|
||||
+ Executable_xid_fullscreen_on_all_monitors \
|
||||
Library_vclplug_gtk \
|
||||
))
|
||||
endif
|
||||
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
|
||||
index c3ea919..3edd2cb 100644
|
||||
--- a/vcl/inc/unx/gtk/gtkframe.hxx
|
||||
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
|
||||
@@ -196,6 +196,7 @@ class GtkSalFrame : public SalFrame
|
||||
guint m_nGSMCookie;
|
||||
int m_nWorkArea;
|
||||
bool m_bFullscreen;
|
||||
+ bool m_bSpanMonitorsWhenFullscreen;
|
||||
bool m_bDefaultPos;
|
||||
bool m_bDefaultSize;
|
||||
bool m_bSendModChangeOnRelease;
|
||||
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
|
||||
index fef8407..4a3d01c 100644
|
||||
--- a/vcl/unx/gtk/window/gtksalframe.cxx
|
||||
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
|
||||
@@ -29,6 +29,9 @@
|
||||
#include <generic/genprn.h>
|
||||
#include <generic/geninst.h>
|
||||
#include <headless/svpgdi.hxx>
|
||||
+#include <osl/file.hxx>
|
||||
+#include <rtl/bootstrap.hxx>
|
||||
+#include <rtl/process.h>
|
||||
#include <vcl/floatwin.hxx>
|
||||
#include <vcl/svapp.hxx>
|
||||
#include <vcl/window.hxx>
|
||||
@@ -814,6 +819,7 @@ void GtkSalFrame::InitCommon()
|
||||
m_pCurrentCursor = NULL;
|
||||
m_nKeyModifiers = 0;
|
||||
m_bFullscreen = false;
|
||||
+ m_bSpanMonitorsWhenFullscreen = false;
|
||||
m_nState = GDK_WINDOW_STATE_WITHDRAWN;
|
||||
m_nVisibility = GDK_VISIBILITY_FULLY_OBSCURED;
|
||||
m_bSendModChangeOnRelease = false;
|
||||
@@ -2045,43 +2051,68 @@ void GtkSalFrame::SetScreen( unsigned int nNewScreen, int eType, Rectangle *pSiz
|
||||
if (maGeometry.nDisplayScreenNumber == nNewScreen && eType == SET_RETAIN_SIZE)
|
||||
return;
|
||||
|
||||
- gint nMonitor;
|
||||
- bool bSameMonitor = false;
|
||||
- GdkScreen *pScreen = getDisplay()->getSystem()->getScreenMonitorFromIdx( nNewScreen, nMonitor );
|
||||
- if (!pScreen)
|
||||
+ GdkScreen *pScreen = NULL;
|
||||
+ GdkRectangle aNewMonitor;
|
||||
+
|
||||
+ bool bSpanAllScreens = nNewScreen == (unsigned int)-1;
|
||||
+ m_bSpanMonitorsWhenFullscreen = bSpanAllScreens && getDisplay()->getSystem()->GetDisplayScreenCount() > 1;
|
||||
+
|
||||
+ if (m_bSpanMonitorsWhenFullscreen) //span all screens
|
||||
{
|
||||
- g_warning ("Attempt to move GtkSalFrame to invalid screen %d => "
|
||||
- "fallback to current\n", nNewScreen);
|
||||
pScreen = gtk_widget_get_screen( m_pWindow );
|
||||
- bSameMonitor = true;
|
||||
+ aNewMonitor.x = 0;
|
||||
+ aNewMonitor.y = 0;
|
||||
+ aNewMonitor.width = gdk_screen_get_width(pScreen);
|
||||
+ aNewMonitor.height = gdk_screen_get_height(pScreen);
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ gint nMonitor;
|
||||
+ bool bSameMonitor = false;
|
||||
|
||||
- // Heavy lifting, need to move screen ...
|
||||
- if( pScreen != gtk_widget_get_screen( m_pWindow ))
|
||||
- gtk_window_set_screen( GTK_WINDOW( m_pWindow ), pScreen );
|
||||
+ if (!bSpanAllScreens)
|
||||
+ {
|
||||
+ pScreen = getDisplay()->getSystem()->getScreenMonitorFromIdx( nNewScreen, nMonitor );
|
||||
+ if (!pScreen)
|
||||
+ {
|
||||
+ g_warning ("Attempt to move GtkSalFrame to invalid screen %d => "
|
||||
+ "fallback to current\n", nNewScreen);
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- gint nOldMonitor = gdk_screen_get_monitor_at_window(
|
||||
- pScreen, widget_get_window( m_pWindow ) );
|
||||
- if (bSameMonitor)
|
||||
- nMonitor = nOldMonitor;
|
||||
+ if (!pScreen)
|
||||
+ {
|
||||
+ pScreen = gtk_widget_get_screen( m_pWindow );
|
||||
+ bSameMonitor = true;
|
||||
+ }
|
||||
|
||||
-#if OSL_DEBUG_LEVEL > 1
|
||||
- if( nMonitor == nOldMonitor )
|
||||
- g_warning( "An apparently pointless SetScreen - should we elide it ?" );
|
||||
-#endif
|
||||
+ // Heavy lifting, need to move screen ...
|
||||
+ if( pScreen != gtk_widget_get_screen( m_pWindow ))
|
||||
+ gtk_window_set_screen( GTK_WINDOW( m_pWindow ), pScreen );
|
||||
+
|
||||
+ gint nOldMonitor = gdk_screen_get_monitor_at_window(
|
||||
+ pScreen, widget_get_window( m_pWindow ) );
|
||||
+ if (bSameMonitor)
|
||||
+ nMonitor = nOldMonitor;
|
||||
|
||||
- GdkRectangle aOldMonitor, aNewMonitor;
|
||||
- gdk_screen_get_monitor_geometry( pScreen, nOldMonitor, &aOldMonitor );
|
||||
- gdk_screen_get_monitor_geometry( pScreen, nMonitor, &aNewMonitor );
|
||||
+ #if OSL_DEBUG_LEVEL > 1
|
||||
+ if( nMonitor == nOldMonitor )
|
||||
+ g_warning( "An apparently pointless SetScreen - should we elide it ?" );
|
||||
+ #endif
|
||||
+
|
||||
+ GdkRectangle aOldMonitor;
|
||||
+ gdk_screen_get_monitor_geometry( pScreen, nOldMonitor, &aOldMonitor );
|
||||
+ gdk_screen_get_monitor_geometry( pScreen, nMonitor, &aNewMonitor );
|
||||
+
|
||||
+ maGeometry.nX = aNewMonitor.x + maGeometry.nX - aOldMonitor.x;
|
||||
+ maGeometry.nY = aNewMonitor.y + maGeometry.nY - aOldMonitor.y;
|
||||
+ }
|
||||
|
||||
bool bResize = false;
|
||||
bool bVisible = IS_WIDGET_MAPPED( m_pWindow );
|
||||
if( bVisible )
|
||||
Show( sal_False );
|
||||
|
||||
- maGeometry.nX = aNewMonitor.x + maGeometry.nX - aOldMonitor.x;
|
||||
- maGeometry.nY = aNewMonitor.y + maGeometry.nY - aOldMonitor.y;
|
||||
-
|
||||
if( eType == SET_FULLSCREEN )
|
||||
{
|
||||
maGeometry.nX = aNewMonitor.x;
|
||||
@@ -2093,8 +2124,8 @@ void GtkSalFrame::SetScreen( unsigned int nNewScreen, int eType, Rectangle *pSiz
|
||||
|
||||
// #i110881# for the benefit of compiz set a max size here
|
||||
// else setting to fullscreen fails for unknown reasons
|
||||
- m_aMaxSize.Width() = aNewMonitor.width+100;
|
||||
- m_aMaxSize.Height() = aNewMonitor.height+100;
|
||||
+ m_aMaxSize.Width() = aNewMonitor.width;
|
||||
+ m_aMaxSize.Height() = aNewMonitor.height;
|
||||
}
|
||||
|
||||
if( pSize && eType == SET_UN_FULLSCREEN )
|
||||
@@ -2119,14 +2150,19 @@ void GtkSalFrame::SetScreen( unsigned int nNewScreen, int eType, Rectangle *pSiz
|
||||
|
||||
#if !GTK_CHECK_VERSION(3,0,0)
|
||||
// _NET_WM_STATE_FULLSCREEN (Metacity <-> KWin)
|
||||
- if( ! getDisplay()->getWMAdaptor()->isLegacyPartialFullscreen() )
|
||||
+ if( ! getDisplay()->getWMAdaptor()->isLegacyPartialFullscreen() )
|
||||
#endif
|
||||
{
|
||||
+#if GTK_CHECK_VERSION(3,8,0)
|
||||
+ gdk_window_set_fullscreen_mode( gtk_widget_get_window(m_pWindow), m_bSpanMonitorsWhenFullscreen
|
||||
+ ? GDK_FULLSCREEN_ON_ALL_MONITORS : GDK_FULLSCREEN_ON_CURRENT_MONITOR );
|
||||
+#endif
|
||||
if( eType == SET_FULLSCREEN )
|
||||
gtk_window_fullscreen( GTK_WINDOW( m_pWindow ) );
|
||||
else if( eType == SET_UN_FULLSCREEN )
|
||||
gtk_window_unfullscreen( GTK_WINDOW( m_pWindow ) );
|
||||
}
|
||||
+
|
||||
if( eType == SET_UN_FULLSCREEN &&
|
||||
!(m_nStyle & SAL_FRAME_STYLE_SIZEABLE) )
|
||||
gtk_window_set_resizable( GTK_WINDOW( m_pWindow ), FALSE );
|
||||
@@ -3339,10 +3375,54 @@ gboolean GtkSalFrame::signalFocus( GtkWidget*, GdkEventFocus* pEvent, gpointer f
|
||||
return sal_False;
|
||||
}
|
||||
|
||||
+#if !GTK_CHECK_VERSION(3,8,0)
|
||||
+static OString getDisplayString()
|
||||
+{
|
||||
+ int nParams = rtl_getAppCommandArgCount();
|
||||
+ OUString aParam;
|
||||
+ for( int i = 0; i < nParams; i++ )
|
||||
+ {
|
||||
+ rtl_getAppCommandArg( i, &aParam.pData );
|
||||
+ if( i < nParams-1 && (aParam == "-display" || aParam == "--display" ) )
|
||||
+ {
|
||||
+ rtl_getAppCommandArg( i+1, &aParam.pData );
|
||||
+ return OUStringToOString( aParam, osl_getThreadTextEncoding() );
|
||||
+ }
|
||||
+ }
|
||||
+ return OString();
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
gboolean GtkSalFrame::signalMap( GtkWidget *pWidget, GdkEvent*, gpointer frame )
|
||||
{
|
||||
GtkSalFrame* pThis = (GtkSalFrame*)frame;
|
||||
|
||||
+#if !GTK_CHECK_VERSION(3,8,0)
|
||||
+ //Spawn off a helper program that will attempt to set this fullscreen
|
||||
+ //window to span all displays.
|
||||
+ if (pThis->m_bFullscreen && pThis->m_bSpanMonitorsWhenFullscreen)
|
||||
+ {
|
||||
+ GdkWindow* gdkwin = gtk_widget_get_window(pThis->m_pWindow);
|
||||
+ if (gdkwin)
|
||||
+ {
|
||||
+ OUString sProgramURL( "$BRAND_BASE_DIR/program/xid-fullscreen-on-all-monitors");
|
||||
+ rtl::Bootstrap::expandMacros(sProgramURL);
|
||||
+ OUString sProgram;
|
||||
+ if (osl::FileBase::getSystemPathFromFileURL(sProgramURL, sProgram) == osl::File::E_None)
|
||||
+ {
|
||||
+ OString sFinalProgram(OUStringToOString(sProgram, osl_getThreadTextEncoding())
|
||||
+ + " " + OString::number((int)GDK_WINDOW_XID(gdkwin)));
|
||||
+ OString sDisplay(getDisplayString());
|
||||
+ if (!sDisplay.isEmpty())
|
||||
+ {
|
||||
+ sFinalProgram += "--display " + sDisplay;
|
||||
+ }
|
||||
+ system(sFinalProgram.getStr());
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
bool bSetFocus = pThis->m_bSetFocusOnMap;
|
||||
pThis->m_bSetFocusOnMap = false;
|
||||
|
||||
diff --git a/vcl/unx/gtk/window/xid_fullscreen_on_all_monitors.c b/vcl/unx/gtk/window/xid_fullscreen_on_all_monitors.c
|
||||
new file mode 100644
|
||||
index 0000000..00554b1
|
||||
--- /dev/null
|
||||
+++ b/vcl/unx/gtk/window/xid_fullscreen_on_all_monitors.c
|
||||
@@ -0,0 +1,99 @@
|
||||
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
+/*
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ */
|
||||
+
|
||||
+#include <dlfcn.h>
|
||||
+#include <stdlib.h>
|
||||
+
|
||||
+typedef int Window;
|
||||
+typedef union _GdkEvent GdkEvent;
|
||||
+typedef struct _GdkWindow GdkWindow;
|
||||
+typedef struct _GdkDisplay GdkDisplay;
|
||||
+typedef struct _GdkScreen GdkScreen;
|
||||
+
|
||||
+typedef enum
|
||||
+{
|
||||
+ GDK_FULLSCREEN_ON_CURRENT_MONITOR,
|
||||
+ GDK_FULLSCREEN_ON_ALL_MONITORS
|
||||
+} GdkFullscreenMode;
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ void *handle;
|
||||
+ void (*gtk_init)(int*, char***);
|
||||
+ GdkWindow* (*gdk_x11_window_foreign_new_for_display)(GdkDisplay*, Window);
|
||||
+ GdkDisplay* (*gdk_display_get_default)(void);
|
||||
+ GdkEvent* (*gdk_event_get)(void);
|
||||
+ void (*gtk_main_do_event)(GdkEvent*);
|
||||
+ void (*gdk_event_free)(GdkEvent*);
|
||||
+ void (*gdk_window_fullscreen)(GdkWindow *);
|
||||
+ void (*gdk_window_set_fullscreen_mode)(GdkWindow *, GdkFullscreenMode);
|
||||
+
|
||||
+ GdkEvent *event;
|
||||
+ GdkWindow *window;
|
||||
+ int windowid;
|
||||
+
|
||||
+ handle = dlopen("libgtk-3.so.0", RTLD_LAZY);
|
||||
+ if( NULL == handle )
|
||||
+ return -1;
|
||||
+
|
||||
+ gtk_init = (void (*) (int*, char***))
|
||||
+ dlsym(handle, "gtk_init");
|
||||
+ gdk_x11_window_foreign_new_for_display = (GdkWindow* (*)(GdkDisplay*, Window))
|
||||
+ dlsym(handle, "gdk_x11_window_foreign_new_for_display");
|
||||
+ gdk_display_get_default = (GdkDisplay* (*)(void))
|
||||
+ dlsym(handle, "gdk_display_get_default");
|
||||
+ gdk_event_get = (GdkEvent* (*)(void))
|
||||
+ dlsym(handle, "gdk_event_get");
|
||||
+ gtk_main_do_event = (void (*)(GdkEvent*))
|
||||
+ dlsym(handle, "gtk_main_do_event");
|
||||
+ gdk_event_free = (void (*)(GdkEvent*))
|
||||
+ dlsym(handle, "gdk_event_free");
|
||||
+ gdk_window_fullscreen = (void (*)(GdkWindow *))
|
||||
+ dlsym(handle, "gdk_window_fullscreen");
|
||||
+ gdk_window_set_fullscreen_mode = (void (*)(GdkWindow *, GdkFullscreenMode))
|
||||
+ dlsym(handle, "gdk_window_set_fullscreen_mode");
|
||||
+
|
||||
+ if (!gtk_init ||
|
||||
+ !gdk_x11_window_foreign_new_for_display ||
|
||||
+ !gdk_display_get_default ||
|
||||
+ !gdk_event_get ||
|
||||
+ !gtk_main_do_event ||
|
||||
+ !gdk_event_free ||
|
||||
+ !gdk_window_fullscreen ||
|
||||
+ !gdk_window_set_fullscreen_mode)
|
||||
+ {
|
||||
+ dlclose(handle);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ gtk_init(&argc, &argv);
|
||||
+
|
||||
+ windowid = atoi(argv[1]);
|
||||
+
|
||||
+ window = gdk_x11_window_foreign_new_for_display(gdk_display_get_default(), windowid);
|
||||
+ if (!window)
|
||||
+ {
|
||||
+ dlclose(handle);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ gdk_window_set_fullscreen_mode(window, GDK_FULLSCREEN_ON_ALL_MONITORS);
|
||||
+ gdk_window_fullscreen(window);
|
||||
+
|
||||
+ while ((event = gdk_event_get()) != NULL)
|
||||
+ {
|
||||
+ gtk_main_do_event(event);
|
||||
+ gdk_event_free(event);
|
||||
+ }
|
||||
+
|
||||
+ dlclose(handle);
|
||||
+ return 0;
|
||||
+}
|
||||
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
+
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,68 +0,0 @@
|
||||
From b5bd2d1d8d09a44af354584ff187d9e935ffd973 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Tue, 4 Jun 2013 17:13:13 +0100
|
||||
Subject: [PATCH] Related: rhbz#968892 discard impossible languages for glyph
|
||||
fallback
|
||||
|
||||
Change-Id: I14f1bab09eb0be9c2c896a1dde45913b99aab6df
|
||||
---
|
||||
vcl/generic/fontmanager/fontconfig.cxx | 39 ++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 39 insertions(+)
|
||||
|
||||
diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
|
||||
index 1b36980..ff471fa 100644
|
||||
--- a/vcl/generic/fontmanager/fontconfig.cxx
|
||||
+++ b/vcl/generic/fontmanager/fontconfig.cxx
|
||||
@@ -847,6 +847,41 @@
|
||||
#endif
|
||||
}
|
||||
|
||||
+ //returns true if the given code-point couldn't possibly be in rLangTag.
|
||||
+ bool isImpossibleCodePointForLang(const LanguageTag &rLangTag, sal_uInt32 currentChar)
|
||||
+ {
|
||||
+ //a non-default script is set, lets believe it
|
||||
+ if (rLangTag.hasScript())
|
||||
+ return false;
|
||||
+
|
||||
+ int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
|
||||
+ UScriptCode eScript = static_cast<UScriptCode>(script);
|
||||
+ bool bIsImpossible = false;
|
||||
+ OUString sLang = rLangTag.getLanguage();
|
||||
+ switch (eScript)
|
||||
+ {
|
||||
+ case USCRIPT_TELUGU:
|
||||
+ bIsImpossible = sLang != "te";
|
||||
+ break;
|
||||
+ case USCRIPT_BENGALI:
|
||||
+ bIsImpossible = sLang != "bn" &&
|
||||
+ sLang != "as" && sLang != "mkb" &&
|
||||
+ sLang != "kfv" && sLang != "ccp" &&
|
||||
+ sLang != "tnv" && sLang != "ctg" &&
|
||||
+ sLang != "haj" && sLang != "ksy" &&
|
||||
+ sLang != "rkt" && sLang != "rjs" &&
|
||||
+ sLang != "rhg" && sLang != "syl" &&
|
||||
+ sLang != "kyv" && sLang != "zrg" &&
|
||||
+ sLang != "nhh";
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ SAL_WARN_IF(bIsImpossible, "vcl", "Throwing away user set language of "
|
||||
+ << sLang << " for finding a font for glyph fallback and autodetecting instead");
|
||||
+ return bIsImpossible;
|
||||
+ }
|
||||
+
|
||||
LanguageTag getExemplerLangTagForCodePoint(sal_uInt32 currentChar)
|
||||
{
|
||||
int32_t script = u_getIntPropertyValue(currentChar, UCHAR_SCRIPT);
|
||||
@@ -954,6 +989,10 @@
|
||||
// also handle unicode surrogates
|
||||
const sal_uInt32 nCode = rMissingCodes.iterateCodePoints( &nStrIndex );
|
||||
FcCharSetAddChar( unicodes, nCode );
|
||||
+ //if the codepoint is impossible for this lang tag, then clear it
|
||||
+ //and autodetect something useful
|
||||
+ if (!aLangAttrib.isEmpty() && isImpossibleCodePointForLang(aLangTag, nCode))
|
||||
+ aLangAttrib = OString();
|
||||
//#i105784#/rhbz#527719 improve selection of fallback font
|
||||
if (aLangAttrib.isEmpty())
|
||||
{
|
@ -1,249 +0,0 @@
|
||||
From 931fc46eb8e09a9b16232fd58a222a47d28c5ea1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Thu, 18 Jul 2013 17:19:46 +0100
|
||||
Subject: [PATCH] Resolves: fdo#48835 application menu for LibreOffice
|
||||
|
||||
(cherry picked from commit c6d4c18c7ccf047bdb0ca1b65d8f63efa5d8422f)
|
||||
|
||||
Change-Id: I623f029722b71dde6e60f289c7339a96e2dfbf8e
|
||||
---
|
||||
vcl/inc/unx/gtk/gtkframe.hxx | 2 +
|
||||
vcl/unx/gtk/window/gtksalframe.cxx | 149 +++++++++++++++++++++++++++++++++++--
|
||||
2 files changed, 144 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
|
||||
index c3ea919..cce16ab 100644
|
||||
--- a/vcl/inc/unx/gtk/gtkframe.hxx
|
||||
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
|
||||
@@ -309,7 +309,9 @@ public:
|
||||
GtkSalFrame( SystemParentData* pSysData );
|
||||
|
||||
guint m_nMenuExportId;
|
||||
+ guint m_nAppMenuExportId;
|
||||
guint m_nActionGroupExportId;
|
||||
+ guint m_nAppActionGroupExportId;
|
||||
guint m_nHudAwarenessId;
|
||||
|
||||
// dispatches an event, returns true if dispatched
|
||||
diff --git a/vcl/unx/gtk/window/gtksalframe.cxx b/vcl/unx/gtk/window/gtksalframe.cxx
|
||||
index 0f53e93..a3e648a 100644
|
||||
--- a/vcl/unx/gtk/window/gtksalframe.cxx
|
||||
+++ b/vcl/unx/gtk/window/gtksalframe.cxx
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <unx/gtk/gtkdata.hxx>
|
||||
#include <unx/gtk/gtkinst.hxx>
|
||||
#include <unx/gtk/gtkgdi.hxx>
|
||||
+#include <vcl/help.hxx>
|
||||
#include <vcl/keycodes.hxx>
|
||||
#include <vcl/layout.hxx>
|
||||
#include <unx/wmadaptor.hxx>
|
||||
@@ -65,11 +66,17 @@
|
||||
# include <cstdio>
|
||||
#endif
|
||||
|
||||
+#include <comphelper/processfactory.hxx>
|
||||
+#include <comphelper/sequenceashashmap.hxx>
|
||||
#include <com/sun/star/accessibility/XAccessibleContext.hpp>
|
||||
#include <com/sun/star/accessibility/AccessibleRole.hpp>
|
||||
#include <com/sun/star/accessibility/XAccessibleStateSet.hpp>
|
||||
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
|
||||
#include <com/sun/star/accessibility/XAccessibleEditableText.hpp>
|
||||
+#include <com/sun/star/frame/Desktop.hpp>
|
||||
+#include <com/sun/star/frame/ModuleManager.hpp>
|
||||
+#include <com/sun/star/frame/XFrame.hpp>
|
||||
+#include <com/sun/star/util/URLTransformer.hpp>
|
||||
|
||||
#if GTK_CHECK_VERSION(3,0,0)
|
||||
# include <gdk/gdkkeysyms-compat.h>
|
||||
@@ -534,6 +541,71 @@ static void hud_activated( gboolean hud_active, gpointer user_data )
|
||||
}
|
||||
}
|
||||
|
||||
+static void activate_uno(GSimpleAction *action, GVariant*, gpointer)
|
||||
+{
|
||||
+ uno::Reference< css::uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext();
|
||||
+
|
||||
+ uno::Reference< css::frame::XDesktop2 > xDesktop = css::frame::Desktop::create( xContext );
|
||||
+
|
||||
+ uno::Reference < css::frame::XFrame > xFrame(xDesktop->getActiveFrame());
|
||||
+ if (!xFrame.is())
|
||||
+ xFrame = uno::Reference < css::frame::XFrame >(xDesktop, uno::UNO_QUERY);
|
||||
+
|
||||
+ if (!xFrame.is())
|
||||
+ return;
|
||||
+
|
||||
+ uno::Reference< css::frame::XDispatchProvider > xDispatchProvider(xFrame, uno::UNO_QUERY);
|
||||
+ if (!xDispatchProvider.is())
|
||||
+ return;
|
||||
+
|
||||
+ gchar *strval = NULL;
|
||||
+ g_object_get(action, "name", &strval, NULL);
|
||||
+ if (!strval)
|
||||
+ return;
|
||||
+
|
||||
+ if (strcmp(strval, "New") == 0)
|
||||
+ {
|
||||
+ uno::Reference<frame::XModuleManager2> xModuleManager(frame::ModuleManager::create(xContext));
|
||||
+ OUString aModuleId(xModuleManager->identify(xFrame));
|
||||
+ if (aModuleId.isEmpty())
|
||||
+ return;
|
||||
+
|
||||
+ comphelper::SequenceAsHashMap lModuleDescription(xModuleManager->getByName(aModuleId));
|
||||
+ OUString sFactoryService;
|
||||
+ lModuleDescription[OUString("ooSetupFactoryEmptyDocumentURL")] >>= sFactoryService;
|
||||
+ if (sFactoryService.isEmpty())
|
||||
+ return;
|
||||
+
|
||||
+ uno::Sequence < css::beans::PropertyValue > args(0);
|
||||
+ xDesktop->loadComponentFromURL(sFactoryService, OUString("_blank"), 0, args);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ OUString sCommand(".uno:");
|
||||
+ sCommand += OUString(strval, strlen(strval), RTL_TEXTENCODING_UTF8);
|
||||
+ g_free(strval);
|
||||
+
|
||||
+ css::util::URL aCommand;
|
||||
+ aCommand.Complete = sCommand;
|
||||
+ uno::Reference< css::util::XURLTransformer > xParser = css::util::URLTransformer::create(xContext);
|
||||
+ xParser->parseStrict(aCommand);
|
||||
+
|
||||
+ uno::Reference< css::frame::XDispatch > xDisp = xDispatchProvider->queryDispatch(aCommand, OUString(), 0);
|
||||
+
|
||||
+ if (!xDisp.is())
|
||||
+ return;
|
||||
+
|
||||
+ xDisp->dispatch(aCommand, css::uno::Sequence< css::beans::PropertyValue >());
|
||||
+}
|
||||
+
|
||||
+static GActionEntry app_entries[] = {
|
||||
+ { "OptionsTreeDialog", activate_uno, NULL, NULL, NULL, {0} },
|
||||
+ { "About", activate_uno, NULL, NULL, NULL, {0} },
|
||||
+ { "HelpIndex", activate_uno, NULL, NULL, NULL, {0} },
|
||||
+ { "Quit", activate_uno, NULL, NULL, NULL, {0} },
|
||||
+ { "New", activate_uno, NULL, NULL, NULL, {0} }
|
||||
+};
|
||||
+
|
||||
gboolean ensure_dbus_setup( gpointer data )
|
||||
{
|
||||
GtkSalFrame* pSalFrame = reinterpret_cast< GtkSalFrame* >( data );
|
||||
@@ -553,29 +625,86 @@ gboolean ensure_dbus_setup( gpointer data )
|
||||
|
||||
// Generate menu paths.
|
||||
XLIB_Window windowId = GDK_WINDOW_XID( gdkWindow );
|
||||
- gchar* aDBusPath = g_strdup_printf("/window/%lu", windowId);
|
||||
- gchar* aDBusWindowPath = g_strdup_printf( "/window/%lu", windowId );
|
||||
- gchar* aDBusMenubarPath = g_strdup_printf( "/window/%lu/menus/menubar", windowId );
|
||||
+ gchar* aDBusWindowPath = g_strdup_printf( "/org/libreoffice/window/%lu", windowId );
|
||||
+ gchar* aDBusMenubarPath = g_strdup_printf( "/org/libreoffice/window/%lu/menus/menubar", windowId );
|
||||
|
||||
// Set window properties.
|
||||
g_object_set_data_full( G_OBJECT( gdkWindow ), "g-lo-menubar", pMenuModel, ObjectDestroyedNotify );
|
||||
g_object_set_data_full( G_OBJECT( gdkWindow ), "g-lo-action-group", pActionGroup, ObjectDestroyedNotify );
|
||||
|
||||
+ gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_ID", "org.libreoffice" );
|
||||
gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_UNIQUE_BUS_NAME", g_dbus_connection_get_unique_name( pSessionBus ) );
|
||||
- gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_OBJECT_PATH", "" );
|
||||
+ gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APPLICATION_OBJECT_PATH", "/org/libreoffice" );
|
||||
gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_WINDOW_OBJECT_PATH", aDBusWindowPath );
|
||||
gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_MENUBAR_OBJECT_PATH", aDBusMenubarPath );
|
||||
+ gdk_x11_window_set_utf8_property( gdkWindow, "_GTK_APP_MENU_OBJECT_PATH", "/org/libreoffice/menus/appmenu" );
|
||||
|
||||
// Publish the menu model and the action group.
|
||||
SAL_INFO("vcl.unity", "exporting menu model at " << pMenuModel << " for window " << windowId);
|
||||
pSalFrame->m_nMenuExportId = g_dbus_connection_export_menu_model (pSessionBus, aDBusMenubarPath, pMenuModel, NULL);
|
||||
SAL_INFO("vcl.unity", "exporting action group at " << pActionGroup << " for window " << windowId);
|
||||
- pSalFrame->m_nActionGroupExportId = g_dbus_connection_export_action_group( pSessionBus, aDBusPath, pActionGroup, NULL);
|
||||
+ pSalFrame->m_nActionGroupExportId = g_dbus_connection_export_action_group( pSessionBus, aDBusWindowPath, pActionGroup, NULL);
|
||||
pSalFrame->m_nHudAwarenessId = hud_awareness_register( pSessionBus, aDBusMenubarPath, hud_activated, pSalFrame, NULL, NULL );
|
||||
|
||||
- g_free( aDBusPath );
|
||||
- g_free( aDBusWindowPath );
|
||||
+ //app menu, to-do translations, block normal menus when active, honor use appmenu settings
|
||||
+ ResMgr* pMgr = ImplGetResMgr();
|
||||
+ if( pMgr )
|
||||
+ {
|
||||
+ GMenu *menu = g_menu_new ();
|
||||
+ GMenuItem* item;
|
||||
+
|
||||
+ GMenu *firstsubmenu = g_menu_new ();
|
||||
+
|
||||
+ OString sNew(OUStringToOString(ResId(SV_BUTTONTEXT_NEW, *pMgr).toString(),
|
||||
+ RTL_TEXTENCODING_UTF8).replaceFirst("~", "_"));
|
||||
+
|
||||
+ item = g_menu_item_new(sNew.getStr(), "app.New");
|
||||
+ g_menu_append_item( firstsubmenu, item );
|
||||
+
|
||||
+ g_menu_append_section( menu, NULL, G_MENU_MODEL(firstsubmenu));
|
||||
+
|
||||
+ GMenu *secondsubmenu = g_menu_new ();
|
||||
+
|
||||
+ OString sPreferences(OUStringToOString(ResId(SV_STDTEXT_PREFERENCES, *pMgr).toString(),
|
||||
+ RTL_TEXTENCODING_UTF8).replaceFirst("~", "_"));
|
||||
+
|
||||
+ item = g_menu_item_new(sPreferences.getStr(), "app.OptionsTreeDialog");
|
||||
+ g_menu_append_item( secondsubmenu, item );
|
||||
+
|
||||
+ g_menu_append_section( menu, NULL, G_MENU_MODEL(secondsubmenu));
|
||||
+ GMenu *thirdsubmenu = g_menu_new ();
|
||||
+
|
||||
+ OString sHelp(OUStringToOString(ResId(SV_BUTTONTEXT_HELP, *pMgr).toString(),
|
||||
+ RTL_TEXTENCODING_UTF8).replaceFirst("~", "_"));
|
||||
+
|
||||
+ item = g_menu_item_new(sHelp.getStr(), "app.HelpIndex");
|
||||
+ g_menu_append_item( thirdsubmenu, item );
|
||||
+
|
||||
+ OString sAbout(OUStringToOString(ResId(SV_STDTEXT_ABOUT, *pMgr).toString(),
|
||||
+ RTL_TEXTENCODING_UTF8).replaceFirst("~", "_"));
|
||||
+
|
||||
+ item = g_menu_item_new(sAbout.getStr(), "app.About");
|
||||
+ g_menu_append_item( thirdsubmenu, item );
|
||||
+
|
||||
+ OString sQuit(OUStringToOString(ResId(SV_MENU_MAC_QUITAPP, *pMgr).toString(),
|
||||
+ RTL_TEXTENCODING_UTF8).replaceFirst("~", "_"));
|
||||
+
|
||||
+ item = g_menu_item_new(sQuit.getStr(), "app.Quit");
|
||||
+ g_menu_append_item( thirdsubmenu, item );
|
||||
+ g_menu_append_section( menu, NULL, G_MENU_MODEL(thirdsubmenu));
|
||||
+
|
||||
+ GSimpleActionGroup *group = g_simple_action_group_new ();
|
||||
+ g_simple_action_group_add_entries (group, app_entries, G_N_ELEMENTS (app_entries), NULL);
|
||||
+ GActionGroup* pAppActionGroup = G_ACTION_GROUP(group);
|
||||
+
|
||||
+ pSalFrame->m_nAppActionGroupExportId = g_dbus_connection_export_action_group( pSessionBus, "/org/libreoffice", pAppActionGroup, NULL);
|
||||
+ g_object_unref(pAppActionGroup);
|
||||
+ pSalFrame->m_nAppMenuExportId = g_dbus_connection_export_menu_model (pSessionBus, "/org/libreoffice/menus/appmenu", G_MENU_MODEL (menu), NULL);
|
||||
+ g_object_unref(menu);
|
||||
+ }
|
||||
+
|
||||
g_free( aDBusMenubarPath );
|
||||
+ g_free( aDBusWindowPath );
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
@@ -707,8 +836,12 @@ GtkSalFrame::~GtkSalFrame()
|
||||
hud_awareness_unregister( pSessionBus, m_nHudAwarenessId );
|
||||
if ( m_nMenuExportId )
|
||||
g_dbus_connection_unexport_menu_model( pSessionBus, m_nMenuExportId );
|
||||
+ if ( m_nAppMenuExportId )
|
||||
+ g_dbus_connection_unexport_menu_model( pSessionBus, m_nAppMenuExportId );
|
||||
if ( m_nActionGroupExportId )
|
||||
g_dbus_connection_unexport_action_group( pSessionBus, m_nActionGroupExportId );
|
||||
+ if ( m_nAppActionGroupExportId )
|
||||
+ g_dbus_connection_unexport_action_group( pSessionBus, m_nAppActionGroupExportId );
|
||||
}
|
||||
#endif
|
||||
gtk_widget_destroy( m_pWindow );
|
||||
@@ -828,7 +961,9 @@ void GtkSalFrame::InitCommon()
|
||||
m_pSalMenu = NULL;
|
||||
m_nWatcherId = 0;
|
||||
m_nMenuExportId = 0;
|
||||
+ m_nAppMenuExportId = 0;
|
||||
m_nActionGroupExportId = 0;
|
||||
+ m_nAppActionGroupExportId = 0;
|
||||
m_nHudAwarenessId = 0;
|
||||
|
||||
gtk_widget_set_app_paintable( m_pWindow, TRUE );
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,45 +0,0 @@
|
||||
From b9240ac3695c0f4b88c539721f13dc03b5afdabb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Tue, 1 Oct 2013 15:14:30 +0100
|
||||
Subject: [PATCH] Resolves: rhbz#1013480 crash in EditLineList::operator[]
|
||||
|
||||
avoid crashing anyway, though unknown how to end up in
|
||||
this scenario
|
||||
|
||||
Change-Id: Ib602c73478e5c4772cfef73f70c67ad22877a39f
|
||||
---
|
||||
editeng/source/editeng/impedit2.cxx | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
|
||||
index 4bc6d70..8dd3e35 100644
|
||||
--- a/editeng/source/editeng/impedit2.cxx
|
||||
+++ b/editeng/source/editeng/impedit2.cxx
|
||||
@@ -4119,10 +4119,13 @@ Rectangle ImpEditEngine::GetEditCursor( ParaPortion* pPortion, sal_uInt16 nIndex
|
||||
? GetYValue( rLSItem.GetInterLineSpace() ) : 0;
|
||||
|
||||
sal_uInt16 nCurIndex = 0;
|
||||
- OSL_ENSURE( pPortion->GetLines().Count(), "Empty ParaPortion in GetEditCursor!" );
|
||||
+ size_t nLineCount = pPortion->GetLines().Count();
|
||||
+ OSL_ENSURE( nLineCount, "Empty ParaPortion in GetEditCursor!" );
|
||||
+ if (nLineCount == 0)
|
||||
+ return Rectangle();
|
||||
const EditLine* pLine = NULL;
|
||||
sal_Bool bEOL = ( nFlags & GETCRSR_ENDOFLINE ) ? sal_True : sal_False;
|
||||
- for ( sal_uInt16 nLine = 0; nLine < pPortion->GetLines().Count(); nLine++ )
|
||||
+ for (size_t nLine = 0; nLine < nLineCount; ++nLine)
|
||||
{
|
||||
const EditLine* pTmpLine = pPortion->GetLines()[nLine];
|
||||
if ( ( pTmpLine->GetStart() == nIndex ) || ( pTmpLine->IsIn( nIndex, bEOL ) ) )
|
||||
@@ -4141,7 +4144,7 @@ Rectangle ImpEditEngine::GetEditCursor( ParaPortion* pPortion, sal_uInt16 nIndex
|
||||
// Cursor at the End of the paragraph.
|
||||
OSL_ENSURE( nIndex == nCurIndex, "Index dead wrong in GetEditCursor!" );
|
||||
|
||||
- pLine = pPortion->GetLines()[pPortion->GetLines().Count()-1];
|
||||
+ pLine = pPortion->GetLines()[nLineCount-1];
|
||||
nY -= pLine->GetHeight();
|
||||
if ( !aStatus.IsOutliner() )
|
||||
nY -= nSBL;
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 95c7765107d4d668cfa0709dce8003bf3258ef66 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Mon, 7 Oct 2013 12:21:54 +0100
|
||||
Subject: [PATCH] Resolves: rhbz#1015281 crash on clicking custom animation
|
||||
|
||||
Change-Id: Ibb4519a3d41266ae16fcb93567cf5b5c67066b0c
|
||||
---
|
||||
sd/source/ui/animations/motionpathtag.cxx | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sd/source/ui/animations/motionpathtag.cxx b/sd/source/ui/animations/motionpathtag.cxx
|
||||
index f5f7ac2..2051823 100644
|
||||
--- a/sd/source/ui/animations/motionpathtag.cxx
|
||||
+++ b/sd/source/ui/animations/motionpathtag.cxx
|
||||
@@ -366,7 +366,8 @@ MotionPathTag::MotionPathTag( CustomAnimationPane& rPane, ::sd::View& rView, con
|
||||
{
|
||||
mpPathObj = mpEffect->createSdrPathObjFromPath();
|
||||
mxPolyPoly = mpPathObj->GetPathPoly();
|
||||
- maOriginPos = mxOrigin->getPosition();
|
||||
+ if (mxOrigin.is())
|
||||
+ maOriginPos = mxOrigin->getPosition();
|
||||
|
||||
SdrPage* pPage = mrView.GetSdrPageView()->GetPage();
|
||||
if( pPage )
|
||||
@@ -946,7 +947,9 @@ void MotionPathTag::addCustomHandles( SdrHdlList& rHandlerList )
|
||||
{
|
||||
if( mpPathObj )
|
||||
{
|
||||
- ::com::sun::star::awt::Point aPos( mxOrigin->getPosition() );
|
||||
+ ::com::sun::star::awt::Point aPos;
|
||||
+ if (mxOrigin.is())
|
||||
+ aPos = mxOrigin->getPosition();
|
||||
if( (aPos.X != maOriginPos.X) || (aPos.Y != maOriginPos.Y) )
|
||||
{
|
||||
const basegfx::B2DHomMatrix aTransform(basegfx::tools::createTranslateB2DHomMatrix(
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,130 +0,0 @@
|
||||
From 0881ae68b0d7f977003e0798e52548caa2556f44 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Tue, 29 Oct 2013 16:10:18 +0000
|
||||
Subject: [PATCH] Resolves: rhbz#1021915 force menubar menus to be up/down only
|
||||
|
||||
If a menu won't fit in the desired location the default mode is to place it
|
||||
somewhere it will fit. e.g. above, left, right. For some cases, e.g. menubars,
|
||||
it's desirable to limit the options to above/below and force the menu to scroll
|
||||
if it won't fit
|
||||
|
||||
Change-Id: I1998a842d25752389ec9032e54673408d1ed6cb5
|
||||
---
|
||||
include/vcl/floatwin.hxx | 1 +
|
||||
include/vcl/menu.hxx | 17 +++++++++++------
|
||||
vcl/source/window/menu.cxx | 34 ++++++++++++++++++++++++++++------
|
||||
3 files changed, 40 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/include/vcl/floatwin.hxx b/include/vcl/floatwin.hxx
|
||||
index 4e2f97c..9a9dbdc 100644
|
||||
--- a/include/vcl/floatwin.hxx
|
||||
+++ b/include/vcl/floatwin.hxx
|
||||
@@ -48,6 +48,7 @@ class ToolBox;
|
||||
#define FLOATWIN_POPUPMODE_NEWLEVEL ((sal_uLong)0x00008000)
|
||||
#define FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE ((sal_uLong)0x00010000)
|
||||
#define FLOATWIN_POPUPMODE_GRABFOCUS ((sal_uLong)0x00020000)
|
||||
+#define FLOATWIN_POPUPMODE_NOHORZPLACEMENT ((sal_uLong)0x00040000)
|
||||
|
||||
#define FLOATWIN_POPUPMODEEND_CANCEL ((sal_uInt16)0x0001)
|
||||
#define FLOATWIN_POPUPMODEEND_TEAROFF ((sal_uInt16)0x0002)
|
||||
diff --git a/include/vcl/menu.hxx b/include/vcl/menu.hxx
|
||||
index 5579149..637c701 100644
|
||||
--- a/include/vcl/menu.hxx
|
||||
+++ b/include/vcl/menu.hxx
|
||||
@@ -62,12 +62,17 @@ namespace vcl { struct MenuLayoutData; }
|
||||
#define MENU_APPEND ((sal_uInt16)0xFFFF)
|
||||
#define MENU_ITEM_NOTFOUND ((sal_uInt16)0xFFFF)
|
||||
|
||||
-#define POPUPMENU_EXECUTE_DOWN ((sal_uInt16)0x0001)
|
||||
-#define POPUPMENU_EXECUTE_UP ((sal_uInt16)0x0002)
|
||||
-#define POPUPMENU_EXECUTE_LEFT ((sal_uInt16)0x0004)
|
||||
-#define POPUPMENU_EXECUTE_RIGHT ((sal_uInt16)0x0008)
|
||||
-
|
||||
-#define POPUPMENU_NOMOUSEUPCLOSE ((sal_uInt16)0x0010)
|
||||
+#define POPUPMENU_EXECUTE_DOWN ((sal_uInt16)0x0001)
|
||||
+#define POPUPMENU_EXECUTE_UP ((sal_uInt16)0x0002)
|
||||
+#define POPUPMENU_EXECUTE_LEFT ((sal_uInt16)0x0004)
|
||||
+#define POPUPMENU_EXECUTE_RIGHT ((sal_uInt16)0x0008)
|
||||
+#define POPUPMENU_NOMOUSEUPCLOSE ((sal_uInt16)0x0010)
|
||||
+//If there isn't enough space to put the menu where it wants
|
||||
+//to go, then they will be autoplaced. Toggle this bit
|
||||
+//on to force menus to be placed either above or below
|
||||
+//the starting rectangle and shrunk to fit and then scroll rather than place
|
||||
+//the menu beside that rectangle
|
||||
+#define POPUPMENU_NOHORZ_PLACEMENT ((sal_uInt16)0x0020)
|
||||
|
||||
#define MENU_FLAG_NOAUTOMNEMONICS 0x0001
|
||||
#define MENU_FLAG_HIDEDISABLEDENTRIES 0x0002
|
||||
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
|
||||
index f567ba3..6083554 100644
|
||||
--- a/vcl/source/window/menu.cxx
|
||||
+++ b/vcl/source/window/menu.cxx
|
||||
@@ -3581,7 +3581,6 @@
|
||||
{
|
||||
ENSURE_OR_RETURN( pExecWindow, "PopupMenu::Execute: need a non-NULL window!", 0 );
|
||||
|
||||
-
|
||||
sal_uLong nPopupModeFlags = 0;
|
||||
if ( nFlags & POPUPMENU_EXECUTE_DOWN )
|
||||
nPopupModeFlags = FLOATWIN_POPUPMODE_DOWN;
|
||||
@@ -3597,6 +3596,9 @@
|
||||
if (nFlags & POPUPMENU_NOMOUSEUPCLOSE ) // allow popup menus to stay open on mouse button up
|
||||
nPopupModeFlags |= FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE; // useful if the menu was opened on mousebutton down (eg toolbox configuration)
|
||||
|
||||
+ if (nFlags & POPUPMENU_NOHORZ_PLACEMENT)
|
||||
+ nPopupModeFlags |= FLOATWIN_POPUPMODE_NOHORZPLACEMENT;
|
||||
+
|
||||
return ImplExecute( pExecWindow, rRect, nPopupModeFlags, 0, sal_False );
|
||||
}
|
||||
|
||||
@@ -3700,17 +3702,37 @@
|
||||
|
||||
Size aSz = ImplCalcSize( pWin );
|
||||
|
||||
- long nMaxHeight = pWin->GetDesktopRectPixel().GetHeight();
|
||||
+ Rectangle aDesktopRect(pWin->GetDesktopRectPixel());
|
||||
if( Application::GetScreenCount() > 1 && Application::IsUnifiedDisplay() )
|
||||
{
|
||||
Window* pDeskW = pWindow->GetWindow( WINDOW_REALPARENT );
|
||||
if( ! pDeskW )
|
||||
pDeskW = pWindow;
|
||||
Point aDesktopTL( pDeskW->OutputToAbsoluteScreenPixel( aRect.TopLeft() ) );
|
||||
- nMaxHeight = Application::GetWorkAreaPosSizePixel(
|
||||
- Application::GetBestScreen( Rectangle( aDesktopTL, aRect.GetSize() ) )
|
||||
- ).GetHeight();
|
||||
+ aDesktopRect = Application::GetWorkAreaPosSizePixel(
|
||||
+ Application::GetBestScreen( Rectangle( aDesktopTL, aRect.GetSize() ) ));
|
||||
}
|
||||
+
|
||||
+ long nMaxHeight = aDesktopRect.GetHeight();
|
||||
+
|
||||
+ //rhbz#1021915. If a menu won't fit in the desired location the default
|
||||
+ //mode is to place it somewhere it will fit. e.g. above, left, right. For
|
||||
+ //some cases, e.g. menubars, it's desirable to limit the options to
|
||||
+ //above/below and force the menu to scroll if it won't fit
|
||||
+ if (nPopupModeFlags & FLOATWIN_POPUPMODE_NOHORZPLACEMENT)
|
||||
+ {
|
||||
+ Window* pRef = pWin;
|
||||
+ if ( pRef->GetParent() )
|
||||
+ pRef = pRef->GetParent();
|
||||
+
|
||||
+ Rectangle devRect( pRef->OutputToAbsoluteScreenPixel( aRect.TopLeft() ),
|
||||
+ pRef->OutputToAbsoluteScreenPixel( aRect.BottomRight() ) );
|
||||
+
|
||||
+ long nHeightAbove = devRect.Top() - aDesktopRect.Top();
|
||||
+ long nHeightBelow = aDesktopRect.Bottom() - devRect.Bottom();
|
||||
+ nMaxHeight = std::min(nMaxHeight, std::max(nHeightAbove, nHeightBelow));
|
||||
+ }
|
||||
+
|
||||
if ( pStartedFrom && pStartedFrom->bIsMenuBar )
|
||||
nMaxHeight -= pW->GetSizePixel().Height();
|
||||
sal_Int32 nLeft, nTop, nRight, nBottom;
|
||||
@@ -5345,7 +5367,7 @@
|
||||
// #99071# do not grab the focus, otherwise it will be restored to the menubar
|
||||
// when the frame is reactivated later
|
||||
//GrabFocus();
|
||||
- pActivePopup->ImplExecute( this, Rectangle( aItemTopLeft, aItemBottomRight ), FLOATWIN_POPUPMODE_DOWN, pMenu, bPreSelectFirst );
|
||||
+ pActivePopup->ImplExecute( this, Rectangle( aItemTopLeft, aItemBottomRight ), FLOATWIN_POPUPMODE_DOWN | FLOATWIN_POPUPMODE_NOHORZPLACEMENT, pMenu, bPreSelectFirst );
|
||||
if ( pActivePopup )
|
||||
{
|
||||
// does not have a window, if aborted before or if there are no entries
|
@ -1,138 +0,0 @@
|
||||
From 78f93c2ef1acd324c289286fe3c13a429340839b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Tue, 4 Jun 2013 15:48:23 +0100
|
||||
Subject: [PATCH] Resolves: rhbz#968892 force render full grapheme with
|
||||
fallback font
|
||||
|
||||
Change-Id: I5bb98c61d047e69d74666261b2c489d80f344502
|
||||
---
|
||||
vcl/generic/glyphs/gcach_layout.cxx | 61 ++++++++++++++++++++++---------------
|
||||
vcl/inc/generic/glyphcache.hxx | 5 +++
|
||||
2 files changed, 42 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx
|
||||
index 4fd4cf4..3c3c6de 100644
|
||||
--- a/vcl/generic/glyphs/gcach_layout.cxx
|
||||
+++ b/vcl/generic/glyphs/gcach_layout.cxx
|
||||
@@ -41,6 +41,10 @@
|
||||
#include <unicode/uscript.h>
|
||||
#include <unicode/ubidi.h>
|
||||
|
||||
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
|
||||
+#include <com/sun/star/i18n/CharacterIteratorMode.hpp>
|
||||
+#include <comphelper/processfactory.hxx>
|
||||
+
|
||||
// =======================================================================
|
||||
// layout implementation for ServerFont
|
||||
// =======================================================================
|
||||
@@ -90,23 +94,42 @@ void ServerFontLayout::AdjustLayout( ImplLayoutArgs& rArgs )
|
||||
}
|
||||
}
|
||||
|
||||
-// =======================================================================
|
||||
-
|
||||
-static bool lcl_CharIsJoiner(sal_Unicode cChar)
|
||||
+void ServerFontLayout::setNeedFallback(ImplLayoutArgs& rArgs, sal_Int32 nCharPos,
|
||||
+ bool bRightToLeft)
|
||||
{
|
||||
- return ((cChar == 0x200C) || (cChar == 0x200D));
|
||||
-}
|
||||
+ if (nCharPos < 0)
|
||||
+ return;
|
||||
|
||||
-static bool needPreviousCode(sal_Unicode cChar)
|
||||
-{
|
||||
- return lcl_CharIsJoiner(cChar) || U16_IS_LEAD(cChar);
|
||||
-}
|
||||
+ using namespace ::com::sun::star;
|
||||
|
||||
-static bool needNextCode(sal_Unicode cChar)
|
||||
-{
|
||||
- return lcl_CharIsJoiner(cChar) || U16_IS_TRAIL(cChar);
|
||||
+ if (!mxBreak.is())
|
||||
+ {
|
||||
+ uno::Reference< lang::XMultiServiceFactory > xFactory =
|
||||
+ comphelper::getProcessServiceFactory();
|
||||
+ mxBreak = uno::Reference< i18n::XBreakIterator >(xFactory->createInstance(
|
||||
+ "com.sun.star.i18n.BreakIterator"), uno::UNO_QUERY);
|
||||
+ }
|
||||
+
|
||||
+ LanguageTag aLangTag(rArgs.meLanguage);
|
||||
+ lang::Locale aLocale(aLangTag.getLocale());
|
||||
+
|
||||
+ //if position nCharPos is missing in the font, grab the entire grapheme and
|
||||
+ //mark all glyphs as missing so the whole thing is rendered with the same
|
||||
+ //font
|
||||
+ OUString aRun(rArgs.mpStr);
|
||||
+ sal_Int32 nDone;
|
||||
+ sal_Int32 nGraphemeStartPos =
|
||||
+ mxBreak->previousCharacters(aRun, nCharPos+1, aLocale,
|
||||
+ i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
+ sal_Int32 nGraphemeEndPos =
|
||||
+ mxBreak->nextCharacters(aRun, nCharPos, aLocale,
|
||||
+ i18n::CharacterIteratorMode::SKIPCELL, 1, nDone);
|
||||
+
|
||||
+ rArgs.NeedFallback(nGraphemeStartPos, nGraphemeEndPos, bRightToLeft);
|
||||
}
|
||||
|
||||
+// =======================================================================
|
||||
+
|
||||
std::ostream &operator <<(std::ostream& s, ServerFont* pFont)
|
||||
{
|
||||
#ifndef SAL_LOG_INFO
|
||||
@@ -401,9 +424,7 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
|
||||
// if needed request glyph fallback by updating LayoutArgs
|
||||
if (!nGlyphIndex)
|
||||
{
|
||||
- if (nCharPos >= 0)
|
||||
- rArgs.NeedFallback(nCharPos, bRightToLeft);
|
||||
-
|
||||
+ rLayout.setNeedFallback(rArgs, nCharPos, bRightToLeft);
|
||||
if (SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags)
|
||||
continue;
|
||||
}
|
||||
@@ -1006,15 +1027,7 @@ bool IcuLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
|
||||
// if needed request glyph fallback by updating LayoutArgs
|
||||
if( !nGlyphIndex )
|
||||
{
|
||||
- if( nCharPos >= 0 )
|
||||
- {
|
||||
- rArgs.NeedFallback( nCharPos, bRightToLeft );
|
||||
- if ( (nCharPos > 0) && needPreviousCode(rArgs.mpStr[nCharPos-1]) )
|
||||
- rArgs.NeedFallback( nCharPos-1, bRightToLeft );
|
||||
- else if ( (nCharPos + 1 < nEndRunPos) && needNextCode(rArgs.mpStr[nCharPos+1]) )
|
||||
- rArgs.NeedFallback( nCharPos+1, bRightToLeft );
|
||||
- }
|
||||
-
|
||||
+ rLayout.setNeedFallback(rArgs, nCharPos, bRightToLeft);
|
||||
if( SAL_LAYOUT_FOR_FALLBACK & rArgs.mnFlags )
|
||||
continue;
|
||||
}
|
||||
diff --git a/vcl/inc/generic/glyphcache.hxx b/vcl/inc/generic/glyphcache.hxx
|
||||
index a7363f9..d6cdee1 100644
|
||||
--- a/vcl/inc/generic/glyphcache.hxx
|
||||
+++ b/vcl/inc/generic/glyphcache.hxx
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <boost/unordered_map.hpp>
|
||||
#include <boost/unordered_set.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
+#include <com/sun/star/i18n/XBreakIterator.hpp>
|
||||
|
||||
namespace basegfx { class B2DPolyPolygon; }
|
||||
|
||||
@@ -311,6 +312,7 @@
|
||||
{
|
||||
private:
|
||||
ServerFont& mrServerFont;
|
||||
+ com::sun::star::uno::Reference<com::sun::star::i18n::XBreakIterator> mxBreak;
|
||||
|
||||
// enforce proper copy semantic
|
||||
SAL_DLLPRIVATE ServerFontLayout( const ServerFontLayout& );
|
||||
@@ -324,5 +326,7 @@
|
||||
virtual void AdjustLayout( ImplLayoutArgs& );
|
||||
virtual void DrawText( SalGraphics& ) const;
|
||||
+ void setNeedFallback(ImplLayoutArgs& rArgs, sal_Int32 nIndex,
|
||||
+ bool bRightToLeft);
|
||||
ServerFont& GetServerFont() const { return mrServerFont; }
|
||||
};
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 166510ed48bf49b75a031ce973f41d08fb4e4518 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Thu, 22 Aug 2013 15:29:10 +0100
|
||||
Subject: [PATCH] Resolves: rhbz#996162 apparent NULL bullet font
|
||||
|
||||
Change-Id: I2f50ef1dabe2f152f2e18025edc88734158dbea2
|
||||
---
|
||||
editeng/source/outliner/outliner.cxx | 8 +++++++-
|
||||
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/editeng/source/outliner/outliner.cxx b/editeng/source/outliner/outliner.cxx
|
||||
index cb27c69..49465fb 100644
|
||||
--- a/editeng/source/outliner/outliner.cxx
|
||||
+++ b/editeng/source/outliner/outliner.cxx
|
||||
@@ -897,9 +897,15 @@ Font Outliner::ImpCalcBulletFont( sal_Int32 nPara ) const
|
||||
}
|
||||
|
||||
Font aBulletFont;
|
||||
+ const Font *pSourceFont = 0;
|
||||
if ( pFmt->GetNumberingType() == SVX_NUM_CHAR_SPECIAL )
|
||||
{
|
||||
- aBulletFont = *pFmt->GetBulletFont();
|
||||
+ pSourceFont = pFmt->GetBulletFont();
|
||||
+ }
|
||||
+
|
||||
+ if (pSourceFont)
|
||||
+ {
|
||||
+ aBulletFont = *pSourceFont;
|
||||
}
|
||||
else
|
||||
{
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,33 +0,0 @@
|
||||
From ca576e0804324bbb36b697543cbe992e34d4b951 Mon Sep 17 00:00:00 2001
|
||||
From: Eike Rathke <erack@redhat.com>
|
||||
Date: Mon, 7 Oct 2013 21:51:26 +0200
|
||||
Subject: [PATCH] WaE [-Wstrict-overflow] assuming signed overflow does not
|
||||
occur
|
||||
|
||||
... when assuming that (X - c) <= X is always true
|
||||
... or that (X + c) < X is always false
|
||||
|
||||
Change-Id: Ib2313827cd6358ced0141b41cba753896b676e28
|
||||
---
|
||||
svtools/source/contnr/imivctl1.cxx | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/svtools/source/contnr/imivctl1.cxx b/svtools/source/contnr/imivctl1.cxx
|
||||
index 1cd006b..0685bc3 100644
|
||||
--- a/svtools/source/contnr/imivctl1.cxx
|
||||
+++ b/svtools/source/contnr/imivctl1.cxx
|
||||
@@ -2710,9 +2710,9 @@ Rectangle SvxIconChoiceCtrl_Impl::CalcFocusRect( SvxIconChoiceCtrlEntry* pEntry
|
||||
Rectangle aFocusRect( aBoundRect.Left(), aBmpRect.Top() - 1,
|
||||
aBoundRect.Right() - 4, aTextRect.Bottom() + 1 );
|
||||
// the focus rectangle should not touch the text
|
||||
- if( aFocusRect.Left() - 1 >= pEntry->aRect.Left() )
|
||||
+ if( aFocusRect.Left() > ::std::numeric_limits<long>::min() && aFocusRect.Left() - 1 >= pEntry->aRect.Left() )
|
||||
aFocusRect.Left()--;
|
||||
- if( aFocusRect.Right() + 1 <= pEntry->aRect.Right() )
|
||||
+ if( aFocusRect.Right() < ::std::numeric_limits<long>::max() && aFocusRect.Right() + 1 <= pEntry->aRect.Right() )
|
||||
aFocusRect.Right()++;
|
||||
|
||||
return aFocusRect;
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,289 +0,0 @@
|
||||
From 0cdd8a4f17a80b55c54c1f287c1f10bd7fa4307c Mon Sep 17 00:00:00 2001
|
||||
From: David Tardon <dtardon@redhat.com>
|
||||
Date: Sun, 3 Nov 2013 10:02:58 +0100
|
||||
Subject: [PATCH] add config. for formats newly supported by libmwaw
|
||||
|
||||
Change-Id: I19cc5b13adf1c0d8cf26abbc9f4254ae89a970fc
|
||||
---
|
||||
filter/Configuration_filter.mk | 6 +++++
|
||||
.../config/fragments/filters/Beagle_Works.xcu | 29 ++++++++++++++++++++++
|
||||
.../config/fragments/filters/Great_Works.xcu | 29 ++++++++++++++++++++++
|
||||
filter/source/config/fragments/filters/MacDoc.xcu | 29 ++++++++++++++++++++++
|
||||
.../config/fragments/types/writer_Beagle_Works.xcu | 29 ++++++++++++++++++++++
|
||||
.../config/fragments/types/writer_Great_Works.xcu | 29 ++++++++++++++++++++++
|
||||
.../config/fragments/types/writer_MacDoc.xcu | 29 ++++++++++++++++++++++
|
||||
writerperfect/source/writer/MWAWImportFilter.cxx | 2 +-
|
||||
8 files changed, 181 insertions(+), 1 deletion(-)
|
||||
create mode 100644 filter/source/config/fragments/filters/Beagle_Works.xcu
|
||||
create mode 100644 filter/source/config/fragments/filters/Great_Works.xcu
|
||||
create mode 100644 filter/source/config/fragments/filters/MacDoc.xcu
|
||||
create mode 100644 filter/source/config/fragments/types/writer_Beagle_Works.xcu
|
||||
create mode 100644 filter/source/config/fragments/types/writer_Great_Works.xcu
|
||||
create mode 100644 filter/source/config/fragments/types/writer_MacDoc.xcu
|
||||
|
||||
diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk
|
||||
index 269866b..7102e27 100644
|
||||
--- a/filter/Configuration_filter.mk
|
||||
+++ b/filter/Configuration_filter.mk
|
||||
@@ -304,14 +304,17 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter
|
||||
writer_StarOffice_XML_Writer \
|
||||
writer_WordPerfect_Document \
|
||||
writer_MS_Works_Document \
|
||||
+ writer_Beagle_Works \
|
||||
writer_ClarisWorks \
|
||||
writer_DocMaker \
|
||||
writer_eDoc_Document \
|
||||
writer_FullWrite_Professional \
|
||||
+ writer_Great_Works \
|
||||
writer_HanMac_Word_K \
|
||||
writer_LightWayText \
|
||||
writer_Mac_Word \
|
||||
writer_Mac_Works \
|
||||
+ writer_MacDoc \
|
||||
writer_MacWrite \
|
||||
writer_MacWritePro \
|
||||
writer_Mariner_Write \
|
||||
@@ -350,14 +353,17 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,fi
|
||||
StarOffice_XML__Writer_ \
|
||||
WordPerfect \
|
||||
MS_Works \
|
||||
+ Beagle_Works \
|
||||
ClarisWorks \
|
||||
DocMaker \
|
||||
eDoc_Document \
|
||||
FullWrite_Professional \
|
||||
+ Great_Works \
|
||||
HanMac_Word_K \
|
||||
LightWayText \
|
||||
Mac_Word \
|
||||
Mac_Works \
|
||||
+ MacDoc \
|
||||
MacWrite \
|
||||
MacWritePro \
|
||||
Mariner_Write \
|
||||
diff --git a/filter/source/config/fragments/filters/Beagle_Works.xcu b/filter/source/config/fragments/filters/Beagle_Works.xcu
|
||||
new file mode 100644
|
||||
index 0000000..f1cab85
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/filters/Beagle_Works.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="Beagle Works" oor:op="replace">
|
||||
+ <prop oor:name="Flags">
|
||||
+ <value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FilterService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value xml:lang="x-default">Beagle Works Document</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FileFormatVersion">
|
||||
+ <value>0</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Type">
|
||||
+ <value>writer_Beagle_Works</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="DocumentService">
|
||||
+ <value>com.sun.star.text.TextDocument</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/filters/Great_Works.xcu b/filter/source/config/fragments/filters/Great_Works.xcu
|
||||
new file mode 100644
|
||||
index 0000000..6090504
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/filters/Great_Works.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="Great Works" oor:op="replace">
|
||||
+ <prop oor:name="Flags">
|
||||
+ <value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FilterService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value xml:lang="x-default">Great Works Document</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FileFormatVersion">
|
||||
+ <value>0</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Type">
|
||||
+ <value>writer_Great_Works</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="DocumentService">
|
||||
+ <value>com.sun.star.text.TextDocument</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/filters/MacDoc.xcu b/filter/source/config/fragments/filters/MacDoc.xcu
|
||||
new file mode 100644
|
||||
index 0000000..70ce7d2
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/filters/MacDoc.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="MacDoc" oor:op="replace">
|
||||
+ <prop oor:name="Flags">
|
||||
+ <value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FilterService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value xml:lang="x-default">MacDoc Document</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FileFormatVersion">
|
||||
+ <value>0</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Type">
|
||||
+ <value>writer_MacDoc</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="DocumentService">
|
||||
+ <value>com.sun.star.text.TextDocument</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_Beagle_Works.xcu b/filter/source/config/fragments/types/writer_Beagle_Works.xcu
|
||||
new file mode 100644
|
||||
index 0000000..efe015d
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/types/writer_Beagle_Works.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="writer_Beagle_Works" oor:op="replace">
|
||||
+ <prop oor:name="DetectService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Extensions">
|
||||
+ <value>hqx zip</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="MediaType">
|
||||
+ <value></value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Preferred">
|
||||
+ <value>true</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="PreferredFilter">
|
||||
+ <value>Beagle Works</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value>Beagle Works</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_Great_Works.xcu b/filter/source/config/fragments/types/writer_Great_Works.xcu
|
||||
new file mode 100644
|
||||
index 0000000..ff3fda0
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/types/writer_Great_Works.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="writer_Great_Works" oor:op="replace">
|
||||
+ <prop oor:name="DetectService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Extensions">
|
||||
+ <value>hqx zip</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="MediaType">
|
||||
+ <value></value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Preferred">
|
||||
+ <value>true</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="PreferredFilter">
|
||||
+ <value>Great Works</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value>Great Works</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_MacDoc.xcu b/filter/source/config/fragments/types/writer_MacDoc.xcu
|
||||
new file mode 100644
|
||||
index 0000000..172215b
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/types/writer_MacDoc.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="writer_MacDoc" oor:op="replace">
|
||||
+ <prop oor:name="DetectService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Extensions">
|
||||
+ <value>hqx zip</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="MediaType">
|
||||
+ <value></value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Preferred">
|
||||
+ <value>true</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="PreferredFilter">
|
||||
+ <value>MacDoc</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value>MacDoc</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/writerperfect/source/writer/MWAWImportFilter.cxx b/writerperfect/source/writer/MWAWImportFilter.cxx
|
||||
index 11d6cd8..7cfe4ab 100644
|
||||
--- a/writerperfect/source/writer/MWAWImportFilter.cxx
|
||||
+++ b/writerperfect/source/writer/MWAWImportFilter.cxx
|
||||
@@ -169,7 +169,7 @@ throw( com::sun::star::uno::RuntimeException )
|
||||
sTypeName = "writer_HanMac_Word_K";
|
||||
break;
|
||||
case MWAWDocument::MWAW_T_HANMACWORDJ:
|
||||
- // sTypeName = "writer_HanMac_Word_J";
|
||||
+ sTypeName = "writer_HanMac_Word_J";
|
||||
break;
|
||||
case MWAWDocument::MWAW_T_LIGHTWAYTEXT:
|
||||
sTypeName = "writer_LightWayText";
|
||||
--
|
||||
1.8.4.2
|
||||
|
@ -1,27 +0,0 @@
|
||||
From ac58f62832260af9473eca69e764586258692bb6 Mon Sep 17 00:00:00 2001
|
||||
From: David Tardon <dtardon@redhat.com>
|
||||
Date: Thu, 23 May 2013 14:21:31 +0200
|
||||
Subject: [PATCH] do not build LibreOffice_Test
|
||||
|
||||
Change-Id: I74d8d5192b007432a0943d10e82d0c5dad3a605c
|
||||
---
|
||||
instsetoo_native/CustomTarget_install.mk | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/instsetoo_native/CustomTarget_install.mk b/instsetoo_native/CustomTarget_install.mk
|
||||
index 0962ac8..d3d922285 100644
|
||||
--- a/instsetoo_native/CustomTarget_install.mk
|
||||
+++ b/instsetoo_native/CustomTarget_install.mk
|
||||
@@ -118,9 +118,6 @@ else # LIBO_DEV_INSTALL
|
||||
ifeq (ODK,$(filter ODK,$(BUILD_TYPE)))
|
||||
$(call instsetoo_native_install_command,sdkoo,en-US,_SDK,,$(PKGFORMAT))
|
||||
endif
|
||||
-ifeq (,$(filter WNT MACOSX,$(OS)))
|
||||
- $(call instsetoo_native_install_command,not-used,en-US,_Test,,$(PKGFORMAT))
|
||||
-endif
|
||||
ifeq (HELP,$(filter HELP,$(BUILD_TYPE))$(filter MACOSX,$(OS)))
|
||||
$(foreach lang,$(gb_HELP_LANGS),\
|
||||
$(call instsetoo_native_install_command,ooohelppack,$(lang),,-helppack,$(PKGFORMAT)))
|
||||
--
|
||||
1.8.1.4
|
||||
|
@ -1,380 +0,0 @@
|
||||
From 78e2af8d7141015372995a3583242998c977e829 Mon Sep 17 00:00:00 2001
|
||||
From: David Tardon <dtardon@redhat.com>
|
||||
Date: Mon, 18 Nov 2013 11:29:47 +0100
|
||||
Subject: [PATCH] enable more formats supported by libmwaw
|
||||
|
||||
Change-Id: I60d5ff673843236436af12f86f40916b7d266cd3
|
||||
---
|
||||
filter/Configuration_filter.mk | 6 ++++
|
||||
.../config/fragments/filters/Beagle_Works.xcu | 4 +--
|
||||
.../config/fragments/filters/Great_Works.xcu | 4 +--
|
||||
filter/source/config/fragments/filters/MacDoc.xcu | 2 +-
|
||||
.../source/config/fragments/filters/Mac_Acta.xcu | 29 +++++++++++++++++
|
||||
.../source/config/fragments/filters/Mac_More.xcu | 29 +++++++++++++++++
|
||||
.../config/fragments/types/writer_Beagle_Works.xcu | 6 ++--
|
||||
.../config/fragments/types/writer_Great_Works.xcu | 6 ++--
|
||||
.../config/fragments/types/writer_Mac_Acta.xcu | 29 +++++++++++++++++
|
||||
.../config/fragments/types/writer_Mac_More.xcu | 29 +++++++++++++++++
|
||||
writerperfect/source/writer/MWAWImportFilter.cxx | 37 ++++++++++++++++++++--
|
||||
11 files changed, 167 insertions(+), 14 deletions(-)
|
||||
create mode 100644 filter/source/config/fragments/filters/Mac_Acta.xcu
|
||||
create mode 100644 filter/source/config/fragments/filters/Mac_More.xcu
|
||||
create mode 100644 filter/source/config/fragments/types/writer_Mac_Acta.xcu
|
||||
create mode 100644 filter/source/config/fragments/types/writer_Mac_More.xcu
|
||||
|
||||
diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk
|
||||
index bace597..347d00c 100644
|
||||
--- a/filter/Configuration_filter.mk
|
||||
+++ b/filter/Configuration_filter.mk
|
||||
@@ -328,8 +328,11 @@ $(call filter_Configuration_add_types,fcfg_langpack,fcfg_writer_types.xcu,filter
|
||||
writer_eDoc_Document \
|
||||
writer_FullWrite_Professional \
|
||||
writer_Great_Works \
|
||||
+ writer_HanMac_Word_J \
|
||||
writer_HanMac_Word_K \
|
||||
writer_LightWayText \
|
||||
+ writer_Mac_Acta \
|
||||
+ writer_Mac_More \
|
||||
writer_Mac_Word \
|
||||
writer_Mac_Works \
|
||||
writer_MacDoc \
|
||||
@@ -384,8 +387,11 @@ $(call filter_Configuration_add_filters,fcfg_langpack,fcfg_writer_filters.xcu,fi
|
||||
eDoc_Document \
|
||||
FullWrite_Professional \
|
||||
Great_Works \
|
||||
+ HanMac_Word_J \
|
||||
HanMac_Word_K \
|
||||
LightWayText \
|
||||
+ Mac_Acta \
|
||||
+ Mac_More \
|
||||
Mac_Word \
|
||||
Mac_Works \
|
||||
MacDoc \
|
||||
diff --git a/filter/source/config/fragments/filters/Beagle_Works.xcu b/filter/source/config/fragments/filters/Beagle_Works.xcu
|
||||
index f1cab85..e2f9d4c 100644
|
||||
--- a/filter/source/config/fragments/filters/Beagle_Works.xcu
|
||||
+++ b/filter/source/config/fragments/filters/Beagle_Works.xcu
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
-->
|
||||
|
||||
-<node oor:name="Beagle Works" oor:op="replace">
|
||||
+<node oor:name="Beagle_Works" oor:op="replace">
|
||||
<prop oor:name="Flags">
|
||||
<value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
</prop>
|
||||
@@ -15,7 +15,7 @@
|
||||
<value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
</prop>
|
||||
<prop oor:name="UIName">
|
||||
- <value xml:lang="x-default">Beagle Works Document</value>
|
||||
+ <value xml:lang="x-default">BeagleWorks/WordPerfect Works v1 Document</value>
|
||||
</prop>
|
||||
<prop oor:name="FileFormatVersion">
|
||||
<value>0</value>
|
||||
diff --git a/filter/source/config/fragments/filters/Great_Works.xcu b/filter/source/config/fragments/filters/Great_Works.xcu
|
||||
index 6090504..0e5aeb3 100644
|
||||
--- a/filter/source/config/fragments/filters/Great_Works.xcu
|
||||
+++ b/filter/source/config/fragments/filters/Great_Works.xcu
|
||||
@@ -7,7 +7,7 @@
|
||||
*
|
||||
-->
|
||||
|
||||
-<node oor:name="Great Works" oor:op="replace">
|
||||
+<node oor:name="Great_Works" oor:op="replace">
|
||||
<prop oor:name="Flags">
|
||||
<value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
</prop>
|
||||
@@ -15,7 +15,7 @@
|
||||
<value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
</prop>
|
||||
<prop oor:name="UIName">
|
||||
- <value xml:lang="x-default">Great Works Document</value>
|
||||
+ <value xml:lang="x-default">GreatWorks Document</value>
|
||||
</prop>
|
||||
<prop oor:name="FileFormatVersion">
|
||||
<value>0</value>
|
||||
diff --git a/filter/source/config/fragments/filters/MacDoc.xcu b/filter/source/config/fragments/filters/MacDoc.xcu
|
||||
index 70ce7d2..2692709 100644
|
||||
--- a/filter/source/config/fragments/filters/MacDoc.xcu
|
||||
+++ b/filter/source/config/fragments/filters/MacDoc.xcu
|
||||
@@ -15,7 +15,7 @@
|
||||
<value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
</prop>
|
||||
<prop oor:name="UIName">
|
||||
- <value xml:lang="x-default">MacDoc Document</value>
|
||||
+ <value xml:lang="x-default">MacDoc v1 Document</value>
|
||||
</prop>
|
||||
<prop oor:name="FileFormatVersion">
|
||||
<value>0</value>
|
||||
diff --git a/filter/source/config/fragments/filters/Mac_Acta.xcu b/filter/source/config/fragments/filters/Mac_Acta.xcu
|
||||
new file mode 100644
|
||||
index 0000000..c60349a
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/filters/Mac_Acta.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="Mac_Acta" oor:op="replace">
|
||||
+ <prop oor:name="Flags">
|
||||
+ <value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FilterService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value xml:lang="x-default">Acta Mac Classic Document</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FileFormatVersion">
|
||||
+ <value>0</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Type">
|
||||
+ <value>writer_Mac_Acta</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="DocumentService">
|
||||
+ <value>com.sun.star.text.TextDocument</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/filters/Mac_More.xcu b/filter/source/config/fragments/filters/Mac_More.xcu
|
||||
new file mode 100644
|
||||
index 0000000..c2485f6
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/filters/Mac_More.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="Mac_More" oor:op="replace">
|
||||
+ <prop oor:name="Flags">
|
||||
+ <value>IMPORT ALIEN USESOPTIONS 3RDPARTYFILTER PREFERRED</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FilterService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value xml:lang="x-default">More Mac v2-3 Document</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="FileFormatVersion">
|
||||
+ <value>0</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Type">
|
||||
+ <value>writer_Mac_More</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="DocumentService">
|
||||
+ <value>com.sun.star.text.TextDocument</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_Beagle_Works.xcu b/filter/source/config/fragments/types/writer_Beagle_Works.xcu
|
||||
index efe015d..5eb45c1 100644
|
||||
--- a/filter/source/config/fragments/types/writer_Beagle_Works.xcu
|
||||
+++ b/filter/source/config/fragments/types/writer_Beagle_Works.xcu
|
||||
@@ -12,7 +12,7 @@
|
||||
<value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
</prop>
|
||||
<prop oor:name="Extensions">
|
||||
- <value>hqx zip</value>
|
||||
+ <value>dummy</value>
|
||||
</prop>
|
||||
<prop oor:name="MediaType">
|
||||
<value></value>
|
||||
@@ -21,9 +21,9 @@
|
||||
<value>true</value>
|
||||
</prop>
|
||||
<prop oor:name="PreferredFilter">
|
||||
- <value>Beagle Works</value>
|
||||
+ <value>Beagle_Works</value>
|
||||
</prop>
|
||||
<prop oor:name="UIName">
|
||||
- <value>Beagle Works</value>
|
||||
+ <value>BeagleWorks/WordPerfect Works Document</value>
|
||||
</prop>
|
||||
</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_Great_Works.xcu b/filter/source/config/fragments/types/writer_Great_Works.xcu
|
||||
index ff3fda0..6c448f3 100644
|
||||
--- a/filter/source/config/fragments/types/writer_Great_Works.xcu
|
||||
+++ b/filter/source/config/fragments/types/writer_Great_Works.xcu
|
||||
@@ -12,7 +12,7 @@
|
||||
<value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
</prop>
|
||||
<prop oor:name="Extensions">
|
||||
- <value>hqx zip</value>
|
||||
+ <value>dummy</value>
|
||||
</prop>
|
||||
<prop oor:name="MediaType">
|
||||
<value></value>
|
||||
@@ -21,9 +21,9 @@
|
||||
<value>true</value>
|
||||
</prop>
|
||||
<prop oor:name="PreferredFilter">
|
||||
- <value>Great Works</value>
|
||||
+ <value>Great_Works</value>
|
||||
</prop>
|
||||
<prop oor:name="UIName">
|
||||
- <value>Great Works</value>
|
||||
+ <value>GreatWorks Document</value>
|
||||
</prop>
|
||||
</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_Mac_Acta.xcu b/filter/source/config/fragments/types/writer_Mac_Acta.xcu
|
||||
new file mode 100644
|
||||
index 0000000..478add2
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/types/writer_Mac_Acta.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="writer_Mac_Acta" oor:op="replace">
|
||||
+ <prop oor:name="DetectService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Extensions">
|
||||
+ <value>dummy</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="MediaType">
|
||||
+ <value></value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Preferred">
|
||||
+ <value>true</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="PreferredFilter">
|
||||
+ <value>Mac_Acta</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value>Acta Mac v1-2 Document</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/filter/source/config/fragments/types/writer_Mac_More.xcu b/filter/source/config/fragments/types/writer_Mac_More.xcu
|
||||
new file mode 100644
|
||||
index 0000000..66047d5
|
||||
--- /dev/null
|
||||
+++ b/filter/source/config/fragments/types/writer_Mac_More.xcu
|
||||
@@ -0,0 +1,29 @@
|
||||
+<!--
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+-->
|
||||
+
|
||||
+<node oor:name="writer_Mac_More" oor:op="replace">
|
||||
+ <prop oor:name="DetectService">
|
||||
+ <value>com.sun.star.comp.Writer.MWAWImportFilter</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Extensions">
|
||||
+ <value>dummy</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="MediaType">
|
||||
+ <value></value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="Preferred">
|
||||
+ <value>true</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="PreferredFilter">
|
||||
+ <value>Mac_More</value>
|
||||
+ </prop>
|
||||
+ <prop oor:name="UIName">
|
||||
+ <value>More Mac v2-3 Document</value>
|
||||
+ </prop>
|
||||
+</node>
|
||||
diff --git a/writerperfect/source/writer/MWAWImportFilter.cxx b/writerperfect/source/writer/MWAWImportFilter.cxx
|
||||
index 7cfe4ab..452f3a6 100644
|
||||
--- a/writerperfect/source/writer/MWAWImportFilter.cxx
|
||||
+++ b/writerperfect/source/writer/MWAWImportFilter.cxx
|
||||
@@ -152,6 +152,10 @@ throw( com::sun::star::uno::RuntimeException )
|
||||
switch (docType)
|
||||
{
|
||||
case MWAWDocument::MWAW_T_ACTA:
|
||||
+ sTypeName = "writer_Mac_Acta";
|
||||
+ break;
|
||||
+ case MWAWDocument::MWAW_T_BEAGLEWORKS:
|
||||
+ sTypeName = "writer_Beagle_Works";
|
||||
break;
|
||||
case MWAWDocument::MWAW_T_CLARISWORKS:
|
||||
sTypeName = "writer_ClarisWorks";
|
||||
@@ -162,18 +166,24 @@ throw( com::sun::star::uno::RuntimeException )
|
||||
case MWAWDocument::MWAW_T_EDOC:
|
||||
sTypeName = "writer_eDoc_Document";
|
||||
break;
|
||||
+ case MWAWDocument::MWAW_T_GREATWORKS:
|
||||
+ sTypeName = "writer_Great_Works";
|
||||
+ break;
|
||||
case MWAWDocument::MWAW_T_FULLWRITE:
|
||||
sTypeName = "writer_FullWrite_Professional";
|
||||
break;
|
||||
- case MWAWDocument::MWAW_T_HANMACWORDK:
|
||||
- sTypeName = "writer_HanMac_Word_K";
|
||||
- break;
|
||||
case MWAWDocument::MWAW_T_HANMACWORDJ:
|
||||
sTypeName = "writer_HanMac_Word_J";
|
||||
break;
|
||||
+ case MWAWDocument::MWAW_T_HANMACWORDK:
|
||||
+ sTypeName = "writer_HanMac_Word_K";
|
||||
+ break;
|
||||
case MWAWDocument::MWAW_T_LIGHTWAYTEXT:
|
||||
sTypeName = "writer_LightWayText";
|
||||
break;
|
||||
+ case MWAWDocument::MWAW_T_MACDOC:
|
||||
+ sTypeName = "writer_MacDoc";
|
||||
+ break;
|
||||
case MWAWDocument::MWAW_T_MARINERWRITE:
|
||||
sTypeName = "writer_Mariner_Write";
|
||||
break;
|
||||
@@ -192,6 +202,9 @@ throw( com::sun::star::uno::RuntimeException )
|
||||
case MWAWDocument::MWAW_T_MICROSOFTWORKS:
|
||||
sTypeName = "writer_Mac_Works";
|
||||
break;
|
||||
+ case MWAWDocument::MWAW_T_MORE:
|
||||
+ sTypeName = "writer_Mac_More";
|
||||
+ break;
|
||||
case MWAWDocument::MWAW_T_NISUSWRITER:
|
||||
sTypeName = "writer_Nisus_Writer";
|
||||
break;
|
||||
@@ -210,6 +223,24 @@ throw( com::sun::star::uno::RuntimeException )
|
||||
case MWAWDocument::MWAW_T_ZWRITE:
|
||||
sTypeName = "writer_ZWrite";
|
||||
break;
|
||||
+
|
||||
+ case MWAWDocument::MWAW_T_FRAMEMAKER:
|
||||
+ case MWAWDocument::MWAW_T_MACDRAW:
|
||||
+ case MWAWDocument::MWAW_T_MACPAINT:
|
||||
+ case MWAWDocument::MWAW_T_PAGEMAKER:
|
||||
+ case MWAWDocument::MWAW_T_READYSETGO:
|
||||
+ case MWAWDocument::MWAW_T_RAGTIME:
|
||||
+ case MWAWDocument::MWAW_T_XPRESS:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED1:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED2:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED3:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED4:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED5:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED6:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED7:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED8:
|
||||
+ case MWAWDocument::MWAW_T_RESERVED9:
|
||||
+ case MWAWDocument::MWAW_T_UNKNOWN:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
--
|
||||
1.8.4.2
|
||||
|
@ -1,172 +0,0 @@
|
||||
From f450c132e6a65e1d11f20595bb0bfbf786e1dc2d Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Bergmann <sbergman@redhat.com>
|
||||
Date: Thu, 24 Oct 2013 09:48:13 +0200
|
||||
Subject: [PATCH] fdo#67725 unoidl::AggregatingCursor must wrap modules for
|
||||
aggregation, too
|
||||
|
||||
Otherwise cppuhelper::TypeManager::createTypeDescriptionEnumeration, sitting on
|
||||
top such an AggregatingCursor, will miss any entities from provider P' in module
|
||||
M if any previous provider P contains the same module M.
|
||||
|
||||
That happened when climaker generates cli_oootypes.dll, where the enumeration
|
||||
missed everything from offapi in top-level module "com" because it had already
|
||||
seen udkapi's "com", and only reported the handful of entities under offapi's
|
||||
other top-level module "org" (which does not appear in udkapi).
|
||||
|
||||
Change-Id: If538391bde22bcc346417b5988cf12023f0d4172
|
||||
(cherry picked from commit bdd55e28fc7788c2968daaf87b782f8e6189ee2d)
|
||||
---
|
||||
unoidl/source/unoidl.cxx | 112 +++++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 78 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/unoidl/source/unoidl.cxx b/unoidl/source/unoidl.cxx
|
||||
index a9939e4..c55e02b 100644
|
||||
--- a/unoidl/source/unoidl.cxx
|
||||
+++ b/unoidl/source/unoidl.cxx
|
||||
@@ -23,41 +23,101 @@ namespace unoidl {
|
||||
|
||||
namespace {
|
||||
|
||||
+class AggregatingModule: public ModuleEntity {
|
||||
+public:
|
||||
+ AggregatingModule(
|
||||
+ std::vector< rtl::Reference< Provider > > const & providers,
|
||||
+ OUString const & name):
|
||||
+ providers_(providers), name_(name)
|
||||
+ {}
|
||||
+
|
||||
+private:
|
||||
+ virtual ~AggregatingModule() throw () {}
|
||||
+
|
||||
+ virtual std::vector< OUString > getMemberNames() const;
|
||||
+
|
||||
+ virtual rtl::Reference< MapCursor > createCursor() const;
|
||||
+
|
||||
+ std::vector< rtl::Reference< Provider > > providers_;
|
||||
+ OUString name_;
|
||||
+};
|
||||
+
|
||||
+std::vector< OUString > AggregatingModule::getMemberNames() const {
|
||||
+ std::set< OUString > names;
|
||||
+ for (std::vector< rtl::Reference< Provider > >::const_iterator i(
|
||||
+ providers_.begin());
|
||||
+ i != providers_.end(); ++i)
|
||||
+ {
|
||||
+ rtl::Reference< Entity > ent((*i)->findEntity(name_));
|
||||
+ if (ent.is() && ent->getSort() == Entity::SORT_MODULE) {
|
||||
+ std::vector< OUString > ns(
|
||||
+ static_cast< ModuleEntity * >(ent.get())->getMemberNames());
|
||||
+ names.insert(ns.begin(), ns.end());
|
||||
+ }
|
||||
+ }
|
||||
+ return std::vector< OUString >(names.begin(), names.end());
|
||||
+}
|
||||
+
|
||||
class AggregatingCursor: public MapCursor {
|
||||
public:
|
||||
AggregatingCursor(
|
||||
- std::vector< rtl::Reference< MapCursor > > const & cursors):
|
||||
- cursors_(cursors), iterator_(cursors_.begin())
|
||||
- {}
|
||||
+ std::vector< rtl::Reference< Provider > > const & providers,
|
||||
+ OUString const & name):
|
||||
+ providers_(providers), name_(name), iterator_(providers_.begin())
|
||||
+ { findCursor(); }
|
||||
|
||||
private:
|
||||
virtual ~AggregatingCursor() throw () {}
|
||||
|
||||
- virtual rtl::Reference< Entity > getNext(rtl::OUString * name);
|
||||
+ virtual rtl::Reference< Entity > getNext(OUString * name);
|
||||
|
||||
- std::vector< rtl::Reference< MapCursor > > cursors_;
|
||||
- std::vector< rtl::Reference< MapCursor > >::iterator iterator_;
|
||||
- std::set< rtl::OUString > seenMembers;
|
||||
+ void findCursor();
|
||||
+
|
||||
+ std::vector< rtl::Reference< Provider > > providers_;
|
||||
+ OUString name_;
|
||||
+ std::vector< rtl::Reference< Provider > >::iterator iterator_;
|
||||
+ rtl::Reference< MapCursor > cursor_;
|
||||
+ std::set< OUString > seen_;
|
||||
};
|
||||
|
||||
-rtl::Reference< Entity > AggregatingCursor::getNext(rtl::OUString * name) {
|
||||
- for (;;) {
|
||||
- if (iterator_ == cursors_.end()) {
|
||||
- return rtl::Reference< Entity >();
|
||||
- }
|
||||
- rtl::OUString n;
|
||||
- rtl::Reference< Entity > ent((*iterator_)->getNext(&n));
|
||||
+rtl::Reference< Entity > AggregatingCursor::getNext(OUString * name) {
|
||||
+ while (cursor_.is()) {
|
||||
+ OUString n;
|
||||
+ rtl::Reference< Entity > ent(cursor_->getNext(&n));
|
||||
if (ent.is()) {
|
||||
- if (seenMembers.insert(n).second) {
|
||||
+ if (seen_.insert(n).second) {
|
||||
if (name != 0) {
|
||||
*name = n;
|
||||
}
|
||||
- return ent;
|
||||
+ return ent->getSort() == Entity::SORT_MODULE
|
||||
+ ? new AggregatingModule(
|
||||
+ providers_, (name_.isEmpty() ? name_ : name_ + ".") + n)
|
||||
+ : ent;
|
||||
}
|
||||
} else {
|
||||
- ++iterator_;
|
||||
+ cursor_.clear();
|
||||
+ findCursor();
|
||||
}
|
||||
}
|
||||
+ return rtl::Reference< Entity >();
|
||||
+}
|
||||
+
|
||||
+void AggregatingCursor::findCursor() {
|
||||
+ for (; !cursor_.is() && iterator_ != providers_.end(); ++iterator_) {
|
||||
+ if (name_.isEmpty()) {
|
||||
+ cursor_ = (*iterator_)->createRootCursor();
|
||||
+ } else {
|
||||
+ rtl::Reference< Entity > ent((*iterator_)->findEntity(name_));
|
||||
+ if (ent.is() && ent->getSort() == Entity::SORT_MODULE) {
|
||||
+ cursor_ = static_cast< ModuleEntity * >(ent.get())->
|
||||
+ createCursor();
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+rtl::Reference< MapCursor > AggregatingModule::createCursor() const {
|
||||
+ return new AggregatingCursor(providers_, name_);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -139,23 +199,7 @@ rtl::Reference< Entity > Manager::findEntity(rtl::OUString const & name) const {
|
||||
rtl::Reference< MapCursor > Manager::createCursor(rtl::OUString const & name)
|
||||
const
|
||||
{
|
||||
- std::vector< rtl::Reference< MapCursor > > curs;
|
||||
- for (std::vector< rtl::Reference< Provider > >::const_iterator i(
|
||||
- providers_.begin());
|
||||
- i != providers_.end(); ++i)
|
||||
- {
|
||||
- if (name.isEmpty()) {
|
||||
- curs.push_back((*i)->createRootCursor());
|
||||
- } else {
|
||||
- rtl::Reference< Entity > ent((*i)->findEntity(name));
|
||||
- if (ent.is() && ent->getSort() == Entity::SORT_MODULE) {
|
||||
- curs.push_back(
|
||||
- static_cast< ModuleEntity * >(ent.get())->createCursor());
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- return curs.empty()
|
||||
- ? rtl::Reference< MapCursor >() : new AggregatingCursor(curs);
|
||||
+ return new AggregatingCursor(providers_, name);
|
||||
}
|
||||
|
||||
Manager::~Manager() throw () {}
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,45 +0,0 @@
|
||||
From a79a7f315a0a3bc8148a88bb1d3c6f83a4552094 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Stahl <mstahl@redhat.com>
|
||||
Date: Tue, 8 Oct 2013 18:37:35 +0200
|
||||
Subject: [PATCH] fdo#70201: sw: eliminate no-extent RSID-only AUTOFMT hints
|
||||
|
||||
These are already filtered out in SwpHints::TryInsertHint(), but they
|
||||
can be produced by a SwTxtNode::Update() following some deletion like in
|
||||
SwTxtNode::ReplaceText() (or maybe CutImpl() and RstAttr() too?).
|
||||
|
||||
So in order to prevent SwHistorySetTxt being created for these,
|
||||
filter them out in SwpHints::MergePortions(), which has the advantage
|
||||
that it's one location to change; probably filtering in Update() and
|
||||
RstAttr() both would work too.
|
||||
|
||||
(regression from 6db39dbd7378351f6476f6db25eb7110c9cfb291)
|
||||
|
||||
Change-Id: I597a9ab290dcc3fb1b624dd2dca241c462acf256
|
||||
(cherry picked from commit 91159b1c31a7fd474ba0b97828f593604790ce3c)
|
||||
---
|
||||
sw/source/core/txtnode/thints.cxx | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/sw/source/core/txtnode/thints.cxx b/sw/source/core/txtnode/thints.cxx
|
||||
index 0893dac..34dac0a 100644
|
||||
--- a/sw/source/core/txtnode/thints.cxx
|
||||
+++ b/sw/source/core/txtnode/thints.cxx
|
||||
@@ -2528,6 +2528,15 @@ bool SwpHints::MergePortions( SwTxtNode& rNode )
|
||||
pHt->GetAutoFmt().GetStyleHandle());
|
||||
if ((pSet->Count() == 1) && pSet->GetItem(RES_CHRATR_RSID, false))
|
||||
{
|
||||
+ // fdo#70201: eliminate no-extent RSID-only AUTOFMT
|
||||
+ // could be produced by ReplaceText or (maybe?) RstAttr
|
||||
+ if (*pHt->GetStart() == *pHt->GetEnd())
|
||||
+ {
|
||||
+ SwpHintsArray::DeleteAtPos(i); // kill it without History!
|
||||
+ SwTxtAttr::Destroy(pHt, rNode.GetDoc()->GetAttrPool());
|
||||
+ --i;
|
||||
+ continue;
|
||||
+ }
|
||||
// fdo#52028: this one has _only_ RSID => ignore it completely
|
||||
if (!pHt->IsFormatIgnoreStart() || !pHt->IsFormatIgnoreEnd())
|
||||
{
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,98 +0,0 @@
|
||||
From 71077148d442b3bbfeefd9a572942946c6a95823 Mon Sep 17 00:00:00 2001
|
||||
From: Khaled Hosny <khaledhosny@eglug.org>
|
||||
Date: Wed, 30 Oct 2013 09:34:38 +0200
|
||||
Subject: [PATCH] fdo#70968: Incorrect rendering of Devanagari short 'i' vowel
|
||||
|
||||
It seems that some Indic fonts assign 'mark' glyph class to combining
|
||||
spacing marks (spacing not non spacing) so my reliance on the glyph
|
||||
class to set the IS_DIACRITIC flags broke those fonts. This is a bandaid
|
||||
to get around the issue, plus some long rant! (at this rate, I'll be
|
||||
writing "The VCL haters handbook" pretty soon).
|
||||
|
||||
Change-Id: I3ff892acf746d50182573f94e7e8c3c6f9464ae0
|
||||
---
|
||||
vcl/generic/glyphs/gcach_layout.cxx | 26 +++++++++++++++++++++-----
|
||||
vcl/source/gdi/sallayout.cxx | 21 +++++++++++++++++++++
|
||||
2 files changed, 42 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx
|
||||
index 4673931..7a8bfc9 100644
|
||||
--- a/vcl/generic/glyphs/gcach_layout.cxx
|
||||
+++ b/vcl/generic/glyphs/gcach_layout.cxx
|
||||
@@ -456,20 +456,36 @@ bool HbLayoutEngine::layout(ServerFontLayout& rLayout, ImplLayoutArgs& rArgs)
|
||||
if (bInCluster)
|
||||
nGlyphFlags |= GlyphItem::IS_IN_CLUSTER;
|
||||
|
||||
+ // The whole IS_DIACRITIC concept is a stupid hack that was
|
||||
+ // introduced ages ago to work around the utter brokenness of the
|
||||
+ // way justification adjustments are applied (the DXArray fiasco).
|
||||
+ // Since it is such a stupid hack, there is no sane way to directly
|
||||
+ // map to concepts of the "outside" world, so we do some rather
|
||||
+ // ugly hacks:
|
||||
+ // * If the font has a GDEF table, we check for glyphs with mark
|
||||
+ // glyph class which is sensible, except that some fonts
|
||||
+ // (fdo#70968) assign mark class to spacing marks (which is wrong
|
||||
+ // but usually harmless), so we try to sniff what HarfBuzz thinks
|
||||
+ // about this glyph by checking if it gives it a zero advance
|
||||
+ // width.
|
||||
+ // * If the font has no GDEF table, we just check if the glyph has
|
||||
+ // zero advance width, but this is stupid and can be wrong. A
|
||||
+ // better way would to check the character's Unicode combining
|
||||
+ // class, but unfortunately glyph gives combining marks the
|
||||
+ // cluster value of its base character, so nCharPos will be
|
||||
+ // pointing to the wrong character (but HarfBuzz might change
|
||||
+ // this in the future).
|
||||
bool bDiacritic = false;
|
||||
if (hb_ot_layout_has_glyph_classes(mpHbFace))
|
||||
{
|
||||
// the font has GDEF table
|
||||
- if (hb_ot_layout_get_glyph_class(mpHbFace, nGlyphIndex) == HB_OT_LAYOUT_GLYPH_CLASS_MARK)
|
||||
+ bool bMark = hb_ot_layout_get_glyph_class(mpHbFace, nGlyphIndex) == HB_OT_LAYOUT_GLYPH_CLASS_MARK;
|
||||
+ if (bMark && pHbPositions[i].x_advance == 0)
|
||||
bDiacritic = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// the font lacks GDEF table
|
||||
- // HACK: if the resolved glyph advance is zero assume it is a
|
||||
- // combining mark. The whole IS_DIACRITIC concept is a hack to
|
||||
- // fix the other hacks we use to second-guess glyph advances in
|
||||
- // ApplyDXArray and the likes and it needs to die
|
||||
if (pHbPositions[i].x_advance == 0)
|
||||
bDiacritic = true;
|
||||
}
|
||||
diff --git a/vcl/source/gdi/sallayout.cxx b/vcl/source/gdi/sallayout.cxx
|
||||
index f395936..450ec232 100644
|
||||
--- a/vcl/source/gdi/sallayout.cxx
|
||||
+++ b/vcl/source/gdi/sallayout.cxx
|
||||
@@ -1018,6 +1018,27 @@ void GenericSalLayout::AdjustLayout( ImplLayoutArgs& rArgs )
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
+// This DXArray thing is one of the stupidest ideas I have ever seen (I've been
|
||||
+// told that it probably a one-to-one mapping of some Windows 3.1 API, which is
|
||||
+// telling). To justify a text string, Writer calls OutputDevice::GetTextArray()
|
||||
+// to get an array that maps input characters (not glyphs) to their absolute
|
||||
+// position, GetTextArray() in turn calls SalLayout::FillDXArray() to get an
|
||||
+// array of character widths that it converts to absolute positions.
|
||||
+//
|
||||
+// Writer would then apply justification adjustments to that array of absolute
|
||||
+// character positions and return to OutputDevice, which eventually calls
|
||||
+// ApplyDXArray(), which needs to extract the individual adjustments for each
|
||||
+// character to apply it to corresponding glyphs, and since that information is
|
||||
+// already lost it tries to do some heuristics to guess it again. Those
|
||||
+// heuristics often fail, and have always been a source of all sorts of weird
|
||||
+// text layout bugs, and instead of fixing the broken design a hack after hack
|
||||
+// have been applied on top of it, making it a complete mess that nobody
|
||||
+// understands.
|
||||
+//
|
||||
+// As you can see by now, this is utterly stupid, why Writer does not just send
|
||||
+// us directly the advance width transformations it wants to apply to each
|
||||
+// character instead of this whole mess?
|
||||
+
|
||||
void GenericSalLayout::ApplyDXArray( ImplLayoutArgs& rArgs )
|
||||
{
|
||||
if( m_GlyphItems.empty())
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,405 +0,0 @@
|
||||
From 4a7096b9c8c0e6451fa0ced06143cb8a65ec10fc Mon Sep 17 00:00:00 2001
|
||||
From: Eike Rathke <erack@redhat.com>
|
||||
Date: Mon, 28 Oct 2013 22:46:01 +0100
|
||||
Subject: [PATCH] resolved fdo#56209 reviving FilterFormulaParser
|
||||
|
||||
First it was moved from oox to sc without carrying over the component
|
||||
factory bits, then subsequent commits removed the remaining bits in
|
||||
steps as it appeared to be unused:
|
||||
|
||||
8ada1cd2846e5e60ad63250c68ddea3a9356546f
|
||||
887d7945addeb823e0d3f783609c4e79d92ad4a7
|
||||
effda59a12cedd3cf200d2e9f5186a623b0855bb
|
||||
f2fd2a66ee827024b31a310d67804cb7cb18d2da
|
||||
|
||||
(cherry picked from commit 20e0afa76087e20f95247406d265a122263a8c6f)
|
||||
|
||||
Backported.
|
||||
|
||||
Change-Id: I445b11c95daff6f30b3654936d0f22a113158f97
|
||||
Reviewed-on: https://gerrit.libreoffice.org/6469
|
||||
Reviewed-by: David Tardon <dtardon@redhat.com>
|
||||
Tested-by: David Tardon <dtardon@redhat.com>
|
||||
---
|
||||
sc/Library_scfilt.mk | 1 +
|
||||
sc/source/filter/excel/xestream.cxx | 10 ++
|
||||
sc/source/filter/inc/ooxformulaparser.hxx | 110 +++++++++++++++++
|
||||
sc/source/filter/oox/ooxformulaparser.cxx | 196 ++++++++++++++++++++++++++++++
|
||||
sc/util/scfilt.component | 3 +
|
||||
5 files changed, 320 insertions(+)
|
||||
create mode 100644 sc/source/filter/inc/ooxformulaparser.hxx
|
||||
create mode 100644 sc/source/filter/oox/ooxformulaparser.cxx
|
||||
|
||||
diff --git a/sc/Library_scfilt.mk b/sc/Library_scfilt.mk
|
||||
index 5b383c4..3cc4b1a 100644
|
||||
--- a/sc/Library_scfilt.mk
|
||||
+++ b/sc/Library_scfilt.mk
|
||||
@@ -188,6 +188,7 @@ $(eval $(call gb_Library_add_exception_objects,scfilt,\
|
||||
sc/source/filter/oox/formulabuffer \
|
||||
sc/source/filter/oox/formulaparser \
|
||||
sc/source/filter/oox/numberformatsbuffer \
|
||||
+ sc/source/filter/oox/ooxformulaparser \
|
||||
sc/source/filter/oox/pagesettings \
|
||||
sc/source/filter/oox/pivotcachebuffer \
|
||||
sc/source/filter/oox/pivotcachefragment \
|
||||
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
|
||||
index bf9c1d8..8421006 100644
|
||||
--- a/sc/source/filter/excel/xestream.cxx
|
||||
+++ b/sc/source/filter/excel/xestream.cxx
|
||||
@@ -1179,6 +1179,11 @@ namespace oox { namespace xls {
|
||||
Sequence< OUString > SAL_CALL ExcelFilter_getSupportedServiceNames() throw();
|
||||
Reference< XInterface > SAL_CALL ExcelFilter_createInstance(
|
||||
const Reference< XComponentContext >& rxContext ) throw( Exception );
|
||||
+
|
||||
+ OUString SAL_CALL OOXMLFormulaParser_getImplementationName() throw();
|
||||
+ Sequence< OUString > SAL_CALL OOXMLFormulaParser_getSupportedServiceNames() throw();
|
||||
+ Reference< XInterface > SAL_CALL OOXMLFormulaParser_create(
|
||||
+ const Reference< XComponentContext >& rxContext ) throw();
|
||||
} }
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -1201,6 +1206,11 @@ extern "C"
|
||||
oox::xls::ExcelFilter_getSupportedServiceNames, ::cppu::createSingleComponentFactory,
|
||||
0, 0
|
||||
},
|
||||
+ {
|
||||
+ oox::xls::OOXMLFormulaParser_create, oox::xls::OOXMLFormulaParser_getImplementationName,
|
||||
+ oox::xls::OOXMLFormulaParser_getSupportedServiceNames, ::cppu::createSingleComponentFactory,
|
||||
+ 0, 0
|
||||
+ },
|
||||
{ 0, 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
diff --git a/sc/source/filter/inc/ooxformulaparser.hxx b/sc/source/filter/inc/ooxformulaparser.hxx
|
||||
new file mode 100644
|
||||
index 0000000..e6c5797
|
||||
--- /dev/null
|
||||
+++ b/sc/source/filter/inc/ooxformulaparser.hxx
|
||||
@@ -0,0 +1,110 @@
|
||||
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
+/*
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+ * This file incorporates work covered by the following license notice:
|
||||
+ *
|
||||
+ * Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
+ * contributor license agreements. See the NOTICE file distributed
|
||||
+ * with this work for additional information regarding copyright
|
||||
+ * ownership. The ASF licenses this file to you under the Apache
|
||||
+ * License, Version 2.0 (the "License"); you may not use this file
|
||||
+ * except in compliance with the License. You may obtain a copy of
|
||||
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
+ */
|
||||
+
|
||||
+#ifndef OOX_XLS_OOXFORMULAPARSER_HXX
|
||||
+#define OOX_XLS_OOXFORMULAPARSER_HXX
|
||||
+
|
||||
+#include <boost/shared_ptr.hpp>
|
||||
+#include <com/sun/star/lang/XComponent.hpp>
|
||||
+#include <com/sun/star/uno/XComponentContext.hpp>
|
||||
+#include <com/sun/star/lang/XInitialization.hpp>
|
||||
+#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||
+#include <com/sun/star/sheet/XFilterFormulaParser.hpp>
|
||||
+#include <cppuhelper/implbase3.hxx>
|
||||
+
|
||||
+namespace oox {
|
||||
+namespace xls {
|
||||
+
|
||||
+class OOXMLFormulaParserImpl;
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+typedef ::cppu::WeakImplHelper3<
|
||||
+ ::com::sun::star::lang::XServiceInfo,
|
||||
+ ::com::sun::star::lang::XInitialization,
|
||||
+ ::com::sun::star::sheet::XFilterFormulaParser > OOXMLFormulaParser_BASE;
|
||||
+
|
||||
+/** OOXML formula parser/compiler service for usage in ODF filters. */
|
||||
+class OOXMLFormulaParser : public OOXMLFormulaParser_BASE
|
||||
+{
|
||||
+public:
|
||||
+ explicit OOXMLFormulaParser();
|
||||
+ virtual ~OOXMLFormulaParser();
|
||||
+
|
||||
+ // com.sun.star.lang.XServiceInfo interface -------------------------------
|
||||
+
|
||||
+ virtual ::rtl::OUString SAL_CALL
|
||||
+ getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+ virtual sal_Bool SAL_CALL
|
||||
+ supportsService( const ::rtl::OUString& rService )
|
||||
+ throw( ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
|
||||
+ getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+ // com.sun.star.lang.XInitialization interface ----------------------------
|
||||
+
|
||||
+ virtual void SAL_CALL initialize(
|
||||
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& rArgs )
|
||||
+ throw( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+ // com.sun.star.sheet.XFilterFormulaParser interface ----------------------
|
||||
+
|
||||
+ virtual ::rtl::OUString SAL_CALL
|
||||
+ getSupportedNamespace()
|
||||
+ throw( ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+ // com.sun.star.sheet.XFormulaParser interface ----------------------------
|
||||
+
|
||||
+ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken > SAL_CALL
|
||||
+ parseFormula(
|
||||
+ const ::rtl::OUString& rFormula,
|
||||
+ const ::com::sun::star::table::CellAddress& rReferencePos )
|
||||
+ throw( ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+ virtual ::rtl::OUString SAL_CALL
|
||||
+ printFormula(
|
||||
+ const ::com::sun::star::uno::Sequence< ::com::sun::star::sheet::FormulaToken >& rTokens,
|
||||
+ const ::com::sun::star::table::CellAddress& rReferencePos )
|
||||
+ throw( ::com::sun::star::uno::RuntimeException );
|
||||
+
|
||||
+private:
|
||||
+ typedef ::boost::shared_ptr< OOXMLFormulaParserImpl > ParserImplRef;
|
||||
+
|
||||
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >
|
||||
+ mxComponent;
|
||||
+ ParserImplRef mxParserImpl; /// Implementation of import parser.
|
||||
+};
|
||||
+
|
||||
+css::uno::Reference< css::uno::XInterface > SAL_CALL OOXMLFormulaParser_create(
|
||||
+ css::uno::Reference< css::uno::XComponentContext > const & context);
|
||||
+
|
||||
+OUString SAL_CALL OOXMLFormulaParser_getImplementationName();
|
||||
+
|
||||
+css::uno::Sequence< OUString > SAL_CALL OOXMLFormulaParser_getSupportedServiceNames();
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+} // namespace xls
|
||||
+} // namespace oox
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
diff --git a/sc/source/filter/oox/ooxformulaparser.cxx b/sc/source/filter/oox/ooxformulaparser.cxx
|
||||
new file mode 100644
|
||||
index 0000000..9b91c79
|
||||
--- /dev/null
|
||||
+++ b/sc/source/filter/oox/ooxformulaparser.cxx
|
||||
@@ -0,0 +1,196 @@
|
||||
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
+/*
|
||||
+ * This file is part of the LibreOffice project.
|
||||
+ *
|
||||
+ * This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
+ *
|
||||
+ * This file incorporates work covered by the following license notice:
|
||||
+ *
|
||||
+ * Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
+ * contributor license agreements. See the NOTICE file distributed
|
||||
+ * with this work for additional information regarding copyright
|
||||
+ * ownership. The ASF licenses this file to you under the Apache
|
||||
+ * License, Version 2.0 (the "License"); you may not use this file
|
||||
+ * except in compliance with the License. You may obtain a copy of
|
||||
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
+ */
|
||||
+
|
||||
+#include "ooxformulaparser.hxx"
|
||||
+
|
||||
+#include <com/sun/star/uno/XComponentContext.hpp>
|
||||
+#include "formulaparser.hxx"
|
||||
+
|
||||
+namespace oox {
|
||||
+namespace xls {
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+using namespace ::com::sun::star::lang;
|
||||
+using namespace ::com::sun::star::sheet;
|
||||
+using namespace ::com::sun::star::table;
|
||||
+using namespace ::com::sun::star::uno;
|
||||
+
|
||||
+using ::rtl::OUString;
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+class OOXMLFormulaParserImpl : private FormulaFinalizer
|
||||
+{
|
||||
+public:
|
||||
+ explicit OOXMLFormulaParserImpl( const Reference< XMultiServiceFactory >& rxModelFactory );
|
||||
+
|
||||
+ Sequence< FormulaToken > parseFormula( const OUString& rFormula, const CellAddress& rReferencePos );
|
||||
+
|
||||
+protected:
|
||||
+ virtual const FunctionInfo* resolveBadFuncName( const OUString& rTokenData ) const;
|
||||
+
|
||||
+private:
|
||||
+ ApiParserWrapper maApiParser;
|
||||
+};
|
||||
+
|
||||
+// ----------------------------------------------------------------------------
|
||||
+
|
||||
+OOXMLFormulaParserImpl::OOXMLFormulaParserImpl( const Reference< XMultiServiceFactory >& rxModelFactory ) :
|
||||
+ FormulaFinalizer( OpCodeProvider( rxModelFactory, FILTER_OOXML, BIFF_UNKNOWN, true ) ),
|
||||
+ maApiParser( rxModelFactory, *this )
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+Sequence< FormulaToken > OOXMLFormulaParserImpl::parseFormula( const OUString& rFormula, const CellAddress& rReferencePos )
|
||||
+{
|
||||
+ return finalizeTokenArray( maApiParser.parseFormula( rFormula, rReferencePos ) );
|
||||
+}
|
||||
+
|
||||
+const FunctionInfo* OOXMLFormulaParserImpl::resolveBadFuncName( const OUString& rTokenData ) const
|
||||
+{
|
||||
+ /* Try to parse calls to library functions. The format of such a function
|
||||
+ call is assumed to be
|
||||
+ "'<path-to-office-install>\Library\<libname>'!<funcname>". */
|
||||
+
|
||||
+ // the string has to start with an apostroph (followed by the library URL)
|
||||
+ if( (rTokenData.getLength() >= 6) && (rTokenData[ 0 ] == '\'') )
|
||||
+ {
|
||||
+ // library URL and function name are separated by an exclamation mark
|
||||
+ sal_Int32 nExclamPos = rTokenData.lastIndexOf( '!' );
|
||||
+ if( (1 < nExclamPos) && (nExclamPos + 1 < rTokenData.getLength()) && (rTokenData[ nExclamPos - 1 ] == '\'') )
|
||||
+ {
|
||||
+ // find the last backslash that separates library path and name
|
||||
+ sal_Int32 nFileSep = rTokenData.lastIndexOf( '\\', nExclamPos - 2 );
|
||||
+ if( nFileSep > 1 )
|
||||
+ {
|
||||
+ // find preceding backslash that separates the last directory name
|
||||
+ sal_Int32 nDirSep = rTokenData.lastIndexOf( '\\', nFileSep - 1 );
|
||||
+ // function library is located in a directory called 'library'
|
||||
+ if( (nDirSep > 0) && rTokenData.matchIgnoreAsciiCaseAsciiL( RTL_CONSTASCII_STRINGPARAM( "\\LIBRARY\\" ), nDirSep ) )
|
||||
+ {
|
||||
+ // try to find a function info for the function name
|
||||
+ OUString aFuncName = rTokenData.copy( nExclamPos + 1 ).toAsciiUpperCase();
|
||||
+ const FunctionInfo* pFuncInfo = getFuncInfoFromOoxFuncName( aFuncName );
|
||||
+ if( pFuncInfo && (pFuncInfo->meFuncLibType != FUNCLIB_UNKNOWN) )
|
||||
+ {
|
||||
+ // check that the name of the library matches
|
||||
+ OUString aLibName = rTokenData.copy( nFileSep + 1, nExclamPos - nFileSep - 2 );
|
||||
+ if( pFuncInfo->meFuncLibType == getFuncLibTypeFromLibraryName( aLibName ) )
|
||||
+ return pFuncInfo;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+Sequence< OUString > OOXMLFormulaParser_getSupportedServiceNames()
|
||||
+{
|
||||
+ Sequence< OUString > aServiceNames( 1 );
|
||||
+ aServiceNames[ 0 ] = "com.sun.star.sheet.FilterFormulaParser";
|
||||
+ return aServiceNames;
|
||||
+}
|
||||
+
|
||||
+OUString OOXMLFormulaParser_getImplementationName()
|
||||
+{
|
||||
+ return OUString( "com.sun.star.comp.oox.xls.FormulaParser");
|
||||
+}
|
||||
+
|
||||
+Reference< XInterface > OOXMLFormulaParser_create( const Reference< XComponentContext >& )
|
||||
+{
|
||||
+ return static_cast< ::cppu::OWeakObject* >( new OOXMLFormulaParser );
|
||||
+}
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+OOXMLFormulaParser::OOXMLFormulaParser()
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+OOXMLFormulaParser::~OOXMLFormulaParser()
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+// com.sun.star.lang.XServiceInfo interface -----------------------------------
|
||||
+
|
||||
+OUString SAL_CALL OOXMLFormulaParser::getImplementationName() throw( RuntimeException )
|
||||
+{
|
||||
+ return OOXMLFormulaParser_getImplementationName();
|
||||
+}
|
||||
+
|
||||
+sal_Bool SAL_CALL OOXMLFormulaParser::supportsService( const OUString& rService ) throw( RuntimeException )
|
||||
+{
|
||||
+ const Sequence< OUString > aServices( OOXMLFormulaParser_getSupportedServiceNames() );
|
||||
+ const OUString* pArray = aServices.getConstArray();
|
||||
+ const OUString* pArrayEnd = pArray + aServices.getLength();
|
||||
+ return ::std::find( pArray, pArrayEnd, rService ) != pArrayEnd;
|
||||
+}
|
||||
+
|
||||
+Sequence< OUString > SAL_CALL OOXMLFormulaParser::getSupportedServiceNames() throw( RuntimeException )
|
||||
+{
|
||||
+ return OOXMLFormulaParser_getSupportedServiceNames();
|
||||
+}
|
||||
+
|
||||
+// com.sun.star.lang.XInitialization interface --------------------------------
|
||||
+
|
||||
+void SAL_CALL OOXMLFormulaParser::initialize( const Sequence< Any >& rArgs ) throw( Exception, RuntimeException )
|
||||
+{
|
||||
+ OSL_ENSURE( rArgs.hasElements(), "OOXMLFormulaParser::initialize - missing arguments" );
|
||||
+ if( !rArgs.hasElements() )
|
||||
+ throw RuntimeException();
|
||||
+ mxComponent.set( rArgs[ 0 ], UNO_QUERY_THROW );
|
||||
+}
|
||||
+
|
||||
+// com.sun.star.sheet.XFilterFormulaParser interface --------------------------
|
||||
+
|
||||
+OUString SAL_CALL OOXMLFormulaParser::getSupportedNamespace() throw( RuntimeException )
|
||||
+{
|
||||
+ return OUString( "http://schemas.microsoft.com/office/excel/formula");
|
||||
+}
|
||||
+
|
||||
+// com.sun.star.sheet.XFormulaParser interface --------------------------------
|
||||
+
|
||||
+Sequence< FormulaToken > SAL_CALL OOXMLFormulaParser::parseFormula(
|
||||
+ const OUString& rFormula, const CellAddress& rReferencePos ) throw( RuntimeException )
|
||||
+{
|
||||
+ if( !mxParserImpl )
|
||||
+ {
|
||||
+ Reference< XMultiServiceFactory > xModelFactory( mxComponent, UNO_QUERY_THROW );
|
||||
+ mxParserImpl.reset( new OOXMLFormulaParserImpl( xModelFactory ) );
|
||||
+ }
|
||||
+ return mxParserImpl->parseFormula( rFormula, rReferencePos );
|
||||
+}
|
||||
+
|
||||
+OUString SAL_CALL OOXMLFormulaParser::printFormula(
|
||||
+ const Sequence< FormulaToken >& /*rTokens*/, const CellAddress& /*rReferencePos*/ ) throw( RuntimeException )
|
||||
+{
|
||||
+ // not implemented
|
||||
+ throw RuntimeException();
|
||||
+}
|
||||
+
|
||||
+// ============================================================================
|
||||
+
|
||||
+} // namespace xls
|
||||
+} // namespace oox
|
||||
+
|
||||
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
diff --git a/sc/util/scfilt.component b/sc/util/scfilt.component
|
||||
index 13b884b..292fbd4 100644
|
||||
--- a/sc/util/scfilt.component
|
||||
+++ b/sc/util/scfilt.component
|
||||
@@ -26,4 +26,7 @@
|
||||
<service name="com.sun.star.document.ImportFilter"/>
|
||||
<service name="com.sun.star.document.ExportFilter"/>
|
||||
</implementation>
|
||||
+ <implementation name="com.sun.star.comp.oox.xls.FormulaParser">
|
||||
+ <service name="com.sun.star.sheet.FilterFormulaParser"/>
|
||||
+ </implementation>
|
||||
</component>
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,27 +0,0 @@
|
||||
From 58556215090bf12991cc8e52cc0f1095a0f44edf Mon Sep 17 00:00:00 2001
|
||||
From: Stephan Bergmann <sbergman@redhat.com>
|
||||
Date: Tue, 19 Nov 2013 14:03:54 +0100
|
||||
Subject: [PATCH] rhbz#1031989 Accept --pt in addition to deprecated -pt
|
||||
|
||||
Change-Id: I3593b3fc7e0ad405612216fb07e8632050b75cee
|
||||
(cherry picked from commit 5cb10c4c99e46c97984e4e1c1bca5915f83f0a1d)
|
||||
---
|
||||
desktop/source/app/cmdlineargs.cxx | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/desktop/source/app/cmdlineargs.cxx b/desktop/source/app/cmdlineargs.cxx
|
||||
index ca92a8d..f9baa07 100644
|
||||
--- a/desktop/source/app/cmdlineargs.cxx
|
||||
+++ b/desktop/source/app/cmdlineargs.cxx
|
||||
@@ -186,7 +186,7 @@ void CommandLineArgs::ParseCommandLine_Impl( Supplier& supplier )
|
||||
bStartEvent = false;
|
||||
bDisplaySpec = false;
|
||||
}
|
||||
- else if ( aArg.equalsIgnoreAsciiCase("-pt"))
|
||||
+ else if ( oArg.equalsIgnoreAsciiCase("pt"))
|
||||
{
|
||||
// Print to special printer
|
||||
bPrintToEvent = true;
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -1,239 +0,0 @@
|
||||
From f4bfce94abc10fbd2d8b37113e27b36c1e79fc61 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Fri, 13 Sep 2013 20:13:25 +0100
|
||||
Subject: [PATCH] select sheet menu as a right-click popup to the prev/next
|
||||
sheet dingus
|
||||
|
||||
Change-Id: Ifc9baeabedeab526d040220e9e45f171b5353bcf
|
||||
---
|
||||
include/svtools/tabbar.hxx | 6 ++++
|
||||
sc/source/ui/inc/tabcont.hxx | 3 ++
|
||||
sc/source/ui/view/tabcont.cxx | 69 ++++++++++++++++++++++++++++++---------
|
||||
svtools/source/control/tabbar.cxx | 34 +++++++++++++++++--
|
||||
4 files changed, 93 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/include/svtools/tabbar.hxx b/include/svtools/tabbar.hxx
|
||||
index 0bf3be6..44bcc48 100644
|
||||
--- a/include/svtools/tabbar.hxx
|
||||
+++ b/include/svtools/tabbar.hxx
|
||||
@@ -369,6 +369,7 @@ private:
|
||||
sal_Bool mbSelTextColor;
|
||||
bool mbMirrored;
|
||||
bool mbHasInsertTab; // if true, the tab bar has an extra tab at the end.
|
||||
+ bool mbScrollAlwaysEnabled;
|
||||
Link maSelectHdl;
|
||||
Link maDoubleClickHdl;
|
||||
Link maSplitHdl;
|
||||
@@ -377,6 +378,7 @@ private:
|
||||
Link maStartRenamingHdl;
|
||||
Link maAllowRenamingHdl;
|
||||
Link maEndRenamingHdl;
|
||||
+ Link maScrollAreaContextHdl;
|
||||
size_t maCurrentItemList;
|
||||
|
||||
using Window::ImplInit;
|
||||
@@ -529,6 +531,8 @@ public:
|
||||
void SetStyle( WinBits nStyle );
|
||||
WinBits GetStyle() const { return mnWinStyle; }
|
||||
|
||||
+ void SetScrollAlwaysEnabled(bool bScrollAlwaysEnabled);
|
||||
+
|
||||
Size CalcWindowSizePixel() const;
|
||||
|
||||
void SetSelectHdl( const Link& rLink ) { maSelectHdl = rLink; }
|
||||
@@ -547,6 +551,8 @@ public:
|
||||
const Link& GetAllowRenamingHdl() const { return maAllowRenamingHdl; }
|
||||
void SetEndRenamingHdl( const Link& rLink ) { maEndRenamingHdl = rLink; }
|
||||
const Link& GetEndRenamingHdl() const { return maEndRenamingHdl; }
|
||||
+ void SetScrollAreaContextHdl( const Link& rLink ) { maScrollAreaContextHdl = rLink; }
|
||||
+ const Link& GetScrollAreaContextHdl() const { return maScrollAreaContextHdl; }
|
||||
|
||||
// accessibility
|
||||
virtual ::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
|
||||
diff --git a/sc/source/ui/inc/tabcont.hxx b/sc/source/ui/inc/tabcont.hxx
|
||||
index c0bde9e..2c87f89 100644
|
||||
--- a/sc/source/ui/inc/tabcont.hxx
|
||||
+++ b/sc/source/ui/inc/tabcont.hxx
|
||||
@@ -46,6 +46,9 @@ private:
|
||||
sal_uInt16 GetMaxId() const;
|
||||
SCTAB GetPrivatDropPos(const Point& rPos );
|
||||
|
||||
+ DECL_LINK(ShowPageList, const CommandEvent*);
|
||||
+
|
||||
+ void SwitchToPageId(sal_uInt16 nId);
|
||||
protected:
|
||||
virtual void Select();
|
||||
virtual void Command( const CommandEvent& rCEvt );
|
||||
diff --git a/sc/source/ui/view/tabcont.cxx b/sc/source/ui/view/tabcont.cxx
|
||||
index 4fce113..4056748 100644
|
||||
--- a/sc/source/ui/view/tabcont.cxx
|
||||
+++ b/sc/source/ui/view/tabcont.cxx
|
||||
@@ -81,6 +81,39 @@ ScTabControl::ScTabControl( Window* pParent, ScViewData* pData ) :
|
||||
|
||||
EnableEditMode();
|
||||
UpdateInputContext();
|
||||
+
|
||||
+ SetScrollAlwaysEnabled(true);
|
||||
+
|
||||
+ SetScrollAreaContextHdl( LINK( this, ScTabControl, ShowPageList ) );
|
||||
+}
|
||||
+
|
||||
+IMPL_LINK(ScTabControl, ShowPageList, const CommandEvent *, pEvent)
|
||||
+{
|
||||
+ PopupMenu aPopup;
|
||||
+
|
||||
+ sal_uInt16 nCurPageId = GetCurPageId();
|
||||
+
|
||||
+ ScDocument* pDoc = pViewData->GetDocument();
|
||||
+ SCTAB nCount = pDoc->GetTableCount();
|
||||
+ for (SCTAB i=0; i<nCount; ++i)
|
||||
+ {
|
||||
+ if (pDoc->IsVisible(i))
|
||||
+ {
|
||||
+ OUString aString;
|
||||
+ if (pDoc->GetName(i, aString))
|
||||
+ {
|
||||
+ sal_uInt16 nId = static_cast<sal_uInt16>(i)+1;
|
||||
+ aPopup.InsertItem(nId, aString, MIB_CHECKABLE);
|
||||
+ if (nId == nCurPageId)
|
||||
+ aPopup.CheckItem(nId);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ sal_uInt16 nItemId = aPopup.Execute( this, pEvent->GetMousePosPixel() );
|
||||
+ SwitchToPageId(nItemId);
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
ScTabControl::~ScTabControl()
|
||||
@@ -368,6 +401,25 @@ void ScTabControl::SetSheetLayoutRTL( sal_Bool bSheetRTL )
|
||||
nSelPageIdByMouse = TabBar::PAGE_NOT_FOUND;
|
||||
}
|
||||
|
||||
+void ScTabControl::SwitchToPageId(sal_uInt16 nId)
|
||||
+{
|
||||
+ if (nId)
|
||||
+ {
|
||||
+ sal_Bool bAlreadySelected = IsPageSelected( nId );
|
||||
+ //make the clicked page the current one
|
||||
+ SetCurPageId( nId );
|
||||
+ //change the selection when the current one is not already
|
||||
+ //selected or part of a multi selection
|
||||
+ if(!bAlreadySelected)
|
||||
+ {
|
||||
+ sal_uInt16 nCount = GetMaxId();
|
||||
+
|
||||
+ for (sal_uInt16 i=1; i<=nCount; i++)
|
||||
+ SelectPage( i, i==nId );
|
||||
+ Select();
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
||||
void ScTabControl::Command( const CommandEvent& rCEvt )
|
||||
{
|
||||
@@ -387,22 +439,7 @@ void ScTabControl::Command( const CommandEvent& rCEvt )
|
||||
// if multiple tables are selected and the one under the cursor
|
||||
// is not part of them then unselect them
|
||||
sal_uInt16 nId = GetPageId( rCEvt.GetMousePosPixel() );
|
||||
- if (nId)
|
||||
- {
|
||||
- sal_Bool bAlreadySelected = IsPageSelected( nId );
|
||||
- //make the clicked page the current one
|
||||
- SetCurPageId( nId );
|
||||
- //change the selection when the current one is not already
|
||||
- //selected or part of a multi selection
|
||||
- if(!bAlreadySelected)
|
||||
- {
|
||||
- sal_uInt16 nCount = GetMaxId();
|
||||
-
|
||||
- for (sal_uInt16 i=1; i<=nCount; i++)
|
||||
- SelectPage( i, i==nId );
|
||||
- Select();
|
||||
- }
|
||||
- }
|
||||
+ SwitchToPageId(nId);
|
||||
|
||||
// #i52073# OLE inplace editing has to be stopped before showing the sheet tab context menu
|
||||
pViewSh->DeactivateOle();
|
||||
diff --git a/svtools/source/control/tabbar.cxx b/svtools/source/control/tabbar.cxx
|
||||
index 4152f9d..c0b8059 100644
|
||||
--- a/svtools/source/control/tabbar.cxx
|
||||
+++ b/svtools/source/control/tabbar.cxx
|
||||
@@ -100,13 +100,33 @@ class ImplTabButton : public PushButton
|
||||
{
|
||||
public:
|
||||
ImplTabButton( TabBar* pParent, WinBits nWinStyle = 0 ) :
|
||||
- PushButton( pParent, nWinStyle | WB_RECTSTYLE | WB_SMALLSTYLE | WB_NOLIGHTBORDER | WB_NOPOINTERFOCUS ) {}
|
||||
+ PushButton( pParent, nWinStyle | WB_RECTSTYLE | WB_SMALLSTYLE | WB_NOLIGHTBORDER | WB_NOPOINTERFOCUS ) {}
|
||||
|
||||
TabBar* GetParent() const { return (TabBar*)Window::GetParent(); }
|
||||
|
||||
virtual long PreNotify( NotifyEvent& rNEvt );
|
||||
+
|
||||
+ virtual void MouseButtonDown( const MouseEvent& rMEvt );
|
||||
+
|
||||
+ virtual void Command( const CommandEvent& rCEvt );
|
||||
};
|
||||
|
||||
+void ImplTabButton::MouseButtonDown( const MouseEvent& rMEvt )
|
||||
+{
|
||||
+ PushButton::MouseButtonDown(rMEvt);
|
||||
+}
|
||||
+
|
||||
+void ImplTabButton::Command( const CommandEvent& rCEvt )
|
||||
+{
|
||||
+ sal_uInt16 nCmd = rCEvt.GetCommand();
|
||||
+ if ( nCmd == COMMAND_CONTEXTMENU )
|
||||
+ {
|
||||
+ TabBar *pParent = GetParent();
|
||||
+ pParent->maScrollAreaContextHdl.Call((void*)&rCEvt);
|
||||
+ }
|
||||
+ PushButton::Command(rCEvt);
|
||||
+}
|
||||
+
|
||||
// =======================================================================
|
||||
|
||||
long ImplTabButton::PreNotify( NotifyEvent& rNEvt )
|
||||
@@ -398,6 +418,8 @@ void TabBar::ImplInit( WinBits nWinStyle )
|
||||
mbSelColor = sal_False;
|
||||
mbSelTextColor = sal_False;
|
||||
mbMirrored = sal_False;
|
||||
+ mbMirrored = sal_False;
|
||||
+ mbScrollAlwaysEnabled = false;
|
||||
|
||||
if ( nWinStyle & WB_3DTAB )
|
||||
mnOffY++;
|
||||
@@ -752,19 +774,25 @@ void TabBar::ImplEnableControls()
|
||||
return;
|
||||
|
||||
// Buttons enablen/disblen
|
||||
- sal_Bool bEnableBtn = mnFirstPos > 0;
|
||||
+ sal_Bool bEnableBtn = mbScrollAlwaysEnabled || mnFirstPos > 0;
|
||||
if ( mpFirstBtn )
|
||||
mpFirstBtn->Enable( bEnableBtn );
|
||||
if ( mpPrevBtn )
|
||||
mpPrevBtn->Enable( bEnableBtn );
|
||||
|
||||
- bEnableBtn = mnFirstPos < ImplGetLastFirstPos();
|
||||
+ bEnableBtn = mbScrollAlwaysEnabled || mnFirstPos < ImplGetLastFirstPos();
|
||||
if ( mpNextBtn )
|
||||
mpNextBtn->Enable( bEnableBtn );
|
||||
if ( mpLastBtn )
|
||||
mpLastBtn->Enable( bEnableBtn );
|
||||
}
|
||||
|
||||
+void TabBar::SetScrollAlwaysEnabled(bool bScrollAlwaysEnabled)
|
||||
+{
|
||||
+ mbScrollAlwaysEnabled = bScrollAlwaysEnabled;
|
||||
+ ImplEnableControls();
|
||||
+}
|
||||
+
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
void TabBar::ImplShowPage( sal_uInt16 nPos )
|
||||
--
|
||||
1.8.3.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,56 +0,0 @@
|
||||
From 0e89a49f67f58e0942ed4aea393ac37e22d9e12d Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||
Date: Wed, 5 Jun 2013 15:59:50 +0100
|
||||
Subject: [PATCH] Related: rhbz#968892 discard impossible languages for oriya
|
||||
script fallback
|
||||
|
||||
Change-Id: I2fa1a127fbd2f905a89f0c30898ad56099fa8df1
|
||||
---
|
||||
vcl/generic/fontmanager/fontconfig.cxx | 28 ++++++++++++++++++----------
|
||||
1 file changed, 18 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/vcl/generic/fontmanager/fontconfig.cxx b/vcl/generic/fontmanager/fontconfig.cxx
|
||||
index ff471fa..a305095 100644
|
||||
--- a/vcl/generic/fontmanager/fontconfig.cxx
|
||||
+++ b/vcl/generic/fontmanager/fontconfig.cxx
|
||||
@@ -860,19 +860,27 @@ namespace
|
||||
OUString sLang = rLangTag.getLanguage();
|
||||
switch (eScript)
|
||||
{
|
||||
+ //http://en.wiktionary.org/wiki/Category:Oriya_script_languages
|
||||
+ case USCRIPT_ORIYA:
|
||||
+ bIsImpossible =
|
||||
+ sLang != "or" &&
|
||||
+ sLang != "kxv";
|
||||
+ break;
|
||||
+ //http://en.wiktionary.org/wiki/Category:Telugu_script_languages
|
||||
case USCRIPT_TELUGU:
|
||||
- bIsImpossible = sLang != "te";
|
||||
+ bIsImpossible =
|
||||
+ sLang != "te" &&
|
||||
+ sLang != "gon" &&
|
||||
+ sLang != "kfc";
|
||||
break;
|
||||
+ //http://en.wiktionary.org/wiki/Category:Bengali_script_languages
|
||||
case USCRIPT_BENGALI:
|
||||
- bIsImpossible = sLang != "bn" &&
|
||||
- sLang != "as" && sLang != "mkb" &&
|
||||
- sLang != "kfv" && sLang != "ccp" &&
|
||||
- sLang != "tnv" && sLang != "ctg" &&
|
||||
- sLang != "haj" && sLang != "ksy" &&
|
||||
- sLang != "rkt" && sLang != "rjs" &&
|
||||
- sLang != "rhg" && sLang != "syl" &&
|
||||
- sLang != "kyv" && sLang != "zrg" &&
|
||||
- sLang != "nhh";
|
||||
+ bIsImpossible =
|
||||
+ sLang != "bn" &&
|
||||
+ sLang != "as" &&
|
||||
+ sLang != "bpy" &&
|
||||
+ sLang != "ctg" &&
|
||||
+ sLang != "sa";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
--
|
||||
1.8.1.4
|
||||
|
Loading…
Reference in new issue