dtrans/source/win32/ftransl/ftransl.cxx |    2 -
 sd/source/ui/view/sdview2.cxx           |   20 +++++++++++-------
 sd/source/ui/view/sdview3.cxx           |   35 ++++++++++++++++++++------------
 sot/source/base/exchange.cxx            |    2 -
 svx/source/tbxctrls/colrctrl.cxx        |   32 +++++++++++++----------------
 5 files changed, 52 insertions(+), 39 deletions(-)

New commits:
commit 0a6813ad5d57d0df72562c797a8b0581bfd65a11
Author:     Michael Stahl <michael.st...@cib.de>
AuthorDate: Sat Oct 27 23:39:27 2018 +0200
Commit:     Michael Stahl <michael.st...@cib.de>
CommitDate: Sun Oct 28 08:56:08 2018 +0100

    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.st...@cib.de>
    Tested-by: Michael Stahl <michael.st...@cib.de>

diff --git a/dtrans/source/win32/ftransl/ftransl.cxx 
b/dtrans/source/win32/ftransl/ftransl.cxx
index 2223d3af6db5..c498472442e0 100644
--- a/dtrans/source/win32/ftransl/ftransl.cxx
+++ b/dtrans/source/win32/ftransl/ftransl.cxx
@@ -136,7 +136,7 @@ static const std::vector< FormatEntry > g_TranslTable {
     // SotClipboardFormatId::SVIM
         FormatEntry("application/x-openoffice-svim;windows_formatname=\"SVIM 
(StarView ImageMap)\"", "SVIM (StarView ImageMap)", nullptr, CF_INVALID, 
CPPUTYPE_DEFAULT),
     // SotClipboardFormatId::XFA
-        FormatEntry("application/x-openoffice-xfa;windows_formatname=\"XFA 
(XOutDev FillAttr)\"", "XFA (XOutDev FillAttr)", nullptr, CF_INVALID, 
CPPUTYPE_DEFAULT),
+        FormatEntry("application/x-libreoffice-xfa;windows_formatname=\"XFA 
(XOutDev FillAttr Any)\"", "XFA (XOutDev FillAttr Any)", nullptr, CF_INVALID, 
CPPUTYPE_DEFAULT),
     // SotClipboardFormatId::EDITENGINE_ODF_TEXT_FLAT
         FormatEntry("application/vnd.oasis.opendocument.text-flat-xml", 
"EditEngine ODF", nullptr, CF_INVALID, CPPUTYPE_DEFAULT),
     // SotClipboardFormatId::INTERNALLINK_STATE
diff --git a/sd/source/ui/view/sdview2.cxx b/sd/source/ui/view/sdview2.cxx
index c2f2abbc5c6f..a6ffc051d5d9 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>
@@ -666,14 +667,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 e15e67a860de..127671347b3d 100644
--- a/sd/source/ui/view/sdview3.cxx
+++ b/sd/source/ui/view/sdview3.cxx
@@ -72,6 +72,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>
@@ -1330,14 +1331,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) );
@@ -1345,15 +1342,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();
diff --git a/sot/source/base/exchange.cxx b/sot/source/base/exchange.cxx
index 80cb3ef42300..cb9c502b0561 100644
--- a/sot/source/base/exchange.cxx
+++ b/sot/source/base/exchange.cxx
@@ -72,7 +72,7 @@ namespace
             /* 11 SotClipboardFormatId::DRAWING*/                { 
"application/x-openoffice-drawing;windows_formatname=\"Drawing Format\"", 
"Drawing Format", &cppu::UnoType<Sequence<sal_Int8>>::get() },
             /* 12 SotClipboardFormatId::SVXB*/                   { 
"application/x-openoffice-svxb;windows_formatname=\"SVXB (StarView 
Bitmap/Animation)\"", "SVXB (StarView Bitmap/Animation)", 
&cppu::UnoType<Sequence<sal_Int8>>::get() },
             /* 13 SotClipboardFormatId::SVIM*/                   { 
"application/x-openoffice-svim;windows_formatname=\"SVIM (StarView 
ImageMap)\"", "SVIM (StarView ImageMap)", 
&cppu::UnoType<Sequence<sal_Int8>>::get() },
-            /* 14 SotClipboardFormatId::XFA*/                    { 
"application/x-openoffice-xfa;windows_formatname=\"XFA (XOutDev FillAttr)\"", 
"XFA (XOutDev FillAttr)", &cppu::UnoType<Sequence<sal_Int8>>::get() },
+            /* 14 SotClipboardFormatId::XFA*/                    { 
"application/x-libreoffice-xfa;windows_formatname=\"XFA (XOutDev FillAttr 
Any)\"", "XFA (XOutDev FillAttr Any)", 
&cppu::UnoType<Sequence<sal_Int8>>::get() },
             /* 15 SotClipboardFormatId::EDITENGINE_ODF_TEXT_FLAT*/ { 
"application/vnd.oasis.opendocument.text-flat-xml", "Flat XML format 
(EditEngine ODF)", &cppu::UnoType<Sequence<sal_Int8>>::get() },
             /* 16 SotClipboardFormatId::INTERNALLINK_STATE*/     { 
"application/x-openoffice-internallink-state;windows_formatname=\"StatusInfo 
vom SvxInternalLink\"", "StatusInfo vom SvxInternalLink", 
&cppu::UnoType<Sequence<sal_Int8>>::get() },
             /* 17 SotClipboardFormatId::SOLK*/                   { 
"application/x-openoffice-solk;windows_formatname=\"SOLK (StarOffice Link)\"", 
"SOLK (StarOffice Link)", &cppu::UnoType<Sequence<sal_Int8>>::get() },
diff --git a/svx/source/tbxctrls/colrctrl.cxx b/svx/source/tbxctrls/colrctrl.cxx
index c7bc43f67f23..6b86c381dfc4 100644
--- a/svx/source/tbxctrls/colrctrl.cxx
+++ b/svx/source/tbxctrls/colrctrl.cxx
@@ -48,18 +48,18 @@ class SvxColorValueSetData : public TransferableHelper
 {
 private:
 
-    XFillExchangeData       maData;
+    uno::Sequence<beans::NamedValue> m_Data;
 
 protected:
 
     virtual void            AddSupportedFormats() override;
     virtual bool GetData( const css::datatransfer::DataFlavor& rFlavor, const 
OUString& rDestDoc ) override;
-    virtual bool            WriteObject( tools::SvRef<SotStorageStream>& 
rxOStm, void* pUserObject, sal_uInt32 nUserObjectId, const 
css::datatransfer::DataFlavor& rFlavor ) override;
 
 public:
 
-    explicit SvxColorValueSetData( const XFillAttrSetItem& rSetItem ) :
-        maData( rSetItem ) {}
+    explicit SvxColorValueSetData(const uno::Sequence<beans::NamedValue>& 
rProps)
+        : m_Data(rProps)
+    {}
 };
 
 void SvxColorValueSetData::AddSupportedFormats()
@@ -73,19 +73,13 @@ bool SvxColorValueSetData::GetData( const 
css::datatransfer::DataFlavor& rFlavor
 
     if( SotExchange::GetFormat( rFlavor ) == SotClipboardFormatId::XFA )
     {
-        SetObject( &maData, 0, rFlavor );
+        SetAny(uno::makeAny(m_Data));
         bRet = true;
     }
 
     return bRet;
 }
 
-bool SvxColorValueSetData::WriteObject( tools::SvRef<SotStorageStream>& 
rxOStm, void*, sal_uInt32, const css::datatransfer::DataFlavor&  )
-{
-    WriteXFillExchangeData( *rxOStm, maData );
-    return( rxOStm->GetError() == ERRCODE_NONE );
-}
-
 SvxColorValueSet_docking::SvxColorValueSet_docking( vcl::Window* _pParent ) :
     SvxColorValueSet( _pParent, WB_ITEMBORDER ),
     DragSourceHelper( this ),
@@ -149,14 +143,18 @@ void SvxColorValueSet_docking::DoDrag()
 
     if( pDocSh && nItemId )
     {
-        XFillAttrSetItem    aXFillSetItem( &pDocSh->GetPool() );
-        SfxItemSet&         rSet = aXFillSetItem.GetItemSet();
-
-        rSet.Put( XFillColorItem( GetItemText( nItemId ), GetItemColor( 
nItemId ) ) );
-        rSet.Put(XFillStyleItem( ( 1 == nItemId ) ? drawing::FillStyle_NONE : 
drawing::FillStyle_SOLID ) );
+        uno::Sequence<beans::NamedValue> props(2);
+        XFillColorItem const color(GetItemText(nItemId), 
GetItemColor(nItemId));
+        props[0].Name = "FillColor";
+        color.QueryValue(props[0].Value, 0);
+        XFillStyleItem const style((1 == nItemId)
+                ? drawing::FillStyle_NONE
+                : drawing::FillStyle_SOLID);
+        props[1].Name = "FillStyle";
+        style.QueryValue(props[1].Value, 0);
 
         EndSelection();
-        ( new SvxColorValueSetData( aXFillSetItem ) )->StartDrag( this, 
DND_ACTION_COPY );
+        ( new SvxColorValueSetData(props) )->StartDrag( this, DND_ACTION_COPY 
);
         ReleaseMouse();
     }
 }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to