From 213b8638ed1e13f513aca93c62f927fb9dc9fa50 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Wed, 18 Nov 2009 10:31:16 +0100
Subject: [PATCH] Designer: Restrict files used for "Go to slot" to project of
 ui-file.

Reviewed-by: con
Task-number: QTCREATORBUG-245
---
 src/plugins/designer/qtcreatorintegration.cpp | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp
index 31ecc39d2b3..636627c40f8 100644
--- a/src/plugins/designer/qtcreatorintegration.cpp
+++ b/src/plugins/designer/qtcreatorintegration.cpp
@@ -47,6 +47,8 @@
 #include <extensionsystem/pluginmanager.h>
 #include <texteditor/basetexteditor.h>
 #include <texteditor/itexteditable.h>
+#include <projectexplorer/projectexplorer.h>
+#include <projectexplorer/session.h>
 
 #include <QtDesigner/QDesignerFormWindowInterface>
 
@@ -577,9 +579,22 @@ bool QtCreatorIntegration::navigateToSlot(const QString &objectName,
     const QFileInfo fi(currentUiFile);
     const QString uicedName = QLatin1String("ui_") + fi.completeBaseName() + QLatin1String(".h");
 
+    // Retrieve code model snapshot restricted to project of ui file.
+    const ProjectExplorer::Project *uiProject = ProjectExplorer::ProjectExplorerPlugin::instance()->session()->projectForFile(currentUiFile);
+    if (!uiProject) {
+        *errorMessage = tr("Internal error: No project could be found for %1.").arg(currentUiFile);
+        return false;
+    }
+    CPlusPlus::Snapshot docTable = cppModelManagerInstance()->snapshot();
+    for  (CPlusPlus::Snapshot::iterator it = docTable.begin(); it != docTable.end(); ) {
+        const ProjectExplorer::Project *project = ProjectExplorer::ProjectExplorerPlugin::instance()->session()->projectForFile(it.key());
+        if (project == uiProject) {
+            ++it;
+        } else {
+            it = docTable.erase(it);
+        }
+    }
     // take all docs, find the ones that include the ui_xx.h.
-
-    const CPlusPlus::Snapshot docTable = cppModelManagerInstance()->snapshot();
     QList<Document::Ptr> docList = findDocumentsIncluding(docTable, uicedName, true); // change to false when we know the absolute path to generated ui_<>.h file
 
     if (Designer::Constants::Internal::debug)
-- 
GitLab