summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver-Rainer Wittmann <orw@apache.org>2014-05-23 14:28:40 +0000
committerCaolán McNamara <caolanm@redhat.com>2014-05-23 21:32:31 +0100
commit05e07167e422caf58d23ff883edda30acc3ba88d (patch)
tree5477d57879b9db24ce272397e66c7a785df3539f
parentac76cc7e605b1bc9c0ff8e24d0b9995a8247074e (diff)
Resolves: #i124946# only apply new embedded stream name...
for a graphic, if is already has one. - needed correction for the fix made for issue #i114361# (cherry picked from commit 23a4bd91ceb89e5e0a2413f80fc987db106a0bc9) Conflicts: sw/inc/ndgrf.hxx sw/source/core/graphic/ndgrf.cxx sw/source/filter/xml/xmltexte.cxx Change-Id: Ia9771932ae5b380ccae9b0a3cbb79d41f5d9bdb8
-rw-r--r--sw/inc/ndgrf.hxx2
-rw-r--r--sw/source/core/graphic/ndgrf.cxx18
-rw-r--r--sw/source/filter/xml/xmltexte.cxx11
3 files changed, 20 insertions, 11 deletions
diff --git a/sw/inc/ndgrf.hxx b/sw/inc/ndgrf.hxx
index 5292561bfbfb..4d97b6a9feae 100644
--- a/sw/inc/ndgrf.hxx
+++ b/sw/inc/ndgrf.hxx
@@ -72,7 +72,6 @@ class SW_DLLPUBLIC SwGrfNode: public SwNoTxtNode
void InsertLink( const OUString& rGrfName, const OUString& rFltName );
bool ImportGraphic( SvStream& rStrm );
- bool HasStreamName() const { return maGrfObj.HasUserData(); }
/** adjust return type and rename method to
indicate that its an private one. */
@@ -174,6 +173,7 @@ public:
bool SwapIn( bool bWaitForData = false );
/// Remove graphic in order to free memory.
bool SwapOut();
+ bool HasEmbeddedStreamName() const { return maGrfObj.HasUserData(); }
/// applying new stream name for embedded graphic - needed as saving the document might change this stream name
void ApplyNewEmbeddedStreamName(const OUString& r)
{
diff --git a/sw/source/core/graphic/ndgrf.cxx b/sw/source/core/graphic/ndgrf.cxx
index c868c56a1fb5..00e383d5f6b0 100644
--- a/sw/source/core/graphic/ndgrf.cxx
+++ b/sw/source/core/graphic/ndgrf.cxx
@@ -233,7 +233,7 @@ bool SwGrfNode::ReRead(
else if( pGraphic && rGrfName.isEmpty() )
{
// Old stream must be deleted before the new one is set.
- if( HasStreamName() )
+ if( HasEmbeddedStreamName() )
DelStreamName();
maGrfObj.SetGraphic( *pGraphic );
@@ -243,7 +243,7 @@ bool SwGrfNode::ReRead(
else if( pGrfObj && rGrfName.isEmpty() )
{
// Old stream must be deleted before the new one is set.
- if( HasStreamName() )
+ if( HasEmbeddedStreamName() )
DelStreamName();
maGrfObj = *pGrfObj;
@@ -257,7 +257,7 @@ bool SwGrfNode::ReRead(
return true;
else
{
- if( HasStreamName() )
+ if( HasEmbeddedStreamName() )
DelStreamName();
// create new link for the graphic object
@@ -563,7 +563,7 @@ bool SwGrfNode::SwapIn( bool bWaitForData )
else if( maGrfObj.IsSwappedOut() )
{
// graphic is in storage or in a temp file
- if( !HasStreamName() )
+ if( !HasEmbeddedStreamName() )
{
bRet = maGrfObj.SwapIn();
}
@@ -617,7 +617,7 @@ bool SwGrfNode::SwapOut()
// Swapping is only needed for embedded pictures.
// The graphic will be written into a temp file if it is new, i.e.
// if there is no stream name in the storage yet
- if( !HasStreamName() )
+ if( !HasEmbeddedStreamName() )
if( !maGrfObj.SwapOut() )
return false;
}
@@ -669,7 +669,7 @@ bool SwGrfNode::SavePersistentData()
}
// swap in first if already in storage
- if( HasStreamName() && !SwapIn() )
+ if( HasEmbeddedStreamName() && !SwapIn() )
return false;
// #i44367#
@@ -860,7 +860,7 @@ void SwGrfNode::ScaleImageMap()
void SwGrfNode::DelStreamName()
{
- if( HasStreamName() )
+ if( HasEmbeddedStreamName() )
{
// then remove graphic from storage
uno::Reference < embed::XStorage > xDocStg = GetDoc()->GetDocStorage();
@@ -969,7 +969,7 @@ SwCntntNode* SwGrfNode::MakeCopy( SwDoc* pDoc, const SwNodeIndex& rIdx ) const
Graphic aTmpGrf;
SwBaseLink* pLink = (SwBaseLink*)(::sfx2::SvBaseLink*) refLink;
- if( !pLink && HasStreamName() )
+ if( !pLink && HasEmbeddedStreamName() )
{
try
{
@@ -1048,7 +1048,7 @@ IMPL_LINK( SwGrfNode, SwapGraphic, GraphicObject*, pGrfObj )
{
pRet = GRFMGR_AUTOSWAPSTREAM_TEMP;
- if( HasStreamName() )
+ if( HasEmbeddedStreamName() )
{
try
{
diff --git a/sw/source/filter/xml/xmltexte.cxx b/sw/source/filter/xml/xmltexte.cxx
index c5d21ba8767b..9b184afd8220 100644
--- a/sw/source/filter/xml/xmltexte.cxx
+++ b/sw/source/filter/xml/xmltexte.cxx
@@ -197,7 +197,16 @@ void SwXMLTextParagraphExport::setTextEmbeddedGraphicURL(
SwGrfNode *pGrfNd = GetNoTxtNode( rPropSet )->GetGrfNode();
if (pGrfNd && !pGrfNd->IsGrfLink())
{
- pGrfNd->ApplyNewEmbeddedStreamName("vnd.sun.star.Package:" + rURL);
+ // Apply new embedded stream name, only if graphic node already has one.
+ // - The saving of recovery information triggers this method, but for a newly created
+ // document the new embedded stream name shall not be applied.
+ // - The saving of a newly created document to own format (ODF) triggers this method,
+ // but the embedded stream name is not needed as its original inserted data is still in use.
+ if (pGrfNd->HasEmbeddedStreamName())
+ {
+ pGrfNd->ApplyNewEmbeddedStreamName("vnd.sun.star.Package:" + rURL);
+ }
+
// #i15411# save-as will swap all graphics in; we need to swap
// them out again, to prevent excessive memory use
pGrfNd->SwapOut();