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