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