diff options
-rw-r--r-- | include/svtools/treelistbox.hxx | 10 | ||||
-rw-r--r-- | sd/source/ui/dlg/sdtreelb.cxx | 26 | ||||
-rw-r--r-- | sd/source/ui/inc/sdtreelb.hxx | 4 | ||||
-rw-r--r-- | svtools/source/contnr/treelistbox.cxx | 48 |
4 files changed, 34 insertions, 54 deletions
diff --git a/include/svtools/treelistbox.hxx b/include/svtools/treelistbox.hxx index 9e5333619d5b..5babd96909d1 100644 --- a/include/svtools/treelistbox.hxx +++ b/include/svtools/treelistbox.hxx @@ -587,6 +587,7 @@ protected: protected: + void SetupDragOrigin(); void EditItemText( SvTreeListEntry* pEntry, SvLBoxString* pItem, const Selection& ); void EditedText(const OUString&); @@ -817,15 +818,6 @@ public: }; #define SV_LBOX_DD_FORMAT "SV_LBOX_DD_FORMAT" -struct SvLBoxDDInfo -{ - Application* pApp; - VclPtr<SvTreeListBox> pSource; - SvTreeListEntry* pDDStartEntry; - // Relative position in the Entry at DragBeginn (IconView) - long nMouseRelX,nMouseRelY; - sal_uLong nRes1,nRes2,nRes3,nRes4; -}; class SvInplaceEdit2 { diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index d0c786403de6..485f3924c72e 100644 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -87,15 +87,14 @@ SdPageObjsTLB::SdPageObjsTransferable::SdPageObjsTransferable( SdPageObjsTLB& rParent, const INetBookmark& rBookmark, ::sd::DrawDocShell& rDocShell, - NavigatorDragType eDragType, - const ::com::sun::star::uno::Any& rTreeListBoxData ) + NavigatorDragType eDragType) : SdTransferable(rDocShell.GetDoc(), NULL, true), mrParent( rParent ), maBookmark( rBookmark ), mrDocShell( rDocShell ), - meDragType( eDragType ), - maTreeListBoxData( rTreeListBoxData ) + meDragType( eDragType ) { + rParent.SetupDragOrigin(); } VCL_BUILDER_DECL_FACTORY(SdPageObjsTLB) @@ -128,8 +127,11 @@ bool SdPageObjsTLB::SdPageObjsTransferable::GetData( const css::datatransfer::Da return true; case SotClipboardFormatId::TREELISTBOX: - SetAny(maTreeListBoxData, rFlavor); + { + css::uno::Any aTreeListBoxData; // empty for now + SetAny(aTreeListBoxData, rFlavor); return true; + } default: return false; @@ -1204,18 +1206,10 @@ void SdPageObjsTLB::DoDrag() bIsInDrag = true; - SvLBoxDDInfo aDDInfo; - memset(&aDDInfo,0,sizeof(SvLBoxDDInfo)); - aDDInfo.pApp = GetpApp(); - aDDInfo.pSource = this; - // aDDInfo.pDDStartEntry = pEntry; - ::com::sun::star::uno::Sequence<sal_Int8> aSequence (sizeof(SvLBoxDDInfo)); - memcpy(aSequence.getArray(), &aDDInfo, sizeof(SvLBoxDDInfo)); - ::com::sun::star::uno::Any aTreeListBoxData (aSequence); - // object is destroyed by internal reference mechanism - SdTransferable* pTransferable = new SdPageObjsTLB::SdPageObjsTransferable( - *this, aBookmark, *pDocShell, eDragType, aTreeListBoxData); + SdTransferable* pTransferable = + new SdPageObjsTLB::SdPageObjsTransferable( + *this, aBookmark, *pDocShell, eDragType); // Get the view. ::sd::ViewShell* pViewShell = GetViewShellForDocShell(*pDocShell); diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx index c03a6b0bb777..31e812510907 100644 --- a/sd/source/ui/inc/sdtreelb.hxx +++ b/sd/source/ui/inc/sdtreelb.hxx @@ -73,8 +73,7 @@ public: SdPageObjsTLB& rParent, const INetBookmark& rBookmark, ::sd::DrawDocShell& rDocShell, - NavigatorDragType eDragType, - const ::com::sun::star::uno::Any& rTreeListBoxData ); + NavigatorDragType eDragType ); ::sd::DrawDocShell& GetDocShell() const { return mrDocShell;} NavigatorDragType GetDragType() const { return meDragType;} @@ -96,7 +95,6 @@ public: INetBookmark maBookmark; ::sd::DrawDocShell& mrDocShell; NavigatorDragType meDragType; - const ::com::sun::star::uno::Any maTreeListBoxData; SAL_DLLPRIVATE virtual ~SdPageObjsTransferable(); SAL_DLLPRIVATE virtual void AddSupportedFormats() SAL_OVERRIDE; diff --git a/svtools/source/contnr/treelistbox.cxx b/svtools/source/contnr/treelistbox.cxx index 377244a12b69..aba60a71bf5d 100644 --- a/svtools/source/contnr/treelistbox.cxx +++ b/svtools/source/contnr/treelistbox.cxx @@ -1234,27 +1234,19 @@ sal_Int8 SvTreeListBox::AcceptDrop( const AcceptDropEvent& rEvt ) sal_Int8 SvTreeListBox::ExecuteDrop( const ExecuteDropEvent& rEvt, SvTreeListBox* pSourceView ) { - sal_Int8 nRet = DND_ACTION_NONE; - DBG_ASSERT( pSourceView, "SvTreeListBox::ExecuteDrop(): no source view" ); pSourceView->EnableSelectionAsDropTarget( true, true ); ImplShowTargetEmphasis( pTargetEntry, false ); pDDTarget = this; - SvLBoxDDInfo aDDInfo; - memset( &aDDInfo, 0, sizeof(SvLBoxDDInfo) ); - TransferableDataHelper aData( rEvt.maDropEvent.Transferable ); + + sal_Int8 nRet; if( aData.HasFormat( SotClipboardFormatId::TREELISTBOX )) - { - css::uno::Sequence<sal_Int8> aSeq = aData.GetSequence(SotClipboardFormatId::TREELISTBOX, OUString()); - if (sizeof(SvLBoxDDInfo) == aSeq.getLength()) - { - memcpy( &aDDInfo, aSeq.getConstArray(), sizeof(SvLBoxDDInfo) ); - nRet = rEvt.mnAction; - } - } + nRet = rEvt.mnAction; + else + nRet = DND_ACTION_NONE; if( DND_ACTION_NONE != nRet ) { @@ -1262,20 +1254,19 @@ sal_Int8 SvTreeListBox::ExecuteDrop( const ExecuteDropEvent& rEvt, SvTreeListBox SvTreeListEntry* pTarget = pTargetEntry; // may be 0! - if( DND_ACTION_COPY == rEvt.mnAction ) { - if ( CopySelection( aDDInfo.pSource, pTarget ) ) + if ( CopySelection( pDDSource, pTarget ) ) nRet = rEvt.mnAction; } else if( DND_ACTION_MOVE == rEvt.mnAction ) { - if ( MoveSelection( aDDInfo.pSource, pTarget ) ) + if ( MoveSelection( pDDSource, pTarget ) ) nRet = rEvt.mnAction; } else if( DND_ACTION_COPYMOVE == rEvt.mnAction ) { - if ( MoveSelectionCopyFallbackPossible( aDDInfo.pSource, pTarget, true ) ) + if ( MoveSelectionCopyFallbackPossible( pDDSource, pTarget, true ) ) nRet = rEvt.mnAction; } } @@ -1287,6 +1278,16 @@ sal_Int8 SvTreeListBox::ExecuteDrop( const ExecuteDropEvent& rEvt ) return ExecuteDrop( rEvt, GetSourceView() ); } +/** + * This sets the global variables used to determine the + * in-process drag source. + */ +void SvTreeListBox::SetupDragOrigin() +{ + pDDSource = this; + pDDTarget = 0; +} + void SvTreeListBox::StartDrag( sal_Int8, const Point& rPosPixel ) { @@ -1310,25 +1311,20 @@ void SvTreeListBox::StartDrag( sal_Int8, const Point& rPosPixel ) TransferDataContainer* pContainer = new TransferDataContainer; ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRef( pContainer ); - nDragDropMode = NotifyStartDrag( *pContainer, pEntry ); if( nDragDropMode == DragDropMode::NONE || 0 == GetSelectionCount() ) { nDragDropMode = nOldDragMode; DragFinished( DND_ACTION_NONE ); + delete pContainer; return; } - SvLBoxDDInfo aDDInfo; - memset(&aDDInfo,0,sizeof(SvLBoxDDInfo)); - aDDInfo.pApp = GetpApp(); - aDDInfo.pSource = this; - aDDInfo.pDDStartEntry = pEntry; + SetupDragOrigin(); + // apparently some (unused) content is needed pContainer->CopyAnyData( SotClipboardFormatId::TREELISTBOX, - reinterpret_cast<char*>(&aDDInfo), sizeof(SvLBoxDDInfo) ); - pDDSource = this; - pDDTarget = 0; + "unused", SAL_N_ELEMENTS("unused") ); bool bOldUpdateMode = Control::IsUpdateMode(); Control::SetUpdateMode( true ); |