[caribou] Make key repeat work again



commit 5c929ff1a50fae2c29437b2fd4909a2ac4c8d21c
Author: Daiki Ueno <ueno unixuser org>
Date:   Fri Apr 19 15:24:52 2013 +0900

    Make key repeat work again
    
    https://bugzilla.gnome.org/show_bug.cgi?id=690435

 data/layouts/fullscale/common/qwerty.xml  |  8 ++++----
 data/layouts/fullscale/common/symbols.xml |  8 ++++----
 data/layouts/touch/ara.xml.in             |  4 ++--
 data/layouts/touch/common/qwerty.xml      |  8 ++++----
 data/layouts/touch/common/symbols.xml     |  8 ++++----
 data/layouts/touch/il.xml.in              |  4 ++--
 libcaribou/key-model.vala                 | 18 ++++++++++++++----
 libcaribou/xml-deserializer.vala          |  2 ++
 8 files changed, 36 insertions(+), 24 deletions(-)
---
diff --git a/data/layouts/fullscale/common/qwerty.xml b/data/layouts/fullscale/common/qwerty.xml
index d430a6a..d1368a1 100644
--- a/data/layouts/fullscale/common/qwerty.xml
+++ b/data/layouts/fullscale/common/qwerty.xml
@@ -55,7 +55,7 @@
         <key name="omacron"/>
       </key>
       <key name="p"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="Tab" width="1.5"/>
@@ -100,7 +100,7 @@
       <key align="left" name="Caribou_Symbols" toggle="symbols1" width="2.0"/>
       <key align="left" name="Control_L" width="1.5"/>
       <key align="left" name="Alt_L" width="1.5"/>
-      <key align="left" name="space" width="5.0"/>
+      <key align="left" name="space" width="5.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
@@ -159,7 +159,7 @@
         <key name="Omacron"/>
       </key>
       <key name="P"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="Tab" width="1.5"/>
@@ -204,7 +204,7 @@
       <key align="left" name="Caribou_Symbols" toggle="symbols1" width="2.0"/>
       <key align="left" name="Control_L" width="1.5"/>
       <key align="left" name="Alt_L" width="1.5"/>
-      <key align="left" name="space" width="5.0"/>
+      <key align="left" name="space" width="5.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
diff --git a/data/layouts/fullscale/common/symbols.xml b/data/layouts/fullscale/common/symbols.xml
index 98d28cf..e908993 100644
--- a/data/layouts/fullscale/common/symbols.xml
+++ b/data/layouts/fullscale/common/symbols.xml
@@ -27,7 +27,7 @@
       <key name="8"/>
       <key name="9"/>
       <key name="0"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="Tab" width="1.5"/>
@@ -61,7 +61,7 @@
       <key align="left" name="Caribou_Alpha" toggle="default" width="2.0"/>
       <key align="left" name="Control_L" width="1.5"/>
       <key align="left" name="Alt_L" width="1.5"/>
-      <key align="left" name="space" width="5.0"/>
+      <key align="left" name="space" width="5.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
@@ -92,7 +92,7 @@
       <key name="asterisk"/>
       <key name="plus"/>
       <key name="equal"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="Tab" width="1.5"/>
@@ -126,7 +126,7 @@
       <key align="left" name="Caribou_Alpha" toggle="default" width="2.0"/>
       <key align="left" name="Control_L" width="1.5"/>
       <key align="left" name="Alt_L" width="1.5"/>
-      <key align="left" name="space" width="5.0"/>
+      <key align="left" name="space" width="5.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
diff --git a/data/layouts/touch/ara.xml.in b/data/layouts/touch/ara.xml.in
index f45d555..6b9230b 100644
--- a/data/layouts/touch/ara.xml.in
+++ b/data/layouts/touch/ara.xml.in
@@ -12,7 +12,7 @@
       <key name="Arabic_khah"/>
       <key name="Arabic_hah"/>
       <key name="Arabic_jeem"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="center">
       <key name="Arabic_sheen"/>
@@ -41,7 +41,7 @@
     <row>
       <key align="left" name="Caribou_Symbols" toggle="symbols1" width="2.0"/>
       <key align="left" name="Arabic_fathatan"/>
-      <key align="left" name="space" width="6.0"/>
+      <key align="left" name="space" width="6.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
diff --git a/data/layouts/touch/common/qwerty.xml b/data/layouts/touch/common/qwerty.xml
index 8947605..7c7aea4 100644
--- a/data/layouts/touch/common/qwerty.xml
+++ b/data/layouts/touch/common/qwerty.xml
@@ -40,7 +40,7 @@
         <key name="omacron"/>
       </key>
       <key name="p"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="a">
