From 356b85d431fd9c90fac8de736fd913a20fcb6553 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@digia.com> Date: Wed, 20 Mar 2013 13:48:58 +0100 Subject: [PATCH] Work around issue in Qt5 that shortcut override events are posted twice Make shortcut override handling not have side effects. Task-number: QTBUG-30164 Change-Id: Ie54a31fc6539d4e509b0903983df0effa06cee12 Reviewed-by: Daniel Teske <daniel.teske@digia.com> --- src/plugins/find/findtoolbar.cpp | 28 +++++++++++++++++++++------- src/plugins/find/findtoolbar.h | 3 +++ 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/plugins/find/findtoolbar.cpp b/src/plugins/find/findtoolbar.cpp index ec4d673a697..571c193910f 100644 --- a/src/plugins/find/findtoolbar.cpp +++ b/src/plugins/find/findtoolbar.cpp @@ -285,6 +285,14 @@ void FindToolBar::installEventFilters() } } +bool FindToolBar::shouldSetFocusOnKeyEvent(QKeyEvent *event) +{ + return event->key() == Qt::Key_Escape && !event->modifiers() + && !m_findCompleter->popup()->isVisible() + && !m_replaceCompleter->popup()->isVisible() + && m_currentDocumentFind->isEnabled(); +} + bool FindToolBar::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::KeyPress) { @@ -315,13 +323,9 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event) } } else if (obj == this && event->type() == QEvent::ShortcutOverride) { QKeyEvent *ke = static_cast<QKeyEvent *>(event); - if (ke->key() == Qt::Key_Escape && !ke->modifiers() - && !m_findCompleter->popup()->isVisible() - && !m_replaceCompleter->popup()->isVisible()) { - if (setFocusToCurrentFindSupport()) { - event->accept(); - return true; - } + if (shouldSetFocusOnKeyEvent(ke)) { + event->accept(); + return true; } else if (ke->key() == Qt::Key_Space && (ke->modifiers() & Utils::HostOsInfo::controlModifier())) { event->accept(); return true; @@ -334,6 +338,16 @@ bool FindToolBar::eventFilter(QObject *obj, QEvent *event) return Utils::StyledBar::eventFilter(obj, event); } +void FindToolBar::keyPressEvent(QKeyEvent *event) +{ + if (shouldSetFocusOnKeyEvent(event)) { + if (setFocusToCurrentFindSupport()) + event->accept(); + return; + } + return Utils::StyledBar::keyPressEvent(event); +} + void FindToolBar::adaptToCandidate() { updateFindAction(); diff --git a/src/plugins/find/findtoolbar.h b/src/plugins/find/findtoolbar.h index 6a341b80b22..f8f9b3b8abe 100644 --- a/src/plugins/find/findtoolbar.h +++ b/src/plugins/find/findtoolbar.h @@ -97,6 +97,7 @@ private slots: protected: bool focusNextPrevChild(bool next); + void keyPressEvent(QKeyEvent *event); private: void installEventFilters(); @@ -115,6 +116,8 @@ private: void updateIcons(); void updateFlagMenus(); + bool shouldSetFocusOnKeyEvent(QKeyEvent *event); + FindPlugin *m_plugin; CurrentDocumentFind *m_currentDocumentFind; Ui::FindWidget m_ui; -- GitLab