From 1e9c7b1246d0e97c47d6dca0400195774d10d0e7 Mon Sep 17 00:00:00 2001 From: Thomas Ferreira de Lima Date: Tue, 6 Mar 2018 21:43:08 -0500 Subject: [PATCH 1/4] Changing Info.plist to associate .gds files with klayout --- macbuild/Resources/Info.plist.template | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/macbuild/Resources/Info.plist.template b/macbuild/Resources/Info.plist.template index 74090cbb3..5cdd0bd83 100644 --- a/macbuild/Resources/Info.plist.template +++ b/macbuild/Resources/Info.plist.template @@ -18,6 +18,17 @@ APPL CFBundleVersion ${VERSION} + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + gds + + CFBundleTypeRole + Editor + + CFBundleSignature ???? NSPrincipalClass From c82bb445ac3727cd4bded0fd45064c6648dc204e Mon Sep 17 00:00:00 2001 From: Thomas Ferreira de Lima Date: Wed, 7 Mar 2018 11:07:29 -0500 Subject: [PATCH 2/4] testing file open event --- src/lay/lay/layApplication.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/lay/lay/layApplication.cc b/src/lay/lay/layApplication.cc index ac4f3dea4..bd39e552e 100644 --- a/src/lay/lay/layApplication.cc +++ b/src/lay/lay/layApplication.cc @@ -75,6 +75,11 @@ # include #endif +#if defined(__APPLE__) +# include +# include +#endif + namespace gsi { void make_application_decl (bool non_gui_mode); @@ -1391,6 +1396,20 @@ GuiApplication::force_update_app_menu () #endif } +#if defined(__APPLE__) +bool +GuiApplication::event(QEvent *event) +{ + if (event->type() == QEvent::FileOpen) { + QFileOpenEvent *openEvent = static_cast(event); + qDebug() << "Open file" << openEvent->file(); + } + + return QApplication::event(event); +} +#endif + + int GuiApplication::exec () { From 8ec78a99a9abfe521537fae2b96ac98e855c3980 Mon Sep 17 00:00:00 2001 From: Thomas Ferreira de Lima Date: Wed, 7 Mar 2018 12:53:29 -0500 Subject: [PATCH 3/4] open with working properly in MacOS. --- macbuild/Resources/Info.plist.template | 2 ++ macbuild/build4mac_env.pyc | Bin 0 -> 3944 bytes macbuild/build4mac_util.pyc | Bin 0 -> 4885 bytes src/lay/lay/layApplication.cc | 24 +++++++++++++++++------- src/lay/lay/layApplication.h | 11 +++++++++++ 5 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 macbuild/build4mac_env.pyc create mode 100644 macbuild/build4mac_util.pyc diff --git a/macbuild/Resources/Info.plist.template b/macbuild/Resources/Info.plist.template index 5cdd0bd83..55dcee2ad 100644 --- a/macbuild/Resources/Info.plist.template +++ b/macbuild/Resources/Info.plist.template @@ -18,6 +18,8 @@ APPL CFBundleVersion ${VERSION} + CFBundleShortVersionString + ${VERSION} CFBundleDocumentTypes diff --git a/macbuild/build4mac_env.pyc b/macbuild/build4mac_env.pyc new file mode 100644 index 0000000000000000000000000000000000000000..906f510e1be336afef6e2c376e2e682b9ba6fda4 GIT binary patch literal 3944 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 #endif -#if defined(__APPLE__) -# include -# include -#endif - namespace gsi { void make_application_decl (bool non_gui_mode); @@ -1397,12 +1392,27 @@ GuiApplication::force_update_app_menu () } #if defined(__APPLE__) +// By Thomas Lima (March 7, 2018) +// +// This event interceptor catches MacOS "Open With" event, and KLayout should respond +// similarly to the Drop event in MainWindow::dropEvent. +// +// This particular implementation always creates a new window. +// +// This was implemented with the inspiration of http://doc.qt.io/qt-5/qfileopenevent.html bool -GuiApplication::event(QEvent *event) +GuiApplication::event (QEvent *event) { if (event->type() == QEvent::FileOpen) { QFileOpenEvent *openEvent = static_cast(event); - qDebug() << "Open file" << openEvent->file(); + if (mp_mw) + { + const std::string tech = mp_mw->initial_technology(); + const std::string file = tl::to_string (openEvent->file()); + const int mode = 1; // open in new window + mp_mw->load_layout (file, tech, mode); + mp_mw->add_mru (file, tech); + } } return QApplication::event(event); diff --git a/src/lay/lay/layApplication.h b/src/lay/lay/layApplication.h index 7eceea849..e82681e2f 100644 --- a/src/lay/lay/layApplication.h +++ b/src/lay/lay/layApplication.h @@ -28,6 +28,9 @@ #include #include +#ifdef __APPLE__ +# include +#endif #include "gsi.h" @@ -438,6 +441,14 @@ public: */ void force_update_app_menu (); + /** + * @brief Handles MacOS file open + * This function is used to process the "Open With" event sent by MacOS. + */ +#ifdef __APPLE__ + bool event (QEvent *event); +#endif + protected: virtual void setup (); virtual void shutdown (); From 423fec48081c2f59ee7ea84c7df5ff9c5e1eca6e Mon Sep 17 00:00:00 2001 From: Thomas Ferreira de Lima Date: Wed, 7 Mar 2018 13:20:41 -0500 Subject: [PATCH 4/4] adding icon to .gds files --- macbuild/Resources/Info.plist.template | 2 ++ 1 file changed, 2 insertions(+) diff --git a/macbuild/Resources/Info.plist.template b/macbuild/Resources/Info.plist.template index 55dcee2ad..65fa6d47a 100644 --- a/macbuild/Resources/Info.plist.template +++ b/macbuild/Resources/Info.plist.template @@ -29,6 +29,8 @@ CFBundleTypeRole Editor + CFBundleTypeIconFile + ${ICONFILE} CFBundleSignature