diff options
author | Michael Stahl <Michael.Stahl@cib.de> | 2018-10-27 23:39:27 +0200 |
---|---|---|
committer | Xisco Faulí <xiscofauli@libreoffice.org> | 2018-10-30 14:01:33 +0100 |
commit | 2b44debe150d5e4bd9777a9a55a8328512d4fb40 (patch) | |
tree | 2aee710bec87db8ee2ae2cf67d926eee39836c4b /sd | |
parent | 18bf8e100a0487ccb7c1c91ec22224e71a5838c4 (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.cxx | 20 | ||||
-rw-r--r-- | sd/source/ui/view/sdview3.cxx | 35 |
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(); |