All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle
@ 2018-01-07 22:14 byxk
  2018-01-07 22:14 ` [Qemu-devel] [PATCH 1/1] " byxk
  2018-01-10 16:30 ` [Qemu-devel] [PATCH v2 0/1] " Daniel P. Berrange
  0 siblings, 2 replies; 5+ messages in thread
From: byxk @ 2018-01-07 22:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: kraxel, byxk

Added some functionality to change the key combo for evdev toggle.
example:
-object input-linux,rhotkey=29,lhotkey=56,evdev=[etc...]

Set the defaults to LCTRL and RCTRL if not provided.

This is my first patch to anything so feedback/help appreciated!

byxk (1):
  input-linux: provide hotkeys for evdev toggle

 ui/input-linux.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 75 insertions(+), 2 deletions(-)

-- 
2.15.1

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH 1/1] input-linux: provide hotkeys for evdev toggle
  2018-01-07 22:14 [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle byxk
@ 2018-01-07 22:14 ` byxk
  2018-01-10 16:30 ` [Qemu-devel] [PATCH v2 0/1] " Daniel P. Berrange
  1 sibling, 0 replies; 5+ messages in thread
From: byxk @ 2018-01-07 22:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: kraxel, byxk

---
 ui/input-linux.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 75 insertions(+), 2 deletions(-)

diff --git a/ui/input-linux.c b/ui/input-linux.c
index 9720333b2c..a553d2b4cc 100644
--- a/ui/input-linux.c
+++ b/ui/input-linux.c
@@ -5,6 +5,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "qemu/cutils.h"
 #include "qapi/error.h"
 #include "qemu-common.h"
 #include "qemu/config-file.h"
@@ -62,6 +63,8 @@ struct InputLinux {
     int         abs_y_max;
     struct input_event event;
     int         read_offset;
+    long        rhotkey;
+    long        lhotkey;
 
     QTAILQ_ENTRY(InputLinux) next;
 };
@@ -134,8 +137,8 @@ static void input_linux_handle_keyboard(InputLinux *il,
         }
 
         /* hotkey -> record switch request ... */
-        if (il->keydown[KEY_LEFTCTRL] &&
-            il->keydown[KEY_RIGHTCTRL]) {
+        if (il->keydown[il->rhotkey] &&
+            il->keydown[il->lhotkey]) {
             il->grab_request = true;
         }
 
@@ -274,6 +277,14 @@ static void input_linux_complete(UserCreatable *uc, Error **errp)
         return;
     }
 
+    if (!il->rhotkey) {
+        il->rhotkey = KEY_RIGHTCTRL;
+    }
+
+    if (!il->lhotkey) {
+        il->lhotkey = KEY_LEFTCTRL;
+    }
+
     il->fd = open(il->evdev, O_RDWR);
     if (il->fd < 0)  {
         error_setg_file_open(errp, errno, il->evdev);
@@ -395,6 +406,62 @@ static void input_linux_set_grab_all(Object *obj, bool value,
     il->grab_all = value;
 }
 
+static void input_linux_set_rhotkey(Object *obj, const char *value,
+                                   Error **errp)
+{
+    InputLinux *il = INPUT_LINUX(obj);
+    InputLinux *item;
+    long rhotkey;
+    int res = qemu_strtol(value, NULL, 0, &rhotkey);
+    if (res != 0) {
+        rhotkey = KEY_RIGHTCTRL;
+    }
+    il->rhotkey = rhotkey;
+
+    QTAILQ_FOREACH(item, &inputs, next) {
+        if (item == il || item->rhotkey) {
+            continue;
+        }
+        item->rhotkey = rhotkey;
+    }
+}
+
+static char *input_linux_get_rhotkey(Object *obj, Error **errp)
+{
+    InputLinux *il = INPUT_LINUX(obj);
+    char buf[sizeof(int) * 4];
+    sprintf(buf, "%ld", il->rhotkey);
+    return g_strdup(buf);
+}
+
+static void input_linux_set_lhotkey(Object *obj, const char *value,
+                                   Error **errp)
+{
+    InputLinux *il = INPUT_LINUX(obj);
+    InputLinux *item;
+    long lhotkey = KEY_LEFTCTRL;
+    int res = qemu_strtol(value, NULL, 0, &lhotkey);
+    if (res != 0) {
+        lhotkey = KEY_LEFTCTRL;
+    }
+    il->lhotkey = lhotkey;
+
+    QTAILQ_FOREACH(item, &inputs, next) {
+        if (item == il || item->lhotkey) {
+            continue;
+        }
+        item->lhotkey = lhotkey;
+    }
+}
+
+static char *input_linux_get_lhotkey(Object *obj, Error **errp)
+{
+    InputLinux *il = INPUT_LINUX(obj);
+    char buf[sizeof(int) * 4];
+    sprintf(buf, "%ld", il->lhotkey);
+    return g_strdup(buf);
+}
+
 static bool input_linux_get_repeat(Object *obj, Error **errp)
 {
     InputLinux *il = INPUT_LINUX(obj);
@@ -421,6 +488,12 @@ 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_str(obj, "rhotkey",
+                            input_linux_get_rhotkey,
+                            input_linux_set_rhotkey, NULL);
+    object_property_add_str(obj, "lhotkey",
+                            input_linux_get_lhotkey,
+                            input_linux_set_lhotkey, NULL);
 }
 
 static void input_linux_class_init(ObjectClass *oc, void *data)
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle
  2018-01-07 22:14 [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle byxk
  2018-01-07 22:14 ` [Qemu-devel] [PATCH 1/1] " byxk
@ 2018-01-10 16:30 ` Daniel P. Berrange
  2018-01-10 17:06   ` Patrick Tseng
  2018-01-11  9:38   ` Gerd Hoffmann
  1 sibling, 2 replies; 5+ messages in thread
From: Daniel P. Berrange @ 2018-01-10 16:30 UTC (permalink / raw)
  To: byxk; +Cc: qemu-devel, kraxel

On Sun, Jan 07, 2018 at 02:14:54PM -0800, byxk wrote:
> Added some functionality to change the key combo for evdev toggle.
> example:
> -object input-linux,rhotkey=29,lhotkey=56,evdev=[etc...]
> 
> Set the defaults to LCTRL and RCTRL if not provided.

This should really be part of the commit message for the patch itself, so it
gets recorded in git history.

There is some overlap here with the grab sequence work John has just posted
for cocoa frontend

  https://lists.gnu.org/archive/html/qemu-devel/2017-12/msg05115.html

I wonder if it is reasonable for ui/input-linux.c to honour the same
global '-ungrab' configuration option ?  If not, we should  at least
use the same syntax for describing the ungrab sequence. ie a list of
key code names, rather than a hardcoded pair of numeric values.


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle
  2018-01-10 16:30 ` [Qemu-devel] [PATCH v2 0/1] " Daniel P. Berrange
@ 2018-01-10 17:06   ` Patrick Tseng
  2018-01-11  9:38   ` Gerd Hoffmann
  1 sibling, 0 replies; 5+ messages in thread
From: Patrick Tseng @ 2018-01-10 17:06 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: qemu-devel, kraxel

Hi Daniel, thanks for responding.

> This should really be part of the commit message for the patch itself, so
it
> gets recorded in git history.

Next patch version I'll separate this out to another commit.

> I wonder if it is reasonable for ui/input-linux.c to honour the same
> global '-ungrab' configuration option ?

I had it as a global config option at first, but realized all config options
related to input-linux appears to be contained in it's own object-based
args, especially since evdev is still quite niche/isolated in its own way.

But I rather not make the decisions for input-linux, I'll leave that up to
the maintainer.

> If not, we should  at least
> use the same syntax for describing the ungrab sequence. ie a list of
> key code names, rather than a hardcoded pair of numeric values.

This make sense, I agree it should at least be consistent.

- Patrick
(byxk)

On Wed, Jan 10, 2018 at 8:30 AM, Daniel P. Berrange <berrange@redhat.com>
wrote:

> On Sun, Jan 07, 2018 at 02:14:54PM -0800, byxk wrote:
> > Added some functionality to change the key combo for evdev toggle.
> > example:
> > -object input-linux,rhotkey=29,lhotkey=56,evdev=[etc...]
> >
> > Set the defaults to LCTRL and RCTRL if not provided.
>
> This should really be part of the commit message for the patch itself, so
> it
> gets recorded in git history.
>
> There is some overlap here with the grab sequence work John has just posted
> for cocoa frontend
>
>   https://lists.gnu.org/archive/html/qemu-devel/2017-12/msg05115.html
>
> I wonder if it is reasonable for ui/input-linux.c to honour the same
> global '-ungrab' configuration option ?  If not, we should  at least
> use the same syntax for describing the ungrab sequence. ie a list of
> key code names, rather than a hardcoded pair of numeric values.
>
>
> Regards,
> Daniel
> --
> |: https://berrange.com      -o-    https://www.flickr.com/photos/
> dberrange :|
> |: https://libvirt.org         -o-
> https://fstop138.berrange.com :|
> |: https://entangle-photo.org    -o-    https://www.instagram.com/
> dberrange :|
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle
  2018-01-10 16:30 ` [Qemu-devel] [PATCH v2 0/1] " Daniel P. Berrange
  2018-01-10 17:06   ` Patrick Tseng
@ 2018-01-11  9:38   ` Gerd Hoffmann
  1 sibling, 0 replies; 5+ messages in thread
From: Gerd Hoffmann @ 2018-01-11  9:38 UTC (permalink / raw)
  To: Daniel P. Berrange; +Cc: byxk, qemu-devel

  Hi,

> I wonder if it is reasonable for ui/input-linux.c to honour the same
> global '-ungrab' configuration option ?

No.  Problem here is that input-linux is basically sniffing keyboard
input when the host owns the keyboard, so it can't prevent the hotkey
being seen by the host.  Therefore I picked something which (a) has no
side effects (modifier keys only) and (b) is highly unlikely to be used
in normal operation.

cheers,
  Gerd

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2018-01-11  9:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-07 22:14 [Qemu-devel] [PATCH v2 0/1] input-linux: provide hotkeys for evdev toggle byxk
2018-01-07 22:14 ` [Qemu-devel] [PATCH 1/1] " byxk
2018-01-10 16:30 ` [Qemu-devel] [PATCH v2 0/1] " Daniel P. Berrange
2018-01-10 17:06   ` Patrick Tseng
2018-01-11  9:38   ` Gerd Hoffmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.