summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2009-01-16 13:01:48 -0500
committerRay Strode <rstrode@redhat.com>2011-06-13 20:33:47 -0400
commitc48494034587fcea734a2fb69631590edd54dd15 (patch)
treec3b3a107bbc3fbeee52f846898cefe746b67782b /gui
parent8b597446d585cde5ad5826c200d4bb8eff1a75b9 (diff)
downloadgdm-c48494034587fcea734a2fb69631590edd54dd15.tar.gz
daemon,greeter: Make greeter/autologin session initiate PAM conversation
Now the greeter (and also the autologin code) has to say what PAM stack it wants the slave to run. When that stack is ready, we emit the Ready signal as before, but now the Ready signal carries a string argument saying which service is ready to converse. When we support multiple PAM stacks, the greeter will call StartConversation for each stack, and will keep the UI associated with each stack disabled until the Ready signals come back one-by-one.
Diffstat (limited to 'gui')
-rw-r--r--gui/simple-greeter/gdm-greeter-client.c18
-rw-r--r--gui/simple-greeter/gdm-greeter-client.h4
-rw-r--r--gui/simple-greeter/gdm-greeter-session.c4
3 files changed, 18 insertions, 8 deletions
diff --git a/gui/simple-greeter/gdm-greeter-client.c b/gui/simple-greeter/gdm-greeter-client.c
index 853d054a..5fed6f9b 100644
--- a/gui/simple-greeter/gdm-greeter-client.c
+++ b/gui/simple-greeter/gdm-greeter-client.c
@@ -230,11 +230,7 @@ static void
on_ready (GdmGreeterClient *client,
DBusMessage *message)
{
- g_debug ("GdmGreeterClient: Ready");
-
- g_signal_emit (client,
- gdm_greeter_client_signals[READY],
- 0);
+ emit_string_signal_for_message (client, "Ready", message, READY);
}
static void
@@ -404,6 +400,14 @@ send_dbus_void_method (DBusConnection *connection,
}
void
+gdm_greeter_client_call_start_conversation (GdmGreeterClient *client,
+ const char *service_name)
+{
+ send_dbus_string_method (client->priv->connection,
+ "StartConversation", service_name);
+}
+
+void
gdm_greeter_client_call_begin_auto_login (GdmGreeterClient *client,
const char *username)
{
@@ -866,9 +870,9 @@ gdm_greeter_client_class_init (GdmGreeterClientClass *klass)
G_STRUCT_OFFSET (GdmGreeterClientClass, ready),
NULL,
NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__STRING,
G_TYPE_NONE,
- 0);
+ 1, G_TYPE_STRING);
gdm_greeter_client_signals[RESET] =
g_signal_new ("reset",
diff --git a/gui/simple-greeter/gdm-greeter-client.h b/gui/simple-greeter/gdm-greeter-client.h
index 9e093cfc..8982214a 100644
--- a/gui/simple-greeter/gdm-greeter-client.h
+++ b/gui/simple-greeter/gdm-greeter-client.h
@@ -83,13 +83,15 @@ GQuark gdm_greeter_client_error_quark (void);
GdmGreeterClient * gdm_greeter_client_new (void);
gboolean gdm_greeter_client_start (GdmGreeterClient *client,
- GError **error);
+ GError **error);
void gdm_greeter_client_stop (GdmGreeterClient *client);
gboolean gdm_greeter_client_get_display_is_local (GdmGreeterClient *client);
char * gdm_greeter_client_call_get_display_id (GdmGreeterClient *client);
+void gdm_greeter_client_call_start_conversation (GdmGreeterClient *client,
+ const char *service_name);
void gdm_greeter_client_call_begin_auto_login (GdmGreeterClient *client,
const char *username);
void gdm_greeter_client_call_begin_verification (GdmGreeterClient *client);
diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c
index bf2dd2e6..94473446 100644
--- a/gui/simple-greeter/gdm-greeter-session.c
+++ b/gui/simple-greeter/gdm-greeter-session.c
@@ -89,6 +89,7 @@ on_problem (GdmGreeterClient *client,
static void
on_ready (GdmGreeterClient *client,
+ const char *service_name,
GdmGreeterSession *session)
{
g_debug ("GdmGreeterSession: Ready");
@@ -262,6 +263,7 @@ on_cancelled (GdmGreeterLoginWindow *login_window,
GdmGreeterSession *session)
{
gdm_greeter_client_call_cancel (session->priv->client);
+ gdm_greeter_client_call_start_conversation (session->priv->client, "gdm");
}
static void
@@ -415,6 +417,8 @@ gdm_greeter_session_start (GdmGreeterSession *session,
toggle_panel (session, TRUE);
toggle_login_window (session, TRUE);
+ gdm_greeter_client_call_start_conversation (session->priv->client, "gdm");
+
gdm_profile_end (NULL);
return res;