From 5c929ff1a50fae2c29437b2fd4909a2ac4c8d21c Mon Sep 17 00:00:00 2001 From: Daiki Ueno Date: Fri, 19 Apr 2013 15:24:52 +0900 Subject: Make key repeat work again https://bugzilla.gnome.org/show_bug.cgi?id=690435 --- libcaribou/key-model.vala | 18 ++++++++++++++---- libcaribou/xml-deserializer.vala | 2 ++ 2 files changed, 16 insertions(+), 4 deletions(-) (limited to 'libcaribou') 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) { -- cgit v1.2.1