Parse back the log entries
[gregoa/zavai.git] / src / app_keyboard.vala
1 /*
2  * app_keyboard - zavai keyboard show/hide functions
3  *
4  * Copyright (C) 2009  Enrico Zini <enrico@enricozini.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 using GLib;
22
23 namespace zavai {
24 namespace ui {
25 namespace kbd {
26
27 public class Keyboard : Service
28 {
29     protected Pid pid;
30
31     public Keyboard()
32     {
33         Object(name: "keyboard");
34     }
35
36     private void on_child_quit(Pid pid, int status)
37     {
38         Process.close_pid(pid);
39         pid = (Pid)0;
40         stop();
41     }
42
43     protected override void start()
44     {
45         string script = zavai.config.find_script("keyboard");
46         if (script == null) return;
47
48         string[] args = { script, null };
49         int opid;
50         try {
51             Gdk.spawn_on_screen(
52                 Gdk.Screen.get_default(),
53                 "/",
54                 args,
55                 null,
56                 SpawnFlags.SEARCH_PATH | SpawnFlags.STDOUT_TO_DEV_NULL | SpawnFlags.STDERR_TO_DEV_NULL,
57                 null,
58                 out opid);
59             pid = (Pid)opid;
60             ChildWatch.add(pid, on_child_quit);
61             base.start();
62         } catch (Error e) {
63             log.error("Running " + zavai.config.homedir + "/keyboard: " + e.message);
64             pid = (Pid)0;
65         }
66     }
67
68     protected override void stop()
69     {
70         if ((int)pid != 0)
71         {
72             Posix.kill((int)pid, 15);
73             pid = (Pid)0;
74         }
75         base.stop();
76     }
77 }
78
79 public class KeyboardIcon : Gtk.StatusIcon
80 {
81     bool requested = false;
82
83     public KeyboardIcon()
84     {
85         activate += on_activate;
86         zavai.ui.power.power.screen_lock_changed += on_screen_lock_changed;
87
88         update_icon();
89     }
90
91     private void on_activate()
92     {
93         requested = !requested;
94         update_icon();
95         if (requested)
96             keyboard.request("keyboardicon");
97         else
98             keyboard.release("keyboardicon");
99     }
100
101     protected void on_screen_lock_changed(bool val)
102     {
103         update_icon();
104     }
105
106     protected void update_icon()
107     {
108         string name = zavai.config.icondir + "/";
109         if (zavai.ui.power.power.screen_locked)
110             name += "screen_lock.png";
111         else
112             name += (requested ? "kbd_on.png" : "kbd_off.png");
113         stderr.printf("load icon from %s\n", name);
114         set_from_file(name);
115     }
116 }
117
118 /*
119 public class GPSRequestLink : Gtk.ToggleButton
120 {
121     public GPSRequestLink()
122     {
123         // GPS status icon
124         status_icon = new Gtk.StatusIcon();
125         status_icon.set_visible(true);
126         status_icon.activate += on_status_activate;
127         update_icon();
128     }
129
130     private void on_fix_status_changed(dynamic DBus.Object pos, int fix_status)
131     {
132         this.fix_status = fix_status;
133         update_icon();
134     }
135
136     private void on_toggled(Gtk.Button src)
137     {
138         Service s = zavai.registry.gets(service_name);
139         if (get_active())
140             s.request("servicerequestlink");
141         else
142             s.release("servicerequestlink");
143         set_label(get_active() ? label_stop : label_start);
144         update_icon();
145     }
146
147     private void on_status_activate()
148     {
149         set_active(!get_active());
150     }
151 }
152 */
153
154 Keyboard keyboard;
155 KeyboardIcon icon;
156
157 public void init()
158 {
159     if (zavai.config.profile != "laptop")
160     {
161         keyboard = new Keyboard();
162         icon = new KeyboardIcon();
163         icon.set_visible(true);
164     }
165 }
166
167 }
168 }
169 }