From 80c5ea1a99e0c7794245e53175c949597315c96f Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 27 Jul 2011 13:47:17 +0200 Subject: Document support for Linguist on Mac. Fixes dragging documents on Linguist dock icon, double clicking document in Finder, and the "open" terminal command. Task-number: QTBUG-20194 Reviewed-by: Oswald Buddenhagen --- tools/linguist/linguist/Info_mac.plist | 60 ++++++++++++++++++++++++++++++++++ tools/linguist/linguist/main.cpp | 58 ++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/tools/linguist/linguist/Info_mac.plist b/tools/linguist/linguist/Info_mac.plist index b11f493..b37a43b 100644 --- a/tools/linguist/linguist/Info_mac.plist +++ b/tools/linguist/linguist/Info_mac.plist @@ -14,5 +14,65 @@ ???? CFBundleExecutable Linguist + + CFBundleDocumentTypes + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + qph + + CFBundleTypeName + Qt Linguist 'Phrase Book' + LSHandlerRank + Default + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + ts + + CFBundleTypeName + Qt Translation Source + LSHandlerRank + Default + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + po + + CFBundleTypeName + GNU Gettext Localization File + LSHandlerRank + Default + + + CFBundleTypeRole + Editor + CFBundleTypeIconFile + linguist.icns + CFBundleTypeExtensions + + xlf + + CFBundleTypeName + XLIFF Localization File + LSHandlerRank + Default + + diff --git a/tools/linguist/linguist/main.cpp b/tools/linguist/linguist/main.cpp index a137f36..ba45613 100644 --- a/tools/linguist/linguist/main.cpp +++ b/tools/linguist/linguist/main.cpp @@ -54,8 +54,54 @@ #include #include +#ifdef Q_WS_MAC +#include +#include +#endif // Q_WS_MAC + QT_USE_NAMESPACE +#ifdef Q_WS_MAC +class ApplicationEventFilter : public QObject +{ + Q_OBJECT + +public: + ApplicationEventFilter() + : m_mainWindow(0) + { + } + + void setMainWindow(MainWindow *mw) + { + m_mainWindow = mw; + if (!m_filesToOpen.isEmpty() && m_mainWindow) { + m_mainWindow->openFiles(m_filesToOpen); + m_filesToOpen.clear(); + } + } + +protected: + bool eventFilter(QObject *object, QEvent *event) + { + if (object == qApp && event->type() == QEvent::FileOpen) { + QFileOpenEvent *e = static_cast(event); + QString file = e->url().toLocalFile(); + if (!m_mainWindow) + m_filesToOpen << file; + else + m_mainWindow->openFiles(QStringList() << file); + return true; + } + return QObject::eventFilter(object, event); + } + +private: + MainWindow *m_mainWindow; + QStringList m_filesToOpen; +}; +#endif // Q_WS_MAC + int main(int argc, char **argv) { Q_INIT_RESOURCE(linguist); @@ -63,6 +109,11 @@ int main(int argc, char **argv) QApplication app(argc, argv); QApplication::setOverrideCursor(Qt::WaitCursor); +#ifdef Q_WS_MAC + ApplicationEventFilter eventFilter; + app.installEventFilter(&eventFilter); +#endif // Q_WS_MAC + QStringList files; QString resourceDir = QLibraryInfo::location(QLibraryInfo::TranslationsPath); QStringList args = app.arguments(); @@ -111,6 +162,9 @@ int main(int argc, char **argv) splash->show(); MainWindow mw; +#ifdef Q_WS_MAC + eventFilter.setMainWindow(&mw); +#endif // Q_WS_MAC mw.show(); splash->finish(&mw); QApplication::restoreOverrideCursor(); @@ -119,3 +173,7 @@ int main(int argc, char **argv) return app.exec(); } + +#ifdef Q_WS_MAC +#include "main.moc" +#endif // Q_WS_MAC -- cgit v0.12