From c80ec5513c7efb11b89f8a15fe91ece766f550a4 Mon Sep 17 00:00:00 2001 From: David Schulz <david.schulz@nokia.com> Date: Tue, 17 Jan 2012 15:47:28 +0100 Subject: [PATCH] fix for locator using up and down keys under mac Fixes the issue that you cannot switch elements by the up- and downkey in the locator under mac. Task-number: QTCREATORBUG-6826 Change-Id: I452bb487608fad3b32c845036939f02e9cf4b3b6 Reviewed-by: Eike Ziller <eike.ziller@nokia.com> --- src/plugins/locator/locatorwidget.cpp | 112 ++++++++++++-------------- src/plugins/locator/locatorwidget.h | 2 - 2 files changed, 53 insertions(+), 61 deletions(-) diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp index 944af8e6e8e..7b600fd5cd0 100644 --- a/src/plugins/locator/locatorwidget.cpp +++ b/src/plugins/locator/locatorwidget.cpp @@ -401,7 +401,59 @@ void LocatorWidget::updateFilterList() bool LocatorWidget::eventFilter(QObject *obj, QEvent *event) { - if (obj == m_fileLineEdit && event->type() == QEvent::FocusOut) { + if (obj == m_fileLineEdit && event->type() == QEvent::KeyPress) { + if (m_possibleToolTipRequest) + m_possibleToolTipRequest = false; + if (QToolTip::isVisible()) + QToolTip::hideText(); + + QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); + switch (keyEvent->key()) { + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_PageUp: + case Qt::Key_PageDown: + showCompletionList(); + QApplication::sendEvent(m_completionList, event); + return true; + case Qt::Key_Enter: + case Qt::Key_Return: + scheduleAcceptCurrentEntry(); + return true; + case Qt::Key_Escape: + m_completionList->hide(); + return true; + case Qt::Key_Tab: + m_completionList->next(); + return true; + case Qt::Key_Backtab: + m_completionList->previous(); + return true; + case Qt::Key_Alt: + if (keyEvent->modifiers() == Qt::AltModifier) { + m_possibleToolTipRequest = true; + return true; + } + break; + default: + break; + } + } else if (obj == m_fileLineEdit && event->type() == QEvent::KeyRelease) { + QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); + if (m_possibleToolTipRequest) { + m_possibleToolTipRequest = false; + if (m_completionList->isVisible() + && (keyEvent->key() == Qt::Key_Alt) + && (keyEvent->modifiers() == Qt::NoModifier)) { + const QModelIndex index = m_completionList->currentIndex(); + if (index.isValid()) { + QToolTip::showText(m_completionList->pos() + m_completionList->visualRect(index).topRight(), + m_locatorModel->data(index, Qt::ToolTipRole).toString()); + return true; + } + } + } + } else if (obj == m_fileLineEdit && event->type() == QEvent::FocusOut) { #if defined(Q_OS_WIN) QFocusEvent *fev = static_cast<QFocusEvent*>(event); if (fev->reason() != Qt::ActiveWindowFocusReason || @@ -432,64 +484,6 @@ bool LocatorWidget::eventFilter(QObject *obj, QEvent *event) return QWidget::eventFilter(obj, event); } -void LocatorWidget::keyPressEvent(QKeyEvent *keyEvent) -{ - if (QToolTip::isVisible()) - QToolTip::hideText(); - if (m_possibleToolTipRequest) - m_possibleToolTipRequest = false; - - switch (keyEvent->key()) { - case Qt::Key_Up: - case Qt::Key_Down: - case Qt::Key_PageUp: - case Qt::Key_PageDown: - showCompletionList(); - QApplication::sendEvent(m_completionList, keyEvent); - return; - case Qt::Key_Enter: - case Qt::Key_Return: - scheduleAcceptCurrentEntry(); - return; - case Qt::Key_Escape: - m_completionList->hide(); - return; - case Qt::Key_Tab: - m_completionList->next(); - return; - case Qt::Key_Backtab: - m_completionList->previous(); - return; - case Qt::Key_Alt: - if (keyEvent->modifiers() == Qt::AltModifier) { - m_possibleToolTipRequest = true; - return; - } - break; - default: - break; - } - QWidget::keyPressEvent(keyEvent); -} - -void LocatorWidget::keyReleaseEvent(QKeyEvent *keyEvent) -{ - if (m_possibleToolTipRequest) { - m_possibleToolTipRequest = false; - if (m_completionList->isVisible() - && (keyEvent->key() == Qt::Key_Alt) - && (keyEvent->modifiers() == Qt::NoModifier)) { - const QModelIndex index = m_completionList->currentIndex(); - if (index.isValid()) { - QToolTip::showText(m_completionList->pos() + m_completionList->visualRect(index).topRight(), - m_locatorModel->data(index, Qt::ToolTipRole).toString()); - return; - } - } - } - QWidget::keyReleaseEvent(keyEvent); -} - void LocatorWidget::showCompletionList() { const int border = m_completionList->frameWidth(); diff --git a/src/plugins/locator/locatorwidget.h b/src/plugins/locator/locatorwidget.h index 84a4e3d958c..9b0f434e97e 100644 --- a/src/plugins/locator/locatorwidget.h +++ b/src/plugins/locator/locatorwidget.h @@ -80,8 +80,6 @@ private slots: private: bool eventFilter(QObject *obj, QEvent *event); - void keyPressEvent(QKeyEvent *keyEvent); - void keyReleaseEvent(QKeyEvent *keyEvent); void showEvent(QShowEvent *e); -- GitLab