From 7afc7081c1363927a79f8eb89faac248d5286cd2 Mon Sep 17 00:00:00 2001 From: Dan Winship Date: Wed, 11 Jan 2012 11:17:52 -0500 Subject: [PATCH] GtkApplication: fix/simplify OS X implementation Make the OS X implementation compile, and remove the code that was only needed to support user interaction during the quit request. https://bugzilla.gnome.org/show_bug.cgi?id=667705 --- gtk/gtkapplication.c | 44 +++++++++----------------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/gtk/gtkapplication.c b/gtk/gtkapplication.c index e9bef7b063..78c1b548e3 100644 --- a/gtk/gtkapplication.c +++ b/gtk/gtkapplication.c @@ -40,7 +40,6 @@ #include "gtkquartz-menu.h" #import #include -#include #endif #include @@ -161,10 +160,8 @@ struct _GtkApplicationPrivate GMenu *combined; GHashTable *inhibitors; - gint quit_inhibited; + gint quit_inhibit; guint next_cookie; - AppleEvent quit_event, quit_reply; - gboolean quitting; #endif }; @@ -267,7 +264,7 @@ gtk_application_menu_changed_quartz (GObject *object, GMenu *combined; combined = g_menu_new (); - g_menu_append_submenu (combined, "Application", g_application_get_app_menu (application)); + g_menu_append_submenu (combined, "Application", gtk_application_get_app_menu (application)); g_menu_append_section (combined, NULL, gtk_application_get_menubar (application)); gtk_quartz_set_main_menu (G_MENU_MODEL (combined), G_ACTION_OBSERVABLE (application->priv->muxer)); @@ -1397,33 +1394,15 @@ gtk_application_end_session (GtkApplication *application, #elif defined(GDK_WINDOWING_QUARTZ) -/* OS X implementation copied from EggSMClient */ - -static pascal OSErr -quit_requested_resumed (const AppleEvent *aevt, - AppleEvent *reply, - long refcon) -{ - GtkApplication *app = GSIZE_TO_POINTER ((gsize)refcon); - - return app->priv->quit_inhibit == 0 ? noErr : userCanceledErr; -} +/* OS X implementation copied from EggSMClient, but simplified since + * it doesn't need to interact with the user. + */ static gboolean idle_will_quit (gpointer data) { GtkApplication *app = data; - /* Resume the event with a new handler that will return - * a value to the system - */ - AEResumeTheCurrentEvent (&app->priv->quit_event, &app->priv->quit_reply, - NewAEEventHandlerUPP (quit_requested_resumed), - (long)GPOINTER_TO_SIZE (app)); - - AEDisposeDesc (&app->quit->quit_event); - AEDisposeDesc (&app->quit->quit_reply); - if (app->priv->quit_inhibit == 0) g_signal_emit (app, gtk_application_signals[QUIT], 0); @@ -1437,17 +1416,12 @@ quit_requested (const AppleEvent *aevt, { GtkApplication *app = GSIZE_TO_POINTER ((gsize)refcon); - /* FIXME AEInteractWithUser? */ - AEDuplicateDesc (aevt, &app->priv->quit_event); - AEDuplicateDesc (reply, &app->priv->quit_reply); - AESuspendTheCurrentEvent (aevt); - /* Don't emit the "quit" signal immediately, since we're * called from a weird point in the guts of gdkeventloop-quartz.c */ - g_idle_add (idle_will_quit, app); + g_idle_add_full (G_PRIORITY_DEFAULT, idle_will_quit, app, NULL); - return noErr; + return app->priv->quit_inhibit == 0 ? noErr : userCanceledErr; } static void @@ -1489,7 +1463,7 @@ void gtk_application_uninhibit (GtkApplication *application, guint cookie) { - GApplicationInhibitFlags flags; + GtkApplicationInhibitFlags flags; flags = GPOINTER_TO_UINT (g_hash_table_lookup (application->priv->inhibitors, GUINT_TO_POINTER (cookie))); @@ -1517,7 +1491,7 @@ gtk_application_is_inhibited (GtkApplication *application, gboolean gtk_application_end_session (GtkApplication *application, - GtkApplicationEndSessionStyle *style, + GtkApplicationEndSessionStyle style, gboolean request_confirmation) { static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess };