Author: alg
Date: Mon Feb 10 22:24:18 2014
New Revision: 1566765
URL: http://svn.apache.org/r1566765
Log:
i15508 keep trhe original file and format AFAP when breaking links to graphic
contents in Writer
Modified:
openoffice/trunk/main/sw/source/core/graphic/ndgrf.cxx
Modified: openoffice/trunk/main/sw/source/core/graphic/ndgrf.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sw/source/core/graphic/ndgrf.cxx?rev=1566765&r1=1566764&r2=1566765&view=diff
==============================================================================
--- openoffice/trunk/main/sw/source/core/graphic/ndgrf.cxx (original)
+++ openoffice/trunk/main/sw/source/core/graphic/ndgrf.cxx Mon Feb 10 22:24:18
2014
@@ -739,21 +739,57 @@ void SwGrfNode::InsertLink( const String
void SwGrfNode::ReleaseLink()
{
- if( refLink.Is() )
- {
- // erst die Grafik reinswappen!
-// if( aGraphic.IsSwapOut() || !refLink->IsSynchron() )
- {
- bInSwapIn = sal_True;
+ if( refLink.Is() )
+ {
+ // #15508# remember some stuff from the linked graphic
+ const String aFileName(maGrfObj.GetLink());
+ const Graphic aLocalGraphic(maGrfObj.GetGraphic());
+ const bool bHasOriginalData(aLocalGraphic.IsLink());
+
+ {
+ bInSwapIn = sal_True;
SwBaseLink* pLink = (SwBaseLink*)(::sfx2::SvBaseLink*) refLink;
//TODO pLink->setInputStream(getInputStream());
- pLink->SwapIn( sal_True, sal_True );
- bInSwapIn = sal_False;
- }
+ pLink->SwapIn( sal_True, sal_True );
+ bInSwapIn = sal_False;
+ }
+
getIDocumentLinksAdministration()->GetLinkManager().Remove( refLink );
- refLink.Clear();
- maGrfObj.SetLink();
- }
+ refLink.Clear();
+ maGrfObj.SetLink();
+
+ // #15508# added extra processing after getting rid of the link. Use
whatever is
+ // known from the formally linked graphic to get to a state as close
to a directly
+ // unlinked insterted graphic as possible. Goal is to have a valid
GfxLink at the
+ // ImplGraphic (see there) that holds temporary data to the original
data and type
+ // information about the original data. Only when this is given will
+ // SvXMLGraphicHelper::ImplInsertGraphicURL which is used at export
use that type
+ // and use the original graphic at export for the ODF, without evtl.
recoding
+ // of trhe bitmap graphic data to something without loss (e.g. PNG)
but bigger
+ if(bHasOriginalData)
+ {
+ // #15508# if we have the original data at the Graphic, let it
survive
+ // by using that Graphic again, this time at a GraphicObject
without link.
+ // This happens e.g. when inserting a linked graphic and breaking
the link
+ maGrfObj.SetGraphic(aLocalGraphic);
+ }
+ else if(aFileName.Len())
+ {
+ // #15508# we have no original data, but a file name. This happens
e.g.
+ // when inserting a linked graphic and save, reload document. Try
to access
+ // that data from the original file; if this works, use it. Else
use the
+ // data we have (but without knowing the original format)
+ int nRes = GRFILTER_OK;
+ GraphicFilter* pFlt = GraphicFilter::GetGraphicFilter();
+ Graphic aNew;
+ nRes = GraphicFilter::LoadGraphic( aFileName, String(), aNew,
pFlt);
+
+ if(GRFILTER_OK == nRes)
+ {
+ maGrfObj.SetGraphic(aNew);
+ }
+ }
+ }
}