};
static guint user_signals[LAST_USER_SIGNAL] = { 0 };
-struct _LightDMUserList
+typedef struct
{
- GObject parent_instance;
-
gboolean initialized;
/* Wrapper list, kept locally to preserve transfer-none promises */
GList *lightdm_list;
-};
-
-G_DEFINE_TYPE (LightDMUserList, lightdm_user_list, G_TYPE_OBJECT);
+} LightDMUserListPrivate;
-struct _LightDMUser
+typedef struct
{
- GObject parent_instance;
-
CommonUser *common_user;
-};
+} LightDMUserPrivate;
+G_DEFINE_TYPE (LightDMUserList, lightdm_user_list, G_TYPE_OBJECT);
G_DEFINE_TYPE (LightDMUser, lightdm_user, G_TYPE_OBJECT);
+#define GET_LIST_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_USER_LIST, LightDMUserListPrivate)
+#define GET_USER_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LIGHTDM_TYPE_USER, LightDMUserPrivate)
+
static LightDMUserList *singleton = NULL;
/**
static void
user_list_added_cb (CommonUserList *common_list, CommonUser *common_user, LightDMUserList *user_list)
{
+ LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
GList *common_users = common_user_list_get_users (common_list);
LightDMUser *lightdm_user = wrap_common_user (common_user);
- user_list->lightdm_list = g_list_insert (user_list->lightdm_list, lightdm_user, g_list_index (common_users, common_user));
+ priv->lightdm_list = g_list_insert (priv->lightdm_list, lightdm_user, g_list_index (common_users, common_user));
g_signal_emit (user_list, list_signals[USER_ADDED], 0, lightdm_user);
}
static void
user_list_changed_cb (CommonUserList *common_list, CommonUser *common_user, LightDMUserList *user_list)
{
+ LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
GList *common_users = common_user_list_get_users (common_list);
- LightDMUser *lightdm_user = g_list_nth_data (user_list->lightdm_list, g_list_index (common_users, common_user));
+ LightDMUser *lightdm_user = g_list_nth_data (priv->lightdm_list, g_list_index (common_users, common_user));
g_signal_emit (user_list, list_signals[USER_CHANGED], 0, lightdm_user);
}
static void
user_list_removed_cb (CommonUserList *common_list, CommonUser *common_user, LightDMUserList *user_list)
{
+ LightDMUserListPrivate *priv = GET_LIST_PRIVATE (user_list);
GList *link;
- for (link = user_list->lightdm_list; link; link = link->next)
+ for (link = priv->lightdm_list; link; link = link->next)
{
LightDMUser *lightdm_user = link->data;
- if (lightdm_user->common_user == common_user)
+ LightDMUserPrivate *user_priv = GET_USER_PRIVATE (lightdm_user);
+ if (user_priv->common_user == common_user)
{
- user_list->lightdm_list = g_list_delete_link (user_list->lightdm_list, link);
+ priv->lightdm_list = g_list_delete_link (priv->lightdm_list, link);
g_signal_emit (user_list, list_signals[USER_REMOVED], 0, lightdm_user);
g_object_unref (lightdm_user);
break;
}
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;
GList *link;
- if (user_list->initialized)
+ 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)
{
- CommonUser *user = link->data;
+ 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 = common_user_list_get_user_by_name (common_user_list_get_instance (), username);
LightDMUser *lightdm_user = wrap_common_user (user);
- user_list->lightdm_list = g_list_prepend (user_list->lightdm_list, lightdm_user);
+ priv->lightdm_list = g_list_append (priv->lightdm_list, lightdm_user);
}
- user_list->lightdm_list = g_list_reverse (user_list->lightdm_list);
CommonUserList *common_list = common_user_list_get_instance ();
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);
-
- user_list->initialized = TRUE;
}
/**
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);
- return g_list_length (user_list->lightdm_list);
+ initialize_user_list_if_needed (user_list, NULL);
+ return g_list_length (GET_LIST_PRIVATE (user_list)->lightdm_list);
}
/**
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);
- return user_list->lightdm_list;
+ initialize_user_list_if_needed (user_list, NULL);
+ return GET_LIST_PRIVATE (user_list)->lightdm_list;
}
/**
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 = user_list->lightdm_list; link; link = link->next)
+ for (link = GET_LIST_PRIVATE (user_list)->lightdm_list; link; link = link->next)
{
LightDMUser *user = link->data;
if (g_strcmp0 (lightdm_user_get_name (user), username) == 0)
lightdm_user_list_finalize (GObject *object)
{
LightDMUserList *self = LIGHTDM_USER_LIST (object);
+ LightDMUserListPrivate *priv = GET_LIST_PRIVATE (self);
- g_list_free_full (self->lightdm_list, g_object_unref);
+ g_list_free_full (priv->lightdm_list, g_object_unref);
G_OBJECT_CLASS (lightdm_user_list_parent_class)->finalize (object);
}
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (klass, sizeof (LightDMUserListPrivate));
+
object_class->set_property = lightdm_user_list_set_property;
object_class->get_property = lightdm_user_list_get_property;
object_class->finalize = lightdm_user_list_finalize;
g_signal_new (LIGHTDM_USER_LIST_SIGNAL_USER_ADDED,
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- 0,
+ G_STRUCT_OFFSET (LightDMUserListClass, user_added),
NULL, NULL,
NULL,
G_TYPE_NONE, 1, LIGHTDM_TYPE_USER);
g_signal_new (LIGHTDM_USER_LIST_SIGNAL_USER_CHANGED,
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- 0,
+ G_STRUCT_OFFSET (LightDMUserListClass, user_changed),
NULL, NULL,
NULL,
G_TYPE_NONE, 1, LIGHTDM_TYPE_USER);
g_signal_new (LIGHTDM_USER_LIST_SIGNAL_USER_REMOVED,
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- 0,
+ G_STRUCT_OFFSET (LightDMUserListClass, user_removed),
NULL, NULL,
NULL,
G_TYPE_NONE, 1, LIGHTDM_TYPE_USER);
lightdm_user_get_name (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_name (user->common_user);
+ return common_user_get_name (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_real_name (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_real_name (user->common_user);
+ return common_user_get_real_name (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_display_name (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_display_name (user->common_user);
+ return common_user_get_display_name (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_home_directory (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_home_directory (user->common_user);
+ return common_user_get_home_directory (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_image (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_image (user->common_user);
+ return common_user_get_image (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_background (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_background (user->common_user);
+ return common_user_get_background (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_language (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_language (user->common_user);
+ return common_user_get_language (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_layout (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_layout (user->common_user);
+ return common_user_get_layout (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_layouts (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_layouts (user->common_user);
+ return common_user_get_layouts (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_session (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), NULL);
- return common_user_get_session (user->common_user);
+ return common_user_get_session (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_logged_in (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), FALSE);
- return common_user_get_logged_in (user->common_user);
+ return common_user_get_logged_in (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_has_messages (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), FALSE);
- return common_user_get_has_messages (user->common_user);
+ return common_user_get_has_messages (GET_USER_PRIVATE (user)->common_user);
}
/**
lightdm_user_get_uid (LightDMUser *user)
{
g_return_val_if_fail (LIGHTDM_IS_USER (user), (uid_t)-1);
- return common_user_get_uid (user->common_user);
+ return common_user_get_uid (GET_USER_PRIVATE (user)->common_user);
}
static void
GParamSpec *pspec)
{
LightDMUser *self = LIGHTDM_USER (object);
+ LightDMUserPrivate *priv = GET_USER_PRIVATE (self);
switch (prop_id)
{
case USER_PROP_COMMON_USER:
- self->common_user = g_value_dup_object (value);
+ priv->common_user = g_value_dup_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
lightdm_user_finalize (GObject *object)
{
LightDMUser *self = LIGHTDM_USER (object);
+ LightDMUserPrivate *priv = GET_USER_PRIVATE (self);
- g_object_unref (self->common_user);
+ g_object_unref (priv->common_user);
G_OBJECT_CLASS (lightdm_user_parent_class)->finalize (object);
}
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ g_type_class_add_private (klass, sizeof (LightDMUserPrivate));
+
object_class->set_property = lightdm_user_set_property;
object_class->get_property = lightdm_user_get_property;
object_class->finalize = lightdm_user_finalize;
* LightDMUser::changed:
* @user: A #LightDMUser
*
- * The ::changed signal gets emitted when this user account is modified.
+ * The ::changed signal gets emitted this user account is modified.
**/
user_signals[CHANGED] =
g_signal_new (LIGHTDM_SIGNAL_USER_CHANGED,
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
- 0,
+ G_STRUCT_OFFSET (LightDMUserClass, changed),
NULL, NULL,
NULL,
G_TYPE_NONE, 0);