#include "shared-data-manager.h"
enum {
- PROP_0,
- PROP_ACTIVE_USERNAME,
+ PROP_ACTIVE_USERNAME = 1,
};
enum {
CONNECTED,
+ DISCONNECTED,
CREATE_SESSION,
START_SESSION,
LAST_SIGNAL
}
static void
-handle_login (Greeter *greeter, guint32 sequence_number, const gchar *username)
+handle_authenticate (Greeter *greeter, guint32 sequence_number, const gchar *username)
{
const gchar *autologin_username, *service;
gboolean is_interactive;
}
static void
-handle_login_as_guest (Greeter *greeter, guint32 sequence_number)
+handle_authenticate_as_guest (Greeter *greeter, guint32 sequence_number)
{
g_debug ("Greeter start authentication for guest account");
}
static void
-handle_login_remote (Greeter *greeter, const gchar *session_name, const gchar *username, guint32 sequence_number)
+handle_authenticate_remote (Greeter *greeter, const gchar *session_name, const gchar *username, guint32 sequence_number)
{
gchar *service;
{
g_debug ("Greeter closed communication channel");
greeter->priv->from_greeter_watch = 0;
+ g_signal_emit (greeter, signals[DISCONNECTED], 0);
return FALSE;
}
if (error)
g_warning ("Error reading from greeter: %s", error->message);
g_clear_error (&error);
- if (status != G_IO_STATUS_NORMAL)
+ if (status == G_IO_STATUS_EOF)
+ {
+ g_debug ("Greeter closed communication channel");
+ greeter->priv->from_greeter_watch = 0;
+ g_signal_emit (greeter, signals[DISCONNECTED], 0);
+ return FALSE;
+ }
+ else if (status != G_IO_STATUS_NORMAL)
return TRUE;
greeter->priv->n_read += n_read;
case GREETER_MESSAGE_AUTHENTICATE:
sequence_number = read_int (greeter, &offset);
username = read_string (greeter, &offset);
- handle_login (greeter, sequence_number, username);
+ handle_authenticate (greeter, sequence_number, username);
g_free (username);
break;
case GREETER_MESSAGE_AUTHENTICATE_AS_GUEST:
sequence_number = read_int (greeter, &offset);
- handle_login_as_guest (greeter, sequence_number);
+ handle_authenticate_as_guest (greeter, sequence_number);
break;
case GREETER_MESSAGE_AUTHENTICATE_REMOTE:
sequence_number = read_int (greeter, &offset);
session_name = read_string (greeter, &offset);
username = read_string (greeter, &offset);
- handle_login_remote (greeter, session_name, username, sequence_number);
+ handle_authenticate_remote (greeter, session_name, username, sequence_number);
break;
case GREETER_MESSAGE_CONTINUE_AUTHENTICATION:
n_secrets = read_int (greeter, &offset);
}
Session *
-greeter_get_authentication_session (Greeter *greeter)
+greeter_take_authentication_session (Greeter *greeter)
{
+ Session *session;
+
g_return_val_if_fail (greeter != NULL, NULL);
- return greeter->priv->authentication_session;
+
+ session = greeter->priv->authentication_session;
+ if (greeter->priv->authentication_session)
+ g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter);
+ greeter->priv->authentication_session = NULL;
+
+ return session;
}
gboolean
NULL,
G_TYPE_NONE, 0);
+ signals[DISCONNECTED] =
+ g_signal_new (GREETER_SIGNAL_DISCONNECTED,
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GreeterClass, disconnected),
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE, 0);
+
signals[CREATE_SESSION] =
g_signal_new (GREETER_SIGNAL_CREATE_SESSION,
G_TYPE_FROM_CLASS (klass),