X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkapplication.c;h=c82577723712f590e6a5ad42044396d4def5e26d;hb=9d0febc9a64a5bfb0fcfc3a88de4757f6c1ff090;hp=110901575ccf178f7d37f475ac0945225cfb1616;hpb=e7d6400149e05d6f9643c33292b5e9d18bfb6b53;p=~andy%2Fgtk diff --git a/gtk/gtkapplication.c b/gtk/gtkapplication.c index 110901575..c82577723 100644 --- a/gtk/gtkapplication.c +++ b/gtk/gtkapplication.c @@ -12,9 +12,7 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. + * License along with this library. If not, see . * * Author: Ryan Lortie */ @@ -30,8 +28,10 @@ #include #include "gtkapplicationprivate.h" +#include "gtkclipboard.h" #include "gtkmarshalers.h" #include "gtkmain.h" +#include "gtkrecentmanager.h" #include "gtkaccelmapprivate.h" #include "gactionmuxer.h" #include "gtkintl.h" @@ -108,12 +108,6 @@ * property) and offers various functionality related to the session * life-cycle. * - * An application can be informed when the session is about to end - * by connecting to the #GtkApplication::quit signal. - * - * An application can request the session to be ended by calling - * gtk_application_end_session(). - * * An application can block various ways to end the session with * the gtk_application_inhibit() function. Typical use cases for * this kind of inhibiting are long-running, uninterruptible operations, @@ -126,7 +120,6 @@ enum { WINDOW_ADDED, WINDOW_REMOVED, - QUIT, LAST_SIGNAL }; @@ -464,6 +457,12 @@ gtk_application_shutdown (GApplication *application) gtk_application_shutdown_quartz (GTK_APPLICATION (application)); #endif + /* Try storing all clipboard data we have */ + _gtk_clipboard_store_all (); + + /* Synchronize the recent manager singleton */ + _gtk_recent_manager_sync (); + G_APPLICATION_CLASS (gtk_application_parent_class) ->shutdown (application); } @@ -675,13 +674,6 @@ gtk_application_set_property (GObject *object, } } -static void -gtk_application_quit (GtkApplication *app) -{ - /* we are asked to quit, so don't linger */ - g_application_set_inactivity_timeout (G_APPLICATION (app), 0); -} - static void gtk_application_finalize (GObject *object) { @@ -712,7 +704,6 @@ gtk_application_class_init (GtkApplicationClass *class) class->window_added = gtk_application_window_added; class->window_removed = gtk_application_window_removed; - class->quit = gtk_application_quit; g_type_class_add_private (class, sizeof (GtkApplicationPrivate)); @@ -751,38 +742,10 @@ gtk_application_class_init (GtkApplicationClass *class) g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, GTK_TYPE_WINDOW); - /** - * GtkApplication::quit: - * @application: the #GtkApplication - * - * Emitted when the session manager wants the application to quit - * (generally because the user is logging out). The application - * should exit as soon as possible after receiving this signal; if - * it does not, the session manager may choose to forcibly kill it. - * - * Normally, an application would only be sent a ::quit if there - * are no inhibitors (see gtk_application_inhibit()). - * However, this is not guaranteed; in some situations the - * session manager may decide to end the session without giving - * applications a chance to object. - * - * To receive this signal, you need to set the - * #GtkApplication:register-session property - * when creating the application object. - * - * Since: 3.4 - */ - gtk_application_signals[QUIT] = - g_signal_new ("quit", GTK_TYPE_APPLICATION, G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GtkApplicationClass, quit), - NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); - /** * GtkApplication:register-session: * - * Set this property to %TRUE to register with the session manager - * and receive the #GtkApplication::quit signal when the session - * is about to end. + * Set this property to %TRUE to register with the session manager. * * Since: 3.4 */ @@ -824,7 +787,7 @@ gtk_application_class_init (GtkApplicationClass *class) * Note that commandline arguments are not passed to gtk_init(). * All GTK+ functionality that is available via commandline arguments * can also be achieved by setting suitable environment variables - * such as G_DEBUG, so this should not be a big + * such as G_DEBUG, so this should not be a big * problem. If you absolutely must support GTK+ commandline arguments, * you can explicitly call gtk_init() before creating the application * instance. @@ -1224,13 +1187,13 @@ client_proxy_signal (GDBusProxy *proxy, g_debug ("Received EndSession"); gtk_application_quit_response (app, TRUE, NULL); unregister_client (app); - g_signal_emit (app, gtk_application_signals[QUIT], 0); + g_application_quit (G_APPLICATION (app)); } else if (strcmp (signal_name, "Stop") == 0) { g_debug ("Received Stop"); unregister_client (app); - g_signal_emit (app, gtk_application_signals[QUIT], 0); + g_application_quit (G_APPLICATION (app)); } } @@ -1491,67 +1454,6 @@ gtk_application_is_inhibited (GtkApplication *application, return inhibited; } -/** - * GtkApplicationEndSessionStyle: - * @GTK_APPLICATION_LOGOUT: End the session by logging out - * @GTK_APPLICATION_REBOOT: Restart the computer - * @GTK_APPLICATION_SHUTDOWN: Shut the computer down - * - * Different ways to end a user session, for use with - * gtk_application_end_session(). - */ - -/** - * gtk_application_end_session: - * @application: the #GtkApplication - * @style: the desired kind of session end - * @request_confirmation: whether or not the user should get a chance - * to confirm the action - * - * Requests that the session manager end the current session. - * @style indicates how the session should be ended, and - * @request_confirmation indicates whether or not the user should be - * given a chance to confirm the action. Both of these parameters are - * merely hints though; the session manager may choose to ignore them. - * - * Return value: %TRUE if the request was sent; %FALSE if it could not - * be sent (eg, because it could not connect to the session manager) - * - * Since: 3.4 - */ -gboolean -gtk_application_end_session (GtkApplication *application, - GtkApplicationEndSessionStyle style, - gboolean request_confirmation) -{ - g_return_val_if_fail (GTK_IS_APPLICATION (application), FALSE); - g_return_val_if_fail (!g_application_get_is_remote (G_APPLICATION (application)), FALSE); - g_return_val_if_fail (application->priv->sm_proxy != NULL, FALSE); - - switch (style) - { - case GTK_APPLICATION_LOGOUT: - g_dbus_proxy_call (application->priv->sm_proxy, - "Logout", - g_variant_new ("(u)", request_confirmation ? 0 : 1), - G_DBUS_CALL_FLAGS_NONE, - G_MAXINT, - NULL, NULL, NULL); - break; - case GTK_APPLICATION_REBOOT: - case GTK_APPLICATION_SHUTDOWN: - g_dbus_proxy_call (application->priv->sm_proxy, - "Shutdown", - NULL, - G_DBUS_CALL_FLAGS_NONE, - G_MAXINT, - NULL, NULL, NULL); - break; - } - - return TRUE; -} - #elif defined(GDK_WINDOWING_QUARTZ) /* OS X implementation copied from EggSMClient, but simplified since @@ -1564,7 +1466,7 @@ idle_will_quit (gpointer data) GtkApplication *app = data; if (app->priv->quit_inhibit == 0) - g_signal_emit (app, gtk_application_signals[QUIT], 0); + g_application_quit (G_APPLICATION (app)); else { GtkApplicationQuartzInhibitor *inhibitor; @@ -1586,11 +1488,14 @@ idle_will_quit (gpointer data) _("%s cannot quit at this time:\n\n%s"), g_get_application_name (), inhibitor->reason); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); + g_signal_connect_swapped (dialog, + "response", + G_CALLBACK (gtk_widget_destroy), + dialog); + gtk_widget_show_all (dialog); } - return FALSE; + return G_SOURCE_REMOVE; } static pascal OSErr @@ -1675,58 +1580,6 @@ gtk_application_is_inhibited (GtkApplication *application, return FALSE; } -gboolean -gtk_application_end_session (GtkApplication *application, - GtkApplicationEndSessionStyle style, - gboolean request_confirmation) -{ - static const ProcessSerialNumber loginwindow_psn = { 0, kSystemProcess }; - AppleEvent event = { typeNull, NULL }; - AppleEvent reply = { typeNull, NULL }; - AEAddressDesc target; - AEEventID id; - OSErr err; - - switch (style) - { - case GTK_APPLICATION_LOGOUT: - id = request_confirmation ? kAELogOut : kAEReallyLogOut; - break; - case GTK_APPLICATION_REBOOT: - id = request_confirmation ? kAEShowRestartDialog : kAERestart; - break; - case GTK_APPLICATION_SHUTDOWN: - id = request_confirmation ? kAEShowShutdownDialog : kAEShutDown; - break; - } - - err = AECreateDesc (typeProcessSerialNumber, &loginwindow_psn, - sizeof (loginwindow_psn), &target); - if (err != noErr) - { - g_warning ("Could not create descriptor for loginwindow: %d", err); - return FALSE; - } - - err = AECreateAppleEvent (kCoreEventClass, id, &target, - kAutoGenerateReturnID, kAnyTransactionID, - &event); - AEDisposeDesc (&target); - if (err != noErr) - { - g_warning ("Could not create logout AppleEvent: %d", err); - return FALSE; - } - - err = AESend (&event, &reply, kAENoReply, kAENormalPriority, - kAEDefaultTimeout, NULL, NULL); - AEDisposeDesc (&event); - if (err == noErr) - AEDisposeDesc (&reply); - - return err == noErr; -} - #else /* Trivial implementation. @@ -1757,12 +1610,4 @@ gtk_application_is_inhibited (GtkApplication *application, return FALSE; } -gboolean -gtk_application_end_session (GtkApplication *application, - GtkApplicationEndSessionStyle style, - gboolean request_confirmation) -{ - return FALSE; -} - #endif