public class Keyboard : Service
{
- 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/zavai_launch_kbd", 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();
- }
-}
+ protected Pid pid;
-public class KeyboardIcon : Gtk.StatusIcon
-{
- bool requested = false;
-
- public KeyboardIcon()
- {
- activate += on_activate;
- zavai.ui.power.power.screen_lock_changed += on_screen_lock_changed;
-
- update_icon();
- }
+ public Keyboard()
+ {
+ Object(name: "keyboard");
+ }
- private void on_activate()
- {
- requested = !requested;
- update_icon();
- if (requested)
- keyboard.request("keyboardicon");
- else
- keyboard.release("keyboardicon");
- }
+ private void on_child_quit(Pid pid, int status)
+ {
+ Process.close_pid(pid);
+ pid = (Pid)0;
+ stop();
+ }
- protected void on_screen_lock_changed(bool val)
+ protected override void start()
{
- update_icon();
+ 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 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);
- }
+ protected override void stop()
+ {
+ if ((int)pid != 0)
+ {
+ Posix.kill((int)pid, 15);
+ pid = (Pid)0;
+ }
+ base.stop();
+ }
}
-/*
-public class GPSRequestLink : Gtk.ToggleButton
+public class KeyboardIcon : Gtk.StatusIcon
{
- public GPSRequestLink()
- {
- // GPS status icon
- status_icon = new Gtk.StatusIcon();
- status_icon.set_visible(true);
- status_icon.activate += on_status_activate;
+ bool requested = false;
+
+ public KeyboardIcon()
+ {
+ activate += on_activate;
+ zavai.ui.power.power.screen_lock_changed += on_screen_lock_changed;
+
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);
+ }
}
}