static GtkEntry *prompt_entry;
static GtkComboBox *session_combo;
static gchar *default_font_name, *default_theme_name;
+static gboolean cancelling = FALSE;
static gchar *
get_session ()
{
gtk_widget_hide (GTK_WIDGET (message_label));
gtk_label_set_text (message_label, "");
+ cancelling = FALSE;
if (strcmp (username, "*other") == 0)
{
cancel_cb (GtkWidget *widget)
{
lightdm_greeter_cancel_authentication (greeter);
+ cancelling = TRUE;
}
static void
static void
authentication_complete_cb (LightDMGreeter *greeter)
{
- gtk_widget_hide (prompt_box);
- gtk_label_set_text (prompt_label, "");
gtk_entry_set_text (prompt_entry, "");
gtk_widget_grab_focus (GTK_WIDGET (user_view));
if (lightdm_greeter_get_is_authenticated (greeter))
{
gchar *session = get_session ();
+
+ gtk_widget_hide (prompt_box);
+
if (!lightdm_greeter_start_session_sync (greeter, session))
- gtk_label_set_text (message_label, _("Failed to authenticate"));
+ {
+ gtk_label_set_text (message_label, _("Failed to start session"));
+ gtk_widget_show (GTK_WIDGET (message_label));
+ }
g_free (session);
}
+ else if (cancelling)
+ {
+ cancelling = FALSE;
+ gtk_widget_hide (prompt_box);
+ }
else
- gtk_label_set_text (message_label, _("Failed to authenticate"));
-
- gtk_widget_show (GTK_WIDGET (message_label));
- if (lightdm_greeter_get_hide_users_hint (greeter))
- lightdm_greeter_authenticate (greeter, NULL);
+ {
+ gtk_label_set_text (message_label, _("Incorrect password, please try again"));
+ gtk_widget_show (GTK_WIDGET (message_label));
+ lightdm_greeter_authenticate (greeter, lightdm_greeter_get_authentication_user (greeter));
+ }
}
static void
gtk_window_resize (panel_window, monitor_geometry.width, allocation.height);
gtk_window_move (panel_window, monitor_geometry.x, monitor_geometry.y);
- gtk_widget_grab_focus (GTK_WIDGET (user_view));
+ gtk_widget_grab_focus (GTK_WIDGET (login_window));
gtk_main ();
static void
write_string (guint8 *buffer, gint buffer_length, const gchar *value, gsize *offset)
{
- gint length = strlen (value);
+ gint length = 0;
+
+ if (value)
+ length = strlen (value);
write_int (buffer, buffer_length, length, offset);
if (*offset + length >= buffer_length)
return;
static guint32
string_length (const gchar *value)
{
- return int_length () + strlen (value);
+ if (value)
+ return int_length () + strlen (value);
+ else
+ return int_length ();
}
static void
g_free (username);
username = NULL;
}
- else
g_free (priv->authentication_user);
priv->authentication_user = username;
priv->cancelling_authentication = FALSE;
priv->is_authenticated = (return_code == 0);
- g_signal_emit (G_OBJECT (greeter), signals[AUTHENTICATION_COMPLETE], 0);
priv->in_authentication = FALSE;
+ g_signal_emit (G_OBJECT (greeter), signals[AUTHENTICATION_COMPLETE], 0);
}
static guint8 *
void
lightdm_greeter_authenticate (LightDMGreeter *greeter, const char *username)
{
- LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
+ LightDMGreeterPrivate *priv;
guint8 message[MAX_MESSAGE_LENGTH];
gsize offset = 0;
g_return_if_fail (LIGHTDM_IS_GREETER (greeter));
- if (!username)
- username = "";
+ priv = GET_PRIVATE (greeter);
priv->cancelling_authentication = FALSE;
priv->authenticate_sequence_number++;
priv->in_authentication = TRUE;
priv->is_authenticated = FALSE;
- g_free (priv->authentication_user);
- priv->authentication_user = g_strdup (username);
+ if (username != priv->authentication_user)
+ {
+ g_free (priv->authentication_user);
+ priv->authentication_user = g_strdup (username);
+ }
g_debug ("Starting authentication for user %s...", username);
write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_AUTHENTICATE, int_length () + string_length (username), &offset);
gboolean
lightdm_greeter_start_session_sync (LightDMGreeter *greeter, const gchar *session)
{
- LightDMGreeterPrivate *priv = GET_PRIVATE (greeter);
+ LightDMGreeterPrivate *priv;
guint8 message[MAX_MESSAGE_LENGTH];
guint8 *response;
gsize response_length, offset = 0;
guint32 id, return_code = 1;
g_return_val_if_fail (LIGHTDM_IS_GREETER (greeter), FALSE);
+
+ priv = GET_PRIVATE (greeter);
g_return_val_if_fail (priv->is_authenticated, FALSE);
- if (!session)
- {
- session = "";
- g_debug ("Starting default session");
- }
- else
+ if (session)
g_debug ("Starting session %s", session);
+ else
+ g_debug ("Starting default session");
write_header (message, MAX_MESSAGE_LENGTH, GREETER_MESSAGE_START_SESSION, string_length (session), &offset);
write_string (message, MAX_MESSAGE_LENGTH, session, &offset);