weld: Return std::unique_ptr in weld::TreeView::get_dest_row_at_pos

This is similar to

    commit 82edaf048b
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Sun Dec 21 01:36:30 2025 +0100

        weld: Return std::unique_ptr in weld::ItemView::get_selected

, but now for weld::TreeView::get_dest_row_at_pos.

See the above-mentioned commit for more background.

Change-Id: I53834d637e558e9ee3be341f653dbaed73082ebe
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196405
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
This commit is contained in:
Michael Weghorn
2026-01-03 08:11:58 +01:00
parent 4887919802
commit 6742a74e1f
29 changed files with 140 additions and 141 deletions
+3 -4
View File
@@ -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<weld::TreeIter> xEntry(rWidget.make_iterator());
bool bEntry = rWidget.get_dest_row_at_pos(rEvt.maPosPixel, xEntry.get(), true);
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xSelected = pSource->get_selected();
+6 -4
View File
@@ -523,8 +523,9 @@ IMPL_LINK(SvxMenuConfigPage, ContentContextMenuHdl, const CommandEvent&, rCEvt,
weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
// Select clicked entry
std::unique_ptr<weld::TreeIter> xIter(rTreeView.make_iterator());
if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false))
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xIter(rTreeView.make_iterator());
if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false))
std::unique_ptr<weld::TreeIter> xIter
= rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false);
if (!xIter)
return false;
rTreeView.select(*xIter);
SelectFunctionHdl(rTreeView);
@@ -868,8 +868,9 @@ IMPL_LINK(SvxToolbarConfigPage, ContentContextMenuHdl, const CommandEvent&, rCEv
weld::TreeView& rTreeView = m_xContentsListBox->get_widget();
// Select clicked entry
std::unique_ptr<weld::TreeIter> xIter(rTreeView.make_iterator());
if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false))
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xIter(rTreeView.make_iterator());
if (!rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), xIter.get(), false))
std::unique_ptr<weld::TreeIter> xIter
= rTreeView.get_dest_row_at_pos(rCEvt.GetMousePosPixel(), false);
if (!xIter)
return false;
rTreeView.select(*xIter);
SelectFunctionHdl(rTreeView);
+2 -2
View File
@@ -3222,9 +3222,9 @@ sal_Int8 SvxConfigPageFunctionDropTarget::ExecuteDrop(const ExecuteDropEvent& rE
std::unique_ptr<weld::TreeIter> xSource = m_rFunctions.get_selected();
if (!xSource)
return DND_ACTION_NONE;
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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;
@@ -496,9 +496,7 @@ std::unique_ptr<weld::TreeIter> 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;
}
+5 -4
View File
@@ -84,9 +84,9 @@ namespace dbaui
{
// check if we're a table or query container
weld::TreeView& rTreeView = m_pTreeView->GetWidget();
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> xHitEntry(rTreeView.make_iterator());
std::unique_ptr<weld::TreeIter> 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))
+5 -6
View File
@@ -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<weld::TreeIter> xDropTarget(m_xTreeView->make_iterator());
if (!m_xTreeView->get_dest_row_at_pos(aDropPos, xDropTarget.get(), true))
xDropTarget.reset();
std::unique_ptr<weld::TreeIter> xDropTarget
= m_xTreeView->get_dest_row_at_pos(aDropPos, true);
// check if drag is on child entry, which is not allowed
std::unique_ptr<weld::TreeIter> xParent;
@@ -357,8 +356,8 @@ IMPL_LINK(TreeListBox, CommandHdl, const CommandEvent&, rCEvt, bool)
::Point aPos = rCEvt.GetMousePosPixel();
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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);
@@ -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<weld::TreeIter> xEntry(m_xTreeView->make_iterator());
bool bHasDestRow = m_xTreeView->get_dest_row_at_pos(_rEvt.maPosPixel, xEntry.get(), true);
std::unique_ptr<weld::TreeIter> 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
+2 -2
View File
@@ -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<weld::TreeIter> 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;
@@ -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<weld::TreeIter> xTarget(rWidget.make_iterator());
int nTargetPos = -1;
if (rWidget.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true))
if (std::unique_ptr<weld::TreeIter> 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();
@@ -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<weld::TreeIter> xDndEffectInsertBefore(mxTreeView->make_iterator());
if (!mxTreeView->get_dest_row_at_pos(rEvt.maPosPixel, xDndEffectInsertBefore.get(), true))
xDndEffectInsertBefore.reset();
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xIter(mxTreeView->make_iterator());
if (mxTreeView->get_dest_row_at_pos(aPos, xIter.get(), false) && !mxTreeView->is_selected(*xIter))
std::unique_ptr<weld::TreeIter> xIter = mxTreeView->get_dest_row_at_pos(aPos, false);
if (xIter && !mxTreeView->is_selected(*xIter))
{
mxTreeView->unselect_all();
mxTreeView->set_cursor(*xIter);
+15 -11
View File
@@ -303,14 +303,16 @@ IMPL_LINK(SdPageObjsTLV, CommandHdl, const CommandEvent&, rCEvt, bool)
m_xTreeView->grab_focus();
// select clicked entry
if (std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> xTarget(m_rTreeView.make_iterator());
if (!m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true))
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xTarget(m_rTreeView.make_iterator());
if (!m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), false))
std::unique_ptr<weld::TreeIter> 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);
+7 -5
View File
@@ -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<weld::TreeIter> xTarget(m_xTreeBox->make_iterator());
if (!m_xTreeBox->get_dest_row_at_pos(rEvt.maPosPixel, xTarget.get(), true))
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xIter(pTreeView->make_iterator());
if (pTreeView->get_dest_row_at_pos(rPos, xIter.get(), false) && !pTreeView->is_selected(*xIter))
std::unique_ptr<weld::TreeIter> xIter = pTreeView->get_dest_row_at_pos(rPos, false);
if (xIter && !pTreeView->is_selected(*xIter))
{
pTreeView->unselect_all();
pTreeView->set_cursor(*xIter);
+3 -2
View File
@@ -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<weld::TreeIter> 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);
}
+5 -10
View File
@@ -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<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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))
+7 -9
View File
@@ -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<weld::TreeIter> xClickedOn(m_xTreeView->make_iterator());
if (!m_xTreeView->get_dest_row_at_pos(ptWhere, xClickedOn.get(), false))
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> xDrop = m_xTreeView->get_dest_row_at_pos(_rDropPos, false);
return implExecuteDataTransfer( _rData, _nAction, xDrop.get(), _bDnD );
}
+2 -2
View File
@@ -1218,8 +1218,8 @@ sal_uInt32 GalleryBrowser::ImplGetSelectedItemId( const Point* pSelPos, Point& r
{
if( pSelPos )
{
std::unique_ptr<weld::TreeIter> xIter = mxListView->make_iterator();
if (mxListView->get_dest_row_at_pos(*pSelPos, xIter.get(), false))
if (std::unique_ptr<weld::TreeIter> xIter
= mxListView->get_dest_row_at_pos(*pSelPos, false))
nRet = mxListView->get_iter_index_in_parent(*xIter) + 1;
rSelPos = *pSelPos;
}
+9 -8
View File
@@ -46,7 +46,6 @@ class SvxPopupWindowListBox final : public WeldToolbarPopup
{
rtl::Reference<SvxUndoRedoControl> m_xControl;
std::unique_ptr<weld::TreeView> m_xListBox;
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> pIter
= m_xListBox->get_dest_row_at_pos(rMEvt.GetPosPixel(), false))
UpdateRow(m_xListBox->get_iter_index_in_parent(*pIter));
return true;
}
+5 -6
View File
@@ -198,9 +198,8 @@ private:
GroupUserData* pSrcRootData = weld::fromId<GroupUserData*>(pSource->get_id(*xSelected));
GroupUserData* pDestRootData = nullptr;
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> xDestEntry(m_rTreeView.make_iterator());
bool bEntry = m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, xDestEntry.get(), true);
if (!bEntry)
std::unique_ptr<weld::TreeIter> xDestEntry
= m_rTreeView.get_dest_row_at_pos(rEvt.maPosPixel, true);
if (!xDestEntry)
return DND_ACTION_NONE;
std::unique_ptr<weld::TreeIter> xSelected = pSource->get_selected();
+2 -2
View File
@@ -296,8 +296,8 @@ IMPL_LINK_NOARG(QuickFindPanel, SearchFindEntryActivateHandler, weld::Entry&, bo
IMPL_LINK(QuickFindPanel, SearchFindsListMousePressHandler, const MouseEvent&, rMEvt, bool)
{
if (std::unique_ptr<weld::TreeIter> xEntry(m_xSearchFindsList->make_iterator());
m_xSearchFindsList->get_dest_row_at_pos(rMEvt.GetPosPixel(), xEntry.get(), false, false))
if (std::unique_ptr<weld::TreeIter> xEntry
= m_xSearchFindsList->get_dest_row_at_pos(rMEvt.GetPosPixel(), false, false))
{
return m_xSearchFindsList->get_id(*xEntry)[0] == '-';
}
+17 -16
View File
@@ -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<weld::TreeIter> xEntry(m_xTreeView->make_iterator());
m_xTreeView->get_dest_row_at_pos(rMEvt.GetPosPixel(), xEntry.get(), false, false) &&
!rMEvt.IsLeaveWindow())
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> xDropEntry(m_xTreeView->make_iterator());
if (!m_xTreeView->get_dest_row_at_pos(rEvt.maPosPixel, xDropEntry.get(), true))
xDropEntry.reset();
std::unique_ptr<weld::TreeIter> 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<weld::TreeIter> 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<weld::TreeIter> 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();
+2 -4
View File
@@ -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<weld::TreeIter> xDropEntry(rWidget.make_iterator());
if (!rWidget.get_dest_row_at_pos(rEvt.maPosPixel, xDropEntry.get(), true))
xDropEntry.reset();
std::unique_ptr<weld::TreeIter> 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;
+2 -2
View File
@@ -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<weld::TreeIter> 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;
+2 -2
View File
@@ -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<weld::TreeIter> get_dest_row_at_pos(const Point& rPos, bool bDnDMode,
bool bAutoScroll = true) override;
virtual void unset_drag_dest_row() override;
+2 -2
View File
@@ -1984,8 +1984,8 @@ OUString JSMenu::popup_at_rect(weld::Widget* pParent, const tools::Rectangle& rR
else if (weld::TreeView* pTree = dynamic_cast<weld::TreeView*>(pParent); pTree)
{
// we find position based on parent widget id and row text inside TreeView for context menu
std::unique_ptr<weld::TreeIter> itEntry(pTree->make_iterator());
if (pTree->get_dest_row_at_pos(rRect.Center(), itEntry.get(), false, false))
if (std::unique_ptr<weld::TreeIter> 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");
+2 -2
View File
@@ -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<weld::TreeIter> 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"); }
+5 -8
View File
@@ -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<weld::TreeIter>
SalInstanceTreeView::get_dest_row_at_pos(const Point& rPos, bool bDnDMode, bool bAutoScroll)
{
LclTabListBox* pTreeView
= !bDnDMode ? dynamic_cast<LclTabListBox*>(m_xTreeView.get()) : nullptr;
SvTreeListEntry* pTarget = pTreeView ? pTreeView->GetTargetAtPoint(rPos, false, bAutoScroll)
: m_xTreeView->GetDropTarget(rPos);
if (pTarget && pResult)
{
SalInstanceTreeIter& rSalIter = static_cast<SalInstanceTreeIter&>(*pResult);
rSalIter.iter = pTarget;
}
if (pTarget)
return std::make_unique<SalInstanceTreeIter>(pTarget);
return pTarget != nullptr;
return {};
}
void SalInstanceTreeView::unset_drag_dest_row() { m_xTreeView->UnsetDropTarget(); }
+3 -3
View File
@@ -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<weld::TreeIter> 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<weld::TreeIter> 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);
+9 -6
View File
@@ -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<weld::TreeIter> 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<weld::TreeIter> pResult;
if (ret)
{
GtkInstanceTreeIter& rGtkIter = static_cast<GtkInstanceTreeIter&>(*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<GtkInstanceTreeIter>(iter);
}
if (m_bInDrag && bDnDMode)
@@ -16124,7 +16127,7 @@ public:
}
}
return ret;
return pResult;
}
virtual void unset_drag_dest_row() override