From bfed87f9c40a6c52a9f8141dd7b4cdcbe0f97abe Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 1 Aug 2011 12:20:08 +0200 Subject: [PATCH] Avoid multiple context menus popping up. On Mac in debug mode, right-clicking on extra text area would first open the markers menu, and after that the menu where you select which debug widgets to show (like Stack or Locals and Expressions). Opening the markers menu in a context menu event on the extra area is both the more sensible thing to do, and works around the Mac inconsistency. Task-number: QTCREATORBUG-4699 Change-Id: I38efaffac80a98773deeeada3d0e3ef4f872c03b Reviewed-on: http://codereview.qt.nokia.com/2434 Reviewed-by: Qt Sanity Bot Reviewed-by: Fawzi Mohamed --- src/plugins/texteditor/basetexteditor.cpp | 23 ++++++++++++++++------- src/plugins/texteditor/basetexteditor.h | 1 + 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index a14afe32540..32ceaf218c0 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -145,6 +145,9 @@ protected: void leaveEvent(QEvent *event){ textEdit->extraAreaLeaveEvent(event); } + void contextMenuEvent(QContextMenuEvent *event) { + textEdit->extraAreaContextMenuEvent(event); + } void wheelEvent(QWheelEvent *event) { QCoreApplication::sendEvent(textEdit->viewport(), event); @@ -4191,6 +4194,19 @@ void BaseTextEditorWidget::extraAreaLeaveEvent(QEvent *) extraAreaMouseEvent(&me); } +void BaseTextEditorWidget::extraAreaContextMenuEvent(QContextMenuEvent *e) +{ + QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y())); + if (d->m_marksVisible) { + QMenu * contextMenu = new QMenu(this); + emit editor()->markContextMenuRequested(editor(), cursor.blockNumber() + 1, contextMenu); + if (!contextMenu->isEmpty()) + contextMenu->exec(e->globalPos()); + delete contextMenu; + e->accept(); + } +} + void BaseTextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) { QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y())); @@ -4247,13 +4263,6 @@ void BaseTextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) } else { d->extraAreaToggleMarkBlockNumber = cursor.blockNumber(); } - } else if (d->m_marksVisible && e->button() == Qt::RightButton) { - QMenu * contextMenu = new QMenu(this); - emit editor()->markContextMenuRequested(editor(), cursor.blockNumber() + 1, contextMenu); - if (!contextMenu->isEmpty()) - contextMenu->exec(e->globalPos()); - delete contextMenu; - e->accept(); } } else if (d->extraAreaSelectionAnchorBlockNumber >= 0) { QTextCursor selection = cursor; diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index ab64861b305..02a7b49fae1 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -369,6 +369,7 @@ public: virtual int extraAreaWidth(int *markWidthPtr = 0) const; virtual void extraAreaPaintEvent(QPaintEvent *); virtual void extraAreaLeaveEvent(QEvent *); + virtual void extraAreaContextMenuEvent(QContextMenuEvent *); virtual void extraAreaMouseEvent(QMouseEvent *); const TabSettings &tabSettings() const;