summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2008-04-28 14:10:56 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2008-04-28 14:10:56 +0000
commit26823b0b3b5d77975b488c29ff3e2ab8fcd3783f (patch)
treea492847494b1af3eb41eaa2e4d748dcc3e235ffd
parent061debeb826ddad1fe73eb7ebedb58fb889e6f18 (diff)
downloadgdm-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--ChangeLog7
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.c39
2 files changed, 45 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index a2cc260b..5a75012e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);