[gtk/gtk-3-24: 1/2] macOS: Dock "Quit" invokes "app.quit" action
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/gtk-3-24: 1/2] macOS: Dock "Quit" invokes "app.quit" action
- Date: Wed, 29 Dec 2021 14:28:49 +0000 (UTC)
commit cbd9715c3ce2f4887948e397e32cfd6773ee29d6
Author: Thomas Holder <thomas thomas-holder de>
Date: Wed Dec 29 13:13:21 2021 +0100
macOS: Dock "Quit" invokes "app.quit" action
Allows the application to handle "Dock icon > Quit" the same as
"Application menu > Quit".
Requires GtkApplication's `register-session` property.
Suitable replacement for gtk-mac-integration's
`NSApplicationBlockTermination` signal.
gtk/gtkapplication-quartz.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/gtk/gtkapplication-quartz.c b/gtk/gtkapplication-quartz.c
index f614dea296..efa88b4b5d 100644
--- a/gtk/gtkapplication-quartz.c
+++ b/gtk/gtkapplication-quartz.c
@@ -80,13 +80,19 @@ G_DEFINE_TYPE (GtkApplicationImplQuartz, gtk_application_impl_quartz, GTK_TYPE_A
-(NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication *)sender
{
- /* We have no way to give our message other than to pop up a dialog
- * ourselves, which we should not do since the OS will already show
- * one when we return NSTerminateNow.
- *
- * Just let the OS show the generic message...
- */
- return quartz->quit_inhibit == 0 ? NSTerminateNow : NSTerminateCancel;
+ const gchar *quit_action_name = "quit";
+ GActionGroup *action_group = G_ACTION_GROUP (quartz->impl.application);
+
+ if (quartz->quit_inhibit != 0)
+ return NSTerminateCancel;
+
+ if (g_action_group_has_action (action_group, quit_action_name))
+ {
+ g_action_group_activate_action (action_group, quit_action_name, NULL);
+ return NSTerminateCancel;
+ }
+
+ return NSTerminateNow;
}
-(void)application:(NSApplication *)theApplication openFiles:(NSArray *)filenames
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]