summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/lightdm.conf5
-rw-r--r--doc/lightdm-gobject-0-sections.txt2
-rw-r--r--doc/tmpl/greeter.sgml12
-rw-r--r--greeters/gtk/greeter.ui1
-rw-r--r--greeters/gtk/lightdm-gtk-greeter.c127
-rw-r--r--liblightdm-gobject/greeter.c24
-rw-r--r--liblightdm-gobject/lightdm/greeter.h2
-rw-r--r--liblightdm-qt/QLightDM/greeter.cpp4
-rw-r--r--liblightdm-qt/QLightDM/greeter.h2
-rw-r--r--src/display.c8
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);
</para>
+<!-- ##### ARG LdmGreeter:hide-users-hint ##### -->
+<para>
+
+</para>
+
<!-- ##### ARG LdmGreeter:hostname ##### -->
<para>
@@ -242,11 +247,6 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
</para>
-<!-- ##### ARG LdmGreeter:show-users-hint ##### -->
-<para>
-
-</para>
-
<!-- ##### FUNCTION ldm_greeter_new ##### -->
<para>
@@ -384,7 +384,7 @@ g_object_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
@Returns:
-<!-- ##### FUNCTION ldm_greeter_get_show_users_hint ##### -->
+<!-- ##### FUNCTION ldm_greeter_get_hide_users_hint ##### -->
<para>
</para>
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 @@
</child>
<child>
<object class="GtkTreeView" id="user_treeview">
- <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">user_liststore</property>
<property name="headers_visible">False</property>
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);
}
}
@@ -426,6 +428,71 @@ draw_background_cb (GtkWidget *widget, GdkEventExpose *event)
}
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)
{
GdkWindow *root;
@@ -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)