1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
class Greeter
{
private LightDM.Greeter greeter;
private Gtk.Entry username_entry;
private Gtk.Entry password_entry;
private Gtk.Label message_label;
public Greeter ()
{
greeter = new LightDM.Greeter ();
greeter.connected.connect (connect_cb);
greeter.show_prompt.connect (show_prompt_cb);
greeter.show_message.connect (show_message_cb);
greeter.show_error.connect (show_message_cb);
greeter.authentication_complete.connect (authentication_complete_cb);
greeter.timed_login.connect (timed_login_cb);
greeter.quit.connect (quit_cb);
}
public void start ()
{
greeter.connect_to_server ();
}
private void username_activate_cb (Gtk.Entry entry)
{
username_entry.sensitive = false;
greeter.start_authentication (username_entry.text);
}
private void password_activate_cb (Gtk.Entry entry)
{
password_entry.sensitive = false;
greeter.provide_secret (password_entry.text);
}
private void connect_cb (LightDM.Greeter greeter)
{
var display = Gdk.Display.get_default ();
var screen = display.get_default_screen ();
var window = new Gtk.Window ();
window.set_default_size (screen.get_width (), screen.get_height ());
var vbox = new Gtk.VBox (false, 0);
window.add (vbox);
var login_align = new Gtk.Alignment (0.5f, 0.5f, 0.0f, 0.0f);
vbox.pack_start (login_align, true, true, 0);
var login_vbox = new Gtk.VBox (false, 6);
login_vbox.border_width = 12;
login_align.add (login_vbox);
var logo_image = new Gtk.Image.from_icon_name ("computer", Gtk.IconSize.DIALOG);
logo_image.pixel_size = 64;
login_vbox.pack_start (logo_image, false, false, 0);
login_vbox.pack_start (new Gtk.Label (greeter.hostname), false, false, 0);
message_label = new Gtk.Label ("");
login_vbox.pack_start (message_label, false, false, 0);
message_label.no_show_all = true;
username_entry = new Gtk.Entry ();
login_vbox.pack_start (username_entry, false, false, 0);
username_entry.activate.connect (username_activate_cb);
password_entry = new Gtk.Entry ();
password_entry.visibility = false;
password_entry.sensitive = false;
login_vbox.pack_start (password_entry, false, false, 0);
password_entry.activate.connect (password_activate_cb);
password_entry.no_show_all = true;
window.show_all ();
username_entry.grab_focus ();
}
private void show_prompt_cb (LightDM.Greeter greeter, string text)
{
password_entry.show ();
password_entry.sensitive = true;
password_entry.grab_focus ();
}
private void show_message_cb (LightDM.Greeter greeter, string text)
{
message_label.label = text;
message_label.show ();
}
private void authentication_complete_cb (LightDM.Greeter greeter)
{
password_entry.hide ();
password_entry.text = "";
username_entry.text = "";
username_entry.sensitive = true;
username_entry.grab_focus ();
if (greeter.is_authenticated)
greeter.login (greeter.get_authentication_user (), null, null);
else
{
message_label.label = "Failed to authenticate";
message_label.show ();
}
}
private void timed_login_cb (LightDM.Greeter greeter, string username)
{
greeter.login (greeter.get_timed_login_user (), null, null);
}
private void quit_cb (LightDM.Greeter greeter)
{
Gtk.main_quit ();
}
static int main (string[] args)
{
Gtk.init (ref args);
var g = new Greeter ();
g.start ();
Gtk.main ();
return 0;
}
}
|