浏览代码

Input: xen-kbdfront - enable auto repeat for xen keyboard frontend driver

Long pressed key could not show right in XEN vncviewer after tigervnc
client changed the way how to send repeat keys, from "Down Up Down Up
..." to "Down Down ... Up". This will report autorepeat to input by
checking if same key being pressed, and let handler process it finally.

Signed-off-by: Liang Yan <lyan@suse.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Liang Yan 8 年之前
父节点
当前提交
0ca0681002
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      drivers/input/misc/xen-kbdfront.c

+ 4 - 1
drivers/input/misc/xen-kbdfront.c

@@ -84,17 +84,20 @@ static void xenkbd_handle_key_event(struct xenkbd_info *info,
 				    struct xenkbd_key *key)
 				    struct xenkbd_key *key)
 {
 {
 	struct input_dev *dev;
 	struct input_dev *dev;
+	int value = key->pressed;
 
 
 	if (test_bit(key->keycode, info->ptr->keybit)) {
 	if (test_bit(key->keycode, info->ptr->keybit)) {
 		dev = info->ptr;
 		dev = info->ptr;
 	} else if (test_bit(key->keycode, info->kbd->keybit)) {
 	} else if (test_bit(key->keycode, info->kbd->keybit)) {
 		dev = info->kbd;
 		dev = info->kbd;
+		if (key->pressed && test_bit(key->keycode, info->kbd->key))
+			value = 2; /* Mark as autorepeat */
 	} else {
 	} else {
 		pr_warn("unhandled keycode 0x%x\n", key->keycode);
 		pr_warn("unhandled keycode 0x%x\n", key->keycode);
 		return;
 		return;
 	}
 	}
 
 
-	input_report_key(dev, key->keycode, key->pressed);
+	input_event(dev, EV_KEY, key->keycode, value);
 	input_sync(dev);
 	input_sync(dev);
 }
 }