public class Keyboard : Service
{
- protected Pid pid;
+ protected Pid pid;
- public Keyboard()
- {
- name = "keyboard";
- }
-
- private void on_child_quit(Pid pid, int status)
- {
- Process.close_pid(pid);
- pid = (Pid)0;
- stop();
- }
-
- protected override void start()
- {
- string[] args = { "/usr/bin/matchbox-keyboard", null };
- int opid;
- try {
- Gdk.spawn_on_screen(
- Gdk.Screen.get_default(),
- "/",
- args,
- null,
- SpawnFlags.SEARCH_PATH | SpawnFlags.STDOUT_TO_DEV_NULL | SpawnFlags.STDERR_TO_DEV_NULL,
- null,
- out opid);
- pid = (Pid)opid;
- ChildWatch.add(pid, on_child_quit);
- base.start();
- } catch (Error e) {
- log.error("Running matchbox-keyboard: " + e.message);
- pid = (Pid)0;
- }
- }
-
- protected override void stop()
- {
- if ((int)pid != 0)
- {
- Posix.kill((int)pid, 15);
- pid = (Pid)0;
- }
- base.stop();
- }
-}
-
-/*
-class GPSOn(gtk.ToggleAction):
- states = [_("GPS always on"), _("GPS on when needed")]
-
- def __init__(self, registry, **kw):
- self.state = 0
- super(GPSOn, self).__init__("menu.main.gps.alwayson", self.states[self.state], None, None)
-
- self.registry = registry
- self.set_active(False)
-
- self.connect("toggled", self.on_toggle)
-
- def on_toggle(self, *args):
- self.state = (self.state + 1) % len(self.states)
- self.set_property("label", self.states[self.state])
- if self.get_active():
- self.start()
- else:
- self.stop()
-
- def start(self):
- self.registry.resource("gps").connect("gps", self)
-
- def stop(self):
- self.registry.resource("gps").disconnect("gps", self)
-
-class GPXTracer(gtk.ToggleAction):
- states = [_("Start GPX trace"), _("Stop GPX trace")]
-
- def __init__(self, registry, **kw):
- self.state = 0
- super(GPXTracer, self).__init__("menu.main.gps.gpx", self.states[self.state], None, None)
-
- self.registry = registry
- self.set_active(False)
-
- self.connect("toggled", self.on_toggle)
-
- def on_toggle(self, *args):
- self.state = (self.state + 1) % len(self.states)
- self.set_property("label", self.states[self.state])
- if self.get_active():
- self.start()
- else:
- self.stop()
-
- def start(self):
- zavai.info("GPX trace started")
- self.registry.resource("gpx").connect("gpx", self)
-
- def stop(self):
- zavai.info("GPX trace ended")
- self.registry.resource("gpx").disconnect("gpx", self)
+ public Keyboard()
+ {
+ Object(name: "keyboard");
+ }
-public class Waypoint : BigButton
-{
- public Waypoint()
+ private void on_child_quit(Pid pid, int status)
{
- set_label("Take waypoint");
- zavai.gps.gpx.tracking_changed += on_gpx_tracking_changed;
- clicked += on_clicked;
- set_sensitive(zavai.gps.gpx.tracking);
+ Process.close_pid(pid);
+ pid = (Pid)0;
+ stop();
}
- protected void on_gpx_tracking_changed(zavai.gps.GPX gpx, bool new_state)
+ protected override void start()
{
-stderr.printf("Toggled %d\n", (int)new_state);
- set_sensitive(new_state);
+ string script = zavai.config.find_script("keyboard");
+ if (script == null) return;
+ string[] args = { script, null };
+ int opid;
+ try {
+ Gdk.spawn_on_screen(
+ Gdk.Screen.get_default(),
+ "/",
+ args,
+ null,
+ SpawnFlags.SEARCH_PATH | SpawnFlags.STDOUT_TO_DEV_NULL | SpawnFlags.STDERR_TO_DEV_NULL,
+ null,
+ out opid);
+ pid = (Pid)opid;
+ ChildWatch.add(pid, on_child_quit);
+ base.start();
+ } catch (Error e) {
+ log.error("Running " + zavai.config.homedir + "/keyboard: " + e.message);
+ pid = (Pid)0;
+ }
}
- protected void on_clicked()
+ protected override void stop()
{
-stderr.printf("Activate\n");
- zavai.gps.gpx.waypoint();
+ if ((int)pid != 0)
+ {
+ Posix.kill((int)pid, 15);
+ pid = (Pid)0;
+ }
+ base.stop();
}
}
-class GPXAudioTracer(gtk.ToggleAction):
- states = [_("Start GPX and audio trace"), _("Stop GPX and audio trace")]
-
- def __init__(self, registry, **kw):
- self.state = 0
- super(GPXAudioTracer, self).__init__("menu.main.gps.gpxaudio", self.states[self.state], None, None)
-
- self.registry = registry
- self.recorder = zavai.Recorder(registry)
- self.set_active(False)
-
- self.connect("toggled", self.on_toggle)
-
- def shutdown(self):
- self.recorder.stop()
- super(GPXAudioTracer, self).shutdown()
-
- def on_toggle(self, *args):
- self.state = (self.state + 1) % len(self.states)
- self.set_property("label", self.states[self.state])
- if self.get_active():
- self.start()
- else:
- self.stop()
-
- def start(self):
- zavai.info("GPX trace started")
- gpx = self.registry.resource("gpx")
- gpx.connect("gpx", self)
- gpx.add_activity_monitor(self.on_gpx_activity_changed)
-
- def stop(self):
- zavai.info("GPX trace ended")
- gpx = self.registry.resource("gpx")
- gpx.disconnect("gpx", self)
- self.recorder.stop()
- gpx.del_activity_monitor(self.on_gpx_activity_changed)
-
- def on_gpx_activity_changed(self, gpx, state):
- if state:
- self.recorder.start(gpx.basename + ".wav")
- else:
- self.recorder.stop()
-*/
-
public class KeyboardIcon : Gtk.StatusIcon
{
- bool requested = false;
-
- public KeyboardIcon()
- {
- activate += on_activate;
- update_icon();
- }
-
- private void on_activate()
- {
- requested = !requested;
- update_icon();
- if (requested)
- keyboard.request("keyboardicon");
- else
- keyboard.release("keyboardicon");
- }
+ bool requested = false;
- protected void update_icon()
- {
- string name = zavai.config.icondir + "/" + (requested ? "kbd_on.png" : "kbd_off.png");
- stderr.printf("load icon from %s\n", name);
- set_from_file(name);
- }
-}
+ public KeyboardIcon()
+ {
+ activate += on_activate;
+ zavai.ui.power.power.screen_lock_changed += on_screen_lock_changed;
-/*
-public class GPSRequestLink : Gtk.ToggleButton
-{
- public GPSRequestLink()
- {
- // GPS status icon
- status_icon = new Gtk.StatusIcon();
- status_icon.set_visible(true);
- status_icon.activate += on_status_activate;
update_icon();
- }
+ }
- private void on_fix_status_changed(dynamic DBus.Object pos, int fix_status)
+ private void on_activate()
{
- this.fix_status = fix_status;
+ requested = !requested;
update_icon();
+ if (requested)
+ keyboard.request("keyboardicon");
+ else
+ keyboard.release("keyboardicon");
}
- private void on_toggled(Gtk.Button src)
- {
- Service s = zavai.registry.gets(service_name);
- if (get_active())
- s.request("servicerequestlink");
- else
- s.release("servicerequestlink");
- set_label(get_active() ? label_stop : label_start);
+ protected void on_screen_lock_changed(bool val)
+ {
update_icon();
- }
+ }
- private void on_status_activate()
+ protected void update_icon()
{
- set_active(!get_active());
+ string name = zavai.config.icondir + "/";
+ if (zavai.ui.power.power.screen_locked)
+ name += "screen_lock.png";
+ else
+ name += (requested ? "kbd_on.png" : "kbd_off.png");
+ stderr.printf("load icon from %s\n", name);
+ set_from_file(name);
}
}
-*/
+
Keyboard keyboard;
KeyboardIcon icon;
public void init()
{
-stderr.printf("INIT KBD\n");
- keyboard = new Keyboard();
- zavai.registry.register_service(keyboard);
- icon = new KeyboardIcon();
- icon.set_visible(true);
+ if (zavai.config.profile != "laptop")
+ {
+ keyboard = new Keyboard();
+ icon = new KeyboardIcon();
+ icon.set_visible(true);
+ }
}
}