[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3] input-linux: Add option to not grab a device upon guest s
From: |
Marc-André Lureau |
Subject: |
Re: [PATCH v3] input-linux: Add option to not grab a device upon guest startup |
Date: |
Tue, 7 May 2024 17:50:09 +0400 |
Hi
On Wed, Apr 3, 2024 at 9:51 AM Justinien Bouron
<justinien.bouron@gmail.com> wrote:
>
> Depending on your use-case, it might be inconvenient to have qemu grab
> the input device from the host immediately upon starting the guest.
>
> Added a new bool option to input-linux: grab-on-startup. If true, the
> device is grabbed as soon as the guest is started, otherwise it is not
> grabbed until the toggle combination is entered. To avoid breaking
> existing setups, the default value of grab-on-startup is true, i.e. same
> behaviour as before this change.
>
> Signed-off-by: Justinien Bouron <justinien.bouron@gmail.com>
> ---
>
> Changes since v2:
> - Added missing (since 9.1) to the new option in qapi/qom.json
>
> qapi/qom.json | 14 +++++++++++++-
> ui/input-linux.c | 20 +++++++++++++++++++-
> 2 files changed, 32 insertions(+), 2 deletions(-)
>
> diff --git a/qapi/qom.json b/qapi/qom.json
> index 85e6b4f84a..2067e41991 100644
> --- a/qapi/qom.json
> +++ b/qapi/qom.json
> @@ -508,13 +508,25 @@
> # @grab-toggle: the key or key combination that toggles device grab
> # (default: ctrl-ctrl)
> #
> +# @grab-on-startup: if true, grab the device immediately upon starting
> +# the guest. Otherwise, don't grab the device until the
> +# combination is entered. This does not influence other devices
> +# even if grab_all is true, i.e. in the unlikely scenario where
> +# device1 has grab_all=true + grab-on-startup=true and device2 has
> +# grab-on-startup=false, only device1 is grabbed on startup, then,
> +# once the grab combination is entered, grabbing is toggled off
> +# for both devices (because device1 enforces the grab_all
> +# property) until the combination is entered again at which point
> +# both devices will be grabbed. (default: true) (since 9.1).
> +#
> # Since: 2.6
> ##
> { 'struct': 'InputLinuxProperties',
> 'data': { 'evdev': 'str',
> '*grab_all': 'bool',
> '*repeat': 'bool',
> - '*grab-toggle': 'GrabToggleKeys' } }
> + '*grab-toggle': 'GrabToggleKeys',
> + '*grab-on-startup': 'bool'} }
>
> ##
> # @EventLoopBaseProperties:
> diff --git a/ui/input-linux.c b/ui/input-linux.c
> index e572a2e905..68b5c6d485 100644
> --- a/ui/input-linux.c
> +++ b/ui/input-linux.c
> @@ -44,6 +44,7 @@ struct InputLinux {
> bool grab_request;
> bool grab_active;
> bool grab_all;
> + bool grab_on_startup;
> bool keydown[KEY_CNT];
> int keycount;
> int wheel;
> @@ -400,7 +401,7 @@ static void input_linux_complete(UserCreatable *uc, Error
> **errp)
> if (il->keycount) {
> /* delay grab until all keys are released */
> il->grab_request = true;
> - } else {
> + } else if (il->grab_on_startup) {
> input_linux_toggle_grab(il);
> }
The patch looks ok to me, but you don't handle the case where keys are
pressed at startup and the grab is delayed. You could add a if
(!il->grab_on_startup) goto skip_grab, probably instead.
> QTAILQ_INSERT_TAIL(&inputs, il, next);
> @@ -491,6 +492,19 @@ static void input_linux_set_grab_toggle(Object *obj, int
> value,
> il->grab_toggle = value;
> }
>
> +static bool input_linux_get_grab_on_startup(Object *obj, Error **errp)
> +{
> + InputLinux *il = INPUT_LINUX(obj);
> + return il->grab_on_startup;
> +}
> +
> +static void input_linux_set_grab_on_startup(Object *obj, bool value,
> + Error **errp)
> +{
> + InputLinux *il = INPUT_LINUX(obj);
> + il->grab_on_startup = value;
> +}
> +
> static void input_linux_instance_init(Object *obj)
> {
> }
> @@ -498,6 +512,7 @@ static void input_linux_instance_init(Object *obj)
> static void input_linux_class_init(ObjectClass *oc, void *data)
> {
> UserCreatableClass *ucc = USER_CREATABLE_CLASS(oc);
> + ObjectProperty *grab_on_startup_prop;
>
> ucc->complete = input_linux_complete;
>
> @@ -514,6 +529,9 @@ static void input_linux_class_init(ObjectClass *oc, void
> *data)
> &GrabToggleKeys_lookup,
> input_linux_get_grab_toggle,
> input_linux_set_grab_toggle);
> + grab_on_startup_prop = object_class_property_add_bool(oc,
> "grab-on-startup",
> + input_linux_get_grab_on_startup, input_linux_set_grab_on_startup);
> + object_property_set_default_bool(grab_on_startup_prop, true);
> }
>
> static const TypeInfo input_linux_info = {
> --
> 2.44.0
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v3] input-linux: Add option to not grab a device upon guest startup,
Marc-André Lureau <=