Set CWD when launched from Finder.
authorMorten Johan Sorvig <morten.sorvig@nokia.com>
Thu, 9 Aug 2012 11:07:21 +0000 (13:07 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 2 Oct 2012 11:22:49 +0000 (13:22 +0200)
Like Qt 4. Use the presence of the "-psn_" command-
line argument to detect Finder launches.

Link QtGui against the Cocoa framework due to CFBundle
usage.

Change-Id: I947ae53462072fbdb23afcc0a13ce6b26d02c191
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@digia.com>
src/gui/gui.pro
src/gui/kernel/qguiapplication.cpp

index cab44f8..d9d2aae 100644 (file)
@@ -16,6 +16,10 @@ testcocoon {
     load(testcocoon)
 }
 
+mac {
+    LIBS_PRIVATE += -framework Cocoa
+}
+
 CONFIG += simd
 
 QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf
index 419403d..46e7334 100644 (file)
 #include <QtGui/QClipboard>
 #endif
 
+#ifdef Q_OS_MAC
+#  include "private/qcore_mac_p.h"
+#endif
+
 QT_BEGIN_NAMESPACE
 
 Q_GUI_EXPORT bool qt_is_gui_used = true;
@@ -868,7 +872,15 @@ void QGuiApplicationPrivate::init()
             QGuiApplication::setLayoutDirection(Qt::RightToLeft);
 #ifdef Q_OS_MAC
         } else if (arg.startsWith("-psn_")) {
-            // eat "-psn_xxxx" on Mac
+            // eat "-psn_xxxx" on Mac, which is passed when starting an app from Finder.
+            // special hack to change working directory (for an app bundle) when running from finder
+            if (QDir::currentPath() == QLatin1String("/")) {
+                QCFType<CFURLRef> bundleURL(CFBundleCopyBundleURL(CFBundleGetMainBundle()));
+                QString qbundlePath = QCFString(CFURLCopyFileSystemPath(bundleURL,
+                                                                        kCFURLPOSIXPathStyle));
+                if (qbundlePath.endsWith(QLatin1String(".app")))
+                    QDir::setCurrent(qbundlePath.section(QLatin1Char('/'), 0, -2));
+            }
 #endif
         } else {
             argv[j++] = argv[i];