Updating branch refs/heads/nick/poweractions to b0f45ac5e328c1a966300b22e26c0ea60f716cbe (commit) from 8017f4b5f1f0b55cf86487a9e26a7e6704c0f7ee (commit)
commit b0f45ac5e328c1a966300b22e26c0ea60f716cbe Author: Nick Schermer <n...@xfce.org> Date: Sat Dec 3 11:49:58 2011 +0100 Adjust to new power-related dbus methods. plugins/actions/actions.c | 138 +++++++++++++++++++++++++++++++++------------ 1 files changed, 102 insertions(+), 36 deletions(-) diff --git a/plugins/actions/actions.c b/plugins/actions/actions.c index 6b50486..7fb44fe 100644 --- a/plugins/actions/actions.c +++ b/plugins/actions/actions.c @@ -120,19 +120,6 @@ typedef enum } ActionType; -/* copied from xfce4-session/shutdown.h -- ORDER MATTERS. - * The numbers correspond to the 'type' parameter of - * org.xfce.Session.Manager.Shutdown */ -typedef enum -{ - ACTION_SHUTDOWN_ASK = 0, - ACTION_SHUTDOWN_LOGOUT, - ACTION_SHUTDOWN_HALT, - ACTION_SHUTDOWN_REBOOT, - ACTION_SHUTDOWN_SUSPEND, - ACTION_SHUTDOWN_HIBERNATE, -} ActionShutdownType; - typedef struct { ActionType type; @@ -769,9 +756,10 @@ actions_plugin_action_confirmation (ActionsPlugin *plugin, static gboolean -actions_plugin_action_activate_dbus (ActionShutdownType type, - gboolean allow_save, - GError **error) +actions_plugin_action_dbus_xfsm (const gchar *method, + gboolean show_dialog, + gboolean allow_save, + GError **error) { DBusGConnection *connection; DBusGProxy *proxy; @@ -787,9 +775,89 @@ actions_plugin_action_activate_dbus (ActionShutdownType type, "org.xfce.Session.Manager"); if (G_LIKELY (proxy != NULL)) { + if (g_strcmp0 (method, "Logout") == 0) + { + retval = dbus_g_proxy_call (proxy, method, error, + G_TYPE_BOOLEAN, show_dialog, + G_TYPE_BOOLEAN, allow_save, + G_TYPE_INVALID, G_TYPE_INVALID); + } + else + { + retval = dbus_g_proxy_call (proxy, method, error, + G_TYPE_BOOLEAN, allow_save, + G_TYPE_INVALID, G_TYPE_INVALID); + } + + g_object_unref (G_OBJECT (proxy)); + } + + return retval; +} + + + +static void +actions_plugin_action_dbus_query_xfsm (gboolean *can_restart, + gboolean *can_shutdown) +{ + GError *error =NULL; + + *can_restart = FALSE; + *can_shutdown = FALSE; + + connection = dbus_g_bus_get (DBUS_BUS_SESSION, error); + if (connection == NULL) + return; + + proxy = dbus_g_proxy_new_for_name (connection, + "org.xfce.SessionManager", + "/org/xfce/SessionManager", + "org.xfce.Session.Manager"); + if (G_LIKELY (proxy != NULL)) + { + if (dbus_g_proxy_call (proxy, "CanShutdown", &error, + G_TYPE_INVALID, + G_TYPE_BOOLEAN, can_shutdown, + G_TYPE_INVALID)) + { + dbus_g_proxy_call (proxy, "CanRestart", &error, + G_TYPE_INVALID, + G_TYPE_BOOLEAN, can_restart, + G_TYPE_INVALID); + } + + if (error != NULL) + { + g_warning ("Failed to query session manager: %s", error->message); + g_error_free (error); + } + + g_object_unref (G_OBJECT (proxy)); + } +} + + + +static gboolean +actions_plugin_action_dbus_xfpm (const gchar *mothod, + GError **error) +{ + DBusGConnection *connection; + DBusGProxy *proxy; + gboolean retval; + + connection = dbus_g_bus_get (DBUS_BUS_SESSION, error); + if (connection == NULL) + return FALSE; + + proxy = dbus_g_proxy_new_for_name (connection, + "org.xfce.Power.Manager", + "/org/xfce/PowerManager", + "org.xfce.Power.Manager"); + if (G_LIKELY (proxy != NULL)) + { retval = dbus_g_proxy_call (proxy, "Shutdown", error, - G_TYPE_UINT, type, - G_TYPE_BOOLEAN, allow_save, G_TYPE_INVALID, G_TYPE_INVALID); g_object_unref (G_OBJECT (proxy)); @@ -821,13 +889,23 @@ actions_plugin_action_activate (GtkWidget *widget, switch (entry->type) { case ACTION_TYPE_LOGOUT: - succeed = actions_plugin_action_activate_dbus (ACTION_SHUTDOWN_LOGOUT, - unattended, &error); + succeed = actions_plugin_action_dbus_xfsm ("Logout", FALSE, + unattended, &error); break; case ACTION_TYPE_LOGOUT_DIALOG: - succeed = actions_plugin_action_activate_dbus (ACTION_SHUTDOWN_ASK, - unattended, &error); + succeed = actions_plugin_action_dbus_xfsm ("Logout", TRUE, + unattended, &error); + break; + + case ACTION_TYPE_RESTART: + succeed = actions_plugin_action_dbus_xfsm ("Restart", FALSE, + unattended, &error); + break; + + case ACTION_TYPE_SHUTDOWN: + succeed = actions_plugin_action_dbus_xfsm ("Shutdown", FALSE, + unattended, &error); break; case ACTION_TYPE_SWITCH_USER: @@ -839,23 +917,11 @@ actions_plugin_action_activate (GtkWidget *widget, break; case ACTION_TYPE_HIBERNATE: - succeed = actions_plugin_action_activate_dbus (ACTION_SHUTDOWN_HIBERNATE, - unattended, &error); + succeed = actions_plugin_action_dbus_xfpm ("Hibernate", &error); break; case ACTION_TYPE_SUSPEND: - succeed = actions_plugin_action_activate_dbus (ACTION_SHUTDOWN_SUSPEND, - unattended, &error); - break; - - case ACTION_TYPE_RESTART: - succeed = actions_plugin_action_activate_dbus (ACTION_SHUTDOWN_REBOOT, - unattended, &error); - break; - - case ACTION_TYPE_SHUTDOWN: - succeed = actions_plugin_action_activate_dbus (ACTION_SHUTDOWN_HALT, - unattended, &error); + succeed = actions_plugin_action_dbus_xfpm ("Suspend", &error); break; default: _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits