summaryrefslogtreecommitdiff
path: root/libcaribou
diff options
context:
space:
mode:
authorManuel BACHMANN <manuel.bachmann@eurogiciel.fr>2013-11-01 11:45:20 +0900
committerDaiki Ueno <ueno@unixuser.org>2013-11-05 10:53:37 +0900
commit6c75e0213f9eecd1c0657f57ac606e63e0703379 (patch)
tree1d7360a6583f5feec1d2f9e27fbf489d759b4e93 /libcaribou
parentf7505d79c4474e311d5115f4d3f8bc054572f83b (diff)
downloadcaribou-6c75e0213f9eecd1c0657f57ac606e63e0703379.tar.gz
xadapter: disable slowkeys when sending key event
https://bugzilla.gnome.org/show_bug.cgi?id=698746
Diffstat (limited to 'libcaribou')
-rw-r--r--libcaribou/xadapter.vala20
1 files changed, 20 insertions, 0 deletions
diff --git a/libcaribou/xadapter.vala b/libcaribou/xadapter.vala
index 92fba5e..e786c66 100644
--- a/libcaribou/xadapter.vala
+++ b/libcaribou/xadapter.vala
@@ -72,6 +72,24 @@ namespace Caribou {
Xkb.free_keyboard(this.xkbdesc, Xkb.GBN_AllComponentsMask, true);
}
+ private bool set_slowkeys_enabled (bool enable) {
+ Xkb.get_controls (this.xdisplay, Xkb.AllControlsMask, this.xkbdesc);
+
+ var previous =
+ (this.xkbdesc.ctrls.enabled_ctrls & Xkb.SlowKeysMask) != 0;
+
+ if (enable)
+ this.xkbdesc.ctrls.enabled_ctrls |= Xkb.SlowKeysMask;
+ else
+ this.xkbdesc.ctrls.enabled_ctrls &= ~Xkb.SlowKeysMask;
+
+ Xkb.set_controls (this.xdisplay,
+ Xkb.SlowKeysMask | Xkb.ControlsEnabledMask,
+ this.xkbdesc);
+
+ return previous;
+ }
+
private Gdk.FilterReturn x_event_filter (Gdk.XEvent xevent, Gdk.Event event) {
// After the following commit, Vala changed the definition
// of Gdk.XEvent from struct to class:
@@ -246,8 +264,10 @@ namespace Caribou {
if (mask != 0)
mod_latch (mask);
+ var enabled = set_slowkeys_enabled (false);
XTest.fake_key_event (this.xdisplay, keycode, true, X.CURRENT_TIME);
this.xdisplay.flush ();
+ set_slowkeys_enabled (enabled);
}
public override void keyval_release (uint keyval) {