Kaydet (Commit) 38ea39b5 authored tarafından Armin Le Grand's avatar Armin Le Grand Kaydeden (comit) Caolán McNamara

Resolves: #i15508# keep the original file and format AFAP...

when breaking links to graphic contents in Writer

(cherry picked from commit a9325263)

Conflicts:
	sw/source/core/graphic/ndgrf.cxx

Change-Id: I86e2b80b95f4e26a734f56d060f97e6430ae56b8
üst be7d41a2
......@@ -724,15 +724,53 @@ void SwGrfNode::ReleaseLink()
{
if( refLink.Is() )
{
// #i15508# remember some stuff from the linked graphic
const OUString aFileName(maGrfObj.GetLink());
const Graphic aLocalGraphic(maGrfObj.GetGraphic());
const bool bHasOriginalData(aLocalGraphic.IsLink());
{
bInSwapIn = sal_True;
SwBaseLink* pLink = (SwBaseLink*)(::sfx2::SvBaseLink*) refLink;
pLink->SwapIn( sal_True, sal_True );
bInSwapIn = sal_False;
}
getIDocumentLinksAdministration()->GetLinkManager().Remove( refLink );
refLink.Clear();
maGrfObj.SetLink();
// #i15508# 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)
{
// #i15508# 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.isEmpty())
{
// #i15508# 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& rFlt = GraphicFilter::GetGraphicFilter();
Graphic aNew;
nRes = GraphicFilter::LoadGraphic( aFileName, OUString(), aNew, &rFlt);
if(GRFILTER_OK == nRes)
{
maGrfObj.SetGraphic(aNew);
}
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment