summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2013-08-13 14:44:26 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2013-08-13 19:34:16 +1000
commit27926b3763e525470ec8e4ac9a97aa0e02f1dd95 (patch)
treea3d14a890870959b037763fefdc7c16940080ef3
parent8a9b1ec6b58a36910a03f3e8b1f9bc8d91f87204 (diff)
downloadxorg-driver-xf86-input-evdev-27926b3763e525470ec8e4ac9a97aa0e02f1dd95.tar.gz
Write a SYN_REPORT after the last LED
When writing LED values to the device, append a SYN_REPORT to the list to ensure other clients are updated immediately. Otherwise, the LED events will be queued and not sent to other clients until the next input event arrives. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Daniel Stone <daniel@fooishbar.org>
-rw-r--r--src/evdev.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/evdev.c b/src/evdev.c
index ba2a98c..456c7aa 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1157,7 +1157,7 @@ EvdevKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl)
};
InputInfoPtr pInfo;
- struct input_event ev[ArrayLength(bits)];
+ struct input_event ev[ArrayLength(bits) + 1];
int i;
memset(ev, 0, sizeof(ev));
@@ -1169,6 +1169,10 @@ EvdevKbdCtrl(DeviceIntPtr device, KeybdCtrl *ctrl)
ev[i].value = (ctrl->leds & bits[i].xbit) > 0;
}
+ ev[i].type = EV_SYN;
+ ev[i].code = SYN_REPORT;
+ ev[i].value = 0;
+
write(pInfo->fd, ev, sizeof ev);
}