← Back to team overview

ayatana-commits team mailing list archive

[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