diff options
author | Manuel BACHMANN <manuel.bachmann@eurogiciel.fr> | 2013-11-01 11:45:20 +0900 |
---|---|---|
committer | Daiki Ueno <ueno@unixuser.org> | 2013-11-05 10:53:37 +0900 |
commit | 6c75e0213f9eecd1c0657f57ac606e63e0703379 (patch) | |
tree | 1d7360a6583f5feec1d2f9e27fbf489d759b4e93 /libcaribou | |
parent | f7505d79c4474e311d5115f4d3f8bc054572f83b (diff) | |
download | caribou-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.vala | 20 |
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) { |