From nobody Fri Nov 7 11:22:20 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1548280196970814.2683387964505; Wed, 23 Jan 2019 13:49:56 -0800 (PST) Received: from localhost ([127.0.0.1]:42356 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gmQP6-0003UG-CR for importer@patchew.org; Wed, 23 Jan 2019 16:49:48 -0500 Received: from eggs.gnu.org ([209.51.188.92]:43212) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gmQNR-0002Pc-In for qemu-devel@nongnu.org; Wed, 23 Jan 2019 16:48:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gmQMG-0000oL-QK for qemu-devel@nongnu.org; Wed, 23 Jan 2019 16:46:53 -0500 Received: from mail-qt1-x844.google.com ([2607:f8b0:4864:20::844]:32832) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gmQMG-0000nj-Mf for qemu-devel@nongnu.org; Wed, 23 Jan 2019 16:46:52 -0500 Received: by mail-qt1-x844.google.com with SMTP id l11so4273198qtp.0 for ; Wed, 23 Jan 2019 13:46:52 -0800 (PST) Received: from earth.fios-router.home (pool-108-28-253-225.washdc.fios.verizon.net. [108.28.253.225]) by smtp.gmail.com with ESMTPSA id r5sm57231104qke.33.2019.01.23.13.46.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 23 Jan 2019 13:46:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=R03KBeBzTz1GZ2ZZGuIR9zgGJ2gdPx5/IK5KtyGGZTY=; b=l5J7JCMxo/jmb8MC7n5QK4pgRgmmT8r1z6wkHbprrCGogFaVpszYg6m0i1erH7OeM6 Zs1hNK66LYjTXvxs/7Fsw3+fZZNLOOpiAEVoQIpp2kZBuWkawtmr5z/7MpsNxJBOReOW avbk8UyHmD5cGThOtZcbbUvyeFZMNETLLEGJVGoSSgHNU/cb/J3htejH7wJmIJyz/PhH iTZanZU7Bl3+TxFRJAqce16+FqhP//k3PSrdOH2EnuI7r1DlTPi1qFUCVZNmxnnotq8+ HhhqHLWeo1od+PgbFkFb/gWVvjUg1/9JNBp8PxmzJO3cnnLqz0GipMDVDR2sSC5LcpHm jcPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=R03KBeBzTz1GZ2ZZGuIR9zgGJ2gdPx5/IK5KtyGGZTY=; b=IyWmVvOB3TVxpaNNjUwi0xyweMxMwJHEx4fyCD7omYIuMcdN8Q8OkbWKlEryVBBgLi 7eIzR3F8R7Q1uMbe929zdiPVleWJYYTQzevYiTNOrWvLPdV4GNCzZkvVl59plmwM+pN/ 1uzM6Z83dD7hArd70GmYogT6uiyZBsJ3esb6q4W5IbuNi7afe+RIoUKfvDzDdopqhkv3 9+L/4mCl5RKjFPefMAHqno00XMT0thsKT71XakqupTuU3wMLSchO40RspHiOQGnI0Yi4 yoW7+kDV2VUKMtUk5VY3tjGzo6Uc2sqB8YPHf4g8Mt9ycsAZtwUpvH5Ak7lWMgQMBL5k Atcw== X-Gm-Message-State: AJcUukcLEUmASneNFPR9sRR7uIt2kl26EL0ykUmr0bXopmkCud/cSmOp 2V3F9UplStSVMejkImbukb6QjMooGpg= X-Google-Smtp-Source: ALg8bN7/u13Dfe3QLcujT3HHMzcCXXd313okt0wJSM/bbaFvGyi9sJ0w6WN2JFd+BfRbBzwul60r3g== X-Received: by 2002:ac8:266c:: with SMTP id v41mr4142852qtv.159.1548280011914; Wed, 23 Jan 2019 13:46:51 -0800 (PST) From: Ryan El Kochta To: qemu-devel@nongnu.org, kraxel@redhat.com Date: Wed, 23 Jan 2019 16:45:55 -0500 Message-Id: <20190123214555.12712-2-relkochta@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190123214555.12712-1-relkochta@gmail.com> References: <20190123214555.12712-1-relkochta@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::844 Subject: [Qemu-devel] [PATCH 1/1] input-linux: customizable grab toggle keys v5 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ryan El Kochta Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @gmail.com) Content-Type: text/plain; charset="utf-8" The latest revision of the input-linux customizable grab toggle keys patch. Signed-off-by: Ryan El Kochta --- qapi/ui.json | 10 ++++++++ ui/input-linux.c | 66 +++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/qapi/ui.json b/qapi/ui.json index 5ad1324..7d9c4bd 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -1016,6 +1016,16 @@ '*head' : 'int', 'events' : [ 'InputEvent' ] } } =20 +## +# @GrabToggleKeys: +# +# Keys to toggle input-linux between host and guest. +# +# Since: 4.0 +# +## +{ 'enum': 'GrabToggleKeys', + 'data': [ 'ctrl-ctrl', 'alt-alt', 'meta-meta', 'scrolllock', 'ctrl-scrol= llock' ] } =20 ## # @DisplayGTK: diff --git a/ui/input-linux.c b/ui/input-linux.c index 9720333..ba550dd 100644 --- a/ui/input-linux.c +++ b/ui/input-linux.c @@ -12,6 +12,8 @@ #include "sysemu/sysemu.h" #include "ui/input.h" #include "qom/object_interfaces.h" +#include "sysemu/iothread.h" +#include "block/aio.h" =20 #include #include "standard-headers/linux/input.h" @@ -63,6 +65,8 @@ struct InputLinux { struct input_event event; int read_offset; =20 + enum GrabToggleKeys grab_toggle; + QTAILQ_ENTRY(InputLinux) next; }; =20 @@ -98,6 +102,44 @@ static void input_linux_toggle_grab(InputLinux *il) } } =20 +static bool input_linux_check_toggle(InputLinux *il) +{ + switch (il->grab_toggle) { + case GRAB_TOGGLE_KEYS_CTRL_CTRL: + return il->keydown[KEY_LEFTCTRL] && + il->keydown[KEY_RIGHTCTRL]; + + case GRAB_TOGGLE_KEYS_ALT_ALT: + return il->keydown[KEY_LEFTALT] && + il->keydown[KEY_RIGHTALT]; + + case GRAB_TOGGLE_KEYS_META_META: + return il->keydown[KEY_LEFTMETA] && + il->keydown[KEY_RIGHTMETA]; + + case GRAB_TOGGLE_KEYS_SCROLLLOCK: + return il->keydown[KEY_SCROLLLOCK]; + + case GRAB_TOGGLE_KEYS_CTRL_SCROLLLOCK: + return (il->keydown[KEY_LEFTCTRL] || + il->keydown[KEY_RIGHTCTRL]) && + il->keydown[KEY_SCROLLLOCK]; + + case GRAB_TOGGLE_KEYS__MAX: + /* avoid gcc error */ + break; + } + return false; +} + +static bool input_linux_should_skip(InputLinux *il, + struct input_event *event) +{ + return (il->grab_toggle =3D=3D GRAB_TOGGLE_KEYS_SCROLLLOCK || + il->grab_toggle =3D=3D GRAB_TOGGLE_KEYS_CTRL_SCROLLLOCK) && + event->code =3D=3D KEY_SCROLLLOCK; +} + static void input_linux_handle_keyboard(InputLinux *il, struct input_event *event) { @@ -128,14 +170,13 @@ static void input_linux_handle_keyboard(InputLinux *i= l, } =20 /* send event to guest when grab is active */ - if (il->grab_active) { + if (il->grab_active && !input_linux_should_skip(il, event)) { int qcode =3D qemu_input_linux_to_qcode(event->code); qemu_input_event_send_key_qcode(NULL, qcode, event->value); } =20 /* hotkey -> record switch request ... */ - if (il->keydown[KEY_LEFTCTRL] && - il->keydown[KEY_RIGHTCTRL]) { + if (input_linux_check_toggle(il)) { il->grab_request =3D true; } =20 @@ -410,6 +451,21 @@ static void input_linux_set_repeat(Object *obj, bool v= alue, il->repeat =3D value; } =20 +static int input_linux_get_grab_toggle(Object *obj, Error **errp) +{ + InputLinux *il =3D INPUT_LINUX(obj); + + return il->grab_toggle; +} + +static void input_linux_set_grab_toggle(Object *obj, int value, + Error **errp) +{ + InputLinux *il =3D INPUT_LINUX(obj); + + il->grab_toggle =3D value; +} + static void input_linux_instance_init(Object *obj) { object_property_add_str(obj, "evdev", @@ -421,6 +477,10 @@ static void input_linux_instance_init(Object *obj) object_property_add_bool(obj, "repeat", input_linux_get_repeat, input_linux_set_repeat, NULL); + object_property_add_enum(obj, "grab-toggle", "GrabToggleKeys", + &GrabToggleKeys_lookup, + input_linux_get_grab_toggle, + input_linux_set_grab_toggle, NULL); } =20 static void input_linux_class_init(ObjectClass *oc, void *data) --=20 2.20.1