Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 468678 | Differences between
and this patch

Collapse All | Expand All

(-)a/src/accounts.c (-26 / +47 lines)
Lines 44-52 struct UserPrivate Link Here
44
    /* Language */
44
    /* Language */
45
    gchar *language;
45
    gchar *language;
46
46
47
    /* Locale */
48
    gchar *locale;
49
50
    /* X session */
47
    /* X session */
51
    gchar *xsession;
48
    gchar *xsession;
52
};
49
};
Lines 332-367 user_get_shell (User *user) Link Here
332
    return user->priv->shell;
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
void
332
void
357
user_set_language (User *user, const gchar *language)
333
user_set_language (User *user, const gchar *language)
358
{
334
{
359
    g_return_if_fail (user != NULL);
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
    if (user->priv->proxy)
350
    if (user->priv->proxy)
362
        call_method (user->priv->proxy, "SetLanguage", g_variant_new ("(s)", language), "()", NULL);
351
    {
352
        /* get_property () uses g_dbus_proxy_get_cached_property () which would
353
         * return the previous (cached) value of the "Language" property */
354
#if 0
355
        if (get_property (user->priv->proxy, "Language", "s", &variant))
356
        {
357
            g_variant_get (variant, "s", &user->priv->language);
358
            g_variant_unref (variant);
359
        }
360
        else
361
            user->priv->language = NULL;
362
#endif
363
        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);
364
        if (success)
365
        {
366
            g_variant_get (variant, "(v)", &inner);
367
            user->priv->language = g_variant_dup_string (inner, NULL);
368
            g_variant_unref (inner);
369
            g_variant_unref (variant);
370
        }
371
        else
372
            user->priv->language = NULL;
373
    }
363
    else
374
    else
364
        save_string_to_dmrc (user->priv->name, "Desktop", "Language", language);
375
        user->priv->language = get_string_from_dmrc (user->priv->name, "Desktop", "Language");
376
377
    /* Treat a blank language as unset */
378
    if (g_strcmp0 (user->priv->language, "") == 0)
379
    {
380
        g_free (user->priv->language);
381
        user->priv->language = NULL;
382
    }
383
384
    return user->priv->language;
365
}
385
}
366
386
367
void
387
void
Lines 436-441 user_finalize (GObject *object) Link Here
436
    g_free (self->priv->gecos);
456
    g_free (self->priv->gecos);
437
    g_free (self->priv->home_directory);
457
    g_free (self->priv->home_directory);
438
    g_free (self->priv->shell);
458
    g_free (self->priv->shell);
459
    g_free (self->priv->language);
439
460
440
    G_OBJECT_CLASS (user_parent_class)->finalize (object);  
461
    G_OBJECT_CLASS (user_parent_class)->finalize (object);  
441
}
462
}
(-)a/src/accounts.h (-1 / +1 lines)
Lines 58-64 const gchar *user_get_xsession (User *us Link Here
58
58
59
void user_set_xsession (User *user, const gchar *session);
59
void user_set_xsession (User *user, const gchar *session);
60
60
61
const gchar *user_get_locale (User *user);
61
const gchar *user_get_language (User *user);
62
62
63
void user_set_language (User *user, const gchar *language);
63
void user_set_language (User *user, const gchar *language);
64
64
(-)a/src/display.c (+9 lines)
Lines 705-710 display_start_session (Display *display) Link Here
705
{
705
{
706
    User *user;
706
    User *user;
707
    gchar *filename, *sessions_dir, *path;
707
    gchar *filename, *sessions_dir, *path;
708
    const gchar *language;
708
    gchar **argv;
709
    gchar **argv;
709
710
710
    user = session_get_user (display->priv->session);
711
    user = session_get_user (display->priv->session);
Lines 728-733 display_start_session (Display *display) Link Here
728
    if (!argv)
729
    if (!argv)
729
        return TRUE;
730
        return TRUE;
730
  
731
  
732
    /* Retrieve language setting */
733
    language = user_get_language (user);
734
    if (language != NULL && language != '\0')
735
    {
736
        session_set_env (display->priv->session, "LANG", language);
737
        session_set_env (display->priv->session, "GDM_LANG", language);
738
    }
739
731
    session_set_env (display->priv->session, "DESKTOP_SESSION", display->priv->user_session); // FIXME: Apparently deprecated?
740
    session_set_env (display->priv->session, "DESKTOP_SESSION", display->priv->user_session); // FIXME: Apparently deprecated?
732
    session_set_env (display->priv->session, "GDMSESSION", display->priv->user_session); // FIXME: Not cross-desktop
741
    session_set_env (display->priv->session, "GDMSESSION", display->priv->user_session); // FIXME: Not cross-desktop
733
742

Return to bug 468678