- bnc#945047 - LO-L3: LO is duplicating master pages * bnc-945047.diff OBS-URL: https://build.opensuse.org/request/show/349054 OBS-URL: https://build.opensuse.org/package/show/LibreOffice:Factory/libreoffice?expand=0&rev=351
105 lines
4.2 KiB
Diff
105 lines
4.2 KiB
Diff
From 0b6c9ddce0478bbedc36e8531f31b154bbce661c Mon Sep 17 00:00:00 2001
|
|
From: Mike Kaganski <mike.kaganski@collabora.com>
|
|
Date: Thu, 3 Dec 2015 19:05:03 +1000
|
|
Subject: [PATCH] tdf#96206: Avoid scaling objects while copying to clipboard
|
|
|
|
... to prevent duplicating masters on slide copy-paste.
|
|
Also fixed a 10-year copy-paste error (pRefPage wasn't replaced
|
|
with pNPage).
|
|
Fixed argument evaluation order issue (aStream.GetEndOfData()
|
|
depends on Flush() but doesn't call it, so will return incorrect
|
|
result if called before aStream.GetBuffer()).
|
|
Replaced compare of hashes with results of stringify(),
|
|
because it removes useless overhead (hashes are calculated from
|
|
stringify() anyway, and are not cached anywhere).
|
|
Removed Flush() called from SvMemoryStream::GetBuffer(), because
|
|
it calls GetData(), which calls Flush() itself.
|
|
|
|
Change-Id: Ia46d4e9a017fc628d424949a9d229045a249a4ca
|
|
---
|
|
sd/source/core/drawdoc3.cxx | 22 ++++++++++++++++------
|
|
svx/source/svdraw/svdobj.cxx | 1 +
|
|
tools/source/stream/stream.cxx | 1 -
|
|
3 files changed, 17 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/sd/source/core/drawdoc3.cxx b/sd/source/core/drawdoc3.cxx
|
|
index 3f966e8..cb15650 100644
|
|
--- a/sd/source/core/drawdoc3.cxx
|
|
+++ b/sd/source/core/drawdoc3.cxx
|
|
@@ -51,6 +51,7 @@
|
|
#include "strmname.h"
|
|
#include "anminfo.hxx"
|
|
#include "customshowlist.hxx"
|
|
+#include "sdxfer.hxx"
|
|
|
|
#include "../ui/inc/unmovss.hxx"
|
|
#include "../ui/inc/unchss.hxx"
|
|
@@ -110,7 +111,7 @@ void InsertBookmarkAsPage_FindDuplicateLayouts::operator()( SdDrawDocument& rDoc
|
|
{
|
|
// Ignore Layouts with "Default" these seem to be special - in the sense that there are lot of assumption all over Impress
|
|
// about this
|
|
- if( bRenameDuplicates && aTest != OUString( SdResId( STR_LAYOUT_DEFAULT_NAME ) ) && pTestPage->getHash() != pBMMPage->getHash() )
|
|
+ if( bRenameDuplicates && aTest != OUString( SdResId( STR_LAYOUT_DEFAULT_NAME ) ) && pTestPage->stringify() != pBMMPage->stringify() )
|
|
{
|
|
pBookmarkDoc->RenameLayoutTemplate( pBMMPage->GetLayoutName(), OUString(pBMMPage->GetName())+=OUString("_") );
|
|
aLayout = pBMMPage->GetName();
|
|
@@ -438,17 +439,26 @@ bool SdDrawDocument::InsertBookmarkAsPage(
|
|
sal_Int32 nNRight = pNPage->GetRgtBorder();
|
|
sal_Int32 nNUpper = pNPage->GetUppBorder();
|
|
sal_Int32 nNLower = pNPage->GetLwrBorder();
|
|
- Orientation eNOrient = pRefPage->GetOrientation();
|
|
+ Orientation eNOrient = pNPage->GetOrientation();
|
|
|
|
// Adapt page size and margins to those of the later pages?
|
|
pRefPage = GetSdPage(nSdPageCount - 1, PK_STANDARD);
|
|
|
|
if( bNoDialogs )
|
|
{
|
|
- if( rBookmarkList.empty() )
|
|
- bScaleObjects = pRefPage->IsScaleObjects();
|
|
- else
|
|
- bScaleObjects = true;
|
|
+ // If this is clipboard, then no need to scale objects:
|
|
+ // this will make copied masters to differ from the originals,
|
|
+ // and thus InsertBookmarkAsPage_FindDuplicateLayouts will
|
|
+ // duplicate masters on insert to same document
|
|
+ bool bIsClipBoard = (SD_MOD()->pTransferClip &&
|
|
+ SD_MOD()->pTransferClip->GetWorkDocument() == this);
|
|
+ if (!bIsClipBoard)
|
|
+ {
|
|
+ if (rBookmarkList.empty())
|
|
+ bScaleObjects = pRefPage->IsScaleObjects();
|
|
+ else
|
|
+ bScaleObjects = true;
|
|
+ }
|
|
}
|
|
else
|
|
{
|
|
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
|
|
index b6d3827..b712850 100644
|
|
--- a/svx/source/svdraw/svdobj.cxx
|
|
+++ b/svx/source/svdraw/svdobj.cxx
|
|
@@ -1776,6 +1776,7 @@ OString SdrObject::stringify() const
|
|
SfxItemSet aSet(GetMergedItemSet());
|
|
aSet.InvalidateDefaultItems();
|
|
aSet.Store(aStream, true);
|
|
+ aStream.Flush(); // for correct results from aStream.GetEndOfData()
|
|
aString.append(static_cast<const char *>(aStream.GetBuffer()), aStream.GetEndOfData());
|
|
|
|
return aString.makeStringAndClear();
|
|
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
|
|
index bb6d21e..17bdcd1 100644
|
|
--- a/tools/source/stream/stream.cxx
|
|
+++ b/tools/source/stream/stream.cxx
|
|
@@ -1723,7 +1723,6 @@ SvMemoryStream::~SvMemoryStream()
|
|
|
|
const void* SvMemoryStream::GetBuffer()
|
|
{
|
|
- Flush();
|
|
return GetData();
|
|
}
|
|
|
|
--
|
|
2.1.4
|
|
|