[Spice-devel] [PATCH spice-gtk] vncdisplaykeymap: Add support for Xwayland keymap

Daniel P. Berrange berrange at redhat.com
Wed Feb 18 07:05:13 PST 2015


On Wed, Feb 18, 2015 at 09:59:05AM -0500, Marc-André Lureau wrote:
> 
> 
> ----- Original Message -----
> > On Wed, Feb 18, 2015 at 09:47:55AM -0500, Marc-André Lureau wrote:
> > > 
> > > 
> > > ----- Original Message -----
> > > > From: "Daniel P. Berrange" <berrange at redhat.com>
> > > > 
> > > > Both Wayland and Xwayland use the evdev + 8 map for keycodes,
> > > > just as regular Xorg with evdev does.
> > > > 
> > > > This code is copied from gtk-vnc.
> > > > 
> > > > Fixes https://bugs.freedesktop.org/show_bug.cgi?id=89105
> > > > ---
> > > >  gtk/vncdisplaykeymap.c | 16 ++++++++++++++++
> > > >  1 file changed, 16 insertions(+)
> > > > 
> > > > diff --git a/gtk/vncdisplaykeymap.c b/gtk/vncdisplaykeymap.c
> > > > index 340a86f..32fdac5 100644
> > > > --- a/gtk/vncdisplaykeymap.c
> > > > +++ b/gtk/vncdisplaykeymap.c
> > > > @@ -12,6 +12,7 @@
> > > >  #include <gtk/gtk.h>
> > > >  #include <gdk/gdk.h>
> > > >  #include <gdk/gdkkeysyms.h>
> > > > +#include <stdlib.h>
> > > >  #include "gtk-compat.h"
> > > >  #include "vncdisplaykeymap.h"
> > > >  
> > > > @@ -156,6 +157,17 @@ static gboolean check_for_xquartz(GdkDisplay *dpy)
> > > >  
> > > >  	return match;
> > > >  }
> > > > +
> > > > +static gboolean check_for_xwayland(GdkDisplay *dpy G_GNUC_UNUSED)
> > > > +{
> > > > +	/* There is no obvious extension name or root window property
> > > > +	 * that identifies as Xwayland. It also does not report any
> > > > +	 * XKB info. So this env var check is least-worst option left
> > > > +	 */
> > > > +	char *dpystr = getenv("WAYLAND_DISPLAY");
> > > > +
> > > > +	return dpystr != NULL;
> > > > +}
> > > >  #endif
> > > >  
> > > >  const guint16 *vnc_display_keymap_gdk2xtkbd_table(GdkWindow *window,
> > > > @@ -195,6 +207,10 @@ const guint16
> > > > *vnc_display_keymap_gdk2xtkbd_table(GdkWindow *window,
> > > >  			VNC_DEBUG("Using xquartz keycode mapping");
> > > >  			*maplen = G_N_ELEMENTS(keymap_xorgxquartz2xtkbd);
> > > >  			return keymap_xorgxquartz2xtkbd;
> > > > +		} else if (check_for_xwayland(dpy)) {
> > > > +			VNC_DEBUG("Using wayland evdec keycode mapping");
> > > > +			*maplen = G_N_ELEMENTS(keymap_xorgevdev2xtkbd);
> > > > +			return keymap_xorgevdev2xtkbd;
> > > >  		} else if (keycodes && STRPREFIX(keycodes, "evdev_")) {
> > > >  			VNC_DEBUG("Using evdev keycode mapping");
> > > >  			*maplen = G_N_ELEMENTS(keymap_xorgevdev2xtkbd);
> > > > --
> > > > 2.3.0
> > > 
> > > We already have wayland input support since:
> > > 
> > > commit 577263aaf4cffe260e31d19eb4b8bca1c253eff3
> > > Author: Marc-André Lureau <marcandre.lureau at redhat.com>
> > > Date:   Mon May 13 01:11:07 2013 +0200
> > > 
> > >     vncdisplaykeymap: add wayland support
> > >     
> > >     The Wayland keycode are just Linux evdev, but the Gdk backend
> > >     add the +8 offset used by Xorg evdev.
> > > 
> > > 
> > > Not sure about XWayland, but I would assume this was enough,
> > > and didn't rely on a not so reliable environment variable.
> > 
> > Your change only works when the GTK application is running as a
> > native Wayland client.  This fix works when the GTK application
> > is runing as an X11 client on Xwayland.
> > 
> > The use of the env variable is certainly sucky, but I've not
> > found any other way to identify that the X server is the
> > Xwayland one :-( It doesn't report any XKB keyboard info,
> > the server vendor string is completely generic and there's no
> > wayland specific extension present.
> 
> Why didn't you consider this a XWayland bug instead? Sounds wrong
> to me that X apps under XWayland have to be modified.

Every new X server we come across needs different heuristics - that's
just a fact of life trying to figure out the keyboad mappings for X,
since there's no standardization. So I don't think its really surprising
that we need a new check for Xwayland that is different from what we
used for traditional Xorg.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|


More information about the Spice-devel mailing list