diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/salvtables.hxx | 4 | ||||
-rw-r--r-- | vcl/inc/treeglue.hxx | 25 | ||||
-rw-r--r-- | vcl/source/app/salvtables.cxx | 6 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 41 |
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; |