Actually decrement usage count when releasing a service
[gregoa/zavai.git] / src / app_keyboard.vala
index b67e44e636972ed1fab3eae9e07d75878fed0457..31c049276712cedc55f05c8d74b133e1eca8f3a2 100644 (file)
@@ -26,138 +26,106 @@ namespace kbd {
 
 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/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();
-       }
-}
+    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);
+    }
 }
 
 }