From e2925540675b3c723f46f4f6a21a0cbf3dff26ad Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Fri, 20 Nov 2009 15:07:10 +0100
Subject: [PATCH] Fixed possible crash when using tab to complete (Qt/Carbon
 only).

Task-number: QTCREATORBUG-199
Reviewed-by: thorbjorn
---
 src/plugins/texteditor/completionwidget.cpp | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/plugins/texteditor/completionwidget.cpp b/src/plugins/texteditor/completionwidget.cpp
index e4f7c97b80e..7cdbac8577d 100644
--- a/src/plugins/texteditor/completionwidget.cpp
+++ b/src/plugins/texteditor/completionwidget.cpp
@@ -139,7 +139,16 @@ bool CompletionWidget::event(QEvent *e)
 
     bool forwardKeys = true;
     if (e->type() == QEvent::FocusOut) {
-        closeList();
+        QModelIndex index;
+#if defined(Q_OS_DARWIN) && ! defined(QT_MAC_USE_COCOA)
+        QFocusEvent *fe = static_cast<QFocusEvent *>(e);
+        if (fe->reason() == Qt::OtherFocusReason) {
+            // Qt/carbon workaround
+            // focus out is received before the key press event.
+            index = currentIndex();
+        }
+#endif
+        closeList(index);
         return true;
     } else if (e->type() == QEvent::KeyPress) {
         QKeyEvent *ke = static_cast<QKeyEvent *>(e);
@@ -153,7 +162,8 @@ bool CompletionWidget::event(QEvent *e)
         case Qt::Key_Tab:
         case Qt::Key_Return:
             //independently from style, accept current entry if return is pressed
-            closeList(currentIndex());
+            if (qApp->focusWidget() == this)
+                closeList(currentIndex());
             return true;
         case Qt::Key_Up:
             if (currentIndex().row() == 0) {
-- 
GitLab