summaryrefslogtreecommitdiffstats
path: root/src/inkscape-application.cpp
diff options
context:
space:
mode:
authorThomas Holder <thomas@thomas-holder.de>2019-06-22 15:52:47 +0000
committerThomas Holder <thomas@thomas-holder.de>2019-06-22 15:52:47 +0000
commit9adaf7a8bdfe7b800fa5be3e46f7950dd6b7dfbb (patch)
treeaccf83a3e1407e394a3e58f59b58f226e905f3d6 /src/inkscape-application.cpp
parentfix inbox#537 macOS Window menu (diff)
downloadinkscape-9adaf7a8bdfe7b800fa5be3e46f7950dd6b7dfbb.tar.gz
inkscape-9adaf7a8bdfe7b800fa5be3e46f7950dd6b7dfbb.zip
fix inbox#595 macOS NSApplicationBlockTermination
Diffstat (limited to 'src/inkscape-application.cpp')
-rw-r--r--src/inkscape-application.cpp41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/inkscape-application.cpp b/src/inkscape-application.cpp
index fb0485719..789ae5c94 100644
--- a/src/inkscape-application.cpp
+++ b/src/inkscape-application.cpp
@@ -596,6 +596,7 @@ ConcreteInkscapeApplication<Gio::Application>::on_startup2()
#ifdef GDK_WINDOWING_QUARTZ
static gboolean osx_openfile_callback(GtkosxApplication *, gchar const *,
ConcreteInkscapeApplication<Gtk::Application> *);
+static gboolean osx_quit_callback(GtkosxApplication *, ConcreteInkscapeApplication<Gtk::Application> *);
#endif
template<>
@@ -644,6 +645,7 @@ ConcreteInkscapeApplication<Gtk::Application>::on_startup2()
#ifdef GDK_WINDOWING_QUARTZ
GtkosxApplication *osxapp = gtkosx_application_get();
g_signal_connect(G_OBJECT(osxapp), "NSApplicationOpenFile", G_CALLBACK(osx_openfile_callback), this);
+ g_signal_connect(G_OBJECT(osxapp), "NSApplicationBlockTermination", G_CALLBACK(osx_quit_callback), this);
#endif
}
@@ -740,20 +742,6 @@ ConcreteInkscapeApplication<Gtk::Application>::create_window(const Glib::RefPtr<
return (desktop); // Temp: Need to track desktop for shell mode.
}
-#ifdef GDK_WINDOWING_QUARTZ
-/**
- * On macOS, handle dropping files on Inkscape.app icon and "Open With" file association.
- */
-static gboolean osx_openfile_callback(GtkosxApplication *osxapp, gchar const *path,
- ConcreteInkscapeApplication<Gtk::Application> *app)
-{
- auto ptr = Gio::File::create_for_path(path);
- g_return_val_if_fail(ptr, false);
- app->create_window(ptr);
- return true;
-}
-#endif
-
/** No need to destroy window if T is Gio::Application.
*/
template<class T>
@@ -1374,6 +1362,31 @@ ConcreteInkscapeApplication<Gtk::Application>::on_quit()
quit();
}
+// ======================== macOS =============================
+
+#ifdef GDK_WINDOWING_QUARTZ
+/**
+ * On macOS, handle dropping files on Inkscape.app icon and "Open With" file association.
+ */
+static gboolean osx_openfile_callback(GtkosxApplication *osxapp, gchar const *path,
+ ConcreteInkscapeApplication<Gtk::Application> *app)
+{
+ auto ptr = Gio::File::create_for_path(path);
+ g_return_val_if_fail(ptr, false);
+ app->create_window(ptr);
+ return true;
+}
+
+/**
+ * Handle macOS terminating the application
+ */
+static gboolean osx_quit_callback(GtkosxApplication *, ConcreteInkscapeApplication<Gtk::Application> *app)
+{
+ app->destroy_all();
+ return true;
+}
+#endif
+
template class ConcreteInkscapeApplication<Gio::Application>;
template class ConcreteInkscapeApplication<Gtk::Application>;