diff options
Diffstat (limited to 'src/gtk-dialog')
-rw-r--r-- | src/gtk-dialog/gtk-logout-helper.c | 49 | ||||
-rw-r--r-- | src/gtk-dialog/logout-dialog.c | 1 |
2 files changed, 49 insertions, 1 deletions
diff --git a/src/gtk-dialog/gtk-logout-helper.c b/src/gtk-dialog/gtk-logout-helper.c index 8a64c35..7453ce4 100644 --- a/src/gtk-dialog/gtk-logout-helper.c +++ b/src/gtk-dialog/gtk-logout-helper.c @@ -30,6 +30,53 @@ with this program. If not, see <http://www.gnu.org/licenses/>. #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; + } + + GError * error = NULL; + + 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(proxy, + "Stop", + &error, + G_TYPE_INVALID); + break; + case LOGOUT_DIALOG_RESTART: + dbus_g_proxy_call(proxy, + "Restart", + &error, + G_TYPE_INVALID); + break; + default: + g_warning("Unknown action"); + break; + } + + g_object_unref(proxy); + + if (error != NULL) { + g_error("Unable to signal ConsoleKit: %s", error->message); + g_error_free(error); + } + + return; +} + +static void session_action (LogoutDialogAction action) { DBusGConnection * sbus; @@ -50,6 +97,8 @@ session_action (LogoutDialogAction action) 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; } diff --git a/src/gtk-dialog/logout-dialog.c b/src/gtk-dialog/logout-dialog.c index dc1b3fe..07fc6df 100644 --- a/src/gtk-dialog/logout-dialog.c +++ b/src/gtk-dialog/logout-dialog.c @@ -278,7 +278,6 @@ logout_dialog_init (LogoutDialog *logout_dialog) gtk_widget_realize(GTK_WIDGET(logout_dialog)); /* remove superfluous window buttons */ gdk_window_set_functions (GTK_WIDGET(logout_dialog)->window, 0); - gdk_window_set_decorations (GTK_WIDGET(logout_dialog)->window, GDK_DECOR_BORDER | GDK_DECOR_TITLE); /* center window */ gtk_window_set_position (GTK_WINDOW(logout_dialog), GTK_WIN_POS_CENTER); |