From 3142d13972ea922c9bcdcacc219c6773ce6479e4 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 7 Jan 2012 03:04:54 -0500 Subject: [PATCH] Add gtk_application_end_session This function allows applications to request that the user session be ended by logout/shutdown/reboot. --- gtk/gtk.symbols | 1 + gtk/gtkapplication.c | 31 +++++++++++++++++++++++++++++++ gtk/gtkapplication.h | 10 ++++++++++ 3 files changed, 42 insertions(+) diff --git a/gtk/gtk.symbols b/gtk/gtk.symbols index 06ebd7b1d..798993eac 100644 --- a/gtk/gtk.symbols +++ b/gtk/gtk.symbols @@ -219,6 +219,7 @@ gtk_app_chooser_widget_set_show_other gtk_app_chooser_widget_set_show_recommended gtk_application_add_accelerator gtk_application_add_window +gtk_application_end_session gtk_application_get_app_menu gtk_application_get_menubar gtk_application_get_type diff --git a/gtk/gtkapplication.c b/gtk/gtkapplication.c index 7ee766f64..097d6d817 100644 --- a/gtk/gtkapplication.c +++ b/gtk/gtkapplication.c @@ -1209,4 +1209,35 @@ gtk_application_is_inhibited (GtkApplication *application, return inhibited; } +gboolean +gtk_application_end_session (GtkApplication *application, + GtkApplicationEndStyle 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), + 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; + } +} + #endif diff --git a/gtk/gtkapplication.h b/gtk/gtkapplication.h index 298e50d27..4e3844163 100644 --- a/gtk/gtkapplication.h +++ b/gtk/gtkapplication.h @@ -116,6 +116,16 @@ void gtk_application_uninhibit (GtkApplication gboolean gtk_application_is_inhibited (GtkApplication *application, GtkApplicationInhibitFlags flags); +typedef enum { + GTK_APPLICATION_LOGOUT, + GTK_APPLICATION_REBOOT, + GTK_APPLICATION_SHUTDOWN +} GtkApplicationEndStyle; + +gboolean gtk_application_end_session (GtkApplication *application, + GtkApplicationEndStyle style, + gboolean request_confirmation); + G_END_DECLS #endif /* __GTK_APPLICATION_H__ */ -- 2.43.2