@@ -82,7 +82,7 @@
     </row>
     <row>
       <key align="left" name="Caribou_Symbols" toggle="symbols1" width="2.0"/>
-      <key align="center" name="space" width="6.0"/>
+      <key align="center" name="space" width="6.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
@@ -126,7 +126,7 @@
         <key name="Omacron"/>
       </key>
       <key name="P"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="A">
@@ -168,7 +168,7 @@
     </row>
     <row>
       <key align="left" name="Caribou_Symbols" toggle="symbols1" width="2.0"/>
-      <key align="center" name="space" width="6.0"/>
+      <key align="center" name="space" width="6.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
diff --git a/data/layouts/touch/common/symbols.xml b/data/layouts/touch/common/symbols.xml
index 47ce01f..4510984 100644
--- a/data/layouts/touch/common/symbols.xml
+++ b/data/layouts/touch/common/symbols.xml
@@ -12,7 +12,7 @@
       <key name="8"/>
       <key name="9"/>
       <key name="0"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key name="minus"/>
@@ -43,7 +43,7 @@
     </row>
     <row>
       <key align="left" name="Caribou_Alpha" toggle="default" width="2.0"/>
-      <key align="center" name="space" width="6.0"/>
+      <key align="center" name="space" width="6.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
@@ -59,7 +59,7 @@
       <key name="asterisk"/>
       <key name="plus"/>
       <key name="equal"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="right">
       <key align="right" name="underscore"/>
@@ -90,7 +90,7 @@
     </row>
     <row>
       <key align="left" name="Caribou_Alpha" toggle="default" width="2.0"/>
-      <key align="center" name="space" width="6.0"/>
+      <key align="center" name="space" width="6.0" repeatable="yes"/>
       <key align="right" name="Caribou_Prefs"/>
     </row>
   </level>
diff --git a/data/layouts/touch/il.xml.in b/data/layouts/touch/il.xml.in
index ff29ff9..360c7aa 100644
--- a/data/layouts/touch/il.xml.in
+++ b/data/layouts/touch/il.xml.in
@@ -12,7 +12,7 @@
       <key name="hebrew_finalnun"/>
       <key name="hebrew_finalmem"/>
       <key name="hebrew_pe"/>
-      <key name="BackSpace"/>
+      <key name="BackSpace" repeatable="yes"/>
     </row>
     <row align="center">
       <key name="hebrew_shin"/>
@@ -40,7 +40,7 @@
     </row>
     <row>
       <key name="Caribou_Symbols" align="left" toggle="symbols1" width="2.0"/>
-      <key name="space" width="6.0" align="center"/>
+      <key name="space" width="6.0" align="center" repeatable="yes"/>
       <key name="Caribou_Prefs" align="right"/>
     </row>
   </level>
diff --git a/libcaribou/key-model.vala b/libcaribou/key-model.vala
index 8709280..ce6315b 100644
--- a/libcaribou/key-model.vala
+++ b/libcaribou/key-model.vala
@@ -8,6 +8,7 @@ namespace Caribou {
         public string align { get; set; default = "center"; }
         public double width { get; set; default = 1.0; }
         public string toggle { get; set; default = ""; }
+        public bool repeatable { get; set; default = false; }
 
         private Gdk.ModifierType mod_mask;
         public bool is_modifier {
@@ -144,7 +145,12 @@ namespace Caribou {
                     modifier_state = ModifierState.NONE;
                 }
             }
-            hold_tid = GLib.Timeout.add(1000, on_key_held);
+
+            if (repeatable)
+                xadapter.keyval_press (keyval);
+            else
+                hold_tid = GLib.Timeout.add (1000, on_key_held);
+
             key_pressed(this);
         }
 
@@ -160,9 +166,13 @@ namespace Caribou {
                 }
             }
 
-            foreach (var keyval in _keyvals) {
-                xadapter.keyval_press(keyval);
-                xadapter.keyval_release(keyval);
+            if (repeatable)
+                xadapter.keyval_release (keyval);
+            else {
+                foreach (var keyval in _keyvals) {
+                    xadapter.keyval_press (keyval);
+                    xadapter.keyval_release (keyval);
+                }
             }
 
             key_released(this);
diff --git a/libcaribou/xml-deserializer.vala b/libcaribou/xml-deserializer.vala
index dd42309..e5a3239 100644
--- a/libcaribou/xml-deserializer.vala
+++ b/libcaribou/xml-deserializer.vala
@@ -160,6 +160,8 @@ namespace Caribou {
                     key.align = prop->children->content;
                 else if (prop->name == "width")
                     key.width = double.parse (prop->children->content);
+                else if (prop->name == "repeatable" && text == null)
+                    key.repeatable = prop->children->content == "yes";
             }
 
             for (Xml.Node* i = node->children; i != null; i = i->next) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]