~robert-ancell/lightdm/signal-fix

« back to all changes in this revision

Viewing changes to src/accounts.c

Fix the two bugs which prevent the language selection from working. Fixes: https://bugs.launchpad.net/bugs/1019314, https://bugs.launchpad.net/bugs/1074946.

Approved by PS Jenkins bot, Robert Ancell.

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
    /* Language */
45
45
    gchar *language;
46
46
 
47
 
    /* Locale */
48
 
    gchar *locale;
49
 
 
50
47
    /* X session */
51
48
    gchar *xsession;
52
49
};
332
329
    return user->priv->shell;
333
330
}
334
331
 
335
 
const gchar *
336
 
user_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
 
 
356
332
void
357
333
user_set_language (User *user, const gchar *language)
358
334
{
359
335
    g_return_if_fail (user != NULL);
360
336
 
 
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
 
 
341
const gchar *
 
342
user_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
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
367
    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
}
366
379
 
367
380
void
436
449
    g_free (self->priv->gecos);
437
450
    g_free (self->priv->home_directory);
438
451
    g_free (self->priv->shell);
 
452
    g_free (self->priv->language);
439
453
 
440
454
    G_OBJECT_CLASS (user_parent_class)->finalize (object);  
441
455
}