Core: do not activate open documents entry on right click

If we activate an entry before we handle the context menu event we might
switch into another mode. For example when right clicking on a ui File.

Fixes: QTCREATORBUG-30357
Change-Id: I8de78c3a6bbd9d62e2766ccd2059ee3ee4ef0870
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
David Schulz
2024-02-29 13:17:33 +01:00
parent 3ff56b8079
commit 262dcc6643
3 changed files with 26 additions and 13 deletions

View File

@@ -59,6 +59,22 @@ public:
BaseT::keyPressEvent(event); BaseT::keyPressEvent(event);
} }
virtual bool userWantsContextMenu(const QMouseEvent *) const
{
return false;
}
void mousePressEvent(QMouseEvent *e) override
{
if (!userWantsContextMenu(e))
BaseT::mousePressEvent(e);
}
void mouseReleaseEvent(QMouseEvent *e) override
{
if (!userWantsContextMenu(e))
BaseT::mouseReleaseEvent(e);
}
}; };
class QTCREATOR_UTILS_EXPORT TreeView : public View<QTreeView> class QTCREATOR_UTILS_EXPORT TreeView : public View<QTreeView>

View File

@@ -66,6 +66,8 @@ private:
void activateEditor(const QModelIndex &index); void activateEditor(const QModelIndex &index);
void closeDocument(const QModelIndex &index); void closeDocument(const QModelIndex &index);
bool userWantsContextMenu(const QMouseEvent *) const final;
ProxyModel *m_model; ProxyModel *m_model;
}; };
@@ -138,6 +140,13 @@ void OpenEditorsWidget::closeDocument(const QModelIndex &index)
updateCurrentItem(EditorManager::currentEditor()); updateCurrentItem(EditorManager::currentEditor());
} }
bool OpenEditorsWidget::userWantsContextMenu(const QMouseEvent *e) const
{
// block activating on entry on right click otherwise we might switch into another mode
// see QTCREATORBUG-30357
return e->button() == Qt::RightButton;
}
void OpenEditorsWidget::contextMenuRequested(QPoint pos) void OpenEditorsWidget::contextMenuRequested(QPoint pos)
{ {
QMenu contextMenu; QMenu contextMenu;

View File

@@ -648,24 +648,12 @@ private:
return; return;
} }
bool userWantsContextMenu(const QMouseEvent *e) const bool userWantsContextMenu(const QMouseEvent *e) const final
{ {
// On Windows, we get additional mouse events for the item view when right-clicking, // On Windows, we get additional mouse events for the item view when right-clicking,
// causing unwanted kit activation (QTCREATORBUG-24156). Let's suppress these. // causing unwanted kit activation (QTCREATORBUG-24156). Let's suppress these.
return HostOsInfo::isWindowsHost() && e->button() == Qt::RightButton; return HostOsInfo::isWindowsHost() && e->button() == Qt::RightButton;
} }
void mousePressEvent(QMouseEvent *e) final
{
if (!userWantsContextMenu(e))
BaseTreeView::mousePressEvent(e);
}
void mouseReleaseEvent(QMouseEvent *e) final
{
if (!userWantsContextMenu(e))
BaseTreeView::mouseReleaseEvent(e);
}
}; };
class ComboBoxItem : public TreeItem class ComboBoxItem : public TreeItem