From d37771d7dd115dc7cf92fbe8d81177327c2cc1a3 Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Fri, 19 Mar 2010 19:17:02 +0100
Subject: [PATCH] Fix QTCREATORBUG-1

Do some focus handling hacks on windows (only)

Reviewed-by: jbache
---
 src/plugins/locator/locatorwidget.cpp | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/plugins/locator/locatorwidget.cpp b/src/plugins/locator/locatorwidget.cpp
index 0cd0ddfbd11..8f3458b3a54 100644
--- a/src/plugins/locator/locatorwidget.cpp
+++ b/src/plugins/locator/locatorwidget.cpp
@@ -102,6 +102,13 @@ public:
     void updatePreferredSize();
     QSize preferredSize() const { return m_preferredSize; }
 
+#if defined(Q_OS_WIN)
+    void focusOutEvent (QFocusEvent * event)  {
+        if (event->reason() == Qt::ActiveWindowFocusReason)
+            hide();
+    }
+#endif
+
 private:
     QSize m_preferredSize;
 };
@@ -249,7 +256,6 @@ void CompletionList::updatePreferredSize()
     //header()->setStretchLastSection(true);
 }
 
-
 // =========== LocatorWidget ===========
 
 LocatorWidget::LocatorWidget(LocatorPlugin *qop) :
@@ -344,7 +350,12 @@ bool LocatorWidget::eventFilter(QObject *obj, QEvent *event)
             break;
         }
     } else if (obj == m_fileLineEdit && event->type() == QEvent::FocusOut) {
-        m_completionList->hide();
+#if defined(Q_OS_WIN)
+        QFocusEvent *fev = static_cast<QFocusEvent*>(event);
+        if (fev->reason() != Qt::ActiveWindowFocusReason ||
+            (fev->reason() == Qt::ActiveWindowFocusReason && !m_completionList->isActiveWindow()))
+#endif
+            m_completionList->hide();
     } else if (obj == m_fileLineEdit && event->type() == QEvent::FocusIn) {
         showPopup();
     } else if (obj == this && event->type() == QEvent::ShortcutOverride) {
-- 
GitLab