22
22
public string session { get; construct; }
23
23
public string default_session { get; construct; }
25
private Gtk.Widget active;
27
25
public SessionPrompt (string id, string? session, string? default_session)
29
27
Object (id: id, session: session, default_session: default_session);
30
private ToggleBox box;
34
34
label = _("Select desktop environment");
35
name_label.vexpand = false;
37
box = new ToggleBox (default_session, session);
36
39
if (UnityGreeter.singleton.test_mode)
38
add_session ("gnome", "GNOME");
39
add_session ("kde", "KDE");
40
add_session ("ubuntu", "Ubuntu");
41
box.add_item ("gnome", "GNOME", SessionList.get_badge ("gnome"));
42
box.add_item ("kde", "KDE", SessionList.get_badge ("kde"));
43
box.add_item ("ubuntu", "Ubuntu", SessionList.get_badge ("ubuntu"));
44
47
foreach (var session in LightDM.get_sessions ())
46
49
debug ("Adding session %s (%s)", session.key, session.name);
47
add_session (session.key, session.name);
51
var ok = new DashButton (_("OK"));
52
ok.clicked.connect (() =>
55
respond ({ active.get_data<string> ("session-list-key") });
61
/* Only have the OK button be end-aligned. The rest of them are near the top. */
62
name_label.vexpand = false;
63
ok.valign = Gtk.Align.END;
67
private void add_session (string key, string name_in)
69
var item = new Gtk.Button ();
70
item.clicked.connect (button_clicked_cb);
71
UnityGreeter.add_style_class (item);
73
var hbox = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6);
75
var pixbuf = SessionList.get_badge (key);
78
var image = new CachedImage (pixbuf);
79
hbox.pack_start (image, false, false, 0);
83
if (key == default_session)
85
/* Translators: %s is a session name like KDE or Ubuntu */
86
name = _("%s (Default)").printf (name);
89
var label = new Gtk.Label (null);
90
label.set_markup ("<span font=\"Ubuntu 13\">%s</span>".printf (name));
91
label.halign = Gtk.Align.START;
92
hbox.pack_start (label, true, true, 0);
100
/* Tighten padding on buttons to not be so large */
101
var style = new Gtk.CssProvider ();
102
style.load_from_data ("* {padding: 8px;}", -1);
103
item.get_style_context ().add_provider (style, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
107
debug ("Internal error loading session chooser style: %s", e.message);
110
item.set_data<string> ("session-list-key", key);
114
private void button_clicked_cb (Gtk.Widget button)
116
foreach_prompt_widget ((w) =>
119
w.override_background_color (Gtk.StateFlags.NORMAL, { 0.5f, 0.5f, 0.5f, 0.4f });
121
w.override_background_color (Gtk.StateFlags.NORMAL, null);
126
public override void grab_focus ()
129
Gtk.Widget best = null;
130
foreach_prompt_widget ((w) =>
135
best = w; /* first button wins, all else considered */
136
var key = w.get_data<string> ("session-list-key");
137
if (session == key || (session == null && default_session == key))
147
button_clicked_cb (best);
50
box.add_item (session.key, session.name, SessionList.get_badge (session.key));
54
box.notify["selected-key"].connect (selected_cb);
60
private void selected_cb ()
62
respond ({ box.selected_key });