2 * Copyright (C) 2010 Robert Ancell.
3 * Author: Robert Ancell <robert.ancell@canonical.com>
5 * This library is free software; you can redistribute it and/or modify it under
6 * the terms of the GNU Lesser General Public License as published by the Free
7 * Software Foundation; either version 3 of the License, or (at your option) any
8 * later version. See http://www.gnu.org/copyleft/lgpl.html the full text of the
12 #include "user-private.h"
34 gchar *home_directory;
44 G_DEFINE_TYPE (LdmUser, ldm_user, G_TYPE_OBJECT);
46 #define GET_PRIVATE(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj), LDM_TYPE_USER, LdmUserPrivate)
52 * @greeter: The greeter the user is connected to
54 * @real_name: The real name of the user
55 * @home_directory: The home directory of the user
56 * @image: The image URI
57 * @logged_in: TRUE if this user is currently logged in
59 * Return value: the new #LdmUser
62 ldm_user_new (LdmGreeter *greeter, const gchar *name, const gchar *real_name, const gchar *home_directory, const gchar *image, gboolean logged_in)
64 return g_object_new (LDM_TYPE_USER, "greeter", greeter, "name", name, "real-name", real_name, "home-directory", home_directory, "image", image, "logged-in", logged_in, NULL);
68 ldm_user_update (LdmUser *user, const gchar *real_name, const gchar *home_directory, const gchar *image, gboolean logged_in)
70 LdmUserPrivate *priv = GET_PRIVATE (user);
72 if (g_strcmp0 (priv->real_name, real_name) == 0 &&
73 g_strcmp0 (priv->home_directory, home_directory) == 0 &&
74 g_strcmp0 (priv->image, image) == 0 &&
75 priv->logged_in == logged_in)
78 g_free (priv->real_name);
79 priv->real_name = g_strdup (real_name);
80 g_free (priv->home_directory);
81 priv->home_directory = g_strdup (home_directory);
83 priv->image = g_strdup (image);
84 priv->logged_in = logged_in;
93 * Get the name of a user.
95 * Return value: The name of the given user
98 ldm_user_get_name (LdmUser *user)
100 g_return_val_if_fail (LDM_IS_USER (user), NULL);
101 return GET_PRIVATE (user)->name;
105 ldm_user_set_name (LdmUser *user, const gchar *name)
107 LdmUserPrivate *priv;
109 g_return_if_fail (LDM_IS_USER (user));
111 priv = GET_PRIVATE (user);
113 priv->name = g_strdup (name);
117 * ldm_user_get_real_name:
120 * Get the real name of a user.
122 * Return value: The real name of the given user (may be blank)
125 ldm_user_get_real_name (LdmUser *user)
127 g_return_val_if_fail (LDM_IS_USER (user), NULL);
128 return GET_PRIVATE (user)->real_name;
132 ldm_user_set_real_name (LdmUser *user, const gchar *real_name)
134 LdmUserPrivate *priv;
136 g_return_if_fail (LDM_IS_USER (user));
138 priv = GET_PRIVATE (user);
139 g_free (priv->real_name);
140 priv->real_name = g_strdup (real_name);
144 * ldm_user_get_display_name:
147 * Get the display name of a user.
149 * Return value: The display name of the given user
152 ldm_user_get_display_name (LdmUser *user)
154 LdmUserPrivate *priv;
156 g_return_val_if_fail (LDM_IS_USER (user), NULL);
158 priv = GET_PRIVATE (user);
160 return priv->real_name;
166 * ldm_user_get_home_directory:
169 * Get the home directory for a user.
171 * Return value: The users home directory
174 ldm_user_get_home_directory (LdmUser *user)
176 g_return_val_if_fail (LDM_IS_USER (user), NULL);
177 return GET_PRIVATE (user)->home_directory;
181 ldm_user_set_home_directory (LdmUser *user, const gchar *home_directory)
183 LdmUserPrivate *priv;
185 g_return_if_fail (LDM_IS_USER (user));
187 priv = GET_PRIVATE (user);
188 g_free (priv->home_directory);
189 priv->home_directory = g_strdup (home_directory);
193 * ldm_user_get_image:
196 * Get the image URI for a user.
198 * Return value: The image URI for the given user or NULL if no URI
201 ldm_user_get_image (LdmUser *user)
203 g_return_val_if_fail (LDM_IS_USER (user), NULL);
204 return GET_PRIVATE (user)->image;
208 ldm_user_set_image (LdmUser *user, const gchar *image)
210 LdmUserPrivate *priv;
212 g_return_if_fail (LDM_IS_USER (user));
214 priv = GET_PRIVATE (user);
215 g_free (priv->image);
216 priv->image = g_strdup (image);
220 load_dmrc (LdmUser *user)
222 LdmUserPrivate *priv = GET_PRIVATE (user);
226 priv->dmrc_file = g_key_file_new ();
228 /* Load from the user directory */
229 path = g_build_filename (priv->home_directory, ".dmrc", NULL);
230 have_dmrc = g_key_file_load_from_file (priv->dmrc_file, path, G_KEY_FILE_KEEP_COMMENTS, NULL);
233 /* If no ~/.dmrc, then load from the cache */
236 // FIXME: Watch for changes
238 priv->language = g_key_file_get_string (priv->dmrc_file, "Desktop", "Language", NULL);
239 priv->layout = g_key_file_get_string (priv->dmrc_file, "Desktop", "Layout", NULL);
240 priv->session = g_key_file_get_string (priv->dmrc_file, "Desktop", "Session", NULL);
244 * ldm_user_get_language
247 * Get the language for a user.
249 * Return value: The language for the given user or NULL if using system defaults.
252 ldm_user_get_language (LdmUser *user)
254 g_return_val_if_fail (LDM_IS_USER (user), NULL);
256 return GET_PRIVATE (user)->language;
260 * ldm_user_get_layout
263 * Get the keyboard layout for a user.
265 * Return value: The keyboard layoyt for the given user or NULL if using system defaults.
268 ldm_user_get_layout (LdmUser *user)
270 g_return_val_if_fail (LDM_IS_USER (user), NULL);
272 return GET_PRIVATE (user)->layout;
276 * ldm_user_get_session
279 * Get the session for a user.
281 * Return value: The session for the given user or NULL if using system defaults.
284 ldm_user_get_session (LdmUser *user)
286 g_return_val_if_fail (LDM_IS_USER (user), NULL);
288 return GET_PRIVATE (user)->session;
292 * ldm_user_get_logged_in:
295 * Check if a user is logged in.
297 * Return value: TRUE if the user is currently logged in.
300 ldm_user_get_logged_in (LdmUser *user)
302 g_return_val_if_fail (LDM_IS_USER (user), FALSE);
303 return GET_PRIVATE (user)->logged_in;
307 ldm_user_set_logged_in (LdmUser *user, gboolean logged_in)
309 g_return_if_fail (LDM_IS_USER (user));
310 GET_PRIVATE (user)->logged_in = logged_in;
314 ldm_user_init (LdmUser *user)
319 ldm_user_set_property (GObject *object,
324 LdmUser *self = LDM_USER (object);
325 LdmUserPrivate *priv = GET_PRIVATE (self);
329 priv->greeter = g_object_ref (g_value_get_object (value));
332 ldm_user_set_name (self, g_value_get_string (value));
335 ldm_user_set_real_name (self, g_value_get_string (value));
337 case PROP_HOME_DIRECTORY:
338 ldm_user_set_home_directory (self, g_value_get_string (value));
341 ldm_user_set_image (self, g_value_get_string (value));
344 ldm_user_set_logged_in (self, g_value_get_boolean (value));
347 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
353 ldm_user_get_property (GObject *object,
360 self = LDM_USER (object);
364 g_value_set_string (value, ldm_user_get_name (self));
367 g_value_set_string (value, ldm_user_get_real_name (self));
369 case PROP_DISPLAY_NAME:
370 g_value_set_string (value, ldm_user_get_display_name (self));
372 case PROP_HOME_DIRECTORY:
373 g_value_set_string (value, ldm_user_get_home_directory (self));
376 g_value_set_string (value, ldm_user_get_image (self));
379 g_value_set_string (value, ldm_user_get_language (self));
382 g_value_set_string (value, ldm_user_get_layout (self));
385 g_value_set_string (value, ldm_user_get_session (self));
388 g_value_set_boolean (value, ldm_user_get_logged_in (self));
391 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
397 ldm_user_finalize (GObject *object)
399 LdmUser *self = LDM_USER (object);
400 LdmUserPrivate *priv = GET_PRIVATE (self);
403 g_free (priv->real_name);
404 g_free (priv->home_directory);
405 g_free (priv->image);
407 g_key_file_free (priv->dmrc_file);
411 ldm_user_class_init (LdmUserClass *klass)
413 GObjectClass *object_class = G_OBJECT_CLASS (klass);
415 g_type_class_add_private (klass, sizeof (LdmUserPrivate));
417 object_class->set_property = ldm_user_set_property;
418 object_class->get_property = ldm_user_get_property;
419 object_class->finalize = ldm_user_finalize;
421 g_object_class_install_property(object_class,
423 g_param_spec_object("greeter",
427 G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
428 g_object_class_install_property(object_class,
430 g_param_spec_string("name",
434 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
435 g_object_class_install_property(object_class,
437 g_param_spec_string("real-name",
441 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
442 g_object_class_install_property(object_class,
444 g_param_spec_string("display-name",
446 "Users display name",
449 g_object_class_install_property(object_class,
451 g_param_spec_string("home-directory",
455 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
456 g_object_class_install_property(object_class,
458 g_param_spec_string("image",
462 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
463 g_object_class_install_property(object_class,
465 g_param_spec_string("language",
467 "Language used by this user",
470 g_object_class_install_property(object_class,
472 g_param_spec_string("layout",
474 "Keyboard layout used by this user",
477 g_object_class_install_property(object_class,
479 g_param_spec_string("session",
481 "Session used by this user",
484 g_object_class_install_property(object_class,
486 g_param_spec_boolean("logged-in",
488 "TRUE if the user is currently in a session",
490 G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));