include/vcl/salvtables.hxx | 2 ++ include/vcl/weld.hxx | 1 + sc/source/ui/cctrl/checklistmenu.cxx | 16 ++++++++-------- vcl/source/app/salvtables.cxx | 5 +++++ vcl/unx/gtk3/gtk3gtkinst.cxx | 20 ++++++++++++++++++++ 5 files changed, 36 insertions(+), 8 deletions(-)
New commits: commit 940469ebd970465e59a337c3d2747a7648ed7ce4 Author: Caolán McNamara <[email protected]> AuthorDate: Sun Jan 19 17:52:36 2020 +0000 Commit: Szymon Kłos <[email protected]> CommitDate: Mon Nov 30 18:24:30 2020 +0100 add get_row_area for TreeView Change-Id: I0fa8e3666f6731abb831d0ba62f128614eae261c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87048 Tested-by: Jenkins Reviewed-by: Caolán McNamara <[email protected]> Reviewed-on: https://gerrit.libreoffice.org/c/core/+/106885 Tested-by: Szymon Kłos <[email protected]> Reviewed-by: Szymon Kłos <[email protected]> diff --git a/include/vcl/salvtables.hxx b/include/vcl/salvtables.hxx index 0b060ddf56a3..9673ef62c5b5 100644 --- a/include/vcl/salvtables.hxx +++ b/include/vcl/salvtables.hxx @@ -1402,6 +1402,8 @@ public: virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult) override; + virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override; + virtual TreeView* get_drag_source() const override; void set_show_expanders(bool bShow) override; diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 0d5b19aee983..248bbfcd80ed 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1024,6 +1024,7 @@ public: // for dnd virtual bool get_dest_row_at_pos(const Point& rPos, weld::TreeIter* pResult) = 0; + virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const = 0; // for dragging and dropping between TreeViews, return the active source virtual TreeView* get_drag_source() const = 0; diff --git a/sc/source/ui/cctrl/checklistmenu.cxx b/sc/source/ui/cctrl/checklistmenu.cxx index b905d5a7bba1..ad82d5f8618b 100644 --- a/sc/source/ui/cctrl/checklistmenu.cxx +++ b/sc/source/ui/cctrl/checklistmenu.cxx @@ -277,14 +277,14 @@ void ScCheckListMenuControl::launchSubMenu(bool bSetMenuPos) if (!mxMenu->get_selected(mxScratchIter.get())) return; - // tools::Rectangle aRect = mxMenu->get_row_area(*mxScratchIter); - // ScCheckListMenuControl& rSubMenuControl = pSubMenu->get_widget(); - // rSubMenuControl.StartPopupMode(aRect, (FloatWinPopupFlags::Right | FloatWinPopupFlags::GrabFocus)); - // if (bSetMenuPos) - // rSubMenuControl.setSelectedMenuItem(0, false, false); // select menu item after the popup becomes fully visible. - - // mxMenu->select(*mxScratchIter); - // rSubMenuControl.GrabFocus(); + tools::Rectangle aRect = mxMenu->get_row_area(*mxScratchIter); + ScCheckListMenuControl& rSubMenuControl = pSubMenu->get_widget(); + rSubMenuControl.StartPopupMode(aRect, (FloatWinPopupFlags::Right | FloatWinPopupFlags::GrabFocus)); + if (bSetMenuPos) + rSubMenuControl.setSelectedMenuItem(0, false); // select menu item after the popup becomes fully visible. + + mxMenu->select(*mxScratchIter); + rSubMenuControl.GrabFocus(); } IMPL_LINK_NOARG(ScCheckListMenuControl, PostPopdownHdl, void*, void) diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 822871242a42..8e63bea9c344 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4527,6 +4527,11 @@ bool SalInstanceTreeView::get_dest_row_at_pos(const Point &rPos, weld::TreeIter* return pTarget != nullptr; } +tools::Rectangle SalInstanceTreeView::get_row_area(const weld::TreeIter& rIter) const +{ + return m_xTreeView->GetBoundingRect(static_cast<const SalInstanceTreeIter&>(rIter).iter); +} + weld::TreeView* SalInstanceTreeView::get_drag_source() const { return g_DragSource; diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index c3e019b1d048..7729d0ab082b 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -10232,6 +10232,26 @@ public: return ret; } + virtual tools::Rectangle get_row_area(const weld::TreeIter& rIter) const override + { + tools::Rectangle aRet; + + const GtkInstanceTreeIter& rGtkIter = static_cast<const GtkInstanceTreeIter&>(rIter); + GtkTreePath* pPath = gtk_tree_model_get_path(m_pTreeModel, const_cast<GtkTreeIter*>(&rGtkIter.iter)); + + GdkRectangle aRect; + for (GList* pEntry = g_list_last(m_pColumns); pEntry; pEntry = g_list_previous(pEntry)) + { + GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pEntry->data); + gtk_tree_view_get_cell_area(m_pTreeView, pPath, pColumn, &aRect); + aRet.Union(tools::Rectangle(aRect.x, aRect.y, aRect.x + aRect.width, aRect.y + aRect.height)); + } + + gtk_tree_path_free(pPath); + + return aRet; + } + virtual void start_editing(const weld::TreeIter& rIter) override { GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(g_list_nth_data(m_pColumns, m_nTextView)); _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
