]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - liblightdm-gobject/user.c
Renamed libldmgreeter to liblightdm
[sojka/lightdm.git] / liblightdm-gobject / user.c
1 /*
2  * Copyright (C) 2010 Robert Ancell.
3  * Author: Robert Ancell <robert.ancell@canonical.com>
4  * 
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
9  * license.
10  */
11
12 #include "user.h"
13
14 enum {
15     PROP_0,
16     PROP_GREETER,
17     PROP_NAME,
18     PROP_REAL_NAME,
19     PROP_DISPLAY_NAME,
20     PROP_IMAGE,
21     PROP_LANGUAGE,
22     PROP_LAYOUT,
23     PROP_SESSION,
24     PROP_LOGGED_IN
25 };
26
27 struct _LdmUserPrivate
28 {
29     LdmGreeter *greeter;
30
31     gchar *name;
32     gchar *real_name;
33     gchar *image;
34     gboolean logged_in;
35
36     gboolean have_defaults;
37     gchar *language;
38     gchar *layout;
39     gchar *session;
40 };
41
42 G_DEFINE_TYPE (LdmUser, ldm_user, G_TYPE_OBJECT);
43
44 /**
45  * ldm_user_new:
46  * 
47  * Create a new user.
48  * @greeter: The greeter the user is connected to
49  * @name: The username
50  * @real_name: The real name of the user
51  * @image: The image URI
52  * @logged_in: TRUE if this user is currently logged in
53  * 
54  * Return value: the new #LdmUser
55  **/
56 LdmUser *
57 ldm_user_new (LdmGreeter *greeter, const gchar *name, const gchar *real_name, const gchar *image, gboolean logged_in)
58 {
59     return g_object_new (LDM_TYPE_USER, "greeter", greeter, "name", name, "real-name", real_name, "image", image, "logged-in", logged_in, NULL);
60 }
61
62 /**
63  * ldm_user_get_name:
64  * @user: A #LdmUser
65  * 
66  * Get the name of a user.
67  * 
68  * Return value: The name of the given user
69  **/
70 const gchar *
71 ldm_user_get_name (LdmUser *user)
72 {
73     return user->priv->name;
74 }
75
76 /**
77  * ldm_user_get_real_name:
78  * @user: A #LdmUser
79  * 
80  * Get the real name of a user.
81  *
82  * Return value: The real name of the given user (may be blank)
83  **/
84 const gchar *
85 ldm_user_get_real_name (LdmUser *user)
86 {
87     return user->priv->real_name;
88 }
89
90 /**
91  * ldm_user_get_display_name:
92  * @user: A #LdmUser
93  * 
94  * Get the display name of a user.
95  * 
96  * Return value: The display name of the given user
97  **/
98 const gchar *
99 ldm_user_get_display_name (LdmUser *user)
100 {
101     if (user->priv->real_name[0] != '\0')
102         return user->priv->real_name;
103     else
104         return user->priv->name;
105 }
106
107 /**
108  * ldm_user_get_image:
109  * @user: A #LdmUser
110  * 
111  * Get the image URI for a user.
112  * 
113  * Return value: The image URI for the given user or NULL if no URI
114  **/
115 const gchar *
116 ldm_user_get_image (LdmUser *user)
117 {
118     return user->priv->image;
119 }
120
121 static void
122 get_defaults (LdmUser *user)
123 {
124     if (user->priv->have_defaults)
125         return;
126
127     if (ldm_greeter_get_user_defaults (user->priv->greeter, user->priv->name, &user->priv->language, &user->priv->layout, &user->priv->session))
128         user->priv->have_defaults = TRUE;
129 }
130
131 /**
132  * ldm_user_get_language
133  * @user: A #LdmUser
134  * 
135  * Get the language for a user.
136  * 
137  * Return value: The language for the given user or NULL if using system defaults.
138  **/
139 const gchar *
140 ldm_user_get_language (LdmUser *user)
141 {
142     get_defaults (user);
143     return user->priv->language;
144 }
145
146 /**
147  * ldm_user_get_layout
148  * @user: A #LdmUser
149  * 
150  * Get the keyboard layout for a user.
151  * 
152  * Return value: The keyboard layoyt for the given user or NULL if using system defaults.
153  **/
154 const gchar *
155 ldm_user_get_layout (LdmUser *user)
156 {
157     get_defaults (user);
158     return user->priv->layout;
159 }
160
161 /**
162  * ldm_user_get_session
163  * @user: A #LdmUser
164  * 
165  * Get the session for a user.
166  * 
167  * Return value: The session for the given user or NULL if using system defaults.
168  **/
169 const gchar *
170 ldm_user_get_session (LdmUser *user)
171 {
172     get_defaults (user);
173     return user->priv->session; 
174 }
175
176 /**
177  * ldm_user_get_logged_in:
178  * @user: A #LdmUser
179  * 
180  * Check if a user is logged in.
181  * 
182  * Return value: TRUE if the user is currently logged in.
183  **/
184 gboolean
185 ldm_user_get_logged_in (LdmUser *user)
186 {
187     return user->priv->logged_in;
188 }
189
190 static void
191 ldm_user_init (LdmUser *user)
192 {
193     user->priv = G_TYPE_INSTANCE_GET_PRIVATE (user, LDM_TYPE_USER, LdmUserPrivate);
194 }
195
196 static void
197 ldm_user_set_property (GObject      *object,
198                        guint         prop_id,
199                        const GValue *value,
200                        GParamSpec   *pspec)
201 {
202     LdmUser *self;
203     gint i, n_pages;
204
205     self = LDM_USER (object);
206
207     switch (prop_id) {
208     case PROP_GREETER:
209         self->priv->greeter = g_object_ref (g_value_get_object (value));
210         break;
211     case PROP_NAME:
212         self->priv->name = g_strdup (g_value_get_string (value));
213         break;
214     case PROP_REAL_NAME:
215         self->priv->real_name = g_strdup (g_value_get_string (value));
216         break;
217     case PROP_IMAGE:
218         self->priv->image = g_strdup (g_value_get_string (value));
219         break;
220     case PROP_LOGGED_IN:
221         self->priv->logged_in = g_value_get_boolean (value);
222         break;
223     default:
224         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
225         break;
226     }
227 }
228
229 static void
230 ldm_user_get_property (GObject    *object,
231                        guint       prop_id,
232                        GValue     *value,
233                        GParamSpec *pspec)
234 {
235     LdmUser *self;
236
237     self = LDM_USER (object);
238
239     switch (prop_id) {
240     case PROP_NAME:
241         g_value_set_string (value, ldm_user_get_name (self));
242         break;
243     case PROP_REAL_NAME:
244         g_value_set_string (value, ldm_user_get_real_name (self));
245         break;
246     case PROP_DISPLAY_NAME:
247         g_value_set_string (value, ldm_user_get_display_name (self));
248         break;
249     case PROP_IMAGE:
250         g_value_set_string (value, ldm_user_get_image (self));
251         break;
252     case PROP_LANGUAGE:
253         g_value_set_string (value, ldm_user_get_language (self));
254         break;
255     case PROP_LAYOUT:
256         g_value_set_string (value, ldm_user_get_layout (self));
257         break;
258     case PROP_SESSION:
259         g_value_set_string (value, ldm_user_get_session (self));
260         break;
261     case PROP_LOGGED_IN:
262         g_value_set_boolean (value, ldm_user_get_logged_in (self));
263         break;
264     default:
265         G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
266         break;
267     }
268 }
269
270 static void
271 ldm_user_class_init (LdmUserClass *klass)
272 {
273     GObjectClass *object_class = G_OBJECT_CLASS (klass);
274   
275     g_type_class_add_private (klass, sizeof (LdmUserPrivate));
276
277     object_class->set_property = ldm_user_set_property;
278     object_class->get_property = ldm_user_get_property;
279
280     g_object_class_install_property(object_class,
281                                     PROP_GREETER,
282                                     g_param_spec_object("greeter",
283                                                         "greeter",
284                                                         "Greeter",
285                                                         LDM_TYPE_GREETER,
286                                                         G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
287     g_object_class_install_property(object_class,
288                                     PROP_NAME,
289                                     g_param_spec_string("name",
290                                                         "name",
291                                                         "Username",
292                                                         NULL,
293                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
294     g_object_class_install_property(object_class,
295                                     PROP_REAL_NAME,
296                                     g_param_spec_string("real-name",
297                                                         "real-name",
298                                                         "Users real name",
299                                                         NULL,
300                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
301     g_object_class_install_property(object_class,
302                                     PROP_DISPLAY_NAME,
303                                     g_param_spec_string("display-name",
304                                                         "display-name",
305                                                         "Users display name",
306                                                         NULL,
307                                                         G_PARAM_READABLE));
308     g_object_class_install_property(object_class,
309                                     PROP_IMAGE,
310                                     g_param_spec_string("image",
311                                                         "image",
312                                                         "Avatar image",
313                                                         NULL,
314                                                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
315     g_object_class_install_property(object_class,
316                                     PROP_LANGUAGE,
317                                     g_param_spec_string("language",
318                                                         "language",
319                                                         "Language used by this user",
320                                                         NULL,
321                                                         G_PARAM_READABLE));
322     g_object_class_install_property(object_class,
323                                     PROP_LAYOUT,
324                                     g_param_spec_string("layout",
325                                                         "layout",
326                                                         "Keyboard layout used by this user",
327                                                         NULL,
328                                                         G_PARAM_READABLE));
329     g_object_class_install_property(object_class,
330                                     PROP_SESSION,
331                                     g_param_spec_string("session",
332                                                         "session",
333                                                         "Session used by this user",
334                                                         NULL,
335                                                         G_PARAM_READABLE));
336     g_object_class_install_property(object_class,
337                                     PROP_LOGGED_IN,
338                                     g_param_spec_boolean("logged-in",
339                                                          "logged-in",
340                                                          "TRUE if the user is currently in a session",
341                                                          FALSE,
342                                                          G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
343 }