diff options
-rw-r--r-- | gtk/gtkapplication-dbus.c | 3 | ||||
-rw-r--r-- | gtk/gtkapplication.c | 17 |
2 files changed, 20 insertions, 0 deletions
diff --git a/gtk/gtkapplication-dbus.c b/gtk/gtkapplication-dbus.c index 05a35cc945..3345a79573 100644 --- a/gtk/gtkapplication-dbus.c +++ b/gtk/gtkapplication-dbus.c @@ -97,6 +97,7 @@ client_proxy_signal (GDBusProxy *proxy, if (g_str_equal (signal_name, "QueryEndSession")) { g_debug ("Received QueryEndSession"); + g_signal_emit_by_name (dbus->impl.application, "query-end"); send_quit_response (dbus, TRUE, NULL); } else if (g_str_equal (signal_name, "CancelEndSession")) @@ -237,6 +238,8 @@ screensaver_signal_portal (GDBusConnection *connection, } else if (session_state == QUERY_END) { + g_signal_emit_by_name (dbus->impl.application, "query-end"); + g_dbus_proxy_call (dbus->inhibit_proxy, "QueryEndResponse", g_variant_new ("(o)", dbus->session_id), diff --git a/gtk/gtkapplication.c b/gtk/gtkapplication.c index 0ae1de11a1..7adfc70f03 100644 --- a/gtk/gtkapplication.c +++ b/gtk/gtkapplication.c @@ -129,6 +129,7 @@ enum { WINDOW_ADDED, WINDOW_REMOVED, + QUERY_END, LAST_SIGNAL }; @@ -654,6 +655,22 @@ gtk_application_class_init (GtkApplicationClass *class) G_TYPE_NONE, 1, GTK_TYPE_WINDOW); /** + * GtkApplication::query-end: + * @application: the #GtkApplication which emitted the signal + * + * Emitted when the session manager is about to end the session, only + * if #GtkApplication::register-session is %TRUE. Applications can + * connect to this signal and call gtk_application_inhibit() with + * %GTK_APPLICATION_INHIBIT_LOGOUT to delay the end of the session + * until state has been saved. + */ + gtk_application_signals[QUERY_END] = + g_signal_new (I_("query-end"), GTK_TYPE_APPLICATION, G_SIGNAL_RUN_FIRST, + 0, + NULL, NULL, + NULL, + G_TYPE_NONE, 0); + /** * GtkApplication:register-session: * * Set this property to %TRUE to register with the session manager. |