summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/salvtables.hxx4
-rw-r--r--vcl/inc/treeglue.hxx25
-rw-r--r--vcl/source/app/salvtables.cxx6
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx41
4 files changed, 41 insertions, 35 deletions
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 7ad7a145e8af..d6968e36d00c 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1716,8 +1716,8 @@ public:
SvTabListBox& getTreeView();
- virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult,
- bool bDnDMode) override;
+ virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult, bool bDnDMode,
+ bool bAutoScroll = true) override;
virtual void unset_drag_dest_row() override;
diff --git a/vcl/inc/treeglue.hxx b/vcl/inc/treeglue.hxx
index 4cb120d81f7f..d445a533b43f 100644
--- a/vcl/inc/treeglue.hxx
+++ b/vcl/inc/treeglue.hxx
@@ -121,26 +121,29 @@ public:
m_aModelChangedHdl.Call(this);
}
- SvTreeListEntry* GetTargetAtPoint(const Point& rPos, bool bHighLightTarget)
+ SvTreeListEntry* GetTargetAtPoint(const Point& rPos, bool bHighLightTarget, bool bScroll = true)
{
SvTreeListEntry* pOldTargetEntry = pTargetEntry;
pTargetEntry = PosOverBody(rPos) ? pImpl->GetEntry(rPos) : nullptr;
if (pOldTargetEntry != pTargetEntry)
ImplShowTargetEmphasis(pOldTargetEntry, false);
- // scroll
- if (rPos.Y() < 12)
+ if (bScroll)
{
- ImplShowTargetEmphasis(pTargetEntry, false);
- ScrollOutputArea(+1);
- }
- else
- {
- Size aSize(pImpl->GetOutputSize());
- if (rPos.Y() > aSize.Height() - 12)
+ // scroll
+ if (rPos.Y() < 12)
{
ImplShowTargetEmphasis(pTargetEntry, false);
- ScrollOutputArea(-1);
+ ScrollOutputArea(+1);
+ }
+ else
+ {
+ Size aSize(pImpl->GetOutputSize());
+ if (rPos.Y() > aSize.Height() - 12)
+ {
+ ImplShowTargetEmphasis(pTargetEntry, false);
+ ScrollOutputArea(-1);
+ }
}
}
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 39ee33de947f..733d78179500 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -5154,12 +5154,12 @@ 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 bDnDMode, bool bAutoScroll)
{
LclTabListBox* pTreeView
= !bDnDMode ? dynamic_cast<LclTabListBox*>(m_xTreeView.get()) : nullptr;
- SvTreeListEntry* pTarget
- = pTreeView ? pTreeView->GetTargetAtPoint(rPos, false) : m_xTreeView->GetDropTarget(rPos);
+ SvTreeListEntry* pTarget = pTreeView ? pTreeView->GetTargetAtPoint(rPos, false, bAutoScroll)
+ : m_xTreeView->GetDropTarget(rPos);
if (pTarget && pResult)
{
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index e523e871290d..61d3f001c6d5 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -16240,7 +16240,7 @@ public:
weld::TreeView::connect_popup_menu(rLink);
}
- virtual bool get_dest_row_at_pos(const Point &rPos, weld::TreeIter* pResult, bool bDnDMode) override
+ virtual bool get_dest_row_at_pos(const Point &rPos, weld::TreeIter* pResult, bool bDnDMode, bool bAutoScroll) override
{
if (rPos.X() < 0 || rPos.Y() < 0)
{
@@ -16311,28 +16311,31 @@ public:
gtk_tree_path_free(path);
gtk_tree_path_free(lastpath);
- // auto scroll if we're close to the edges
- GtkAdjustment* pVAdjustment = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(m_pTreeView));
- double fStep = gtk_adjustment_get_step_increment(pVAdjustment);
- if (rPos.Y() < fStep)
+ if (bAutoScroll)
{
- double fValue = gtk_adjustment_get_value(pVAdjustment) - fStep;
- if (fValue < 0)
- fValue = 0.0;
- gtk_adjustment_set_value(pVAdjustment, fValue);
- }
- else
- {
- GdkRectangle aRect;
- gtk_tree_view_get_visible_rect(m_pTreeView, &aRect);
- if (rPos.Y() > aRect.height - fStep)
+ // auto scroll if we're close to the edges
+ GtkAdjustment* pVAdjustment = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(m_pTreeView));
+ double fStep = gtk_adjustment_get_step_increment(pVAdjustment);
+ if (rPos.Y() < fStep)
{
- double fValue = gtk_adjustment_get_value(pVAdjustment) + fStep;
- double fMax = gtk_adjustment_get_upper(pVAdjustment);
- if (fValue > fMax)
- fValue = fMax;
+ double fValue = gtk_adjustment_get_value(pVAdjustment) - fStep;
+ if (fValue < 0)
+ fValue = 0.0;
gtk_adjustment_set_value(pVAdjustment, fValue);
}
+ else
+ {
+ GdkRectangle aRect;
+ gtk_tree_view_get_visible_rect(m_pTreeView, &aRect);
+ if (rPos.Y() > aRect.height - fStep)
+ {
+ double fValue = gtk_adjustment_get_value(pVAdjustment) + fStep;
+ double fMax = gtk_adjustment_get_upper(pVAdjustment);
+ if (fValue > fMax)
+ fValue = fMax;
+ gtk_adjustment_set_value(pVAdjustment, fValue);
+ }
+ }
}
return ret;