summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2008-03-09 22:05:51 +0000
committerRay Strode <halfline@src.gnome.org>2008-03-09 22:05:51 +0000
commit7ccdd86f867ebbd31137ae5cd5397e1243c6b294 (patch)
tree226af66d17ec67b3393411ce09f3f83cfdf89095
parent073c52b1dbd8c89d0665e1df3958fa23e0b96866 (diff)
downloadgdm-7ccdd86f867ebbd31137ae5cd5397e1243c6b294.tar.gz
When the user has successfully been verified, inform the greeter, so that
2008-03-09 Ray Strode <rstrode@redhat.com> * daemon/gdm-simple-slave.c: (on_session_authorized), * daemon/gdm-greeter-server.[ch]: (gdm_greeter_server_user_authorized), (do_introspect): When the user has successfully been verified, inform the greeter, so that it can make a judgement about whether the user's session should be opened. * gui/simple-greeter/gdm-greeter-client.c: (on_user_authorized), (client_dbus_handle_message), (gdm_greeter_client_class_init): * gui/simple-greeter/gdm-greeter-session.c (on_user_authorized), (gdm_greeter_session_init): forward "user-authorized" signal from slave to login window * gui/simple-greeter/gdm-greeter-login-window.c: (gdm_greeter_login_window_user_authorized): When the user is verified start the session as soon as the user has had an opporunity to interact with language and session choosers svn path=/trunk/; revision=5978
-rw-r--r--ChangeLog23
-rw-r--r--daemon/gdm-greeter-server.c8
-rw-r--r--daemon/gdm-greeter-server.h2
-rw-r--r--daemon/gdm-simple-slave.c1
-rw-r--r--gui/simple-greeter/gdm-greeter-client.c21
-rw-r--r--gui/simple-greeter/gdm-greeter-client.h1
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.c10
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.h1
-rw-r--r--gui/simple-greeter/gdm-greeter-session.c13
9 files changed, 79 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a9cbe06..402682c1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,28 @@
2008-03-09 Ray Strode <rstrode@redhat.com>
+ * daemon/gdm-simple-slave.c:
+ (on_session_authorized),
+ * daemon/gdm-greeter-server.[ch]:
+ (gdm_greeter_server_user_authorized),
+ (do_introspect):
+ When the user has successfully been verified,
+ inform the greeter, so that it can make a judgement
+ about whether the user's session should be opened.
+ * gui/simple-greeter/gdm-greeter-client.c:
+ (on_user_authorized), (client_dbus_handle_message),
+ (gdm_greeter_client_class_init):
+ * gui/simple-greeter/gdm-greeter-session.c
+ (on_user_authorized), (gdm_greeter_session_init):
+ forward "user-authorized" signal from slave to
+ login window
+ * gui/simple-greeter/gdm-greeter-login-window.c:
+ (gdm_greeter_login_window_user_authorized):
+ When the user is verified start the session as soon
+ as the user has had an opporunity to interact with
+ language and session choosers
+
+2008-03-09 Ray Strode <rstrode@redhat.com>
+
* gui/simple-greeter/gdm-greeter-login-window.[ch]:
(do_cancel), (gdm_greeter_login_window_start_when_ready),
(gdm_greeter_login_window_class_init):
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c
index 9ad6c1e1..0768a4a4 100644
--- a/daemon/gdm-greeter-server.c
+++ b/daemon/gdm-greeter-server.c
@@ -280,6 +280,12 @@ gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server,
send_dbus_string_and_int_signal (greeter_server, "TimedLoginRequested", username, delay);
}
+void
+gdm_greeter_server_user_authorized (GdmGreeterServer *greeter_server)
+{
+ send_dbus_void_signal (greeter_server, "UserAuthorized");
+}
+
/* Note: Use abstract sockets like dbus does by default on Linux. Abstract
* sockets are only available on Linux.
*/
@@ -716,6 +722,8 @@ do_introspect (DBusConnection *connection,
" </signal>\n"
" <signal name=\"Reset\">\n"
" </signal>\n"
+ " <signal name=\"UserAuthorized\">\n"
+ " </signal>\n"
" </interface>\n");
reply = dbus_message_new_method_return (message);
diff --git a/daemon/gdm-greeter-server.h b/daemon/gdm-greeter-server.h
index e30094ff..e6b33032 100644
--- a/daemon/gdm-greeter-server.h
+++ b/daemon/gdm-greeter-server.h
@@ -94,6 +94,8 @@ void gdm_greeter_server_default_session_name_changed (GdmGreeterS
void gdm_greeter_server_request_timed_login (GdmGreeterServer *greeter_server,
const char *username,
int delay);
+void gdm_greeter_server_user_authorized (GdmGreeterServer *greeter_server);
+
G_END_DECLS
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
index 1cbf0230..8dfc0729 100644
--- a/daemon/gdm-simple-slave.c
+++ b/daemon/gdm-simple-slave.c
@@ -221,6 +221,7 @@ static void
on_session_authorized (GdmSession *session,
GdmSimpleSlave *slave)
{
+ gdm_greeter_server_user_authorized (slave->priv->greeter_server);
gdm_simple_slave_accredit_when_ready (slave);
}
diff --git a/gui/simple-greeter/gdm-greeter-client.c b/gui/simple-greeter/gdm-greeter-client.c
index 9b3620ba..3e55403c 100644
--- a/gui/simple-greeter/gdm-greeter-client.c
+++ b/gui/simple-greeter/gdm-greeter-client.c
@@ -68,6 +68,7 @@ enum {
DEFAULT_LANGUAGE_NAME_CHANGED,
DEFAULT_SESSION_NAME_CHANGED,
TIMED_LOGIN_REQUESTED,
+ USER_AUTHORIZED,
LAST_SIGNAL
};
@@ -187,6 +188,15 @@ on_timed_login_requested (GdmGreeterClient *client,
}
static void
+on_user_authorized (GdmGreeterClient *client,
+ DBusMessage *message)
+{
+ g_signal_emit (client,
+ gdm_greeter_client_signals[USER_AUTHORIZED],
+ 0);
+}
+
+static void
on_info_query (GdmGreeterClient *client,
DBusMessage *message)
{
@@ -620,6 +630,8 @@ client_dbus_handle_message (DBusConnection *connection,
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 if (dbus_message_is_signal (message, GREETER_SERVER_DBUS_INTERFACE, "UserAuthorized")) {
+ on_user_authorized (client, message);
} else {
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
@@ -894,6 +906,15 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass)
G_TYPE_NONE,
2, G_TYPE_STRING, G_TYPE_INT);
+ gdm_greeter_client_signals[USER_AUTHORIZED] =
+ g_signal_new ("user-authorized",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmGreeterClientClass, user_authorized),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
}
static void
diff --git a/gui/simple-greeter/gdm-greeter-client.h b/gui/simple-greeter/gdm-greeter-client.h
index 9171604d..7adc4ea6 100644
--- a/gui/simple-greeter/gdm-greeter-client.h
+++ b/gui/simple-greeter/gdm-greeter-client.h
@@ -67,6 +67,7 @@ typedef struct
void (* timed_login_requested) (GdmGreeterClient *client,
const char *username,
int delay);
+ void (* user_authorized) (GdmGreeterClient *client);
} 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 99942662..41a70ae1 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.c
+++ b/gui/simple-greeter/gdm-greeter-login-window.c
@@ -746,6 +746,16 @@ gdm_greeter_login_window_secret_info_query (GdmGreeterLoginWindow *login_window,
return TRUE;
}
+void
+gdm_greeter_login_window_user_authorized (GdmGreeterLoginWindow *login_window)
+{
+ g_return_if_fail (GDM_IS_GREETER_LOGIN_WINDOW (login_window));
+
+ g_debug ("GdmGreeterLoginWindow: user now authorized");
+
+ gdm_greeter_login_window_start_session_when_ready (login_window);
+}
+
static void
_gdm_greeter_login_window_set_display_is_local (GdmGreeterLoginWindow *login_window,
gboolean is)
diff --git a/gui/simple-greeter/gdm-greeter-login-window.h b/gui/simple-greeter/gdm-greeter-login-window.h
index 71fbbab1..817d0a2c 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.h
+++ b/gui/simple-greeter/gdm-greeter-login-window.h
@@ -79,6 +79,7 @@ gboolean gdm_greeter_login_window_problem (GdmGreeterLogin
void gdm_greeter_login_window_request_timed_login (GdmGreeterLoginWindow *login_window,
const char *username,
int delay);
+void gdm_greeter_login_window_user_authorized (GdmGreeterLoginWindow *login_window);
G_END_DECLS
diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c
index 739e8615..8a6e3e2a 100644
--- a/gui/simple-greeter/gdm-greeter-session.c
+++ b/gui/simple-greeter/gdm-greeter-session.c
@@ -155,6 +155,14 @@ on_timed_login_requested (GdmGreeterClient *client,
}
static void
+on_user_authorized (GdmGreeterClient *client,
+ GdmGreeterSession *session)
+{
+ g_debug ("GdmGreeterSession: user authorized");
+ gdm_greeter_login_window_user_authorized (GDM_GREETER_LOGIN_WINDOW (session->priv->login_window));
+}
+
+static void
on_info_query (GdmGreeterClient *client,
const char *text,
GdmGreeterSession *session)
@@ -839,7 +847,10 @@ gdm_greeter_session_init (GdmGreeterSession *session)
"timed-login-requested",
G_CALLBACK (on_timed_login_requested),
session);
-
+ g_signal_connect (session->priv->client,
+ "user-authorized",
+ G_CALLBACK (on_user_authorized),
+ session);
/* We want to listen for panel mnemonics even if the
* login window is focused, so we intercept them here.