From 1c5921f85a6264ff7b9be1213871d4eab8249cb1 Mon Sep 17 00:00:00 2001 From: Graham Dawes Date: Mon, 1 Jul 2019 12:43:23 +0100 Subject: [PATCH] Fix wxTreeCtrl right click and middle click events for wxQt This fixes the issue in the sample with the context menu not appearing when the user right clicks on an item. Closes https://github.com/wxWidgets/wxWidgets/pull/1379 --- src/qt/treectrl.cpp | 60 +++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/src/qt/treectrl.cpp b/src/qt/treectrl.cpp index b21b0e8e03..89325fba02 100644 --- a/src/qt/treectrl.cpp +++ b/src/qt/treectrl.cpp @@ -138,8 +138,6 @@ public: this, &wxQTreeWidget::OnCurrentItemChanged); connect(this, &QTreeWidget::itemActivated, this, &wxQTreeWidget::OnItemActivated); - connect(this, &QTreeWidget::itemClicked, - this, &wxQTreeWidget::OnItemClicked); connect(this, &QTreeWidget::itemCollapsed, this, &wxQTreeWidget::OnItemCollapsed); connect(this, &QTreeWidget::itemExpanded, @@ -160,6 +158,48 @@ public: QTreeWidget::paintEvent(event); } + virtual void mouseReleaseEvent(QMouseEvent * event) wxOVERRIDE + { + const QPoint qPos = event->pos(); + QTreeWidgetItem *item = itemAt(qPos); + if ( item != NULL ) + { + const wxPoint pos(qPos.x(), qPos.y()); + switch ( event->button() ) + { + case Qt::RightButton: + { + wxTreeEvent treeEvent(wxEVT_TREE_ITEM_RIGHT_CLICK, + GetHandler(), + wxQtConvertTreeItem(item)); + treeEvent.SetPoint(pos); + EmitEvent(treeEvent); + + wxTreeEvent menuEvent(wxEVT_TREE_ITEM_MENU, + GetHandler(), + wxQtConvertTreeItem(item)); + menuEvent.SetPoint(pos); + EmitEvent(menuEvent); + + break; + } + case Qt::MiddleButton: + { + wxTreeEvent treeEvent(wxEVT_TREE_ITEM_MIDDLE_CLICK, + GetHandler(), + wxQtConvertTreeItem(item)); + treeEvent.SetPoint(pos); + EmitEvent(treeEvent); + break; + } + default: + break; + } + } + + return wxQtEventSignalHandler::mouseReleaseEvent(event); + } + wxTextCtrl *GetEditControl() { return m_item_delegate.GetEditControl(); @@ -342,22 +382,6 @@ private: EmitEvent(event); } - void OnItemClicked(QTreeWidgetItem *item) - { - wxMouseState mouseState = wxGetMouseState(); - - wxEventType eventType; - if ( mouseState.RightIsDown() ) - eventType = wxEVT_TREE_ITEM_RIGHT_CLICK; - else if ( mouseState.MiddleIsDown() ) - eventType = wxEVT_TREE_ITEM_MIDDLE_CLICK; - else - return; - - wxTreeEvent event(eventType, GetHandler(), wxQtConvertTreeItem(item)); - EmitEvent(event); - } - void OnItemCollapsed(QTreeWidgetItem *item) { wxTreeEvent collapsingEvent(