diff options
author | Ray Strode <rstrode@redhat.com> | 2008-03-09 21:41:08 +0000 |
---|---|---|
committer | Ray Strode <halfline@src.gnome.org> | 2008-03-09 21:41:08 +0000 |
commit | 3259f2a3391c7f062c5311d3994c30e06412f2b3 (patch) | |
tree | 416cd6229e0f3788a1952315c48cef91288d378d | |
parent | 181c582036cec347f921033c79f0b24c3d0943e0 (diff) | |
download | gdm-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-- | ChangeLog | 31 | ||||
-rw-r--r-- | daemon/gdm-greeter-server.c | 12 | ||||
-rw-r--r-- | daemon/gdm-greeter-server.h | 4 | ||||
-rw-r--r-- | daemon/gdm-simple-slave.c | 33 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-client.c | 23 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-client.h | 3 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-login-window.c | 71 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-login-window.h | 4 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-session.c | 15 |
9 files changed, 145 insertions, 51 deletions
@@ -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. |