Merge lp:~gber/lightdm/lightdm-language-selection into lp:lightdm

Proposed by Guido Berhoerster
Status: Merged
Approved by: Robert Ancell
Approved revision: 1647
Merged at revision: 1654
Proposed branch: lp:~gber/lightdm/lightdm-language-selection
Merge into: lp:lightdm
Diff against target: 158 lines (+51/-34)
4 files modified
liblightdm-gobject/user.c (+1/-7)
src/accounts.c (+40/-26)
src/accounts.h (+1/-1)
src/display.c (+9/-0)
To merge this branch: bzr merge lp:~gber/lightdm/lightdm-language-selection
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Approve
Robert Ancell Approve
Review via email: mp+159095@code.launchpad.net

Description of the change

Fix the two bugs which prevent the language selection from working

To post a comment you must log in.
Revision history for this message
Robert Ancell (robert-ancell) wrote :

What is the #if 0 code doing there? No dead code please.

review: Needs Fixing
1647. By Guido Berhoerster

Remove dead code and clarify comment

Revision history for this message
Guido Berhoerster (gber) wrote :

> What is the #if 0 code doing there? No dead code please.

Removed and clarified comment.

Revision history for this message
Robert Ancell (robert-ancell) :
review: Approve
Revision history for this message
PS Jenkins bot (ps-jenkins) :
review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'liblightdm-gobject/user.c'
--- liblightdm-gobject/user.c 2013-01-31 20:56:09 +0000
+++ liblightdm-gobject/user.c 2013-04-19 09:45:32 +0000
@@ -1132,16 +1132,10 @@
11321132
1133 // FIXME: Watch for changes1133 // FIXME: Watch for changes
11341134
1135 /* The Language field is actually a locale, strip the codeset off it to get the language */1135 /* The Language field contains the locale */
1136 if (priv->language)1136 if (priv->language)
1137 g_free (priv->language);1137 g_free (priv->language);
1138 priv->language = g_key_file_get_string (priv->dmrc_file, "Desktop", "Language", NULL);1138 priv->language = g_key_file_get_string (priv->dmrc_file, "Desktop", "Language", NULL);
1139 if (priv->language)
1140 {
1141 gchar *codeset = strchr (priv->language, '.');
1142 if (codeset)
1143 *codeset = '\0';
1144 }
11451139
1146 if (priv->layouts)1140 if (priv->layouts)
1147 {1141 {
11481142
=== modified file 'src/accounts.c'
--- src/accounts.c 2012-01-13 13:05:33 +0000
+++ src/accounts.c 2013-04-19 09:45:32 +0000
@@ -44,9 +44,6 @@
44 /* Language */44 /* Language */
45 gchar *language;45 gchar *language;
4646
47 /* Locale */
48 gchar *locale;
49
50 /* X session */47 /* X session */
51 gchar *xsession;48 gchar *xsession;
52};49};
@@ -332,36 +329,52 @@
332 return user->priv->shell;329 return user->priv->shell;
333}330}
334331
335const gchar *
336user_get_locale (User *user)
337{
338 g_return_val_if_fail (user != NULL, NULL);
339
340 g_free (user->priv->locale);
341 if (user->priv->proxy)
342 user->priv->locale = NULL;
343 else
344 user->priv->locale = get_string_from_dmrc (user->priv->name, "Desktop", "Language");
345
346 /* Treat a blank locale as unset */
347 if (g_strcmp0 (user->priv->locale, "") == 0)
348 {
349 g_free (user->priv->locale);
350 user->priv->locale = NULL;
351 }
352
353 return user->priv->locale;
354}
355
356void332void
357user_set_language (User *user, const gchar *language)333user_set_language (User *user, const gchar *language)
358{334{
359 g_return_if_fail (user != NULL);335 g_return_if_fail (user != NULL);
360336
337 call_method (user->priv->proxy, "SetLanguage", g_variant_new ("(s)", language), "()", NULL);
338 save_string_to_dmrc (user->priv->name, "Desktop", "Language", language);
339}
340
341const gchar *
342user_get_language (User *user)
343{
344 GVariant *variant, *inner;
345 gboolean success;
346
347 g_return_val_if_fail (user != NULL, NULL);
348
349 g_free (user->priv->language);
361 if (user->priv->proxy)350 if (user->priv->proxy)
362 call_method (user->priv->proxy, "SetLanguage", g_variant_new ("(s)", language), "()", NULL);351 {
352 /* the "Language" property cannot be retrieved with get_property () here since it
353 * uses g_dbus_proxy_get_cached_property () which would return the previous (cached) value
354 * of the "Language" property
355 */
356 success = call_method (user->priv->proxy, "org.freedesktop.DBus.Properties.Get", g_variant_new ("(ss)", g_dbus_proxy_get_interface_name(user->priv->proxy), "Language"), "(v)", &variant);
357 if (success)
358 {
359 g_variant_get (variant, "(v)", &inner);
360 user->priv->language = g_variant_dup_string (inner, NULL);
361 g_variant_unref (inner);
362 g_variant_unref (variant);
363 }
364 else
365 user->priv->language = NULL;
366 }
363 else367 else
364 save_string_to_dmrc (user->priv->name, "Desktop", "Language", language);368 user->priv->language = get_string_from_dmrc (user->priv->name, "Desktop", "Language");
369
370 /* Treat a blank language as unset */
371 if (g_strcmp0 (user->priv->language, "") == 0)
372 {
373 g_free (user->priv->language);
374 user->priv->language = NULL;
375 }
376
377 return user->priv->language;
365}378}
366379
367void380void
@@ -436,6 +449,7 @@
436 g_free (self->priv->gecos);449 g_free (self->priv->gecos);
437 g_free (self->priv->home_directory);450 g_free (self->priv->home_directory);
438 g_free (self->priv->shell);451 g_free (self->priv->shell);
452 g_free (self->priv->language);
439453
440 G_OBJECT_CLASS (user_parent_class)->finalize (object); 454 G_OBJECT_CLASS (user_parent_class)->finalize (object);
441}455}
442456
=== modified file 'src/accounts.h'
--- src/accounts.h 2011-11-29 04:42:03 +0000
+++ src/accounts.h 2013-04-19 09:45:32 +0000
@@ -58,7 +58,7 @@
5858
59void user_set_xsession (User *user, const gchar *session);59void user_set_xsession (User *user, const gchar *session);
6060
61const gchar *user_get_locale (User *user);61const gchar *user_get_language (User *user);
6262
63void user_set_language (User *user, const gchar *language);63void user_set_language (User *user, const gchar *language);
6464
6565
=== modified file 'src/display.c'
--- src/display.c 2013-03-26 22:22:49 +0000
+++ src/display.c 2013-04-19 09:45:32 +0000
@@ -702,6 +702,7 @@
702{702{
703 User *user;703 User *user;
704 gchar *filename, *sessions_dir, *path;704 gchar *filename, *sessions_dir, *path;
705 const gchar *language;
705 gchar **argv;706 gchar **argv;
706707
707 user = session_get_user (display->priv->session);708 user = session_get_user (display->priv->session);
@@ -725,6 +726,14 @@
725 if (!argv)726 if (!argv)
726 return TRUE;727 return TRUE;
727 728
729 /* Retrieve language setting */
730 language = user_get_language (user);
731 if (language != NULL && language != '\0')
732 {
733 session_set_env (display->priv->session, "LANG", language);
734 session_set_env (display->priv->session, "GDM_LANG", language);
735 }
736
728 session_set_env (display->priv->session, "DESKTOP_SESSION", display->priv->user_session); // FIXME: Apparently deprecated?737 session_set_env (display->priv->session, "DESKTOP_SESSION", display->priv->user_session); // FIXME: Apparently deprecated?
729 session_set_env (display->priv->session, "GDMSESSION", display->priv->user_session); // FIXME: Not cross-desktop738 session_set_env (display->priv->session, "GDMSESSION", display->priv->user_session); // FIXME: Not cross-desktop
730739

Subscribers

People subscribed via source and target branches