summaryrefslogtreecommitdiff
path: root/xfce4-session-logout
diff options
context:
space:
mode:
authorNick Schermer <nick@xfce.org>2011-12-03 21:36:26 +0100
committerNick Schermer <nick@xfce.org>2012-03-24 22:24:36 +0100
commit85fc32ce57db0998ded169bb6d5cadcd564b795c (patch)
treec14b873709fe7abfabcb3ad6729ca937a9dda90b /xfce4-session-logout
parenta80698a8aea50390deb4e0104552e49b0b4d02e6 (diff)
downloadxfce4-session-85fc32ce57db0998ded169bb6d5cadcd564b795c.tar.gz
Update the logout helper for new dbus methods.
Diffstat (limited to 'xfce4-session-logout')
-rw-r--r--xfce4-session-logout/Makefile.am4
-rw-r--r--xfce4-session-logout/main.c184
2 files changed, 87 insertions, 101 deletions
diff --git a/xfce4-session-logout/Makefile.am b/xfce4-session-logout/Makefile.am
index b1fb8718..d12a63a7 100644
--- a/xfce4-session-logout/Makefile.am
+++ b/xfce4-session-logout/Makefile.am
@@ -10,11 +10,13 @@ xfce4_session_logout_SOURCES = \
xfce4_session_logout_CFLAGS = \
-I$(top_srcdir) \
$(DBUS_CFLAGS) \
- $(LIBXFCE4UI_CFLAGS) \
+ $(DBUS_GLIB_CFLAGS) \
+ $(LIBXFCE4UI_CFLAGS) \
-DPACKAGE_LOCALE_DIR=\"$(localedir)\"
xfce4_session_logout_LDFLAGS = \
$(DBUS_LIBS) \
+ $(DBUS_GLIB_LIBS) \
$(LIBXFCE4UI_LIBS)
desktopdir = $(datadir)/applications
diff --git a/xfce4-session-logout/main.c b/xfce4-session-logout/main.c
index 705fad59..9619be4d 100644
--- a/xfce4-session-logout/main.c
+++ b/xfce4-session-logout/main.c
@@ -35,32 +35,20 @@
#include <string.h>
#endif
-#include <dbus/dbus.h>
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-lowlevel.h>
#include <gtk/gtk.h>
#include <libxfce4ui/libxfce4ui.h>
#include <libxfce4util/libxfce4util.h>
-/* copied from xfce4-session/shutdown.h -- ORDER MATTERS. The numbers
- * correspond to the 'type' parameter of org.xfce.Session.Manager.Shutdown
- */
-typedef enum
-{
- XFSM_SHUTDOWN_ASK = 0,
- XFSM_SHUTDOWN_LOGOUT,
- XFSM_SHUTDOWN_HALT,
- XFSM_SHUTDOWN_REBOOT,
- XFSM_SHUTDOWN_SUSPEND,
- XFSM_SHUTDOWN_HIBERNATE,
-} XfsmShutdownType;
-
gboolean opt_logout = FALSE;
gboolean opt_halt = FALSE;
gboolean opt_reboot = FALSE;
gboolean opt_suspend = FALSE;
gboolean opt_hibernate = FALSE;
-gboolean opt_fast = FALSE;
+gboolean allow_save = FALSE;
gboolean opt_version = FALSE;
static GOptionEntry option_entries[] =
@@ -85,7 +73,7 @@ static GOptionEntry option_entries[] =
N_("Hibernate without displaying the logout dialog"),
NULL
},
- { "fast", 'f', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &opt_fast,
+ { "fast", 'f', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &allow_save,
N_("Log out quickly; don't save the session"),
NULL
},
@@ -98,23 +86,18 @@ static GOptionEntry option_entries[] =
static void
-xfce_session_logout_notify_error (const gchar *primary_message,
- DBusError *derror,
- gboolean have_display)
+xfce_session_logout_notify_error (const gchar *message,
+ GError *error,
+ gboolean have_display)
{
if (G_LIKELY (have_display))
{
- xfce_message_dialog (NULL, _("Logout Error"), GTK_STOCK_DIALOG_ERROR,
- primary_message,
- derror && dbus_error_is_set (derror)
- ? derror->message : _("Unknown error"),
- GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
+ xfce_dialog_show_error (NULL, error, "%s", message);
}
else
{
- g_critical ("%s: %s", primary_message,
- derror && dbus_error_is_set (derror) ? derror->message
- : _("Unknown error"));
+ g_printerr (PACKAGE_NAME ": %s (%s).\n", message,
+ error != NULL ? error->message : _("Unknown error"));
}
}
@@ -123,100 +106,101 @@ xfce_session_logout_notify_error (const gchar *primary_message,
int
main (int argc, char **argv)
{
- XfsmShutdownType shutdown_type = XFSM_SHUTDOWN_ASK;
- gboolean allow_save = TRUE;
- DBusConnection *dbus_conn;
- DBusMessage *message, *reply;
- DBusError derror;
- gboolean have_display;
+ DBusGConnection *conn;
+ DBusGProxy *proxy = NULL;
+ GError *err = NULL;
+ gboolean have_display;
+ gboolean show_dialog;
+ gboolean result = FALSE;
xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
have_display = gtk_init_with_args (&argc, &argv, "", option_entries, PACKAGE, NULL);
- if (opt_logout)
- {
- shutdown_type = XFSM_SHUTDOWN_LOGOUT;
- }
- else if (opt_halt)
- {
- shutdown_type = XFSM_SHUTDOWN_HALT;
- }
- else if (opt_reboot)
- {
- shutdown_type = XFSM_SHUTDOWN_REBOOT;
- }
- else if (opt_suspend)
- {
- shutdown_type = XFSM_SHUTDOWN_SUSPEND;
- }
- else if (opt_hibernate)
+ if (opt_version)
{
- shutdown_type = XFSM_SHUTDOWN_HIBERNATE;
- }
- else if (opt_version)
- {
- printf ("%s (Xfce %s)\n\n"
- "Copyright (c) 2010-2011\n"
- " The Xfce development team. All rights reserved.\n\n"
- "Written for Xfce by Brian Tarricone <kelnos@xfce.org> and\n"
- "Benedikt Meurer <benny@xfce.org>.\n\n"
- "Please report bugs to <%s>.\n",
- PACKAGE_STRING, xfce_version_string(), PACKAGE_BUGREPORT);
+ g_print ("%s %s (Xfce %s)\n\n", PACKAGE_NAME, PACKAGE_VERSION, xfce_version_string ());
+ g_print ("%s\n", "Copyright (c) 2004-2011");
+ g_print ("\t%s\n\n", _("The Xfce development team. All rights reserved."));
+ g_print ("%s\n", _("Written by Benedikt Meurer <benny@xfce.org>"));
+ g_print ("%s\n\n", _("and Brian Tarricone <kelnos@xfce.org>."));
+ g_print (_("Please report bugs to <%s>."), PACKAGE_BUGREPORT);
+ g_print ("\n");
return EXIT_SUCCESS;
}
- if (opt_fast)
+ /* open session bus */
+ conn = dbus_g_bus_get (DBUS_BUS_SESSION, &err);
+ if (conn == NULL)
{
- allow_save = FALSE;
+ xfce_session_logout_notify_error (_("Unable to contact D-Bus session bus"), err, have_display);
+ g_error_free (err);
+ return EXIT_FAILURE;
}
- dbus_error_init (&derror);
- dbus_conn = dbus_bus_get (DBUS_BUS_SESSION, &derror);
- if (G_UNLIKELY (dbus_conn == NULL))
+ /* create messsage */
+ if (opt_suspend || opt_hibernate)
{
- xfce_session_logout_notify_error (_("Unable to contact D-Bus session bus."),
- &derror, have_display);
- dbus_error_free (&derror);
- return EXIT_FAILURE;
+ proxy = dbus_g_proxy_new_for_name_owner (conn,
+ "org.xfce.PowerManager",
+ "/org/xfce/PowerManager",
+ "org.xfce.PowerManager",
+ &err);
+ if (proxy != NULL)
+ {
+ if (opt_halt)
+ {
+ result = dbus_g_proxy_call (proxy, "Suspend", &err,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+ }
+ else
+ {
+ result = dbus_g_proxy_call (proxy, "Hibernate", &err,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+ }
+ }
}
-
- message = dbus_message_new_method_call ("org.xfce.SessionManager",
- "/org/xfce/SessionManager",
- "org.xfce.Session.Manager",
- "Shutdown");
- if (G_UNLIKELY (message == NULL))
+ else
{
- xfce_session_logout_notify_error (_("Failed to create new D-Bus message"),
- NULL, have_display);
- return EXIT_FAILURE;
+ proxy = dbus_g_proxy_new_for_name_owner (conn,
+ "org.xfce.SessionManager",
+ "/org/xfce/SessionManager",
+ "org.xfce.Session.Manager",
+ &err);
+ if (proxy != NULL)
+ {
+ if (opt_halt)
+ {
+ result = dbus_g_proxy_call (proxy, "Shutdown", &err,
+ G_TYPE_BOOLEAN, allow_save,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+ }
+ else if (opt_reboot)
+ {
+ result = dbus_g_proxy_call (proxy, "Restart", &err,
+ G_TYPE_BOOLEAN, allow_save,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+ }
+ else
+ {
+ show_dialog = !opt_logout;
+ result = dbus_g_proxy_call (proxy, "Logout", &err,
+ G_TYPE_BOOLEAN, show_dialog,
+ G_TYPE_BOOLEAN, allow_save,
+ G_TYPE_INVALID, G_TYPE_INVALID);
+ }
+ }
}
- dbus_message_append_args (message,
- DBUS_TYPE_UINT32, &shutdown_type,
- DBUS_TYPE_BOOLEAN, &allow_save,
- DBUS_TYPE_INVALID);
-
- reply = dbus_connection_send_with_reply_and_block (dbus_conn, message,
- -1, &derror);
- dbus_message_unref (message);
+ if (proxy != NULL)
+ g_object_unref (proxy);
- if (G_UNLIKELY (reply == NULL))
- {
- xfce_session_logout_notify_error (_("Failed to receive a reply from the session manager"),
- &derror, have_display);
- dbus_error_free (&derror);
- return EXIT_FAILURE;
- }
- else if (dbus_message_get_type (reply) == DBUS_MESSAGE_TYPE_ERROR)
+ if (!result)
{
- dbus_set_error_from_message (&derror, reply);
- xfce_session_logout_notify_error (_("Received error while trying to log out"),
- &derror, have_display);
- dbus_error_free (&derror);
+ xfce_session_logout_notify_error (_("Received error while trying to log out"), err, have_display);
+ g_error_free (err);
return EXIT_FAILURE;
}
- dbus_message_unref (reply);
return EXIT_SUCCESS;
}