From 13a947d119c4722461759f1aeb6b61e93e9be210 Mon Sep 17 00:00:00 2001
From: Eike Ziller <eike.ziller@theqtcompany.com>
Date: Thu, 7 May 2015 13:35:21 +0200
Subject: [PATCH] Debugger: Fix attaching to running debug server

For example when developing on Windows, cross compiling to Linux, the
result is not executable from the Windows perspective.
Reverts f2cfd3c01a2876150aa7fdc0a44adee33029f2c9 which changed the code
to use ExistingCommand to get the automatic expansion of app bundles on
OS X, and do automatic expansion of app bundles also when using path
chooser of type File. Choosing an app bundle in a path chooser of type
File would previously lead to an invalid entry in the path chooser
anyhow, because the app bundle itself is not a file.

Change-Id: Ie710c47918d2b8735009e290301ed2683e354f2c
Task-number: QTCREATORBUG-14412
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: hjk <hjk@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
---
 src/libs/utils/pathchooser.cpp           | 25 +++++++++++++++---------
 src/plugins/debugger/debuggerdialogs.cpp |  2 +-
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/libs/utils/pathchooser.cpp b/src/libs/utils/pathchooser.cpp
index 1c1a0c1bbf0..6b5c001df9b 100644
--- a/src/libs/utils/pathchooser.cpp
+++ b/src/libs/utils/pathchooser.cpp
@@ -53,6 +53,20 @@
     This class has some validation logic for embedding into QWizardPage.
 */
 
+static QString appBundleExpandedPath(const QString &path)
+{
+    if (Utils::HostOsInfo::hostOs() == Utils::OsTypeMac && path.endsWith(QLatin1String(".app"))) {
+        // possibly expand to Foo.app/Contents/MacOS/Foo
+        QFileInfo info(path);
+        if (info.isDir()) {
+            QString exePath = path + QLatin1String("/Contents/MacOS/") + info.completeBaseName();
+            if (QFileInfo(exePath).exists())
+                return exePath;
+        }
+    }
+    return path;
+}
+
 namespace Utils {
 
 // ------------------ PathValidatingLineEdit
@@ -387,20 +401,13 @@ void PathChooser::slotBrowse()
         newPath = QFileDialog::getOpenFileName(this,
                 makeDialogTitle(tr("Choose Executable")), predefined,
                 d->m_dialogFilter);
-        if (HostOsInfo::hostOs() == OsTypeMac && newPath.endsWith(QLatin1String(".app"))) {
-            // possibly expand to Foo.app/Contents/MacOS/Foo
-            QFileInfo info(newPath);
-            if (info.isDir()) {
-                QString exePath = newPath + QLatin1String("/Contents/MacOS/") + info.completeBaseName();
-                if (QFileInfo(exePath).isExecutable())
-                    newPath = exePath;
-            }
-        }
+        newPath = appBundleExpandedPath(newPath);
         break;
     case PathChooser::File: // fall through
         newPath = QFileDialog::getOpenFileName(this,
                 makeDialogTitle(tr("Choose File")), predefined,
                 d->m_dialogFilter);
+        newPath = appBundleExpandedPath(newPath);
         break;
     case PathChooser::SaveFile:
         newPath = QFileDialog::getSaveFileName(this,
diff --git a/src/plugins/debugger/debuggerdialogs.cpp b/src/plugins/debugger/debuggerdialogs.cpp
index 066323c193d..d622e6da71f 100644
--- a/src/plugins/debugger/debuggerdialogs.cpp
+++ b/src/plugins/debugger/debuggerdialogs.cpp
@@ -248,7 +248,7 @@ StartApplicationDialog::StartApplicationDialog(QWidget *parent)
     d->serverAddressEdit = new QLineEdit(this);
 
     d->localExecutablePathChooser = new PathChooser(this);
-    d->localExecutablePathChooser->setExpectedKind(PathChooser::ExistingCommand);
+    d->localExecutablePathChooser->setExpectedKind(PathChooser::File);
     d->localExecutablePathChooser->setPromptDialogTitle(tr("Select Executable"));
     d->localExecutablePathChooser->setHistoryCompleter(QLatin1String("LocalExecutable"));
 
-- 
GitLab