sd/source/ui/dlg/sdtreelb.cxx | 13 ++++++++----- sd/source/ui/inc/sdtreelb.hxx | 4 ++++ 2 files changed, 12 insertions(+), 5 deletions(-)
New commits: commit eebd13c97ecef1e39aa054701a6e6618227d7ae0 Author: Jim Raykowski <rayk...@gmail.com> AuthorDate: Sat Apr 22 11:23:48 2023 -0800 Commit: Jim Raykowski <rayk...@gmail.com> CommitDate: Mon Apr 24 21:00:48 2023 +0200 tdf#145359 related: Fix SdNavigator dnd z ordering Makes the object dnd z order follow the current behavior of bring forward and send back actions. Object placement top to bottom in the Navigator is wrt object z order back to front. Change-Id: I42e0902eabe7a2758a075a5f4357868994825a51 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150810 Tested-by: Jenkins Reviewed-by: Jim Raykowski <rayk...@gmail.com> diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index 87780bada9aa..efb027c2119c 100644 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -55,6 +55,8 @@ #include <vcl/commandevent.hxx> +#include <svx/svdview.hxx> + using namespace com::sun::star; bool SdPageObjsTLV::bIsInDrag = false; @@ -413,6 +415,7 @@ bool SdPageObjsTLV::DoDrag() return true; } + m_xDropTargetHelper->SetDrawView(pViewShell->GetDrawView()); bIsInDrag = true; std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator(); @@ -559,8 +562,8 @@ sal_Int8 SdPageObjsTLVDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt ) m_rTreeView.iter_previous_sibling(*xTarget); m_rTreeView.set_cursor(*xTarget); - if (m_rTreeView.iter_compare(*xSourceParent, *xTargetParent) == 0 && nIterCompare < 0) - nTargetPos = m_rTreeView.get_iter_index_in_parent(*xTarget); + // Remove and insert are required for moving objects in to and out of groups. + // PutMarked... by itself would suffice if this wasn't allowed. // Remove the source object from source parent list and insert it in the target parent list. SdrObject* pSourceParentObject = weld::fromId<SdrObject*>(m_rTreeView.get_id(*xSourceParent)); @@ -585,14 +588,14 @@ sal_Int8 SdPageObjsTLVDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt ) if (pTargetParentObject == reinterpret_cast<SdrObject*>(1)) { pObjectList->NbcInsertObject(rSourceObject.get()); - pObjectList->SetObjectNavigationPosition(*rSourceObject, nTargetPos); } else { SdrObjList* pList = pTargetParentObject->GetSubList(); - pList->NbcInsertObject(rSourceObject.get(), nTargetPos); - pList->SetObjectNavigationPosition(*rSourceObject, nTargetPos); + pList->NbcInsertObject(rSourceObject.get()); } + + m_pSdrView->PutMarkedBehindObj(pTargetObject); } return DND_ACTION_NONE; diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx index 81a535c19a05..07e79c566df9 100644 --- a/sd/source/ui/inc/sdtreelb.hxx +++ b/sd/source/ui/inc/sdtreelb.hxx @@ -28,6 +28,7 @@ #include <memory> #include <vector> +class SdrView; class SdDrawDocument; class SfxMedium; class SfxViewFrame; @@ -54,12 +55,15 @@ class SdPageObjsTLVDropTarget final : public DropTargetHelper { private: weld::TreeView& m_rTreeView; + SdrView* m_pSdrView; virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override; virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override; public: SdPageObjsTLVDropTarget(weld::TreeView& rTreeView); + + void SetDrawView(SdrView* pSdrView) { m_pSdrView = pSdrView; } }; class SD_DLLPUBLIC SdPageObjsTLV