diff -ru gnome-panel-2.24.0/gnome-panel/libpanel-util/panel-session-manager.c new/gnome-panel/libpanel-util/panel-session-manager.c --- gnome-panel-2.24.0/gnome-panel/libpanel-util/panel-session-manager.c 2008-09-22 17:21:03.000000000 -0400 +++ new/gnome-panel/libpanel-util/panel-session-manager.c 2008-10-09 12:56:14.000000000 -0400 @@ -141,6 +141,39 @@ } } +gboolean +panel_session_manager_is_shutdown_available (PanelSessionManager *manager) +{ + GError *error; + DBusGProxy *proxy; + gboolean is_shutdown_available; + + g_return_if_fail (PANEL_IS_SESSION_MANAGER (manager)); + + error = NULL; + + if (!panel_dbus_service_ensure_connection (PANEL_DBUS_SERVICE (manager), + &error)) { + g_warning ("Could not connect to session manager: %s", + error->message); + g_error_free (error); + return; + } + + proxy = panel_dbus_service_get_proxy (PANEL_DBUS_SERVICE (manager)); + + if (!dbus_g_proxy_call (proxy, "CanShutdown", &error, + G_TYPE_INVALID, G_TYPE_BOOLEAN, + &is_shutdown_available, G_TYPE_INVALID) && + error != NULL) { + g_warning ("Could not ask session manager if shut down is available: %s", + error->message); + g_error_free (error); + return FALSE; + } + return is_shutdown_available; +} + PanelSessionManager * panel_session_manager_get (void) { diff -ru gnome-panel-2.24.0/gnome-panel/libpanel-util/panel-session-manager.h new/gnome-panel/libpanel-util/panel-session-manager.h --- gnome-panel-2.24.0/gnome-panel/libpanel-util/panel-session-manager.h 2008-09-22 17:21:03.000000000 -0400 +++ new/gnome-panel/libpanel-util/panel-session-manager.h 2008-10-09 12:57:27.000000000 -0400 @@ -63,6 +63,7 @@ void panel_session_manager_request_logout (PanelSessionManager *session, PanelSessionManagerLogoutType mode); void panel_session_manager_request_shutdown (PanelSessionManager *session); +gboolean panel_session_manager_is_shutdown_available (PanelSessionManager *session); G_END_DECLS diff -ru gnome-panel-2.24.0/gnome-panel/panel-action-button.c new/gnome-panel/panel-action-button.c --- gnome-panel-2.24.0/gnome-panel/panel-action-button.c 2008-10-09 12:59:52.000000000 -0400 +++ new/gnome-panel/panel-action-button.c 2008-10-09 13:05:28.000000000 -0400 @@ -190,15 +190,13 @@ static gboolean panel_action_shutdown_reboot_is_disabled (void) { - return panel_lockdown_get_disable_log_out(); -#if 0 - /* FIXME: waiting for a gnome-session dbus api to know if - * shutdown/reboot is possible: - * http://bugzilla.gnome.org/show_bug.cgi?id=536915 */ - return (panel_lockdown_get_disable_log_out() || - (!gdm_supports_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN) && - !gdm_supports_logout_action (GDM_LOGOUT_ACTION_REBOOT))); -#endif + PanelSessionManager *manager; + + if (panel_lockdown_get_disable_log_out()) + return TRUE; + + manager = panel_session_manager_get (); + return !panel_session_manager_is_shutdown_available (manager); } /* Run Application