~lightdm-team/lightdm/1.4

« back to all changes in this revision

Viewing changes to greeters/ldm-gtk-greeter.c

  • Committer: robert.ancell at canonical
  • Date: 2010-11-01 03:30:41 UTC
  • Revision ID: robert.ancell@canonical.com-20101101033041-gn9vpqjhjluvqn8o
Change language/layout/session when user selected in GTK+ greeter

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
static GtkWidget *window, *vbox, *login_vbox, *message_label, *user_view;
24
24
static GdkPixmap *background_pixmap;
25
25
static GtkWidget *username_entry, *password_entry;
26
 
static gchar *session = NULL, *language = NULL, *theme_name;
 
26
static gchar *theme_name;
 
27
static GSList *session_radio_list = NULL, *language_radio_list = NULL, *layout_radio_list = NULL;
 
28
 
 
29
static gchar *
 
30
get_language ()
 
31
{
 
32
    GSList *iter;
 
33
 
 
34
    for (iter = language_radio_list; iter; iter = iter->next)
 
35
    {
 
36
        GtkCheckMenuItem *item = iter->data;
 
37
        if (gtk_check_menu_item_get_active (item))
 
38
            return g_object_get_data (G_OBJECT (item), "language");
 
39
    }
 
40
 
 
41
    return NULL;
 
42
}
 
43
 
 
44
static void
 
45
set_language (const gchar *language)
 
46
{
 
47
    GSList *iter;
 
48
 
 
49
    for (iter = language_radio_list; iter; iter = iter->next)
 
50
    {
 
51
        GtkCheckMenuItem *item = iter->data;
 
52
        if (strcmp (language, g_object_get_data (G_OBJECT (item), "language")) == 0)
 
53
            gtk_check_menu_item_set_active (item, TRUE);
 
54
    }
 
55
}
 
56
 
 
57
static gchar *
 
58
get_layout ()
 
59
{
 
60
    GSList *iter;
 
61
 
 
62
    for (iter = layout_radio_list; iter; iter = iter->next)
 
63
    {
 
64
        GtkCheckMenuItem *item = iter->data;
 
65
        if (gtk_check_menu_item_get_active (item))
 
66
            return g_object_get_data (G_OBJECT (item), "layout");
 
67
    }
 
68
 
 
69
    return NULL;
 
70
}
 
71
 
 
72
static void
 
73
set_layout (const gchar *layout)
 
74
{
 
75
    GSList *iter;
 
76
 
 
77
    for (iter = layout_radio_list; iter; iter = iter->next)
 
78
    {
 
79
        GtkCheckMenuItem *item = iter->data;
 
80
        if (strcmp (layout, g_object_get_data (G_OBJECT (item), "layout")) == 0)
 
81
            gtk_check_menu_item_set_active (item, TRUE);
 
82
    }
 
83
}
 
84
 
 
85
static gchar *
 
86
get_session ()
 
87
{
 
88
    GSList *iter;
 
89
 
 
90
    for (iter = session_radio_list; iter; iter = iter->next)
 
91
    {
 
92
        GtkCheckMenuItem *item = iter->data;
 
93
        if (gtk_check_menu_item_get_active (item))
 
94
            return g_object_get_data (G_OBJECT (item), "key");
 
95
    }
 
96
 
 
97
    return NULL;
 
98
}
 
99
 
 
100
static void
 
101
set_session (const gchar *session)
 
102
{
 
103
    GSList *iter;
 
104
 
 
105
    for (iter = session_radio_list; iter; iter = iter->next)
 
106
    {
 
107
        GtkCheckMenuItem *item = iter->data;
 
108
        if (strcmp (session, g_object_get_data (G_OBJECT (item), "key")) == 0)
 
109
            gtk_check_menu_item_set_active (item, TRUE);
 
110
    }
 
111
}
27
112
 
