summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2018-10-27 23:39:27 +0200
committerXisco Faulí <xiscofauli@libreoffice.org>2018-10-30 14:01:33 +0100
commit2b44debe150d5e4bd9777a9a55a8328512d4fb40 (patch)
tree2aee710bec87db8ee2ae2cf67d926eee39836c4b /sd
parent18bf8e100a0487ccb7c1c91ec22224e71a5838c4 (diff)
tdf#119235 svx,sd: fix drag&drop from ColorBar
This was using the SfxPoolItem serialisation of XATTR_FILL* items, where only XFillColorItem and XFillStyleItem were actually used; the binary serialisation was removed without being aware of this feature. Fix this by using uno::Any instead, rather than reviving the binary serialisation. Also change the clipboard format strings, just to be safe. (regression from 97b889b8b2b2554ce33fd6b3f0359fc18f39832d) Change-Id: I1828621a9aae606a1ca47835eef608062efe64a0 Reviewed-on: https://gerrit.libreoffice.org/62455 Reviewed-by: Michael Stahl <Michael.Stahl@cib.de> Tested-by: Michael Stahl <Michael.Stahl@cib.de> (cherry picked from commit 0a6813ad5d57d0df72562c797a8b0581bfd65a11) Reviewed-on: https://gerrit.libreoffice.org/62469 Tested-by: Jenkins Tested-by: Xisco Faulí <xiscofauli@libreoffice.org> Reviewed-by: Xisco Faulí <xiscofauli@libreoffice.org>
Diffstat (limited to 'sd')
-rw-r--r--sd/source/ui/view/sdview2.cxx20
-rw-r--r--sd/source/ui/view/sdview3.cxx35
2 files changed, 35 insertions, 20 deletions
diff --git a/sd/source/ui/view/sdview2.cxx b/sd/source/ui/view/sdview2.cxx
index 45905d242cf9..e86ce789f2ca 100644
--- a/sd/source/ui/view/sdview2.cxx
+++ b/sd/source/ui/view/sdview2.cxx
@@ -21,6 +21,7 @@
#include <vector>
#include <com/sun/star/embed/XEmbedPersist.hpp>
+#include <comphelper/sequenceashashmap.hxx>
#include <tools/urlobj.hxx>
#include <svx/svdetc.hxx>
#include <svx/svdoole2.hxx>
@@ -668,14 +669,19 @@ sal_Int8 View::ExecuteDrop( const ExecuteDropEvent& rEvt,
{
if(pIAOHandle->getOverlayObjectList().isHitPixel(rEvt.maPosPixel))
{
- ::tools::SvRef<SotStorageStream> xStm;
-
- if( aDataHelper.GetSotStorageStream( SotClipboardFormatId::XFA, xStm ) && xStm.is() )
+ uno::Any const data(aDataHelper.GetAny(SotClipboardFormatId::XFA, ""));
+ uno::Sequence<beans::NamedValue> props;
+ if (data >>= props)
{
- XFillExchangeData aFillData( XFillAttrSetItem( &mrDoc.GetPool() ) );
-
- ReadXFillExchangeData( *xStm, aFillData );
- const Color aColor( aFillData.GetXFillAttrSetItem()->GetItemSet().Get( XATTR_FILLCOLOR ).GetColorValue() );
+ ::comphelper::SequenceAsHashMap const map(props);
+ Color aColor(COL_BLACK);
+ auto const it = map.find("FillColor");
+ if (it != map.end())
+ {
+ XFillColorItem color;
+ color.PutValue(it->second, 0);
+ aColor = color.GetColorValue();
+ }
static_cast< SdrHdlColor* >( pIAOHandle )->SetColor( aColor, true );
nRet = nDropAction;
}
diff --git a/sd/source/ui/view/sdview3.cxx b/sd/source/ui/view/sdview3.cxx
index 634e59e7ce93..dd2f29d38bc3 100644
--- a/sd/source/ui/view/sdview3.cxx
+++ b/sd/source/ui/view/sdview3.cxx
@@ -71,6 +71,7 @@
#include <ViewClipboard.hxx>
#include <sfx2/ipclient.hxx>
#include <sfx2/classificationhelper.hxx>
+#include <comphelper/sequenceashashmap.hxx>
#include <comphelper/storagehelper.hxx>
#include <comphelper/processfactory.hxx>
#include <tools/stream.hxx>
@@ -1329,14 +1330,10 @@ bool View::InsertData( const TransferableDataHelper& rDataHelper,
if(!bReturn && pPickObj && CHECK_FORMAT_TRANS( SotClipboardFormatId::XFA ) )
{
- ::tools::SvRef<SotStorageStream> xStm;
-
- if( aDataHelper.GetSotStorageStream( SotClipboardFormatId::XFA, xStm ) )
+ uno::Any const data(aDataHelper.GetAny(SotClipboardFormatId::XFA, ""));
+ uno::Sequence<beans::NamedValue> props;
+ if (data >>= props)
{
- XFillExchangeData aFillData( XFillAttrSetItem( &mrDoc.GetPool() ) );
-
- ReadXFillExchangeData( *xStm, aFillData );
-
if( IsUndoEnabled() )
{
BegUndo( SdResId(STR_UNDO_DRAGDROP) );
@@ -1344,15 +1341,27 @@ bool View::InsertData( const TransferableDataHelper& rDataHelper,
EndUndo();
}
- XFillAttrSetItem* pSetItem = aFillData.GetXFillAttrSetItem();
- SfxItemSet rSet = pSetItem->GetItemSet();
- drawing::FillStyle eFill = rSet.Get( XATTR_FILLSTYLE ).GetValue();
+ ::comphelper::SequenceAsHashMap const map(props);
+ drawing::FillStyle eFill(drawing::FillStyle_BITMAP); // default to something that's ignored
+ Color aColor(COL_BLACK);
+ auto it = map.find("FillStyle");
+ if (it != map.end())
+ {
+ XFillStyleItem style;
+ style.PutValue(it->second, 0);
+ eFill = style.GetValue();
+ }
+ it = map.find("FillColor");
+ if (it != map.end())
+ {
+ XFillColorItem color;
+ color.PutValue(it->second, 0);
+ aColor = color.GetColorValue();
+ }
if( eFill == drawing::FillStyle_SOLID || eFill == drawing::FillStyle_NONE )
{
- const XFillColorItem& rColItem = rSet.Get( XATTR_FILLCOLOR );
- Color aColor( rColItem.GetColorValue() );
- OUString aName( rColItem.GetName() );
+ OUString aName;
SfxItemSet aSet( mrDoc.GetPool() );
bool bClosed = pPickObj->IsClosedObj();
::sd::Window* pWin = mpViewSh->GetActiveWindow();