From 731a32bb98667f32d197feb32f69db777c28dc2b Mon Sep 17 00:00:00 2001 From: Robert Ancell Date: Mon, 18 Jul 2011 18:31:25 +1000 Subject: [PATCH] Support hide-users hint --- data/lightdm.conf | 5 +- doc/lightdm-gobject-0-sections.txt | 2 +- doc/tmpl/greeter.sgml | 12 +-- greeters/gtk/greeter.ui | 1 - greeters/gtk/lightdm-gtk-greeter.c | 127 +++++++++++++++------------ liblightdm-gobject/greeter.c | 24 +++-- liblightdm-gobject/lightdm/greeter.h | 2 +- liblightdm-qt/QLightDM/greeter.cpp | 4 +- liblightdm-qt/QLightDM/greeter.h | 2 +- src/display.c | 8 ++ 10 files changed, 106 insertions(+), 81 deletions(-) diff --git a/data/lightdm.conf b/data/lightdm.conf index 815ceb2b..cd89992e 100644 --- a/data/lightdm.conf +++ b/data/lightdm.conf @@ -22,6 +22,7 @@ seats=Seat0 # xserver-config = Config file to pass to X server # xserver-key = Authentication key to use for XDM-AUTHENTICATION-1 # greeter-session = Session to load for greeter +# greeter-hide-users = True to hide the user list # user-session = Session to load for users # session-wrapper = Wrapper script to run session with # autologin-guest = True to log in as guest by default @@ -36,8 +37,8 @@ seats=Seat0 #xserver-config= #xserver-key=0x0123456789ABCD #greeter-session=example-gtk-gnome -#greeter-background= -#greeter-show-user-list=true +#greeter-background=FIXME +#greeter-hide-users=false #default-session=gnome #session-wrapper= #autologin-guest=false diff --git a/doc/lightdm-gobject-0-sections.txt b/doc/lightdm-gobject-0-sections.txt index 8e414be1..a5234fd7 100644 --- a/doc/lightdm-gobject-0-sections.txt +++ b/doc/lightdm-gobject-0-sections.txt @@ -116,7 +116,7 @@ ldm_greeter_get_sessions ldm_greeter_get_default_session_hint ldm_greeter_get_hint ldm_greeter_get_has_guest_account_hint -ldm_greeter_get_show_users_hint +ldm_greeter_get_hide_users_hint ldm_greeter_get_select_user_hint ldm_greeter_get_select_guest_hint ldm_greeter_get_autologin_user_hint diff --git a/doc/tmpl/greeter.sgml b/doc/tmpl/greeter.sgml index 758560d6..67f07b05 100644 --- a/doc/tmpl/greeter.sgml +++ b/doc/tmpl/greeter.sgml @@ -207,6 +207,11 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL); + + + + + @@ -242,11 +247,6 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL); - - - - - @@ -384,7 +384,7 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL); @Returns: - + diff --git a/greeters/gtk/greeter.ui b/greeters/gtk/greeter.ui index 732f5e2d..c3c8d62e 100644 --- a/greeters/gtk/greeter.ui +++ b/greeters/gtk/greeter.ui @@ -165,7 +165,6 @@ - True True user_liststore False diff --git a/greeters/gtk/lightdm-gtk-greeter.c b/greeters/gtk/lightdm-gtk-greeter.c index 0bbe36b5..711a7416 100644 --- a/greeters/gtk/lightdm-gtk-greeter.c +++ b/greeters/gtk/lightdm-gtk-greeter.c @@ -190,6 +190,8 @@ authentication_complete_cb (LdmGreeter *greeter) { gtk_label_set_text (GTK_LABEL (message_label), "Failed to authenticate"); gtk_widget_show (message_label); + if (ldm_greeter_get_hide_users_hint (greeter)) + ldm_greeter_login_with_user_prompt (greeter); } } @@ -425,6 +427,71 @@ draw_background_cb (GtkWidget *widget, GdkEventExpose *event) return FALSE; } +static void +load_user_list () +{ + const GList *items, *item; + GtkTreeModel *model; + GtkTreeIter iter; + + g_signal_connect (greeter, "user-added", G_CALLBACK (user_added_cb), NULL); + g_signal_connect (greeter, "user-changed", G_CALLBACK (user_changed_cb), NULL); + items = ldm_greeter_get_users (greeter); + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_view)); + for (item = items; item; item = item->next) + { + LdmUser *user = item->data; + const gchar *image; + GdkPixbuf *pixbuf = NULL; + + image = ldm_user_get_image (user); + if (image) + { + gchar *path; + + path = g_filename_from_uri (image, NULL, NULL); + if (path) + pixbuf = gdk_pixbuf_new_from_file_at_scale (path, 64, 64, TRUE, NULL); + g_free (path); + } + if (!pixbuf) + pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), + "stock_person", + 64, + GTK_ICON_LOOKUP_USE_BUILTIN, + NULL); + /*if (!pixbuf) + { + pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 64, 64); + memset (gdk_pixbuf_get_pixels (pixbuf), 0, gdk_pixbuf_get_height (pixbuf) * gdk_pixbuf_get_rowstride (pixbuf) * gdk_pixbuf_get_n_channels (pixbuf)); + }*/ + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + 0, ldm_user_get_name (user), + 1, ldm_user_get_display_name (user), + 2, pixbuf, + -1); + } + if (ldm_greeter_get_has_guest_account_hint (greeter)) + { + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + 0, "*guest", + 1, "Guest Account", + 2, gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "stock_person", 64, 0, NULL), + -1); + } + + gtk_list_store_append (GTK_LIST_STORE (model), &iter); + gtk_list_store_set (GTK_LIST_STORE (model), &iter, + 0, "*other", + 1, "Other...", + 2, gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "stock_person", 64, 0, NULL), + -1); +} + static void connected_cb (LdmGreeter *greeter) { @@ -433,8 +500,8 @@ connected_cb (LdmGreeter *greeter) GdkScreen *screen; gint screen_width, screen_height; GtkBuilder *builder; - const GList *items, *item; GtkTreeModel *model; + const GList *items, *item; GtkTreeIter iter; GtkCellRenderer *renderer; gchar *rc_file, *background_image; @@ -517,59 +584,13 @@ connected_cb (LdmGreeter *greeter) gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (user_view), 0, "Face", gtk_cell_renderer_pixbuf_new(), "pixbuf", 2, NULL); gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (user_view), 1, "Name", gtk_cell_renderer_text_new(), "text", 1, NULL); - model = gtk_tree_view_get_model (GTK_TREE_VIEW (user_view)); - items = ldm_greeter_get_users (greeter); - for (item = items; item; item = item->next) - { - LdmUser *user = item->data; - const gchar *image; - GdkPixbuf *pixbuf = NULL; - - image = ldm_user_get_image (user); - if (image) - { - gchar *path; - - path = g_filename_from_uri (image, NULL, NULL); - if (path) - pixbuf = gdk_pixbuf_new_from_file_at_scale (path, 64, 64, TRUE, NULL); - g_free (path); - } - if (!pixbuf) - pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), - "stock_person", - 64, - GTK_ICON_LOOKUP_USE_BUILTIN, - NULL); - /*if (!pixbuf) - { - pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 64, 64); - memset (gdk_pixbuf_get_pixels (pixbuf), 0, gdk_pixbuf_get_height (pixbuf) * gdk_pixbuf_get_rowstride (pixbuf) * gdk_pixbuf_get_n_channels (pixbuf)); - }*/ - - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - 0, ldm_user_get_name (user), - 1, ldm_user_get_display_name (user), - 2, pixbuf, - -1); - } - if (ldm_greeter_get_has_guest_account_hint (greeter)) + if (ldm_greeter_get_hide_users_hint (greeter)) + ldm_greeter_login_with_user_prompt (greeter); + else { - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - 0, "*guest", - 1, "Guest Account", - 2, gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "stock_person", 64, 0, NULL), - -1); + load_user_list (); + gtk_widget_show (user_view); } - - gtk_list_store_append (GTK_LIST_STORE (model), &iter); - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - 0, "*other", - 1, "Other...", - 2, gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "stock_person", 64, 0, NULL), - -1); // FIXME: Select the requested user if ldm_greeter_get_timed_login_user () && ldm_greeter_get_timed_login_delay () == 0 @@ -613,8 +634,6 @@ main(int argc, char **argv) g_signal_connect (G_OBJECT (greeter), "show-message", G_CALLBACK (show_message_cb), NULL); g_signal_connect (G_OBJECT (greeter), "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL); g_signal_connect (G_OBJECT (greeter), "autologin-timer-expired", G_CALLBACK (autologin_timer_expired_cb), NULL); - g_signal_connect (G_OBJECT (greeter), "user-added", G_CALLBACK (user_added_cb), NULL); - g_signal_connect (G_OBJECT (greeter), "user-changed", G_CALLBACK (user_changed_cb), NULL); g_signal_connect (G_OBJECT (greeter), "user-removed", G_CALLBACK (user_removed_cb), NULL); g_signal_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL); ldm_greeter_connect_to_server (greeter); diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c index 4dc0f29b..6d31a56e 100644 --- a/liblightdm-gobject/greeter.c +++ b/liblightdm-gobject/greeter.c @@ -34,7 +34,7 @@ enum { PROP_LAYOUT, PROP_SESSIONS, PROP_DEFAULT_SESSION_HINT, - PROP_SHOW_USERS_HINT, + PROP_HIDE_USERS_HINT, PROP_HAS_GUEST_ACCOUNT_HINT, PROP_SELECT_USER_HINT, PROP_SELECT_GUEST_HINT, @@ -1141,22 +1141,20 @@ ldm_greeter_get_default_session_hint (LdmGreeter *greeter) } /** - * ldm_greeter_get_show_users_hint: + * ldm_greeter_get_hide_users_hint: * @greeter: A #LdmGreeter * * Check if user accounts should be shown. * - * Return value: TRUE if all the user accounts should be shown. + * Return value: TRUE if the available users should not be shown. */ gboolean -ldm_greeter_get_show_users_hint (LdmGreeter *greeter) +ldm_greeter_get_hide_users_hint (LdmGreeter *greeter) { const gchar *value; g_return_val_if_fail (LDM_IS_GREETER (greeter), FALSE); - value = ldm_greeter_get_hint (greeter, "show-users"); - if (!value) - value = "true"; + value = ldm_greeter_get_hint (greeter, "hide-users"); return g_strcmp0 (value, "true") == 0; } @@ -1737,8 +1735,8 @@ ldm_greeter_get_property (GObject *object, case PROP_DEFAULT_SESSION_HINT: g_value_set_string (value, ldm_greeter_get_default_session_hint (self)); break; - case PROP_SHOW_USERS_HINT: - g_value_set_boolean (value, ldm_greeter_get_show_users_hint (self)); + case PROP_HIDE_USERS_HINT: + g_value_set_boolean (value, ldm_greeter_get_hide_users_hint (self)); break; case PROP_HAS_GUEST_ACCOUNT_HINT: g_value_set_boolean (value, ldm_greeter_get_has_guest_account_hint (self)); @@ -1894,10 +1892,10 @@ ldm_greeter_class_init (LdmGreeterClass *klass) G_PARAM_READWRITE)); g_object_class_install_property (object_class, - PROP_SHOW_USERS_HINT, - g_param_spec_boolean ("show-users-hint", - "show-users-hint", - "Show users hint", + PROP_HIDE_USERS_HINT, + g_param_spec_boolean ("hide-users-hint", + "hide-users-hint", + "hide users hint", FALSE, G_PARAM_READABLE)); diff --git a/liblightdm-gobject/lightdm/greeter.h b/liblightdm-gobject/lightdm/greeter.h index 1b957705..e9edfd3a 100644 --- a/liblightdm-gobject/lightdm/greeter.h +++ b/liblightdm-gobject/lightdm/greeter.h @@ -97,7 +97,7 @@ const gchar *ldm_greeter_get_hint (LdmGreeter *greeter, const gchar *name); const gchar *ldm_greeter_get_default_session_hint (LdmGreeter *greeter); -gboolean ldm_greeter_get_show_users_hint (LdmGreeter *greeter); +gboolean ldm_greeter_get_hide_users_hint (LdmGreeter *greeter); gboolean ldm_greeter_get_has_guest_account_hint (LdmGreeter *greeter); diff --git a/liblightdm-qt/QLightDM/greeter.cpp b/liblightdm-qt/QLightDM/greeter.cpp index 798dc8af..ac7f16e0 100644 --- a/liblightdm-qt/QLightDM/greeter.cpp +++ b/liblightdm-qt/QLightDM/greeter.cpp @@ -422,9 +422,9 @@ QString Greeter::defaultSessionHint() const return getHint ("default-session"); } -bool Greeter::showUsersHint() const +bool Greeter::hideUsersHint() const { - return d->hints.value ("show-users", "true") == "true"; + return d->hints.value ("hide-users", "true") == "true"; } bool Greeter::hasGuestAccountHint() const diff --git a/liblightdm-qt/QLightDM/greeter.h b/liblightdm-qt/QLightDM/greeter.h index 77eab70f..d99b371e 100644 --- a/liblightdm-qt/QLightDM/greeter.h +++ b/liblightdm-qt/QLightDM/greeter.h @@ -52,7 +52,7 @@ namespace QLightDM QString getHint(QString name) const; QString defaultSessionHint() const; - bool showUsersHint() const; + bool hideUsersHint() const; bool hasGuestAccountHint() const; QString selectUserHint() const; bool selectGuestHint() const; diff --git a/src/display.c b/src/display.c index 2dde4d30..49697ddb 100644 --- a/src/display.c +++ b/src/display.c @@ -52,6 +52,9 @@ struct DisplayPrivate /* Greeter session */ gchar *greeter_session; + /* TRUE if the user list should be shown */ + gboolean greeter_hide_users; + /* Default session for users */ gchar *default_session; @@ -110,6 +113,10 @@ display_load_config (Display *display, const gchar *config_section) display->priv->greeter_session = config_get_string (config_get_instance (), config_section, "greeter-session"); if (!display->priv->greeter_session) display->priv->greeter_session = config_get_string (config_get_instance (), "SeatDefaults", "greeter-session"); + if (config_section && config_has_key (config_get_instance (), config_section, "greeter-hide-users")) + display->priv->greeter_hide_users = config_get_boolean (config_get_instance (), config_section, "greeter-hide-users"); + else if (config_has_key (config_get_instance (), "SeatDefaults", "greeter-hide-users")) + display->priv->greeter_hide_users = config_get_boolean (config_get_instance (), "SeatDefaults", "greeter-hide-users"); if (config_section) display->priv->default_session = config_get_string (config_get_instance (), config_section, "user-session"); if (!display->priv->default_session) @@ -675,6 +682,7 @@ start_greeter_session (Display *display) greeter_set_hint (display->priv->greeter, "select-guest", "true"); greeter_set_hint (display->priv->greeter, "default-session", display->priv->default_session); greeter_set_hint (display->priv->greeter, "has-guest-account", guest_account_get_is_enabled () ? "true" : "false"); + greeter_set_hint (display->priv->greeter, "hide-users", display->priv->greeter_hide_users ? "true" : "false"); result = greeter_start (display->priv->greeter); if (result) -- 2.39.2