28
113
static void
29
114
start_authentication (const gchar *username)
30
115
{
31
116
    GtkTreeIter iter;
 
117
    gchar *language, *layout, *session;
 
118
  
 
119
    if (ldm_greeter_get_user_defaults (greeter, username, &language, &layout, &session))
 
120
    {
 
121
        set_language (language);
 
122
        set_session (session);
 
123
        set_layout (layout);
 
124
        g_free (language);
 
125
        g_free (layout);
 
126
        g_free (session);
 
127
    }
32
128
 
33
129
    if (user_model && gtk_tree_model_get_iter_first (GTK_TREE_MODEL (user_model), &iter))
34
130
    {
140
236
  
141
237
    if (ldm_greeter_get_is_authenticated (greeter))
142
238
    {
143
 
        ldm_greeter_login (greeter, ldm_greeter_get_authentication_user (greeter), session, language);
 
239
        ldm_greeter_login (greeter, ldm_greeter_get_authentication_user (greeter), get_session (), get_language ());
144
240
    }
145
241
    else
146
242
    {
257
353
}
258
354
 
259
355
static void
260
 
session_changed_cb (GtkWidget *widget)
261
 
{
262
 
    if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
263
 
    {
264
 
        g_free (session);
265
 
        session = g_strdup (g_object_get_data (G_OBJECT (widget), "key"));
266
 
    }
267
 
}
268
 
 
269
 
static void
270
 
language_changed_cb (GtkWidget *widget)
271
 
{
272
 
    if (!gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
273
 
        return;
274
 
 
275
 
    g_free (language);
276
 
    language = g_strdup (g_object_get_data (G_OBJECT (widget), "language"));
277
 
}
278
 
 
279
 
static void
280
356
a11y_font_cb (GtkWidget *widget)
281
357
{
282
358
    if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget)))
389
465
    gchar *theme_dir, *rc_file, *background_image;
390
466
    GdkWindow *root;
391
467
    const GList *items, *item;
392
 
    GSList *session_radio_list = NULL, *language_radio_list = NULL, *layout_radio_list = NULL;
393
468
    GdkDisplay *display;
394
469
    GdkScreen *screen;
395
470
    gint screen_width, screen_height;
412
487
    g_signal_connect (G_OBJECT (greeter), "quit", G_CALLBACK (quit_cb), NULL);
413
488
 
414
489
    ldm_greeter_connect (greeter);
415
 
    session = g_strdup (ldm_greeter_get_default_session (greeter));
416
490
 
417
491
    theme_dir = g_path_get_dirname (ldm_greeter_get_theme (greeter));
418
492
    rc_file = ldm_greeter_get_string_property (greeter, "gtkrc");
548
622
    menu = gtk_menu_new ();
549
623
    gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu);
550
624
 
551
 
    menu_item = gtk_radio_menu_item_new_with_label (language_radio_list, _("Previous language"));
552
 
    language_radio_list = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
553
 
    gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
554
 
    g_signal_connect (menu_item, "toggled", G_CALLBACK (language_changed_cb), NULL);
555
 
 
556
625
    items = ldm_greeter_get_languages (greeter);
557
626
    for (item = items; item; item = item->next)
558
627
    {
572
641
            gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
573
642
 
574
643
        g_object_set_data (G_OBJECT (menu_item), "language", g_strdup (ldm_language_get_code (language)));
575
 
        g_signal_connect (menu_item, "toggled", G_CALLBACK (language_changed_cb), NULL);
576
644
    }
577
645
 
578
646
    menu_item = gtk_menu_item_new_with_label (_("Keyboard Layout"));
588
656
        layout_radio_list = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
589
657
        gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item);
590
658
 
591
 
        if (g_str_equal (ldm_layout_get_name (layout), ldm_greeter_get_layout (greeter)))
 
659
        if (g_str_equal (ldm_layout_get_name (layout), ldm_greeter_get_default_layout (greeter)))
592
660
            gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
593
661
 
594
662
        g_object_set_data (G_OBJECT (menu_item), "layout", g_strdup (ldm_layout_get_name (layout)));
612
680
            gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
613
681
 
614
682
        g_object_set_data (G_OBJECT (menu_item), "key", g_strdup (ldm_session_get_key (session)));
615
 
        g_signal_connect (menu_item, "toggled", G_CALLBACK (session_changed_cb), NULL);
616
683
    }
617
684
 
618
685
    power_menu = gtk_menu_new ();