diff options
author | Daiki Ueno <ueno@unixuser.org> | 2013-04-19 15:24:52 +0900 |
---|---|---|
committer | Daiki Ueno <ueno@unixuser.org> | 2013-04-22 15:31:32 +0900 |
commit | 5c929ff1a50fae2c29437b2fd4909a2ac4c8d21c (patch) | |
tree | 6d24ae9adf762f175b7f2b3d67124e4219d65a3b /libcaribou | |
parent | 33ad8a8b2247d9c435970c0aa6d2262ecbc24269 (diff) | |
download | caribou-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.vala | 18 | ||||
-rw-r--r-- | libcaribou/xml-deserializer.vala | 2 |
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) { |