diff options
author | Matthias Clasen <mclasen@redhat.com> | 2008-04-28 14:10:56 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2008-04-28 14:10:56 +0000 |
commit | 26823b0b3b5d77975b488c29ff3e2ab8fcd3783f (patch) | |
tree | a492847494b1af3eb41eaa2e4d748dcc3e235ffd | |
parent | 061debeb826ddad1fe73eb7ebedb58fb889e6f18 (diff) | |
download | gdm-26823b0b3b5d77975b488c29ff3e2ab8fcd3783f.tar.gz |
New function to ask g-p-m if it thinks that suspend works. (switch_mode):
2008-04-28 Matthias Clasen <mclasen@redhat.com>
* gui/simple-greeter/gdm-greeter-login-window.c (can_suspend):
New function to ask g-p-m if it thinks that suspend works.
(switch_mode): Use can_suspend to figure out if the suspend
button should be shown.
svn path=/trunk/; revision=6173
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-login-window.c | 39 |
2 files changed, 45 insertions, 1 deletions
@@ -1,3 +1,10 @@ +2008-04-28 Matthias Clasen <mclasen@redhat.com> + + * gui/simple-greeter/gdm-greeter-login-window.c (can_suspend): + New function to ask g-p-m if it thinks that suspend works. + (switch_mode): Use can_suspend to figure out if the suspend + button should be shown. + 2008-04-26 Matthias Clasen <mclasen@redhat.com> * gui/simple-greeter/gdm-greeter-panel.c diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c index 8906cbee..975020d4 100644 --- a/gui/simple-greeter/gdm-greeter-login-window.c +++ b/gui/simple-greeter/gdm-greeter-login-window.c @@ -468,6 +468,41 @@ set_log_in_button_mode (GdmGreeterLoginWindow *login_window, } } +static gboolean +can_suspend (GdmGreeterLoginWindow *login_window) +{ + DBusGConnection *connection; + DBusGProxy *proxy; + GError *error; + gboolean result; + + error = NULL; + connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error); + if (error != NULL) { + g_warning ("Couldn't connect to power manager: %s", error->message); + g_error_free (error); + return FALSE; + } + proxy = dbus_g_proxy_new_for_name (connection, + GPM_DBUS_NAME, + GPM_DBUS_PATH, + GPM_DBUS_INTERFACE); + result = FALSE; + if (!dbus_g_proxy_call (proxy, "CanSuspend", + &error, + G_TYPE_INVALID, + G_TYPE_BOOLEAN, &result, G_TYPE_INVALID)) { + if (error != NULL) { + g_warning ("Could not ask power manager if user can suspend: %s", + error->message); + g_error_free (error); + } + result = FALSE; + } + + return result; +} + static void switch_mode (GdmGreeterLoginWindow *login_window, int number) @@ -476,6 +511,7 @@ switch_mode (GdmGreeterLoginWindow *login_window, GtkWidget *user_chooser; GtkWidget *box; gboolean show_restart_buttons; + gboolean show_suspend_button; /* we want to run this even if we're supposed to be in the mode already so that we reset everything @@ -485,6 +521,7 @@ switch_mode (GdmGreeterLoginWindow *login_window, default_name = NULL; show_restart_buttons = get_show_restart_buttons (login_window); + show_suspend_button = can_suspend (login_window); switch (number) { case MODE_SELECTION: @@ -497,7 +534,7 @@ switch_mode (GdmGreeterLoginWindow *login_window, show_widget (login_window, "restart-button", login_window->priv->display_is_local && show_restart_buttons); show_widget (login_window, "suspend-button", - login_window->priv->display_is_local && show_restart_buttons); + login_window->priv->display_is_local && show_restart_buttons && show_suspend_button); show_widget (login_window, "disconnect-button", ! login_window->priv->display_is_local); show_widget (login_window, "auth-input-box", FALSE); |