diff --git a/basctl/source/basicide/moduldlg.cxx b/basctl/source/basicide/moduldlg.cxx index 3b31b4be0d47..453b78ba2ea8 100644 --- a/basctl/source/basicide/moduldlg.cxx +++ b/basctl/source/basicide/moduldlg.cxx @@ -261,7 +261,7 @@ private: { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); weld::TreeView* pSource = rWidget.get_drag_source(); if (!pSource) @@ -317,11 +317,10 @@ private: if (!pSource) return DND_ACTION_NONE; - std::unique_ptr xEntry(rWidget.make_iterator()); - bool bEntry = rWidget.get_dest_row_at_pos(rEvt.maPosPixel, xEntry.get(), true); + std::unique_ptr xEntry = rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); // don't drop on a BasicManager (nDepth == 0) - sal_uInt16 nDepth = bEntry ? m_rTreeView.get_iter_depth(*xEntry) : 0; + sal_uInt16 nDepth = xEntry ? m_rTreeView.get_iter_depth(*xEntry) : 0; bool bValid = nDepth != 0; // don't drop in the same library std::unique_ptr xSelected = pSource->get_selected(); diff --git a/cui/source/customize/SvxMenuConfigPage.cxx b/cui/source/customize/SvxMenuConfigPage.cxx index ea943db7f786..70733a41e5ee 100644 --- a/cui/source/customize/SvxMenuConfigPage.cxx +++ b/cui/source/customize/SvxMenuConfigPage.cxx @@ -523,8 +523,9 @@ IMPL_LINK(SvxMenuConfigPage, ContentContextMenuHdl, const CommandEvent&, rCEvt, weld::TreeView& rTreeView = m_xContentsListBox->get_widget(); // Select clicked entry - std::unique_ptr xIter(rTreeView.make_iterator()); - if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false)) + std::unique_ptr xIter + = rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false); + if (!xIter) return false; rTreeView.select(*xIter); SelectMenuEntry(rTreeView); @@ -569,8 +570,9 @@ IMPL_LINK(SvxMenuConfigPage, FunctionContextMenuHdl, const CommandEvent&, rCEvt, weld::TreeView& rTreeView = m_xFunctions->get_widget(); // Select clicked entry - std::unique_ptr xIter(rTreeView.make_iterator()); - if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false)) + std::unique_ptr xIter + = rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false); + if (!xIter) return false; rTreeView.select(*xIter); SelectFunctionHdl(rTreeView); diff --git a/cui/source/customize/SvxToolbarConfigPage.cxx b/cui/source/customize/SvxToolbarConfigPage.cxx index af5486d7f8b1..1c98699c35ab 100644 --- a/cui/source/customize/SvxToolbarConfigPage.cxx +++ b/cui/source/customize/SvxToolbarConfigPage.cxx @@ -868,8 +868,9 @@ IMPL_LINK(SvxToolbarConfigPage, ContentContextMenuHdl, const CommandEvent&, rCEv weld::TreeView& rTreeView = m_xContentsListBox->get_widget(); // Select clicked entry - std::unique_ptr xIter(rTreeView.make_iterator()); - if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false)) + std::unique_ptr xIter + = rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false); + if (!xIter) return false; rTreeView.select(*xIter); SelectToolbarEntry(rTreeView); @@ -916,8 +917,9 @@ IMPL_LINK(SvxToolbarConfigPage, FunctionContextMenuHdl, const CommandEvent&, rCE weld::TreeView& rTreeView = m_xFunctions->get_widget(); // Select clicked entry - std::unique_ptr xIter(rTreeView.make_iterator()); - if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false)) + std::unique_ptr xIter + = rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false); + if (!xIter) return false; rTreeView.select(*xIter); SelectFunctionHdl(rTreeView); diff --git a/cui/source/customize/cfg.cxx b/cui/source/customize/cfg.cxx index f91a2a9f4874..e4f015767413 100644 --- a/cui/source/customize/cfg.cxx +++ b/cui/source/customize/cfg.cxx @@ -3222,9 +3222,9 @@ sal_Int8 SvxConfigPageFunctionDropTarget::ExecuteDrop(const ExecuteDropEvent& rE std::unique_ptr xSource = m_rFunctions.get_selected(); if (!xSource) return DND_ACTION_NONE; - std::unique_ptr xTarget(m_rTreeView.make_iterator()); int nTargetPos = -1; - if (m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true)) + if (std::unique_ptr xTarget + = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true)) nTargetPos = m_rTreeView.get_iter_index_in_parent(*xTarget); m_aDropHdl.Call(nTargetPos); nRet = DND_ACTION_NONE; diff --git a/dbaccess/source/ui/app/AppDetailPageHelper.cxx b/dbaccess/source/ui/app/AppDetailPageHelper.cxx index 5c5d43e8df0e..9ca30754dd6b 100644 --- a/dbaccess/source/ui/app/AppDetailPageHelper.cxx +++ b/dbaccess/source/ui/app/AppDetailPageHelper.cxx @@ -496,9 +496,7 @@ std::unique_ptr OAppDetailPageHelper::getEntry( const Point& _aP { DBTreeViewBase& rTree = *m_aLists[nPos]; weld::TreeView& rTreeView = rTree.GetWidget(); - xReturn = rTreeView.make_iterator(); - if (!rTreeView.get_dest_row_at_pos(_aPosPixel, xReturn.get(), false)) - xReturn.reset(); + xReturn = rTreeView.get_dest_row_at_pos(_aPosPixel, false); } return xReturn; } diff --git a/dbaccess/source/ui/browser/dsbrowserDnD.cxx b/dbaccess/source/ui/browser/dsbrowserDnD.cxx index 67aa043f2e19..7690f339e226 100644 --- a/dbaccess/source/ui/browser/dsbrowserDnD.cxx +++ b/dbaccess/source/ui/browser/dsbrowserDnD.cxx @@ -84,9 +84,9 @@ namespace dbaui { // check if we're a table or query container weld::TreeView& rTreeView = m_pTreeView->GetWidget(); - std::unique_ptr xHitEntry(rTreeView.make_iterator()); // get_dest_row_at_pos with false cause no drop if no entry was hit exactly - if (rTreeView.get_dest_row_at_pos(_rEvt.maPosPixel, xHitEntry.get(), false)) + if (std::unique_ptr xHitEntry + = rTreeView.get_dest_row_at_pos(_rEvt.maPosPixel, false)) { // it must be a container EntryType eEntryType = getEntryType(*xHitEntry); @@ -108,9 +108,10 @@ namespace dbaui sal_Int8 SbaTableQueryBrowser::executeDrop( const ExecuteDropEvent& _rEvt ) { weld::TreeView& rTreeView = m_pTreeView->GetWidget(); - std::unique_ptr xHitEntry(rTreeView.make_iterator()); + std::unique_ptr xHitEntry + = rTreeView.get_dest_row_at_pos(_rEvt.maPosPixel, false); // get_dest_row_at_pos with false cause no drop if no entry was hit exactly - if (!rTreeView.get_dest_row_at_pos(_rEvt.maPosPixel, xHitEntry.get(), false)) + if (!xHitEntry) return DND_ACTION_NONE; EntryType eEntryType = getEntryType(*xHitEntry); if (!isContainer(eEntryType)) diff --git a/dbaccess/source/ui/control/dbtreelistbox.cxx b/dbaccess/source/ui/control/dbtreelistbox.cxx index feb862ec8748..129ce752e42d 100644 --- a/dbaccess/source/ui/control/dbtreelistbox.cxx +++ b/dbaccess/source/ui/control/dbtreelistbox.cxx @@ -94,7 +94,7 @@ sal_Int8 TreeListBoxDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.GetWidget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); } return nAccept; @@ -237,9 +237,8 @@ sal_Int8 TreeListBox::AcceptDrop(const AcceptDropEvent& rEvt) if ( m_pActionListener ) { ::Point aDropPos = rEvt.maPosPixel; - std::unique_ptr xDropTarget(m_xTreeView->make_iterator()); - if (!m_xTreeView->get_dest_row_at_pos(aDropPos, xDropTarget.get(), true)) - xDropTarget.reset(); + std::unique_ptr xDropTarget + = m_xTreeView->get_dest_row_at_pos(aDropPos, true); // check if drag is on child entry, which is not allowed std::unique_ptr xParent; @@ -357,8 +356,8 @@ IMPL_LINK(TreeListBox, CommandHdl, const CommandEvent&, rCEvt, bool) ::Point aPos = rCEvt.GetMousePosPixel(); - std::unique_ptr xIter(m_xTreeView->make_iterator()); - if (m_xTreeView->get_dest_row_at_pos(aPos, xIter.get(), false) && !m_xTreeView->is_selected(*xIter)) + std::unique_ptr xIter = m_xTreeView->get_dest_row_at_pos(aPos, false); + if (xIter && !m_xTreeView->is_selected(*xIter)) { m_xTreeView->unselect_all(); m_xTreeView->set_cursor(*xIter); diff --git a/dbaccess/source/ui/querydesign/TableWindowListBox.cxx b/dbaccess/source/ui/querydesign/TableWindowListBox.cxx index ed2cf13cfc72..13242b0c609b 100644 --- a/dbaccess/source/ui/querydesign/TableWindowListBox.cxx +++ b/dbaccess/source/ui/querydesign/TableWindowListBox.cxx @@ -158,8 +158,8 @@ IMPL_LINK(OTableWindowListBox, DragBeginHdl, bool&, rUnsetDragIcon, bool) sal_Int8 OTableWindowListBox::AcceptDrop(const AcceptDropEvent& _rEvt) { // to enable the autoscroll when we're close to the edges - std::unique_ptr xEntry(m_xTreeView->make_iterator()); - bool bHasDestRow = m_xTreeView->get_dest_row_at_pos(_rEvt.maPosPixel, xEntry.get(), true); + std::unique_ptr xEntry + = m_xTreeView->get_dest_row_at_pos(_rEvt.maPosPixel, true); sal_Int8 nDND_Action = DND_ACTION_NONE; // check the format @@ -174,7 +174,7 @@ sal_Int8 OTableWindowListBox::AcceptDrop(const AcceptDropEvent& _rEvt) m_xTreeView->unselect_all(); else { - if (!bHasDestRow) + if (!xEntry) return DND_ACTION_NONE; // automatically select right entry when dragging diff --git a/include/vcl/weld/TreeView.hxx b/include/vcl/weld/TreeView.hxx index a31de1d522b1..74dc33a219b3 100644 --- a/include/vcl/weld/TreeView.hxx +++ b/include/vcl/weld/TreeView.hxx @@ -510,8 +510,8 @@ public: * after the row * b) dnd highlight the dest row */ - virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult, bool bDnDMode, - bool bAutoScroll = true) + virtual std::unique_ptr get_dest_row_at_pos(const Point& rPos, bool bDnDMode, + bool bAutoScroll = true) = 0; virtual void unset_drag_dest_row() = 0; virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const = 0; diff --git a/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx b/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx index 672de9559c4e..f25b06a56d81 100644 --- a/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx +++ b/sc/source/ui/dbgui/PivotLayoutTreeListBase.cxx @@ -42,7 +42,7 @@ sal_Int8 ScPivotLayoutTreeDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); return DND_ACTION_MOVE; } @@ -53,9 +53,9 @@ sal_Int8 ScPivotLayoutTreeDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt if (!pSource) return DND_ACTION_NONE; - std::unique_ptr xTarget(rWidget.make_iterator()); int nTargetPos = -1; - if (rWidget.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true)) + if (std::unique_ptr xTarget + = rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true)) nTargetPos = rWidget.get_iter_index_in_parent(*xTarget); m_rTreeView.InsertEntryForSourceTarget(*pSource, nTargetPos); rWidget.unset_drag_dest_row(); diff --git a/sd/source/ui/animations/CustomAnimationList.cxx b/sd/source/ui/animations/CustomAnimationList.cxx index add1867981ee..0b05b95b2c36 100644 --- a/sd/source/ui/animations/CustomAnimationList.cxx +++ b/sd/source/ui/animations/CustomAnimationList.cxx @@ -477,7 +477,7 @@ sal_Int8 CustomAnimationListDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); } return nAccept; @@ -523,9 +523,8 @@ sal_Int8 CustomAnimationList::AcceptDrop( const AcceptDropEvent& rEvt ) // D'n'D #5: Tell model to update effect order. sal_Int8 CustomAnimationList::ExecuteDrop(const ExecuteDropEvent& rEvt) { - std::unique_ptr xDndEffectInsertBefore(mxTreeView->make_iterator()); - if (!mxTreeView->get_dest_row_at_pos(rEvt.maPosPixel, xDndEffectInsertBefore.get(), true)) - xDndEffectInsertBefore.reset(); + std::unique_ptr xDndEffectInsertBefore + = mxTreeView->get_dest_row_at_pos(rEvt.maPosPixel, true); const bool bMovingEffect = ( mxDndEffectDragging != nullptr ); const bool bMoveNotSelf = !xDndEffectInsertBefore || (mxDndEffectDragging && mxTreeView->iter_compare(*xDndEffectInsertBefore, *mxDndEffectDragging) != 0); @@ -1165,8 +1164,8 @@ IMPL_LINK(CustomAnimationList, CommandHdl, const CommandEvent&, rCEvt, bool) if (rCEvt.IsMouseEvent()) { ::Point aPos = rCEvt.GetMousePosPixel(); - std::unique_ptr xIter(mxTreeView->make_iterator()); - if (mxTreeView->get_dest_row_at_pos(aPos, xIter.get(), false) && !mxTreeView->is_selected(*xIter)) + std::unique_ptr xIter = mxTreeView->get_dest_row_at_pos(aPos, false); + if (xIter && !mxTreeView->is_selected(*xIter)) { mxTreeView->unselect_all(); mxTreeView->set_cursor(*xIter); diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index e91f96d42afd..c7ebdbd1df05 100644 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -303,14 +303,16 @@ IMPL_LINK(SdPageObjsTLV, CommandHdl, const CommandEvent&, rCEvt, bool) m_xTreeView->grab_focus(); // select clicked entry - if (std::unique_ptr xEntry(m_xTreeView->make_iterator()); - rCEvt.IsMouseEvent() && m_xTreeView->get_dest_row_at_pos( - rCEvt.GetMousePosPixel(), xEntry.get(), false)) + if (rCEvt.IsMouseEvent()) { - m_bSelectionHandlerNavigates = true; - m_bNavigationGrabsFocus = false; - m_xTreeView->set_cursor(*xEntry); - Select(); + if (std::unique_ptr xEntry + = m_xTreeView->get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false)) + { + m_bSelectionHandlerNavigates = true; + m_bNavigationGrabsFocus = false; + m_xTreeView->set_cursor(*xEntry); + Select(); + } } bool bRet = m_aPopupMenuHdl.Call(rCEvt); @@ -528,8 +530,9 @@ sal_Int8 SdPageObjsTLVDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) if (!pSource || pSource != &m_rTreeView) return DND_ACTION_NONE; - std::unique_ptr xTarget(m_rTreeView.make_iterator()); - if (!m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true)) + std::unique_ptr xTarget + = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true); + if (!xTarget) return DND_ACTION_NONE; // disallow when root is drop target @@ -581,8 +584,9 @@ sal_Int8 SdPageObjsTLVDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt ) if (!xSource) return DND_ACTION_NONE; - std::unique_ptr xTarget(m_rTreeView.make_iterator()); - if (!m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), false)) + std::unique_ptr xTarget + = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, false); + if (!xTarget) return DND_ACTION_NONE; auto nIterCompare = m_rTreeView.iter_compare(*xSource, *xTarget); diff --git a/sfx2/source/dialog/StyleList.cxx b/sfx2/source/dialog/StyleList.cxx index 6f06ffb2d84a..b7a531512cb1 100644 --- a/sfx2/source/dialog/StyleList.cxx +++ b/sfx2/source/dialog/StyleList.cxx @@ -481,7 +481,7 @@ sal_Int8 StyleList::AcceptDrop(const AcceptDropEvent& rEvt, const DropTargetHelp } // to enable the autoscroll when we're close to the edges weld::TreeView* pTreeView = m_xTreeBox->get_visible() ? m_xTreeBox.get() : m_xFmtLb.get(); - pTreeView->get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + pTreeView->get_dest_row_at_pos(rEvt.maPosPixel, true); return DND_ACTION_MOVE; } @@ -538,13 +538,15 @@ IMPL_LINK(StyleList, ExecuteDrop, const ExecuteDropEvent&, rEvt, sal_Int8) if (!xSource) return DND_ACTION_NONE; - std::unique_ptr xTarget(m_xTreeBox->make_iterator()); - if (!m_xTreeBox->get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true)) + std::unique_ptr xTarget + = m_xTreeBox->get_dest_row_at_pos(rEvt.maPosPixel, true); + if (!xTarget) { // if nothing under the mouse, use the last row int nChildren = m_xTreeBox->n_children(); if (!nChildren) return DND_ACTION_NONE; + xTarget = m_xTreeBox->make_iterator(); if (!m_xTreeBox->get_iter_first(*xTarget) || !m_xTreeBox->iter_nth_sibling(*xTarget, nChildren - 1)) return DND_ACTION_NONE; @@ -604,8 +606,8 @@ void StyleList::DropHdl(const OUString& rStyle, const OUString& rParent) void StyleList::PrepareMenu(const Point& rPos) { weld::TreeView* pTreeView = m_xTreeBox->get_visible() ? m_xTreeBox.get() : m_xFmtLb.get(); - std::unique_ptr xIter(pTreeView->make_iterator()); - if (pTreeView->get_dest_row_at_pos(rPos, xIter.get(), false) && !pTreeView->is_selected(*xIter)) + std::unique_ptr xIter = pTreeView->get_dest_row_at_pos(rPos, false); + if (xIter && !pTreeView->is_selected(*xIter)) { pTreeView->unselect_all(); pTreeView->set_cursor(*xIter); diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx index 8bd0eabe3610..d97f29127db4 100644 --- a/svx/source/form/datanavi.cxx +++ b/svx/source/form/datanavi.cxx @@ -140,9 +140,10 @@ namespace svxform Point aPos(rCEvt.GetMousePosPixel()); - if (m_xItemList->get_dest_row_at_pos(aPos, m_xScratchIter.get(), false) && !m_xItemList->is_selected(*m_xScratchIter)) + std::unique_ptr pIter = m_xItemList->get_dest_row_at_pos(aPos, false); + if (pIter && !m_xItemList->is_selected(*pIter)) { - m_xItemList->select(*m_xScratchIter); + m_xItemList->select(*pIter); ItemSelectHdl(*m_xItemList); } diff --git a/svx/source/form/filtnav.cxx b/svx/source/form/filtnav.cxx index f981ee0145e6..7d3d7335c685 100644 --- a/svx/source/form/filtnav.cxx +++ b/svx/source/form/filtnav.cxx @@ -1032,7 +1032,7 @@ sal_Int8 FmFilterNavigatorDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); } return nAccept; @@ -1177,11 +1177,8 @@ sal_Int8 FmFilterNavigator::AcceptDrop( const AcceptDropEvent& rEvt ) return DND_ACTION_NONE; Point aDropPos = rEvt.maPosPixel; - std::unique_ptr xDropTarget(m_xTreeView->make_iterator()); // get_dest_row_at_pos with false cause we must drop exactly "on" a node to paste a condition into it - if (!m_xTreeView->get_dest_row_at_pos(aDropPos, xDropTarget.get(), false)) - xDropTarget.reset(); - + std::unique_ptr xDropTarget = m_xTreeView->get_dest_row_at_pos(aDropPos, false); if (!xDropTarget) return DND_ACTION_NONE; @@ -1223,10 +1220,8 @@ sal_Int8 FmFilterNavigator::ExecuteDrop( const ExecuteDropEvent& rEvt ) return DND_ACTION_NONE; Point aDropPos = rEvt.maPosPixel; - std::unique_ptr xDropTarget(m_xTreeView->make_iterator()); // get_dest_row_at_pos with false cause we must drop exactly "on" a node to paste a condition into it - if (!m_xTreeView->get_dest_row_at_pos(aDropPos, xDropTarget.get(), false)) - xDropTarget.reset(); + std::unique_ptr xDropTarget = m_xTreeView->get_dest_row_at_pos(aDropPos, false); if (!xDropTarget) return DND_ACTION_NONE; @@ -1456,9 +1451,9 @@ IMPL_LINK(FmFilterNavigator, PopupMenuHdl, const CommandEvent&, rEvt, bool) std::unique_ptr xClicked; if (rEvt.IsMouseEvent()) { - xClicked = m_xTreeView->make_iterator(); aWhere = rEvt.GetMousePosPixel(); - if (!m_xTreeView->get_dest_row_at_pos(aWhere, xClicked.get(), false)) + xClicked = m_xTreeView->get_dest_row_at_pos(aWhere, false); + if (!xClicked) break; if (!m_xTreeView->is_selected(*xClicked)) diff --git a/svx/source/form/navigatortree.cxx b/svx/source/form/navigatortree.cxx index 6a329efe87fc..60c00560f59a 100644 --- a/svx/source/form/navigatortree.cxx +++ b/svx/source/form/navigatortree.cxx @@ -117,7 +117,7 @@ namespace svxform { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); } return nAccept; @@ -314,8 +314,9 @@ namespace svxform if (rEvt.IsMouseEvent()) { ptWhere = rEvt.GetMousePosPixel(); - std::unique_ptr xClickedOn(m_xTreeView->make_iterator()); - if (!m_xTreeView->get_dest_row_at_pos(ptWhere, xClickedOn.get(), false)) + std::unique_ptr xClickedOn + = m_xTreeView->get_dest_row_at_pos(ptWhere, false); + if (!xClickedOn) break; if (!m_xTreeView->is_selected(*xClickedOn)) { @@ -852,19 +853,16 @@ namespace svxform sal_Int8 NavigatorTree::AcceptDrop( const AcceptDropEvent& rEvt ) { ::Point aDropPos = rEvt.maPosPixel; - std::unique_ptr xDropTarget(m_xTreeView->make_iterator()); // get_dest_row_at_pos with false cause we must drop exactly "on" a form to paste a control into it - if (!m_xTreeView->get_dest_row_at_pos(aDropPos, xDropTarget.get(), false)) - xDropTarget.reset(); + std::unique_ptr xDropTarget + = m_xTreeView->get_dest_row_at_pos(aDropPos, false); return implAcceptDataTransfer(m_aDropTargetHelper.GetDataFlavorExVector(), rEvt.mnAction, xDropTarget.get(), true); } sal_Int8 NavigatorTree::implExecuteDataTransfer( const OControlTransferData& _rData, sal_Int8 _nAction, const ::Point& _rDropPos, bool _bDnD ) { - std::unique_ptr xDrop(m_xTreeView->make_iterator()); // get_dest_row_at_pos with false cause we must drop exactly "on" a form to paste a control into it - if (!m_xTreeView->get_dest_row_at_pos(_rDropPos, xDrop.get(), false)) - xDrop.reset(); + std::unique_ptr xDrop = m_xTreeView->get_dest_row_at_pos(_rDropPos, false); return implExecuteDataTransfer( _rData, _nAction, xDrop.get(), _bDnD ); } diff --git a/svx/source/gallery2/galbrws1.cxx b/svx/source/gallery2/galbrws1.cxx index 1bd371b5a5d2..6d02a226d4ba 100644 --- a/svx/source/gallery2/galbrws1.cxx +++ b/svx/source/gallery2/galbrws1.cxx @@ -1218,8 +1218,8 @@ sal_uInt32 GalleryBrowser::ImplGetSelectedItemId( const Point* pSelPos, Point& r { if( pSelPos ) { - std::unique_ptr xIter = mxListView->make_iterator(); - if (mxListView->get_dest_row_at_pos(*pSelPos, xIter.get(), false)) + if (std::unique_ptr xIter + = mxListView->get_dest_row_at_pos(*pSelPos, false)) nRet = mxListView->get_iter_index_in_parent(*xIter) + 1; rSelPos = *pSelPos; } diff --git a/svx/source/tbxctrls/lboxctrl.cxx b/svx/source/tbxctrls/lboxctrl.cxx index 138ff2169224..d9b42813dc76 100644 --- a/svx/source/tbxctrls/lboxctrl.cxx +++ b/svx/source/tbxctrls/lboxctrl.cxx @@ -46,7 +46,6 @@ class SvxPopupWindowListBox final : public WeldToolbarPopup { rtl::Reference m_xControl; std::unique_ptr m_xListBox; - std::unique_ptr m_xScratchIter; int m_nSelectedRows; int m_nVisRows; @@ -73,7 +72,6 @@ SvxPopupWindowListBox::SvxPopupWindowListBox(SvxUndoRedoControl* pControl, weld: : WeldToolbarPopup(pControl->getFrameInterface(), pParent, u"svx/ui/floatingundoredo.ui"_ustr, u"FloatingUndoRedo"_ustr) , m_xControl(pControl) , m_xListBox(m_xBuilder->weld_tree_view(u"treeview"_ustr)) - , m_xScratchIter(m_xListBox->make_iterator()) , m_nVisRows(10) { m_xListBox->set_selection_mode(SelectionMode::Multiple); @@ -128,16 +126,18 @@ void SvxPopupWindowListBox::UpdateRow(int nRow) IMPL_LINK(SvxPopupWindowListBox, MouseMoveHdl, const MouseEvent&, rMEvt, bool) { - if (m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), m_xScratchIter.get(), false)) - UpdateRow(m_xListBox->get_iter_index_in_parent(*m_xScratchIter)); + if (std::unique_ptr pIter + = m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), false)) + UpdateRow(m_xListBox->get_iter_index_in_parent(*pIter)); return false; } IMPL_LINK(SvxPopupWindowListBox, MousePressHdl, const MouseEvent&, rMEvt, bool) { - if (m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), m_xScratchIter.get(), false)) + if (std::unique_ptr pIter + = m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), false)) { - UpdateRow(m_xListBox->get_iter_index_in_parent(*m_xScratchIter)); + UpdateRow(m_xListBox->get_iter_index_in_parent(*pIter)); ActivateHdl(*m_xListBox); } return true; @@ -145,8 +145,9 @@ IMPL_LINK(SvxPopupWindowListBox, MousePressHdl, const MouseEvent&, rMEvt, bool) IMPL_LINK(SvxPopupWindowListBox, MouseReleaseHdl, const MouseEvent&, rMEvt, bool) { - if (m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), m_xScratchIter.get(), false)) - UpdateRow(m_xListBox->get_iter_index_in_parent(*m_xScratchIter)); + if (std::unique_ptr pIter + = m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), false)) + UpdateRow(m_xListBox->get_iter_index_in_parent(*pIter)); return true; } diff --git a/sw/source/ui/misc/glossary.cxx b/sw/source/ui/misc/glossary.cxx index efdd1329e06b..c834a13776ae 100644 --- a/sw/source/ui/misc/glossary.cxx +++ b/sw/source/ui/misc/glossary.cxx @@ -198,9 +198,8 @@ private: GroupUserData* pSrcRootData = weld::fromId(pSource->get_id(*xSelected)); GroupUserData* pDestRootData = nullptr; - std::unique_ptr xDestEntry(m_rTreeView.make_iterator()); - bool bEntry = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xDestEntry.get(), true); - if (bEntry) + if (std::unique_ptr xDestEntry + = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true)) { while (m_rTreeView.get_iter_depth(*xDestEntry)) (void)m_rTreeView.iter_parent(*xDestEntry); @@ -221,9 +220,9 @@ private: if (!pSource) return DND_ACTION_NONE; - std::unique_ptr xDestEntry(m_rTreeView.make_iterator()); - bool bEntry = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xDestEntry.get(), true); - if (!bEntry) + std::unique_ptr xDestEntry + = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true); + if (!xDestEntry) return DND_ACTION_NONE; std::unique_ptr xSelected = pSource->get_selected(); diff --git a/sw/source/uibase/sidebar/QuickFindPanel.cxx b/sw/source/uibase/sidebar/QuickFindPanel.cxx index 128ea7f81206..2b66453f5c54 100644 --- a/sw/source/uibase/sidebar/QuickFindPanel.cxx +++ b/sw/source/uibase/sidebar/QuickFindPanel.cxx @@ -296,8 +296,8 @@ IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryActivateHandler, weld::Entry&, bo IMPL_LINK(QuickFindPanel, SearchFindsListMousePressHandler, const MouseEvent&, rMEvt, bool) { - if (std::unique_ptr xEntry(m_xSearchFindsList->make_iterator()); - m_xSearchFindsList->get_dest_row_at_pos(rMEvt.GetPosPixel(), xEntry.get(), false, false)) + if (std::unique_ptr xEntry + = m_xSearchFindsList->get_dest_row_at_pos(rMEvt.GetPosPixel(), false, false)) { return m_xSearchFindsList->get_id(*xEntry)[0] == '-'; } diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx index 757e8226d928..5ae78dc29249 100644 --- a/sw/source/uibase/utlui/content.cxx +++ b/sw/source/uibase/utlui/content.cxx @@ -1396,9 +1396,9 @@ IMPL_LINK(SwContentTree, MouseMoveHdl, const MouseEvent&, rMEvt, bool) return false; if (m_eState == State::HIDDEN) return false; - if (std::unique_ptr xEntry(m_xTreeView->make_iterator()); - m_xTreeView->get_dest_row_at_pos(rMEvt.GetPosPixel(), xEntry.get(), false, false) && - !rMEvt.IsLeaveWindow()) + std::unique_ptr xEntry + = m_xTreeView->get_dest_row_at_pos(rMEvt.GetPosPixel(), false, false); + if (xEntry && !rMEvt.IsLeaveWindow()) { if (!m_xOverlayCompareEntry) m_xOverlayCompareEntry.reset(m_xTreeView->make_iterator().release()); @@ -1485,7 +1485,7 @@ sal_Int8 SwContentTreeDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); } return nAccept; @@ -1539,9 +1539,8 @@ sal_Int8 SwContentTreeDropTarget::ExecuteDrop(const ExecuteDropEvent& rEvt) sal_Int8 SwContentTree::ExecuteDrop(const ExecuteDropEvent& rEvt) { - std::unique_ptr xDropEntry(m_xTreeView->make_iterator()); - if (!m_xTreeView->get_dest_row_at_pos(rEvt.maPosPixel, xDropEntry.get(), true)) - xDropEntry.reset(); + std::unique_ptr xDropEntry + = m_xTreeView->get_dest_row_at_pos(rEvt.maPosPixel, true); if (m_nRootType == ContentTypeId::OUTLINE) { @@ -1781,16 +1780,18 @@ IMPL_LINK(SwContentTree, CommandHdl, const CommandEvent&, rCEvt, bool) grab_focus(); // select clicked entry or limit selection to root entry if needed - if (std::unique_ptr xEntry(m_xTreeView->make_iterator()); - rCEvt.IsMouseEvent() && m_xTreeView->get_dest_row_at_pos( - rCEvt.GetMousePosPixel(), xEntry.get(), false)) + if (rCEvt.IsMouseEvent()) { - // if clicked entry is not currently selected then clear selections and select it - if (!m_xTreeView->is_selected(*xEntry)) - m_xTreeView->set_cursor(*xEntry); - // if root entry is selected then clear selections and select it - else if (m_xTreeView->is_selected(0)) - m_xTreeView->set_cursor(0); + if (std::unique_ptr xEntry + = m_xTreeView->get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false)) + { + // if clicked entry is not currently selected then clear selections and select it + if (!m_xTreeView->is_selected(*xEntry)) + m_xTreeView->set_cursor(*xEntry); + // if root entry is selected then clear selections and select it + else if (m_xTreeView->is_selected(0)) + m_xTreeView->set_cursor(0); + } } UpdateContentFunctionsToolbar(); diff --git a/sw/source/uibase/utlui/glbltree.cxx b/sw/source/uibase/utlui/glbltree.cxx index 35aa93c8ad51..94ca58855700 100644 --- a/sw/source/uibase/utlui/glbltree.cxx +++ b/sw/source/uibase/utlui/glbltree.cxx @@ -171,9 +171,7 @@ sal_Int8 SwGlobalTreeDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt ) sal_Int8 nRet = DND_ACTION_NONE; weld::TreeView& rWidget = m_rTreeView.get_widget(); - std::unique_ptr xDropEntry(rWidget.make_iterator()); - if (!rWidget.get_dest_row_at_pos(rEvt.maPosPixel, xDropEntry.get(), true)) - xDropEntry.reset(); + std::unique_ptr xDropEntry = rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); if (rWidget.get_drag_source() == &rWidget) // internal drag m_rTreeView.MoveSelectionTo(xDropEntry.get()); @@ -241,7 +239,7 @@ sal_Int8 SwGlobalTreeDropTarget::AcceptDrop( const AcceptDropEvent& rEvt ) { // to enable the autoscroll when we're close to the edges weld::TreeView& rWidget = m_rTreeView.get_widget(); - rWidget.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + rWidget.get_dest_row_at_pos(rEvt.maPosPixel, true); sal_Int8 nRet = rEvt.mnAction; diff --git a/vcl/inc/qt5/QtInstanceTreeView.hxx b/vcl/inc/qt5/QtInstanceTreeView.hxx index a4a6d3ead119..0cab09b4565e 100644 --- a/vcl/inc/qt5/QtInstanceTreeView.hxx +++ b/vcl/inc/qt5/QtInstanceTreeView.hxx @@ -153,8 +153,8 @@ public: virtual void set_column_custom_renderer(int nColumn, bool bEnable) override; virtual void queue_draw() override; - virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult, bool bDnDMode, - bool bAutoScroll = true) override; + virtual std::unique_ptr get_dest_row_at_pos(const Point& rPos, bool bDnDMode, + bool bAutoScroll = true) override; virtual void unset_drag_dest_row() override; virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override; virtual weld::TreeView* get_drag_source() const override; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 112db73615e1..846ce5f150df 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1808,8 +1808,8 @@ public: SvTabListBox& getTreeView(); - virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult, bool bDnDMode, - bool bAutoScroll = true) override; + virtual std::unique_ptr get_dest_row_at_pos(const Point& rPos, bool bDnDMode, + bool bAutoScroll = true) override; virtual void unset_drag_dest_row() override; diff --git a/vcl/jsdialog/jsdialogbuilder.cxx b/vcl/jsdialog/jsdialogbuilder.cxx index ee28d30450db..7dba2811a21f 100644 --- a/vcl/jsdialog/jsdialogbuilder.cxx +++ b/vcl/jsdialog/jsdialogbuilder.cxx @@ -1984,8 +1984,8 @@ OUString JSMenu::popup_at_rect(weld::Widget* pParent, const tools::Rectangle& rR else if (weld::TreeView* pTree = dynamic_cast(pParent); pTree) { // we find position based on parent widget id and row text inside TreeView for context menu - std::unique_ptr itEntry(pTree->make_iterator()); - if (pTree->get_dest_row_at_pos(rRect.Center(), itEntry.get(), false, false)) + if (std::unique_ptr itEntry + = pTree->get_dest_row_at_pos(rRect.Center(), false, false)) sCancelId = pTree->get_text(*itEntry); else SAL_WARN("vcl", "No entry detected in JSMenu::popup_at_rect"); diff --git a/vcl/qt5/QtInstanceTreeView.cxx b/vcl/qt5/QtInstanceTreeView.cxx index d0f5cbb4cd57..44afabcb0f76 100644 --- a/vcl/qt5/QtInstanceTreeView.cxx +++ b/vcl/qt5/QtInstanceTreeView.cxx @@ -738,10 +738,10 @@ void QtInstanceTreeView::set_column_custom_renderer(int, bool) void QtInstanceTreeView::queue_draw() { assert(false && "Not implemented yet"); } -bool QtInstanceTreeView::get_dest_row_at_pos(const Point&, weld::TreeIter*, bool, bool) +std::unique_ptr QtInstanceTreeView::get_dest_row_at_pos(const Point&, bool, bool) { assert(false && "Not implemented yet"); - return false; + return {}; } void QtInstanceTreeView::unset_drag_dest_row() { assert(false && "Not implemented yet"); } diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index f490b076f994..e680bcc94347 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4835,21 +4835,18 @@ void SalInstanceTreeView::set_sort_column(int nColumn) SvTabListBox& SalInstanceTreeView::getTreeView() { return *m_xTreeView; } -bool SalInstanceTreeView::get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult, - bool bDnDMode, bool bAutoScroll) +std::unique_ptr +SalInstanceTreeView::get_dest_row_at_pos(const Point& rPos, bool bDnDMode, bool bAutoScroll) { LclTabListBox* pTreeView = !bDnDMode ? dynamic_cast(m_xTreeView.get()) : nullptr; SvTreeListEntry* pTarget = pTreeView ? pTreeView->GetTargetAtPoint(rPos, false, bAutoScroll) : m_xTreeView->GetDropTarget(rPos); - if (pTarget && pResult) - { - SalInstanceTreeIter& rSalIter = static_cast(*pResult); - rSalIter.iter = pTarget; - } + if (pTarget) + return std::make_unique(pTarget); - return pTarget != nullptr; + return {}; } void SalInstanceTreeView::unset_drag_dest_row() { m_xTreeView->UnsetDropTarget(); } diff --git a/vcl/source/weld/weldutils.cxx b/vcl/source/weld/weldutils.cxx index 386fdb742605..76237e3a635f 100644 --- a/vcl/source/weld/weldutils.cxx +++ b/vcl/source/weld/weldutils.cxx @@ -608,7 +608,7 @@ ReorderingDropTarget::ReorderingDropTarget(weld::TreeView& rTreeView) sal_Int8 ReorderingDropTarget::AcceptDrop(const AcceptDropEvent& rEvt) { // to enable the autoscroll when we're close to the edges - m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, nullptr, true); + m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true); return DND_ACTION_MOVE; } @@ -623,9 +623,9 @@ sal_Int8 ReorderingDropTarget::ExecuteDrop(const ExecuteDropEvent& rEvt) if (!xSource) return DND_ACTION_NONE; - std::unique_ptr xTarget(m_rTreeView.make_iterator()); int nTargetPos = -1; - if (m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true)) + if (std::unique_ptr xTarget + = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true)) nTargetPos = m_rTreeView.get_iter_index_in_parent(*xTarget); m_rTreeView.move_subtree(*xSource, nullptr, nTargetPos); diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index e1dbeb3f1e25..27e756b065c5 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -16026,12 +16026,13 @@ public: g_signal_handler_unblock(gtk_tree_view_get_selection(m_pTreeView), m_nChangedSignalId); } - virtual bool get_dest_row_at_pos(const Point &rPos, weld::TreeIter* pResult, bool bDnDMode, bool bAutoScroll) override + virtual std::unique_ptr get_dest_row_at_pos(const Point& rPos, bool bDnDMode, + bool bAutoScroll) override { if (rPos.X() < 0 || rPos.Y() < 0) { // short-circuit to avoid "gtk_tree_view_get_dest_row_at_pos: assertion 'drag_x >= 0'" g_assert - return false; + return {}; } const bool bAsTree = gtk_tree_view_get_enable_tree_lines(m_pTreeView); @@ -16081,10 +16082,12 @@ public: } } - if (ret && pResult) + std::unique_ptr pResult; + if (ret) { - GtkInstanceTreeIter& rGtkIter = static_cast(*pResult); - gtk_tree_model_get_iter(m_pTreeModel, &rGtkIter.iter, path); + GtkTreeIter iter; + gtk_tree_model_get_iter(m_pTreeModel, &iter, path); + pResult = std::make_unique(iter); } if (m_bInDrag && bDnDMode) @@ -16124,7 +16127,7 @@ public: } } - return ret; + return pResult; } virtual void unset_drag_dest_row() override