diff options
author | Ray Strode <rstrode@redhat.com> | 2009-02-24 15:12:35 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2009-04-17 10:24:49 -0400 |
commit | 11616eee76ac2e6c75c4b090f590696159eb3b92 (patch) | |
tree | f42e57549a1d7c77b4bf8cb05388bf9cdc57c671 | |
parent | 4cfc355618cbc1d47650ad7483d06c3980cfcc46 (diff) | |
download | gdm-11616eee76ac2e6c75c4b090f590696159eb3b92.tar.gz |
Separate handling of non-users in user list from users
Now get_chosen_user returns NULL if the activated item
wasn't a user. We also separate the handling of on item
activation in two functions depending on the item type.
This will be useful for adding custom handling for plugin
added items.
-rw-r--r-- | gui/simple-greeter/gdm-greeter-login-window.c | 53 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-user-chooser-widget.c | 23 | ||||
-rw-r--r-- | gui/simple-greeter/plugins/fingerprint/gdm-fingerprint-extension.c | 2 |
3 files changed, 56 insertions, 22 deletions
diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c index a7cda4e0..3f4c031b 100644 --- a/gui/simple-greeter/gdm-greeter-login-window.c +++ b/gui/simple-greeter/gdm-greeter-login-window.c @@ -1612,29 +1612,49 @@ begin_task_verification_for_selected_user (GdmTaskList *task_list, } static void -on_user_chosen (GdmUserChooserWidget *user_chooser, - GdmGreeterLoginWindow *login_window) +on_user_chosen (GdmGreeterLoginWindow *login_window, + const char *user_name) { - char *user_name; + g_debug ("GdmGreeterLoginWindow: user chosen '%s'", user_name); + + g_signal_emit (G_OBJECT (login_window), signals[USER_SELECTED], + 0, user_name); + + gdm_task_list_foreach_task (GDM_TASK_LIST (login_window->priv->conversation_list), + (GdmTaskListForeachFunc) + begin_task_verification_for_selected_user, + login_window); + + switch_mode (login_window, MODE_AUTHENTICATION); +} + +static void +on_user_chooser_activated (GdmUserChooserWidget *user_chooser, + GdmGreeterLoginWindow *login_window) +{ + char *item_id; user_name = gdm_user_chooser_widget_get_chosen_user_name (GDM_USER_CHOOSER_WIDGET (login_window->priv->user_chooser)); - g_debug ("GdmGreeterLoginWindow: user chosen '%s'", user_name); - if (user_name == NULL) { + if (user_name != NULL) { + g_debug ("GdmGreeterLoginWindow: user chosen '%s'", user_name); + on_user_chosen (login_window, user_name); + g_free (user_name); return; } - g_signal_emit (G_OBJECT (login_window), signals[USER_SELECTED], - 0, user_name); + item_id = gdm_chooser_widget_get_active_item (GDM_CHOOSER_WIDGET (user_chooser)); + g_debug ("GdmGreeterLoginWindow: item chosen '%s'", item_id); - if (strcmp (user_name, GDM_USER_CHOOSER_USER_OTHER) == 0) { + if (strcmp (item_id, GDM_USER_CHOOSER_USER_OTHER) == 0) { + g_debug ("GdmGreeterLoginWindow: Starting all auth conversations"); gdm_task_list_foreach_task (GDM_TASK_LIST (login_window->priv->conversation_list), (GdmTaskListForeachFunc) begin_task_verification, login_window); - } else if (strcmp (user_name, GDM_USER_CHOOSER_USER_GUEST) == 0) { - /* FIXME: handle guest account stuff */ - } else if (strcmp (user_name, GDM_USER_CHOOSER_USER_AUTO) == 0) { + g_free (item_id); + } else if (strcmp (item_id, GDM_USER_CHOOSER_USER_AUTO) == 0) { + g_debug ("GdmGreeterLoginWindow: Starting auto login"); g_signal_emit (login_window, signals[BEGIN_AUTO_LOGIN], 0, login_window->priv->timed_login_username); @@ -1644,16 +1664,11 @@ on_user_chosen (GdmUserChooserWidget *user_chooser, /* just wait for the user to select language and stuff */ set_log_in_button_mode (login_window, LOGIN_BUTTON_TIMED_LOGIN); set_message (login_window, _("Select language and click Log In")); - } else { - gdm_task_list_foreach_task (GDM_TASK_LIST (login_window->priv->conversation_list), - (GdmTaskListForeachFunc) - begin_task_verification_for_selected_user, - login_window); + g_free (item_id); } + g_debug ("GdmGreeterLoginWindow: Switching to shrunken authentication mode"); switch_mode (login_window, MODE_AUTHENTICATION); - - g_free (user_name); } static void @@ -1942,7 +1957,7 @@ load_theme (GdmGreeterLoginWindow *login_window) login_window); g_signal_connect (login_window->priv->user_chooser, "activated", - G_CALLBACK (on_user_chosen), + G_CALLBACK (on_user_chooser_activated), login_window); g_signal_connect (login_window->priv->user_chooser, "deactivated", diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c index b1cb2819..e0737b89 100644 --- a/gui/simple-greeter/gdm-user-chooser-widget.c +++ b/gui/simple-greeter/gdm-user-chooser-widget.c @@ -238,9 +238,30 @@ gdm_user_chooser_widget_set_show_user_auto (GdmUserChooserWidget *widget, char * gdm_user_chooser_widget_get_chosen_user_name (GdmUserChooserWidget *widget) { + char *active_item_id; + gboolean isnt_user; + g_return_val_if_fail (GDM_IS_USER_CHOOSER_WIDGET (widget), NULL); - return gdm_chooser_widget_get_active_item (GDM_CHOOSER_WIDGET (widget)); + active_item_id = gdm_chooser_widget_get_active_item (GDM_CHOOSER_WIDGET (widget)); + if (active_item_id == NULL) { + g_debug ("GdmUserChooserWidget: no active item in list"); + return NULL; + } + + gdm_chooser_widget_lookup_item (GDM_CHOOSER_WIDGET (widget), active_item_id, + NULL, NULL, NULL, NULL, NULL, + &isnt_user); + + if (isnt_user) { + g_debug ("GdmUserChooserWidget: active item '%s' isn't a user", active_item_id); + g_free (active_item_id); + return NULL; + } + + g_debug ("GdmUserChooserWidget: active item '%s' is a user", active_item_id); + + return active_item_id; } void diff --git a/gui/simple-greeter/plugins/fingerprint/gdm-fingerprint-extension.c b/gui/simple-greeter/plugins/fingerprint/gdm-fingerprint-extension.c index 7aa99e7c..316ef46a 100644 --- a/gui/simple-greeter/plugins/fingerprint/gdm-fingerprint-extension.c +++ b/gui/simple-greeter/plugins/fingerprint/gdm-fingerprint-extension.c @@ -287,8 +287,6 @@ create_page (GdmFingerprintExtension *extension) static void create_actions (GdmFingerprintExtension *extension) { - GtkAction *action; - extension->priv->actions = gtk_action_group_new ("gdm-fingerprint-extension"); } |