ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #01008
[Merge] lp:~ted/indicator-session/no-gs-fallback into lp:indicator-session
Ted Gould has proposed merging lp:~ted/indicator-session/no-gs-fallback into lp:indicator-session.
Requested reviews:
Indicator Applet Developers (indicator-applet-developers)
This code makes it so that if we can't get a proxy to the gnome-session,
we can still bring the machine down. This is also for cases where
people have chosen not to use gnome-session.
--
https://code.launchpad.net/~ted/indicator-session/no-gs-fallback/+merge/20091
Your team ayatana-commits is subscribed to branch lp:indicator-session.
=== modified file 'src/gtk-dialog/gtk-logout-helper.c'
--- src/gtk-dialog/gtk-logout-helper.c 2009-09-24 17:24:09 +0000
+++ src/gtk-dialog/gtk-logout-helper.c 2010-02-24 22:50:27 +0000
@@ -30,6 +30,44 @@
#include "gconf-helper.h"
static void
+consolekit_fallback (LogoutDialogAction action)
+{
+ DBusGConnection * sbus = dbus_g_bus_get(DBUS_BUS_SYSTEM, NULL);
+ g_return_if_fail(sbus != NULL); /* worst case */
+ DBusGProxy * proxy = dbus_g_proxy_new_for_name(sbus, "org.freedesktop.ConsoleKit",
+ "/org/freedesktop/ConsoleKit/Manager",
+ "org.freedesktop.ConsoleKit.Manager");
+
+ if (proxy == NULL) {
+ g_warning("Unable to get consolekit proxy");
+ return;
+ }
+
+ switch (action) {
+ case LOGOUT_DIALOG_LOGOUT:
+ g_warning("Unable to fallback to ConsoleKit for logout as it's a session issue. We need some sort of session handler.");
+ break;
+ case LOGOUT_DIALOG_SHUTDOWN:
+ dbus_g_proxy_call_no_reply(proxy,
+ "Stop",
+ G_TYPE_INVALID);
+ break;
+ case LOGOUT_DIALOG_RESTART:
+ dbus_g_proxy_call_no_reply(proxy,
+ "Restart",
+ G_TYPE_INVALID);
+ break;
+ default:
+ g_warning("Unknown action");
+ break;
+ }
+
+ g_object_unref(proxy);
+
+ return;
+}
+
+static void
session_action (LogoutDialogAction action)
{
DBusGConnection * sbus;
@@ -50,6 +88,8 @@
if (sm_proxy == NULL) {
g_warning("Unable to get DBus proxy to SessionManager interface: %s", error->message);
g_error_free(error);
+
+ consolekit_fallback(action);
return;
}
Follow ups