summaryrefslogtreecommitdiff
path: root/libcaribou
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@unixuser.org>2013-04-19 15:24:52 +0900
committerDaiki Ueno <ueno@unixuser.org>2013-04-22 15:31:32 +0900
commit5c929ff1a50fae2c29437b2fd4909a2ac4c8d21c (patch)
tree6d24ae9adf762f175b7f2b3d67124e4219d65a3b /libcaribou
parent33ad8a8b2247d9c435970c0aa6d2262ecbc24269 (diff)
downloadcaribou-5c929ff1a50fae2c29437b2fd4909a2ac4c8d21c.tar.gz
Make key repeat work again
https://bugzilla.gnome.org/show_bug.cgi?id=690435
Diffstat (limited to 'libcaribou')
-rw-r--r--libcaribou/key-model.vala18
-rw-r--r--libcaribou/xml-deserializer.vala2
2 files changed, 16 insertions, 4 deletions
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) {