diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-12-08 15:09:24 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-12-08 17:37:54 +0100 |
commit | f68ee0c6fca2d0d1be0c9409ae89e46736190d9c (patch) | |
tree | f618bd9a4e4f919710960e758ecbb9054ffe5428 /vcl | |
parent | c92c0776829aaa04b924bf970396a312994af8d0 (diff) |
only autopopup on mouse hover, not keyboard traversal
Change-Id: I4ec5c5c1d5a450a0d8531907da85216000cd6c4a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126547
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/salvtables.hxx | 4 | ||||
-rw-r--r-- | vcl/source/app/salvtables.cxx | 2 | ||||
-rw-r--r-- | vcl/source/treelist/svimpbox.cxx | 4 | ||||
-rw-r--r-- | vcl/source/treelist/treelistbox.cxx | 1 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 16 |
5 files changed, 26 insertions, 1 deletions
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index b91ccb26cb7f..37c5930e4933 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1708,7 +1708,9 @@ public: virtual void vadjustment_set_value(int nValue) override; - void set_show_expanders(bool bShow) override; + virtual void set_show_expanders(bool bShow) override; + + virtual bool changed_by_hover() const override; virtual ~SalInstanceTreeView() override; }; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 78148cd10ea8..f0a2f9f7a6f4 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -4904,6 +4904,8 @@ void SalInstanceTreeView::set_show_expanders(bool bShow) m_xTreeView->set_property("show-expanders", OUString::boolean(bShow)); } +bool SalInstanceTreeView::changed_by_hover() const { return m_xTreeView->IsSelectDueToHover(); } + SalInstanceTreeView::~SalInstanceTreeView() { LclHeaderTabListBox* pHeaderBox = dynamic_cast<LclHeaderTabListBox*>(m_xTreeView.get()); diff --git a/vcl/source/treelist/svimpbox.cxx b/vcl/source/treelist/svimpbox.cxx index af40a630e698..fd3f43263c45 100644 --- a/vcl/source/treelist/svimpbox.cxx +++ b/vcl/source/treelist/svimpbox.cxx @@ -2048,7 +2048,11 @@ void SvImpLBox::MouseMove( const MouseEvent& rMEvt) if (!pEntry) m_pView->SelectAll(false); else if (!m_pView->IsSelected(pEntry) && IsSelectable(pEntry)) + { + m_pView->mbSelectingByHover = true; m_pView->Select(pEntry); + m_pView->mbSelectingByHover = false; + } } } diff --git a/vcl/source/treelist/treelistbox.cxx b/vcl/source/treelist/treelistbox.cxx index f8cfaaf6a311..2c48095e0f6b 100644 --- a/vcl/source/treelist/treelistbox.cxx +++ b/vcl/source/treelist/treelistbox.cxx @@ -397,6 +397,7 @@ SvTreeListBox::SvTreeListBox(vcl::Window* pParent, WinBits nWinStyle) : mbQuickSearch(false), mbActivateOnSingleClick(false), mbHoverSelection(false), + mbSelectingByHover(false), mnClicksToToggle(0), //at default clicking on a row won't toggle its default checkbox eSelMode(SelectionMode::NONE), nMinWidthInChars(0), diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 760c9a45652f..6f4c47815744 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -13263,6 +13263,7 @@ private: std::vector<int> m_aSavedSortColumns; bool m_bWorkAroundBadDragRegion; bool m_bInDrag; + bool m_bChangedByMouse; gint m_nTextCol; gint m_nTextView; gint m_nImageCol; @@ -13297,6 +13298,14 @@ private: //has been processed if (m_pChangeEvent) Application::RemoveUserEvent(m_pChangeEvent); + +#if !GTK_CHECK_VERSION(4, 0, 0) + GdkEvent *pEvent = gtk_get_current_event(); + m_bChangedByMouse = pEvent && categorizeEvent(pEvent) == VclInputFlags::MOUSE; +#else + //TODO maybe iterate over gtk_widget_observe_controllers looking for a motion controller +#endif + m_pChangeEvent = Application::PostUserEvent(LINK(this, GtkInstanceTreeView, async_signal_changed)); } @@ -13959,6 +13968,7 @@ public: , m_pTreeModel(gtk_tree_view_get_model(m_pTreeView)) , m_bWorkAroundBadDragRegion(false) , m_bInDrag(false) + , m_bChangedByMouse(false) , m_nTextCol(-1) , m_nTextView(-1) , m_nImageCol(-1) @@ -15758,6 +15768,11 @@ public: gtk_tree_view_set_show_expanders(m_pTreeView, bShow); } + virtual bool changed_by_hover() const override + { + return m_bChangedByMouse; + } + virtual ~GtkInstanceTreeView() override { if (m_pChangeEvent) @@ -15813,6 +15828,7 @@ IMPL_LINK_NOARG(GtkInstanceTreeView, async_signal_changed, void*, void) { m_pChangeEvent = nullptr; signal_changed(); + m_bChangedByMouse = false; } IMPL_LINK_NOARG(GtkInstanceTreeView, async_stop_cell_editing, void*, void) |