[gtk/gtk-3-24: 1/2] macOS: Dock "Quit" invokes "app.quit" action




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]