Browse Source

Fix crash after code completion completes.

git-svn-id: file:///var/svn/tigccpp/trunk@1241 9552661e-59e3-4036-b4f2-dbe53926924f
kevinkofler 16 years ago
parent
commit
51666168b3
2 changed files with 12 additions and 1 deletions
  1. 11 1
      ktigcc/completion.cpp
  2. 1 0
      ktigcc/completion.h

+ 11 - 1
ktigcc/completion.cpp

@@ -659,15 +659,25 @@ CompletionPopup::CompletionPopup(KTextEditor::View *parent, const QString &fileN
   connect(parent,SIGNAL(completionExecuted(KTextEditor::View*,const KTextEditor::Cursor&,KTextEditor::CodeCompletionModel*,int)),this,SLOT(slotDone()));
   KTextEditor::CodeCompletionInterface *complIFace
     =qobject_cast<KTextEditor::CodeCompletionInterface *>(parent);
+  completionModel = new CompletionModel(this,entries);
   complIFace->startCompletion(KTextEditor::Range(
                                 KTextEditor::Cursor(line,column),cursor),
-                              new CompletionModel(this,entries));
+                              completionModel);
 }
 
 void CompletionPopup::slotDone()
 {
   if (!done) {
     done=true;
+
+    // This hack forces clearing the completion model so we can free it.
+    KTextEditor::View *view=qobject_cast<KTextEditor::View *>(parent());
+    KTextEditor::CodeCompletionInterface *complIFace
+      =qobject_cast<KTextEditor::CodeCompletionInterface *>(parent());
+    KTextEditor::Cursor cursor=view->cursorPosition();
+    complIFace->startCompletion(KTextEditor::Range(cursor,cursor),NULL);
+    complIFace->abortCompletion();
+
     emit closed();
     deleteLater();
   }

+ 1 - 0
ktigcc/completion.h

@@ -131,6 +131,7 @@ class CompletionPopup : public QObject {
   private:
     bool done;
     QWidget *completionPopup;
+    CompletionModel *completionModel;
 };
 
 class ArgHintPopup : public QObject {