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:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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] == '-';
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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"); }
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user