summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-03-09 21:41:08 +0000
committerRay Strode <halfline@src.gnome.org>2008-03-09 21:41:08 +0000
commit3259f2a3391c7f062c5311d3994c30e06412f2b3 (patch)
tree416cd6229e0f3788a1952315c48cef91288d378d
parent181c582036cec347f921033c79f0b24c3d0943e0 (diff)
downloadgdm-3259f2a3391c7f062c5311d3994c30e06412f2b3.tar.gz
Read timed login configuration from the daemon, and pass along rather than
2008-03-09 Ray Strode <rstrode@redhat.com> Read timed login configuration from the daemon, and pass along rather than reading it from the daemon and greeter. * daemon/gdm-simple-slave.c: (get_timed_login_details): (on_session_opened): * daemon/gdm-greeter-server.[ch]: (gdm_server_request_timed_login): Read timed login configuration and forward to greeter * gui/simple-greeter/gdm-greeter-client.[ch]: (on_timed_login_requested), (client_dbus_handle_message), (gdm_greeter_client_class_init): * gui/simple-greeter/gdm-greeter-session.[ch]: (on_timed_login_requested), (gdm_greeter_session_init): Forward timed login requests from slave to login window * gui/simple-greeter/gdm-greeter-login-window.[ch]: (load_theme): don't show "automatic login" entry here anymore (gdm_greeter_login_window_request_timed_login): show "automatic login" entry in face browser, start timer (read_configuration): drop function (gdm_greeter_login_window_constructor): don't call read_configuration anymore (gdm_greeter_login_window_init): don't initialized timed_login_delay here anymore since it's sent up from slave now svn path=/trunk/; revision=5971
-rw-r--r--ChangeLog31
-rw-r--r--daemon/gdm-greeter-server.c12
-rw-r--r--daemon/gdm-greeter-server.h4
-rw-r--r--daemon/gdm-simple-slave.c33
-rw-r--r--gui/simple-greeter/gdm-greeter-client.c23
-rw-r--r--gui/simple-greeter/gdm-greeter-client.h3
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.c71
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.h4
-rw-r--r--gui/simple-greeter/gdm-greeter-session.c15
9 files changed, 145 insertions, 51 deletions
diff --git a/ChangeLog b/ChangeLog
index b26351bf..ee170a55 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,36 @@
2008-03-09 Ray Strode <rstrode@redhat.com>
+ Read timed login configuration from the daemon,
+ and pass along rather than reading it from the daemon
+ and greeter.
+
+ * daemon/gdm-simple-slave.c:
+ (get_timed_login_details):
+ (on_session_opened):
+ * daemon/gdm-greeter-server.[ch]:
+ (gdm_server_request_timed_login):
+ Read timed login configuration and forward to greeter
+ * gui/simple-greeter/gdm-greeter-client.[ch]:
+ (on_timed_login_requested), (client_dbus_handle_message),
+ (gdm_greeter_client_class_init):
+ * gui/simple-greeter/gdm-greeter-session.[ch]:
+ (on_timed_login_requested), (gdm_greeter_session_init):
+ Forward timed login requests from slave to login window
+ * gui/simple-greeter/gdm-greeter-login-window.[ch]:
+ (load_theme): don't show "automatic login" entry here
+ anymore
+ (gdm_greeter_login_window_request_timed_login):
+ show "automatic login" entry in face browser, start
+ timer
+ (read_configuration): drop function
+ (gdm_greeter_login_window_constructor): don't call
+ read_configuration anymore
+ (gdm_greeter_login_window_init): don't initialized
+ timed_login_delay here anymore since it's sent up from
+ slave now
+
+2008-03-09 Ray Strode <rstrode@redhat.com>
+
* gui/simple-greeter/gdm-greeter-login-window.[ch]:
(on_login_button_clicked_answer_query):
(gdm_greeter_login_window_class_init):
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c
index a895c1ce..855a86de 100644
--- a/daemon/gdm-greeter-server.c
+++ b/daemon/gdm-greeter-server.c
@@ -272,6 +272,14 @@ gdm_greeter_server_default_session_name_changed (GdmGreeterServer *greeter_serve
send_dbus_string_signal (greeter_server, "DefaultSessionNameChanged", session_name);
}
+void
+gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server,
+ const char *username,
+ int delay)
+{
+ send_dbus_string_and_int_signal (greeter_server, "TimedLoginRequested", username, delay);
+}
+
/* Note: Use abstract sockets like dbus does by default on Linux. Abstract
* sockets are only available on Linux.
*/
@@ -690,6 +698,10 @@ do_introspect (DBusConnection *connection,
" <signal name=\"DefaultSessionNameChanged\">\n"
" <arg name=\"session_name\" type=\"s\"/>\n"
" </signal>\n"
+ " <signal name=\"TimedLoginRequested\">\n"
+ " <arg name=\"username\" type=\"s\"/>\n"
+ " <arg name=\"delay\" type=\"i\"/>\n"
+ " </signal>\n"
" <signal name=\"Ready\">\n"
" </signal>\n"
" <signal name=\"Reset\">\n"
diff --git a/daemon/gdm-greeter-server.h b/daemon/gdm-greeter-server.h
index cecd6767..ab47c506 100644
--- a/daemon/gdm-greeter-server.h
+++ b/daemon/gdm-greeter-server.h
@@ -91,6 +91,10 @@ void gdm_greeter_server_default_language_name_changed (GdmGreeter
void gdm_greeter_server_default_session_name_changed (GdmGreeterServer *greeter_server,
const char *text);
+void gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server,
+ const char *username,
+ int delay);
+
G_END_DECLS
#endif /* __GDM_GREETER_SERVER_H */
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 5af1ba79..3c65b261 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -362,17 +362,50 @@ on_session_secret_info_query (GdmSession *session,
gdm_greeter_server_secret_info_query (slave->priv->greeter_server, text);
}
+static gboolean
+get_timed_login_details (GdmSimpleSlave *slave,
+ char **username,
+ int *delay)
+{
+ gboolean enabled;
+ gboolean res;
+
+ enabled = FALSE;
+ res = gdm_settings_client_get_boolean (GDM_KEY_TIMED_LOGIN_ENABLE, &enabled);
+ if (! enabled) {
+ return FALSE;
+ }
+
+ *username = NULL;
+ res = gdm_settings_client_get_string (GDM_KEY_TIMED_LOGIN_USER, username);
+
+ if (username == NULL) {
+ return FALSE;
+ }
+
+ res = gdm_settings_client_get_int (GDM_KEY_TIMED_LOGIN_DELAY, delay);
+
+ return TRUE;
+}
+
static void
on_session_opened (GdmSession *session,
GdmSimpleSlave *slave)
{
gboolean res;
+ char *username;
+ int delay;
g_debug ("GdmSimpleSlave: session opened");
res = gdm_greeter_server_ready (slave->priv->greeter_server);
if (! res) {
g_warning ("Unable to send ready");
}
+
+ if (get_timed_login_details (slave, &username, &delay)) {
+ gdm_greeter_server_request_timed_login (slave->priv->greeter_server, username, delay);
+ g_free (username);
+ }
}
static void
diff --git a/gui/simple-greeter/gdm-greeter-client.c b/gui/simple-greeter/gdm-greeter-client.c
index dab1ee70..6a2efe44 100644
--- a/gui/simple-greeter/gdm-greeter-client.c
+++ b/gui/simple-greeter/gdm-greeter-client.c
@@ -34,6 +34,7 @@
#include <dbus/dbus-glib-lowlevel.h>
#include "gdm-greeter-client.h"
+#include "gdm-marshal.h"
#define GDM_GREETER_CLIENT_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_CLIENT, GdmGreeterClientPrivate))
@@ -66,6 +67,7 @@ enum {
SELECTED_USER_CHANGED,
DEFAULT_LANGUAGE_NAME_CHANGED,
DEFAULT_SESSION_NAME_CHANGED,
+ TIMED_LOGIN_REQUESTED,
LAST_SIGNAL
};
@@ -178,6 +180,13 @@ on_default_session_name_changed (GdmGreeterClient *client,
}
static void
+on_timed_login_requested (GdmGreeterClient *client,
+ DBusMessage *message)
+{
+ emit_string_and_int_signal_for_message (client, "TimedLoginRequested", message, TIMED_LOGIN_REQUESTED);
+}
+
+static void
on_info_query (GdmGreeterClient *client,
DBusMessage *message)
{
@@ -608,6 +617,8 @@ client_dbus_handle_message (DBusConnection *connection,
on_default_language_name_changed (client, message);
} else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "DefaultSessionNameChanged")) {
on_default_session_name_changed (client, message);
+ } else if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "TimedLoginRequested")) {
+ on_timed_login_requested (client, message);
} else {
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
@@ -870,6 +881,18 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass)
g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
1, G_TYPE_STRING);
+
+ gdm_greeter_client_signals[TIMED_LOGIN_REQUESTED] =
+ g_signal_new ("timed-login-requested",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmGreeterClientClass, default_session_name_changed),
+ NULL,
+ NULL,
+ gdm_marshal_VOID__STRING_INT,
+ G_TYPE_NONE,
+ 2, G_TYPE_STRING, G_TYPE_INT);
+
}
static void
diff --git a/gui/simple-greeter/gdm-greeter-client.h b/gui/simple-greeter/gdm-greeter-client.h
index d858b23c..97138e50 100644
--- a/gui/simple-greeter/gdm-greeter-client.h
+++ b/gui/simple-greeter/gdm-greeter-client.h
@@ -64,6 +64,9 @@ typedef struct
const char *session_name);
void (* default_language_name_changed) (GdmGreeterClient *client,
const char *language_name);
+ void (* timed_login_requested) (GdmGreeterClient *client,
+ const char *username,
+ int delay);
} GdmGreeterClientClass;
#define GDM_GREETER_CLIENT_ERROR (gdm_greeter_client_error_quark ())
diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c
index 8872eb38..e5f1e3ca 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.c
+++ b/gui/simple-greeter/gdm-greeter-login-window.c
@@ -93,8 +93,6 @@
#define KEY_BANNER_MESSAGE_TEXT KEY_GREETER_DIR "/banner_message_text"
#define KEY_LOGO KEY_GREETER_DIR "/logo_icon_name"
#define KEY_DISABLE_RESTART_BUTTONS KEY_GREETER_DIR "/disable_restart_buttons"
-#define TIMED_LOGIN_TIMEOUT_SEC 60
-
#define GDM_GREETER_LOGIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_LOGIN_WINDOW, GdmGreeterLoginWindowPrivate))
enum {
@@ -124,6 +122,7 @@ struct GdmGreeterLoginWindowPrivate
gboolean timed_login_enabled;
guint timed_login_delay;
+ char *timed_login_username;
guint timed_login_timeout_id;
guint animation_timeout_id;
@@ -622,6 +621,25 @@ gdm_greeter_login_window_problem (GdmGreeterLoginWindow *login_window,
return TRUE;
}
+void
+gdm_greeter_login_window_request_timed_login (GdmGreeterLoginWindow *login_window,
+ const char *username,
+ int delay)
+{
+ g_return_if_fail (GDM_IS_GREETER_LOGIN_WINDOW (login_window));
+
+ g_debug ("GdmGreeterLoginWindow: requested automatic login for user '%s' in %d seconds", username, delay);
+
+ login_window->priv->timed_login_enabled = TRUE;
+ login_window->priv->timed_login_username = g_strdup (username);
+ login_window->priv->timed_login_delay = delay;
+
+ reset_dialog (login_window);
+ gdm_user_chooser_widget_set_show_auto_user (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser), TRUE);
+ gdm_user_chooser_widget_set_chosen_user_name (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser), GDM_USER_CHOOSER_USER_AUTO);
+ restart_timed_login_timeout (login_window);
+}
+
gboolean
gdm_greeter_login_window_info_query (GdmGreeterLoginWindow *login_window,
const char *text)
@@ -1246,10 +1264,6 @@ load_theme (GdmGreeterLoginWindow *login_window)
gdm_user_chooser_widget_set_show_only_chosen (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser), TRUE);
- if (login_window->priv->timed_login_enabled) {
- gdm_user_chooser_widget_set_show_auto_user (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser), TRUE);
- }
-
g_signal_connect (login_window->priv->user_chooser,
"activated",
G_CALLBACK (on_user_chosen),
@@ -1416,49 +1430,6 @@ gdm_greeter_login_window_size_allocate (GtkWidget *widget,
}
static void
-read_configuration (GdmGreeterLoginWindow *login_window)
-{
- gboolean res;
- int delay;
- char *username;
-
- g_debug ("GdmGreeterLoginWindow: reading system configuration");
-
- res = gdm_settings_client_get_boolean (GDM_KEY_TIMED_LOGIN_ENABLE,
- &login_window->priv->timed_login_enabled);
- if (! res) {
- g_warning ("Unable to read configuration for %s", GDM_KEY_TIMED_LOGIN_ENABLE);
- }
- g_debug ("GdmGreeterLoginWindow: TimedLoginEnable=%s",
- login_window->priv->timed_login_enabled ? "true" : "false");
-
- /* treat failures here as disabling */
- username = NULL;
- res = gdm_settings_client_get_string (GDM_KEY_TIMED_LOGIN_USER, &username);
- if (! res) {
- g_warning ("Unable to read configuration for %s", GDM_KEY_TIMED_LOGIN_USER);
- login_window->priv->timed_login_enabled = FALSE;
- } else {
- if (username == NULL) {
- login_window->priv->timed_login_enabled = FALSE;
- }
- }
- g_debug ("GdmGreeterLoginWindow: TimedLogin=%s", username);
- g_free (username);
-
- delay = -1;
- res = gdm_settings_client_get_int (GDM_KEY_TIMED_LOGIN_DELAY, &delay);
- if (! res) {
- g_warning ("Unable to read configuration for %s", GDM_KEY_TIMED_LOGIN_DELAY);
- } else {
- if (delay >= 0) {
- login_window->priv->timed_login_delay = delay;
- }
- }
- g_debug ("GdmGreeterLoginWindow: TimedLoginDelay=%d", delay);
-}
-
-static void
update_banner_message (GdmGreeterLoginWindow *login_window)
{
GError *error;
@@ -1511,7 +1482,6 @@ gdm_greeter_login_window_constructor (GType type,
construct_properties));
- read_configuration (login_window);
load_theme (login_window);
update_banner_message (login_window);
@@ -1663,7 +1633,6 @@ gdm_greeter_login_window_init (GdmGreeterLoginWindow *login_window)
login_window->priv = GDM_GREETER_LOGIN_WINDOW_GET_PRIVATE (login_window);
login_window->priv->timed_login_enabled = FALSE;
- login_window->priv->timed_login_delay = TIMED_LOGIN_TIMEOUT_SEC;
gtk_window_set_title (GTK_WINDOW (login_window), _("Login Window"));
gtk_window_set_opacity (GTK_WINDOW (login_window), 0.85);
diff --git a/gui/simple-greeter/gdm-greeter-login-window.h b/gui/simple-greeter/gdm-greeter-login-window.h
index 3781473e..58125e9d 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.h
+++ b/gui/simple-greeter/gdm-greeter-login-window.h
@@ -75,6 +75,10 @@ gboolean gdm_greeter_login_window_info (GdmGreeterLogin
gboolean gdm_greeter_login_window_problem (GdmGreeterLoginWindow *login_window,
const char *text);
+void gdm_greeter_login_window_request_timed_login (GdmGreeterLoginWindow *login_window,
+ const char *username,
+ int delay);
+
G_END_DECLS
#endif /* __GDM_GREETER_LOGIN_WINDOW_H */
diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c
index 4f625c50..c2223d5a 100644
--- a/gui/simple-greeter/gdm-greeter-session.c
+++ b/gui/simple-greeter/gdm-greeter-session.c
@@ -149,6 +149,16 @@ on_default_session_name_changed (GdmGreeterClient *client,
}
static void
+on_timed_login_requested (GdmGreeterClient *client,
+ const char *text,
+ int delay,
+ GdmGreeterSession *session)
+{
+ g_debug ("GdmGreeterSession: timed login requested for user %s (in %d seconds)", text, delay);
+ gdm_greeter_login_window_request_timed_login (GDM_GREETER_LOGIN_WINDOW (session->priv->login_window), text, delay);
+}
+
+static void
on_info_query (GdmGreeterClient *client,
const char *text,
GdmGreeterSession *session)
@@ -838,6 +848,11 @@ gdm_greeter_session_init (GdmGreeterSession *session)
"default-session-name-changed",
G_CALLBACK (on_default_session_name_changed),
session);
+ g_signal_connect (session->priv->client,
+ "timed-login-requested",
+ G_CALLBACK (on_timed_login_requested),
+ session);
+
/* We want to listen for panel mnemonics even if the
* login window is focused, so we intercept them here.