Set CWD when launched from Finder.

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>
bb10
Morten Johan Sorvig 2012-08-09 13:07:21 +02:00 committed by The Qt Project
parent 903bd6250a
commit 98ad8460a8
2 changed files with 17 additions and 1 deletions

View File

@ -16,6 +16,10 @@ testcocoon {
load(testcocoon)
}
mac {
LIBS_PRIVATE += -framework Cocoa
}
CONFIG += simd
QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf

View File

@ -90,6 +90,10 @@
#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];