* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+using GLib;
+
namespace zavai {
namespace ui {
namespace kbd {
-/*
-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)
+public class Keyboard : Service
+{
+ protected Pid pid;
-class GPXTracer(gtk.ToggleAction):
- states = [_("Start GPX trace"), _("Stop GPX trace")]
+ public Keyboard()
+ {
+ name = "keyboard";
+ }
- def __init__(self, registry, **kw):
- self.state = 0
- super(GPXTracer, self).__init__("menu.main.gps.gpx", self.states[self.state], None, None)
+ private void on_child_quit(Pid pid, int status)
+ {
+ Process.close_pid(pid);
+ pid = (Pid)0;
+ stop();
+ }
- self.registry = registry
- self.set_active(False)
+ 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;
+ }
+ }
- self.connect("toggled", self.on_toggle)
+ protected override void stop()
+ {
+ if ((int)pid != 0)
+ {
+ Posix.kill((int)pid, 15);
+ pid = (Pid)0;
+ }
+ base.stop();
+ }
+}
- 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()
+public class KeyboardIcon : Gtk.StatusIcon
+{
+ bool requested = false;
- def start(self):
- zavai.info("GPX trace started")
- self.registry.resource("gpx").connect("gpx", self)
+ public KeyboardIcon()
+ {
+ activate += on_activate;
+ zavai.ui.power.power.screen_lock_changed += on_screen_lock_changed;
- def stop(self):
- zavai.info("GPX trace ended")
- self.registry.resource("gpx").disconnect("gpx", self)
+ update_icon();
+ }
-public class Waypoint : BigButton
-{
- public Waypoint()
- {
- set_label("Take waypoint");
- zavai.gps.gpx.tracking_changed += on_gpx_tracking_changed;
- clicked += on_clicked;
- set_sensitive(zavai.gps.gpx.tracking);
- }
+ private void on_activate()
+ {
+ requested = !requested;
+ update_icon();
+ if (requested)
+ keyboard.request("keyboardicon");
+ else
+ keyboard.release("keyboardicon");
+ }
- protected void on_gpx_tracking_changed(zavai.gps.GPX gpx, bool new_state)
+ protected void on_screen_lock_changed(bool val)
{
-stderr.printf("Toggled %d\n", (int)new_state);
- set_sensitive(new_state);
+ update_icon();
}
- protected void on_clicked()
- {
-stderr.printf("Activate\n");
- zavai.gps.gpx.waypoint();
- }
+ protected void update_icon()
+ {
+ 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);
+ }
}
-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 GPSRequestLink : Gtk.ToggleButton
{
- protected string service_name;
- protected string label_start;
- protected string label_stop;
- protected Gtk.StatusIcon status_icon;
- protected int fix_status = 0;
-
public GPSRequestLink()
{
- service_name = "gps";
- label_start = "Keep GPS on";
- label_stop = "Stop keeping GPS on";
- set_size_request(0, zavai.config.min_button_height);
- toggled += on_toggled;
-
- set_label(get_active() ? label_stop : label_start);
-
- //tooltip = "GPS status";
- try {
- fix_status = zavai.gps.gps.device.GetFixStatus();
- } catch (Error e) {
- fix_status = 0;
- }
- zavai.gps.gps.device.FixStatusChanged += on_fix_status_changed;
-
// GPS status icon
status_icon = new Gtk.StatusIcon();
status_icon.set_visible(true);
update_icon();
}
- protected void update_icon()
- {
- string name;
- if (fix_status == 2 || fix_status == 3)
- name = zavai.config.icondir + "/" + (get_active() ? "gps_fix_on.png" : "gps_fix_off.png");
- else
- name = zavai.config.icondir + "/" + (get_active() ? "gps_nofix_on.png" : "gps_nofix_off.png");
-stderr.printf("load icon from %s\n", name);
- status_icon.set_from_file(name);
- }
-
private void on_fix_status_changed(dynamic DBus.Object pos, int fix_status)
{
this.fix_status = fix_status;
}
*/
+Keyboard keyboard;
+KeyboardIcon icon;
+
public void init()
{
- /*
- registry.register(GPXAudioTracer(registry))
- registry.register(GPXWaypoint(registry))
-
- // Apps
- var useless = new Useless();
- zavai.registry.register_applet("app.debug.useless", useless);
- */
-
- /*
- var menu_waypoint = new Waypoint();
- var menu_gpsrequest = new GPSRequestLink();
- //label_on = "Stop GPX trace";
- //label_off = "Start GPX trace";
- //label_on = "Stop GPS monitor";
- //label_off = "Start GPS monitor";
- //label_on = "Stop GPS position tracking";
- //label_off = "Start GPS position tracking";
- //label_on = "Stop keeping GPS on";
- //label_off = "Keep GPS on";
-
- // Menus
- var menu_gps = new zavai.Menu("GPS");
- //menu_gps.add_applet("app.debug.useless");
- menu_gps.add_service_toggle("gps.gpx", "Start GPX trace", "Stop GPX trace");
- menu_gps.add_widget(menu_waypoint);
- menu_gps.add_widget(menu_gpsrequest);
-
- zavai.registry.register_menu("menu.gps", menu_gps);
- zavai.registry.getmenu("menu.main").add_applet("menu.gps");
- */
+stderr.printf("INIT KBD\n");
+ keyboard = new Keyboard();
+ zavai.registry.register_service(keyboard);
+ icon = new KeyboardIcon();
+ icon.set_visible(true);
}
}