X-Git-Url: http://rtime.felk.cvut.cz/gitweb/sojka/lightdm.git/blobdiff_plain/25ad086a802989cdf2b20308a63e7618c04842f1..7802c213778feccb9bb22b507b4fab2385c62f10:/liblightdm-gobject/user.c diff --git a/liblightdm-gobject/user.c b/liblightdm-gobject/user.c index 86b462f8..75f65438 100644 --- a/liblightdm-gobject/user.c +++ b/liblightdm-gobject/user.c @@ -4,7 +4,7 @@ * Copyright (C) 2014 Canonical, Ltd. * Authors: Robert Ancell * Michael Terry - * + * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2 or version 3 of the License. @@ -18,15 +18,14 @@ enum { - LIST_PROP_0, - LIST_PROP_NUM_USERS, + LIST_PROP_NUM_USERS = 1, + LIST_PROP_LENGTH, LIST_PROP_USERS, }; enum { - USER_PROP_0, - USER_PROP_COMMON_USER, + USER_PROP_COMMON_USER = 1, USER_PROP_NAME, USER_PROP_REAL_NAME, USER_PROP_DISPLAY_NAME, @@ -104,7 +103,7 @@ static LightDMUser * wrap_common_user (CommonUser *user) { LightDMUser *lightdm_user = g_object_new (LIGHTDM_TYPE_USER, "common-user", user, NULL); - g_signal_connect (user, "changed", G_CALLBACK (user_changed_cb), lightdm_user); + g_signal_connect (user, USER_SIGNAL_CHANGED, G_CALLBACK (user_changed_cb), lightdm_user); return lightdm_user; } @@ -148,7 +147,7 @@ user_list_removed_cb (CommonUserList *common_list, CommonUser *common_user, Ligh } static void -initialize_user_list_if_needed (LightDMUserList *user_list) +initialize_user_list_if_needed (LightDMUserList *user_list, const gchar *username) { LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list); GList *common_users; @@ -157,21 +156,30 @@ initialize_user_list_if_needed (LightDMUserList *user_list) if (priv->initialized) return; - common_users = common_user_list_get_users (common_user_list_get_instance ()); - for (link = common_users; link; link = link->next) + if (!username) + { + common_users = common_user_list_get_users (common_user_list_get_instance ()); + for (link = common_users; link; link = link->next) + { + CommonUser *user = link->data; + LightDMUser *lightdm_user = wrap_common_user (user); + priv->lightdm_list = g_list_prepend (priv->lightdm_list, lightdm_user); + } + priv->lightdm_list = g_list_reverse (priv->lightdm_list); + + priv->initialized = TRUE; + } + else { - CommonUser *user = link->data; + CommonUser *user = common_user_list_get_user_by_name (common_user_list_get_instance (), username); LightDMUser *lightdm_user = wrap_common_user (user); - priv->lightdm_list = g_list_prepend (priv->lightdm_list, lightdm_user); + priv->lightdm_list = g_list_append (priv->lightdm_list, lightdm_user); } - priv->lightdm_list = g_list_reverse (priv->lightdm_list); CommonUserList *common_list = common_user_list_get_instance (); - g_signal_connect (common_list, "user-added", G_CALLBACK (user_list_added_cb), user_list); - g_signal_connect (common_list, "user-changed", G_CALLBACK (user_list_changed_cb), user_list); - g_signal_connect (common_list, "user-removed", G_CALLBACK (user_list_removed_cb), user_list); - - priv->initialized = TRUE; + g_signal_connect (common_list, USER_LIST_SIGNAL_USER_ADDED, G_CALLBACK (user_list_added_cb), user_list); + g_signal_connect (common_list, USER_LIST_SIGNAL_USER_CHANGED, G_CALLBACK (user_list_changed_cb), user_list); + g_signal_connect (common_list, USER_LIST_SIGNAL_USER_REMOVED, G_CALLBACK (user_list_removed_cb), user_list); } /** @@ -184,7 +192,7 @@ gint lightdm_user_list_get_length (LightDMUserList *user_list) { g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), 0); - initialize_user_list_if_needed (user_list); + initialize_user_list_if_needed (user_list, NULL); return g_list_length (GET_LIST_PRIVATE (user_list)->lightdm_list); } @@ -201,7 +209,7 @@ GList * lightdm_user_list_get_users (LightDMUserList *user_list) { g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), NULL); - initialize_user_list_if_needed (user_list); + initialize_user_list_if_needed (user_list, NULL); return GET_LIST_PRIVATE (user_list)->lightdm_list; } @@ -222,7 +230,7 @@ lightdm_user_list_get_user_by_name (LightDMUserList *user_list, const gchar *use g_return_val_if_fail (LIGHTDM_IS_USER_LIST (user_list), NULL); g_return_val_if_fail (username != NULL, NULL); - initialize_user_list_if_needed (user_list); + initialize_user_list_if_needed (user_list, username); for (link = GET_LIST_PRIVATE (user_list)->lightdm_list; link; link = link->next) { @@ -240,10 +248,10 @@ lightdm_user_list_init (LightDMUserList *user_list) } static void -lightdm_user_list_set_property (GObject *object, - guint prop_id, +lightdm_user_list_set_property (GObject *object, + guint prop_id, const GValue *value, - GParamSpec *pspec) + GParamSpec *pspec) { G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); } @@ -261,6 +269,7 @@ lightdm_user_list_get_property (GObject *object, switch (prop_id) { case LIST_PROP_NUM_USERS: + case LIST_PROP_LENGTH: g_value_set_int (value, lightdm_user_list_get_length (self)); break; default: @@ -297,7 +306,23 @@ lightdm_user_list_class_init (LightDMUserListClass *klass) "num-users", "Number of login users", 0, G_MAXINT, 0, + G_PARAM_DEPRECATED | G_PARAM_READABLE)); + + g_object_class_install_property (object_class, + LIST_PROP_LENGTH, + g_param_spec_int ("length", + "length", + "Number of login users", + 0, G_MAXINT, 0, G_PARAM_READABLE)); + + /*g_object_class_install_property (object_class, + LIST_PROP_USERS, + g_param_spec_int ("users", + "users", + "Users to present to user", + 0, G_MAXINT, 0, + G_PARAM_READABLE));*/ /** * LightDMUserList::user-added: * @user_list: A #LightDMUserList @@ -306,7 +331,7 @@ lightdm_user_list_class_init (LightDMUserListClass *klass) * The ::user-added signal gets emitted when a user account is created. **/ list_signals[USER_ADDED] = - g_signal_new ("user-added", + g_signal_new (LIGHTDM_USER_LIST_SIGNAL_USER_ADDED, G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (LightDMUserListClass, user_added), @@ -322,7 +347,7 @@ lightdm_user_list_class_init (LightDMUserListClass *klass) * The ::user-changed signal gets emitted when a user account is modified. **/ list_signals[USER_CHANGED] = - g_signal_new ("user-changed", + g_signal_new (LIGHTDM_USER_LIST_SIGNAL_USER_CHANGED, G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (LightDMUserListClass, user_changed), @@ -338,7 +363,7 @@ lightdm_user_list_class_init (LightDMUserListClass *klass) * The ::user-removed signal gets emitted when a user account is removed. **/ list_signals[USER_REMOVED] = - g_signal_new ("user-removed", + g_signal_new (LIGHTDM_USER_LIST_SIGNAL_USER_REMOVED, G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (LightDMUserListClass, user_removed), @@ -350,9 +375,9 @@ lightdm_user_list_class_init (LightDMUserListClass *klass) /** * lightdm_user_get_name: * @user: A #LightDMUser - * + * * Get the name of a user. - * + * * Return value: The name of the given user **/ const gchar * @@ -365,7 +390,7 @@ lightdm_user_get_name (LightDMUser *user) /** * lightdm_user_get_real_name: * @user: A #LightDMUser - * + * * Get the real name of a user. * * Return value: The real name of the given user @@ -380,9 +405,9 @@ lightdm_user_get_real_name (LightDMUser *user) /** * lightdm_user_get_display_name: * @user: A #LightDMUser - * + * * Get the display name of a user. - * + * * Return value: The display name of the given user **/ const gchar * @@ -395,9 +420,9 @@ lightdm_user_get_display_name (LightDMUser *user) /** * lightdm_user_get_home_directory: * @user: A #LightDMUser - * + * * Get the home directory for a user. - * + * * Return value: The users home directory */ const gchar * @@ -410,10 +435,10 @@ lightdm_user_get_home_directory (LightDMUser *user) /** * lightdm_user_get_image: * @user: A #LightDMUser - * + * * Get the image URI for a user. - * - * Return value: The image URI for the given user or #NULL if no URI + * + * Return value: (nullable): The image URI for the given user or #NULL if no URI **/ const gchar * lightdm_user_get_image (LightDMUser *user) @@ -425,10 +450,10 @@ lightdm_user_get_image (LightDMUser *user) /** * lightdm_user_get_background: * @user: A #LightDMUser - * + * * Get the background file path for a user. - * - * Return value: The background file path for the given user or #NULL if no path + * + * Return value: (nullable): The background file path for the given user or #NULL if no path **/ const gchar * lightdm_user_get_background (LightDMUser *user) @@ -440,10 +465,10 @@ lightdm_user_get_background (LightDMUser *user) /** * lightdm_user_get_language: * @user: A #LightDMUser - * + * * Get the language for a user. - * - * Return value: The language in the form of a local specification (e.g. "de_DE.UTF-8") for the given user or #NULL if using the system default locale. + * + * Return value: (nullable): The language in the form of a local specification (e.g. "de_DE.UTF-8") for the given user or #NULL if using the system default locale. **/ const gchar * lightdm_user_get_language (LightDMUser *user) @@ -455,10 +480,10 @@ lightdm_user_get_language (LightDMUser *user) /** * lightdm_user_get_layout: * @user: A #LightDMUser - * + * * Get the keyboard layout for a user. - * - * Return value: The keyboard layout for the given user or #NULL if using system defaults. Copy the value if you want to use it long term. + * + * Return value: (nullable): The keyboard layout for the given user or #NULL if using system defaults. Copy the value if you want to use it long term. **/ const gchar * lightdm_user_get_layout (LightDMUser *user) @@ -470,9 +495,9 @@ lightdm_user_get_layout (LightDMUser *user) /** * lightdm_user_get_layouts: * @user: A #LightDMUser - * + * * Get the configured keyboard layouts for a user. - * + * * Return value: (transfer none): A NULL-terminated array of keyboard layouts for the given user. Copy the values if you want to use them long term. **/ const gchar * const * @@ -485,10 +510,10 @@ lightdm_user_get_layouts (LightDMUser *user) /** * lightdm_user_get_session: * @user: A #LightDMUser - * + * * Get the session for a user. - * - * Return value: The session for the given user or #NULL if using system defaults. + * + * Return value: (nullable): The session for the given user or #NULL if using system defaults. **/ const gchar * lightdm_user_get_session (LightDMUser *user) @@ -500,9 +525,9 @@ lightdm_user_get_session (LightDMUser *user) /** * lightdm_user_get_logged_in: * @user: A #LightDMUser - * + * * Check if a user is logged in. - * + * * Return value: #TRUE if the user is currently logged in. **/ gboolean @@ -515,9 +540,9 @@ lightdm_user_get_logged_in (LightDMUser *user) /** * lightdm_user_get_has_messages: * @user: A #LightDMUser - * + * * Check if a user has waiting messages. - * + * * Return value: #TRUE if the user has waiting messages. **/ gboolean @@ -530,15 +555,15 @@ lightdm_user_get_has_messages (LightDMUser *user) /** * lightdm_user_get_uid: * @user: A #LightDMUser - * + * * Get the uid of a user. - * + * * Return value: The uid of the given user **/ uid_t -lightdm_user_get_display_name (LightDMUser *user) +lightdm_user_get_uid (LightDMUser *user) { - g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL); + g_return_val_if_fail (LIGHTDM_IS_USER (user), (uid_t)-1); return common_user_get_uid (GET_USER_PRIVATE (user)->common_user); } @@ -659,14 +684,14 @@ lightdm_user_class_init (LightDMUserClass *klass) "name", "Username", NULL, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_REAL_NAME, g_param_spec_string ("real-name", "real-name", "Users real name", NULL, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_DISPLAY_NAME, g_param_spec_string ("display-name", @@ -680,21 +705,21 @@ lightdm_user_class_init (LightDMUserClass *klass) "home-directory", "Home directory", NULL, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_IMAGE, g_param_spec_string ("image", "image", "Avatar image", NULL, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_BACKGROUND, g_param_spec_string ("background", "background", "User background", NULL, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_LANGUAGE, g_param_spec_string ("language", @@ -729,20 +754,20 @@ lightdm_user_class_init (LightDMUserClass *klass) "logged-in", "TRUE if the user is currently in a session", FALSE, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_LOGGED_IN, g_param_spec_boolean ("has-messages", "has-messages", "TRUE if the user is has waiting messages", FALSE, - G_PARAM_READWRITE)); + G_PARAM_READABLE)); g_object_class_install_property (object_class, USER_PROP_UID, - g_param_spec_string ("uid", + g_param_spec_uint64 ("uid", "uid", "User UID", - NULL, + 0, G_MAXUINT64, 0, G_PARAM_READABLE)); /** @@ -752,7 +777,7 @@ lightdm_user_class_init (LightDMUserClass *klass) * The ::changed signal gets emitted this user account is modified. **/ user_signals[CHANGED] = - g_signal_new ("changed", + g_signal_new (LIGHTDM_SIGNAL_USER_CHANGED, G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (LightDMUserClass, changed),