601058e269
- correctly-init-xthreads-in-qt.diff: let Qt call XInitThreads(), so that it knows it's been called (fdo#40298) - avoid-wrong-asserts.diff: fix a bad assert; the following fix depends on it - horizontal-scrollbars-with-kde-oxygen-style.diff: horizontal scrollbars with KDE Oxygen style (bnc#722918) - kde4-tooltips-style.diff: tooltips are all black in KDE4 (bnc#723074, fdo#40461) - do-not-display-math-in-desktop-menu.diff: do not display math in desktop menu (fdo#41681) - desktop-submenu.diff: display LO application in the right desktop submenu (bnc#718694) - bash-completion-for-loffice.diff: define bash completion for 'loffice' wrapper (bnc#719656) - legacy-fragment-import-*.diff: legacy fragment PPTX import (bnc#699334) OBS-URL: https://build.opensuse.org/request/show/89119 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libreoffice?expand=0&rev=25
194 lines
8.9 KiB
Diff
194 lines
8.9 KiB
Diff
commit 90eab3e2ae27c1f8e308fdba6e32911e272da188
|
|
Author: Muthu Subramanian K <sumuthu@suse.com>
|
|
Date: Fri Oct 7 19:36:59 2011 +0530
|
|
|
|
n#699334: Legacy Fragment Import.
|
|
|
|
diff --git a/filter/inc/filter/msfilter/msdffimp.hxx b/filter/inc/filter/msfilter/msdffimp.hxx
|
|
index c1a0294..4887bae 100644
|
|
--- filter/inc/filter/msfilter/msdffimp.hxx
|
|
+++ filter/inc/filter/msfilter/msdffimp.hxx
|
|
@@ -531,9 +531,6 @@ protected :
|
|
virtual sal_uLong Calc_nBLIPPos( sal_uLong nOrgVal, sal_uLong nStreamPos ) const;
|
|
virtual bool GetColorFromPalette(sal_uInt16 nNum, Color& rColor) const;
|
|
|
|
- bool ReadDffString(SvStream& rSt, String& rTxt) const;
|
|
- bool ReadObjText(SvStream& rSt, SdrObject* pObj) const;
|
|
-
|
|
// SJ: New implementation of ReadObjText is used by Fontwork objects, because
|
|
// the old one does not properly import multiple paragraphs
|
|
void ReadObjText( const String& rText, SdrObject* pObj ) const;
|
|
@@ -626,6 +623,8 @@ public:
|
|
static sal_Bool MakeContentStream( SotStorage * pStor, const GDIMetaFile & );
|
|
static sal_Bool ConvertToOle2( SvStream& rStm, sal_uInt32 nLen, const GDIMetaFile*,
|
|
const SotStorageRef & rDest );
|
|
+ static bool ReadDffString(SvStream& rSt, String& rTxt, DffRecordHeader aStrHd = DffRecordHeader());
|
|
+ static bool ReadObjText(SvStream& rSt, SdrObject* pObj);
|
|
|
|
void SetModel(SdrModel* pModel, long nApplicationScale);
|
|
SdrModel* GetModel() const { return pSdrModel; }
|
|
diff --git a/filter/source/msfilter/msdffimp.cxx b/filter/source/msfilter/msdffimp.cxx
|
|
index aabba56..5ce5ccb 100644
|
|
--- filter/source/msfilter/msdffimp.cxx
|
|
+++ filter/source/msfilter/msdffimp.cxx
|
|
@@ -3892,11 +3892,10 @@ Color SvxMSDffManager::MSO_CLR_ToColor( sal_uInt32 nColorCode, sal_uInt16 nConte
|
|
return aColor;
|
|
}
|
|
|
|
-bool SvxMSDffManager::ReadDffString(SvStream& rSt, String& rTxt) const
|
|
+bool SvxMSDffManager::ReadDffString(SvStream& rSt, String& rTxt, DffRecordHeader aStrHd)
|
|
{
|
|
bool bRet=sal_False;
|
|
- DffRecordHeader aStrHd;
|
|
- if( !ReadCommonRecordHeader(aStrHd, rSt) )
|
|
+ if( aStrHd.nRecType == 0x0 && !ReadCommonRecordHeader(aStrHd, rSt) )
|
|
rSt.Seek( aStrHd.nFilePos );
|
|
else if ( aStrHd.nRecType == DFF_PST_TextBytesAtom || aStrHd.nRecType == DFF_PST_TextCharsAtom )
|
|
{
|
|
@@ -3983,7 +3982,7 @@ void SvxMSDffManager::ReadObjText( const String& rText, SdrObject* pObj ) const
|
|
}
|
|
}
|
|
|
|
-bool SvxMSDffManager::ReadObjText(SvStream& rSt, SdrObject* pObj) const
|
|
+bool SvxMSDffManager::ReadObjText(SvStream& rSt, SdrObject* pObj)
|
|
{
|
|
bool bRet=sal_False;
|
|
SdrTextObj* pText = PTR_CAST(SdrTextObj, pObj);
|
|
@@ -3992,7 +3991,7 @@ bool SvxMSDffManager::ReadObjText(SvStream& rSt, SdrObject* pObj) const
|
|
DffRecordHeader aTextHd;
|
|
if( !ReadCommonRecordHeader(aTextHd, rSt) )
|
|
rSt.Seek( aTextHd.nFilePos );
|
|
- else if ( aTextHd.nRecType==DFF_msofbtClientTextbox )
|
|
+ else if ( aTextHd.nRecType==DFF_msofbtClientTextbox || aTextHd.nRecType == 0x1022 )
|
|
{
|
|
bRet=sal_True;
|
|
sal_uLong nRecEnd=aTextHd.GetRecEndFilePos();
|
|
@@ -4032,15 +4031,14 @@ bool SvxMSDffManager::ReadObjText(SvStream& rSt, SdrObject* pObj) const
|
|
{
|
|
switch (aHd.nRecType)
|
|
{
|
|
- //case TextHeaderAtom
|
|
+ default:
|
|
+ break;
|
|
+ //case DFF_PST_TextHeaderAtom:
|
|
//case TextSpecInfoAtom
|
|
case DFF_PST_TextBytesAtom:
|
|
case DFF_PST_TextCharsAtom:
|
|
- {
|
|
- aHd.SeekToBegOfRecord(rSt);
|
|
- ReadDffString(rSt, aText);
|
|
- }
|
|
- break;
|
|
+ ReadDffString(rSt, aText, aHd);
|
|
+ break;
|
|
case DFF_PST_TextRulerAtom :
|
|
{
|
|
sal_uInt16 nLen = (sal_uInt16)aHd.nRecLen;
|
|
diff --git a/oox/inc/oox/vml/vmlshape.hxx b/oox/inc/oox/vml/vmlshape.hxx
|
|
index 332d679..feb2319 100644
|
|
--- oox/inc/oox/vml/vmlshape.hxx
|
|
+++ oox/inc/oox/vml/vmlshape.hxx
|
|
@@ -179,6 +179,7 @@ struct ShapeModel
|
|
PointVector maPoints; /// Points for the polyline shape.
|
|
TextBoxPtr mxTextBox; /// Text contents and properties.
|
|
ClientDataPtr mxClientData; /// Excel specific client data.
|
|
+ ::rtl::OUString maLegacyDiagramPath;/// Legacy Diagram Fragment Path
|
|
|
|
explicit ShapeModel();
|
|
~ShapeModel();
|
|
diff --git a/oox/source/token/namespaces.hxx.tail b/oox/source/token/namespaces.hxx.tail
|
|
index 2261c30..f103892 100644
|
|
--- oox/source/token/namespaces.hxx.tail
|
|
+++ oox/source/token/namespaces.hxx.tail
|
|
@@ -27,6 +27,7 @@ inline sal_Int32 getNamespace( sal_Int32 nToken ) { return nToken & NMSP_MASK; }
|
|
#define XLS_TOKEN( token ) (::oox::NMSP_xls | XML_##token)
|
|
#define XM_TOKEN( token ) (::oox::NMSP_xm | XML_##token)
|
|
#define XML_TOKEN( token ) (::oox::NMSP_xml | XML_##token)
|
|
+#define VMLPPT_TOKEN( token ) (::oox::NMSP_vmlPowerpoint | XML_##token )
|
|
|
|
// ============================================================================
|
|
|
|
diff --git a/oox/source/token/properties.txt b/oox/source/token/properties.txt
|
|
index e987fb0..a2c6222 100644
|
|
--- oox/source/token/properties.txt
|
|
+++ oox/source/token/properties.txt
|
|
@@ -251,6 +251,7 @@ LeftBorder
|
|
LeftMargin
|
|
LeftPageFooterContent
|
|
LeftPageHeaderContent
|
|
+LegacyFragment
|
|
LineColor
|
|
LineCount
|
|
LineDash
|
|
diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx
|
|
index 32bcea5..ad52676 100644
|
|
--- oox/source/vml/vmlshape.cxx
|
|
+++ oox/source/vml/vmlshape.cxx
|
|
@@ -68,6 +68,7 @@ using namespace ::com::sun::star::awt;
|
|
using namespace ::com::sun::star::drawing;
|
|
using namespace ::com::sun::star::graphic;
|
|
using namespace ::com::sun::star::uno;
|
|
+using namespace ::com::sun::star::io;
|
|
|
|
using ::oox::core::XmlFilterBase;
|
|
using ::rtl::OUString;
|
|
@@ -424,6 +425,14 @@ Reference< XShape > SimpleShape::implConvertAndInsert( const Reference< XShapes
|
|
{
|
|
Reference< XShape > xShape = mrDrawing.createAndInsertXShape( maService, rxShapes, rShapeRect );
|
|
convertShapeProperties( xShape );
|
|
+
|
|
+ // Import Legacy Fragments (if any)
|
|
+ if( xShape.is() && !maShapeModel.maLegacyDiagramPath.isEmpty() )
|
|
+ {
|
|
+ Reference< XInputStream > xInStrm( mrDrawing.getFilter().openInputStream( maShapeModel.maLegacyDiagramPath ), UNO_SET_THROW );
|
|
+ if( xInStrm.is() )
|
|
+ PropertySet( xShape ).setProperty( PROP_LegacyFragment, xInStrm );
|
|
+ }
|
|
return xShape;
|
|
}
|
|
|
|
diff --git a/oox/source/vml/vmlshapecontext.cxx b/oox/source/vml/vmlshapecontext.cxx
|
|
index 089856a..30aa1c4 100644
|
|
--- oox/source/vml/vmlshapecontext.cxx
|
|
+++ oox/source/vml/vmlshapecontext.cxx
|
|
@@ -365,18 +365,23 @@ ShapeContext::ShapeContext( ContextHandler2Helper& rParent, ShapeBase& rShape, c
|
|
|
|
ContextHandlerRef ShapeContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
|
|
{
|
|
- // Custom shape in Writer with a textbox are transformed into a frame
|
|
- if ( nElement == ( NMSP_vml + XML_textbox ) )
|
|
- dynamic_cast<SimpleShape&>( mrShape ).setService(
|
|
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame")) );
|
|
-
|
|
// Excel specific shape client data
|
|
if( isRootElement() ) switch( nElement )
|
|
{
|
|
case VML_TOKEN( textbox ):
|
|
+ // Custom shape in Writer with a textbox are transformed into a frame
|
|
+ dynamic_cast<SimpleShape&>( mrShape ).setService(
|
|
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame")));
|
|
return new TextBoxContext( *this, mrShapeModel.createTextBox(), rAttribs );
|
|
case VMLX_TOKEN( ClientData ):
|
|
return new ClientDataContext( *this, mrShapeModel.createClientData(), rAttribs );
|
|
+ case VMLPPT_TOKEN( textdata ):
|
|
+ // Force RectangleShape, this is ugly :(
|
|
+ // and is there because of the lines above which change it to TextFrame
|
|
+ dynamic_cast< SimpleShape& >( mrShape ).setService(
|
|
+ OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.RectangleShape")));
|
|
+ mrShapeModel.maLegacyDiagramPath = getFragmentPathFromRelId(rAttribs.getString(XML_id, OUString()));
|
|
+ break;
|
|
}
|
|
// handle remaining stuff in base class
|
|
return ShapeTypeContext::onCreateContext( nElement, rAttribs );
|
|
@@ -419,10 +424,6 @@ RectangleShapeContext::RectangleShapeContext( ContextHandler2Helper& rParent, co
|
|
|
|
ContextHandlerRef RectangleShapeContext::onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs )
|
|
{
|
|
- if ( nElement == ( NMSP_vml + XML_textbox ) )
|
|
- dynamic_cast< SimpleShape &>( mrShape ).setService(
|
|
- OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextFrame")) );
|
|
-
|
|
// The parent class's context is fine
|
|
return ShapeContext::onCreateContext( nElement, rAttribs );
|
|
}
|