]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Support hide-users hint
authorRobert Ancell <robert.ancell@canonical.com>
Mon, 18 Jul 2011 08:31:25 +0000 (18:31 +1000)
committerRobert Ancell <robert.ancell@canonical.com>
Mon, 18 Jul 2011 08:31:25 +0000 (18:31 +1000)
data/lightdm.conf
doc/lightdm-gobject-0-sections.txt
doc/tmpl/greeter.sgml
greeters/gtk/greeter.ui
greeters/gtk/lightdm-gtk-greeter.c
liblightdm-gobject/greeter.c
liblightdm-gobject/lightdm/greeter.h
liblightdm-qt/QLightDM/greeter.cpp
liblightdm-qt/QLightDM/greeter.h
src/display.c

index 815ceb2bd53041556ab5bc091e033d52db1b7583..cd89992ebb50849fd36c5736c816d68a2da780f3 100644 (file)
@@ -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
index 8e414be126e9dbe3fa16fc042df5b6f50c3843aa..a5234fd707708108847e469de5a072e1a30d926e 100644 (file)
@@ -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
index 758560d60e78d2b7fcab0d231c218078c56831d5..67f07b0545c3d54b632b262fca2bd0f1b20981f4 100644 (file)
@@ -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>
index 732f5e2d6dd97d8ef60397a8812fe4a3ae01615c..c3c8d62e47af21b34d8722ba8556c9107a26f537 100644 (file)
                     </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>
index 0bbe36b5e9e324fc7a69bd4ce43c15e3eeb7c353..711a74164d448efc7940a4aef61865656addb59e 100644 (file)
@@ -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);
index 4dc0f29b58e99cdb33bb974e926c40f13cadbacb..6d31a56e0ca4416fd1f59d443596cf33410cb589 100644 (file)
@@ -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));
 
index 1b9577059e22efb4cc358f83b9b42d885740f6a0..e9edfd3aea2c9ca3395c7fdf7871f7afd661ca2b 100644 (file)
@@ -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);
 
index 798dc8af1c7a181b356ec4f20210d8f5b41d7fe5..ac7f16e0f3dc38b11a4f49974814aa113f3eb005 100644 (file)
@@ -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
index 77eab70ffda7eba4ae0acadd6df7f0ba0feb9e94..d99b371e6597aabfaa7da44ffdaff824afcddea6 100644 (file)
@@ -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;
index 2dde4d30f76608d26c8ed8a03ce1830875e61f78..49697ddbc7edc0fb6544982f7555ef911eb632dc 100644 (file)
@@ -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)