diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-09-10 17:49:46 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2010-09-10 17:49:46 +0200 |
commit | 12d6a290b7819627ad97e1519e8e95b6f92553c0 (patch) | |
tree | 7b05ed0b8fb9f71dce255522b4d4e168b610f7b1 | |
parent | ff7a8c7dceecc449cce0513c6d936ca8d0723f56 (diff) |
keymap fixing: rfb -> xtkbd
-rw-r--r-- | gtk/Makefile.am | 36 | ||||
-rw-r--r-- | gtk/channel-inputs.c | 20 | ||||
-rw-r--r-- | gtk/spice-widget.c | 6 | ||||
-rw-r--r-- | gtk/vncdisplaykeymap.c | 50 | ||||
-rw-r--r-- | gtk/vncdisplaykeymap.h | 8 |
5 files changed, 64 insertions, 56 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am index 8b82dd6..e8727ba 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -11,12 +11,12 @@ lib_LTLIBRARIES = libspice-client-gtk.la libspice-client-glib.la KEYMAP_GEN = $(srcdir)/keymap-gen.pl KEYMAPS = \ - vncdisplaykeymap_xorgevdev2rfb.c \ - vncdisplaykeymap_xorgkbd2rfb.c \ - vncdisplaykeymap_xorgxquartz2rfb.c \ - vncdisplaykeymap_xorgxwin2rfb.c \ - vncdisplaykeymap_osx2rfb.c \ - vncdisplaykeymap_win322rfb.c + vncdisplaykeymap_xorgevdev2xtkbd.c \ + vncdisplaykeymap_xorgkbd2xtkbd.c \ + vncdisplaykeymap_xorgxquartz2xtkbd.c \ + vncdisplaykeymap_xorgxwin2xtkbd.c \ + vncdisplaykeymap_osx2xtkbd.c \ + vncdisplaykeymap_win322xtkbd.c WARN = -Wall -Wno-sign-compare -Wmissing-prototypes -Wpointer-arith -Wunused @@ -171,23 +171,23 @@ vncdisplaykeymap.c: $(KEYMAPS) $(KEYMAPS): $(KEYMAP_GEN) keymaps.csv -vncdisplaykeymap_xorgevdev2rfb.c: - $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgevdev rfb > $@ || rm $@ +vncdisplaykeymap_xorgevdev2xtkbd.c: + $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgevdev xtkbd > $@ || rm $@ -vncdisplaykeymap_xorgkbd2rfb.c: - $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgkbd rfb > $@ || rm $@ +vncdisplaykeymap_xorgkbd2xtkbd.c: + $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgkbd xtkbd > $@ || rm $@ -vncdisplaykeymap_xorgxquartz2rfb.c: - $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgxquartz rfb > $@ || rm $@ +vncdisplaykeymap_xorgxquartz2xtkbd.c: + $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgxquartz xtkbd > $@ || rm $@ -vncdisplaykeymap_xorgxwin2rfb.c: - $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgxwin rfb > $@ || rm $@ +vncdisplaykeymap_xorgxwin2xtkbd.c: + $(KEYMAP_GEN) $(srcdir)/keymaps.csv xorgxwin xtkbd > $@ || rm $@ -vncdisplaykeymap_osx2rfb.c: - $(KEYMAP_GEN) $(srcdir)/keymaps.csv osx rfb > $@ || rm $@ +vncdisplaykeymap_osx2xtkbd.c: + $(KEYMAP_GEN) $(srcdir)/keymaps.csv osx xtkbd > $@ || rm $@ -vncdisplaykeymap_win322rfb.c: - $(KEYMAP_GEN) $(srcdir)/keymaps.csv win32 rfb > $@ || rm $@ +vncdisplaykeymap_win322xtkbd.c: + $(KEYMAP_GEN) $(srcdir)/keymaps.csv win32 xtkbd > $@ || rm $@ BUILT_SOURCES = spice-marshal.c spice-marshal.h \ generated_demarshallers.c generated_demarshallers1.c \ diff --git a/gtk/channel-inputs.c b/gtk/channel-inputs.c index 83d1154..9e2b604 100644 --- a/gtk/channel-inputs.c +++ b/gtk/channel-inputs.c @@ -153,12 +153,16 @@ void spice_inputs_button_release(SpiceChannel *channel, gint button, gint button void spice_inputs_key_press(SpiceChannel *channel, guint scancode) { spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel); - SpiceMsgcKeyDown down = { - .code = scancode, - }; + SpiceMsgcKeyDown down; spice_msg_out *msg; fprintf(stderr, "%s: scancode %d\n", __FUNCTION__, scancode); + if (scancode < 0x100) { + down.code = scancode; + } else { + down.code = 0xe0 | ((scancode - 0x100) << 8); + } + msg = spice_msg_out_new(channel, SPICE_MSGC_INPUTS_KEY_DOWN); c->marshallers->msgc_inputs_key_down(msg->marshaller, &down); spice_msg_out_send(msg); @@ -168,12 +172,16 @@ void spice_inputs_key_press(SpiceChannel *channel, guint scancode) void spice_inputs_key_release(SpiceChannel *channel, guint scancode) { spice_channel *c = SPICE_CHANNEL_GET_PRIVATE(channel); - SpiceMsgcKeyUp up = { - .code = scancode | 0x80, - }; + SpiceMsgcKeyUp up; spice_msg_out *msg; fprintf(stderr, "%s: scancode %d\n", __FUNCTION__, scancode); + if (scancode < 0x100) { + up.code = scancode | 0x80; + } else { + up.code = 0x80e0 | ((scancode - 0x100) << 8); + } + msg = spice_msg_out_new(channel, SPICE_MSGC_INPUTS_KEY_UP); c->marshallers->msgc_inputs_key_up(msg->marshaller, &up); spice_msg_out_send(msg); diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c index acca016..366502c 100644 --- a/gtk/spice-widget.c +++ b/gtk/spice-widget.c @@ -110,7 +110,7 @@ static void spice_display_init(SpiceDisplay *display) gtk_widget_set_double_buffered(widget, false); gtk_widget_set_can_focus(widget, true); - d->keycode_map = vnc_display_keymap_gdk2rfb_table(&d->keycode_maplen); + d->keycode_map = vnc_display_keymap_gdk2xtkbd_table(&d->keycode_maplen); } static void recalc_geometry(GtkWidget *widget) @@ -265,8 +265,8 @@ static gboolean key_event(GtkWidget *widget, GdkEventKey *key) if (!d->inputs) return true; - scancode = vnc_display_keymap_gdk2rfb(d->keycode_map, d->keycode_maplen, - key->hardware_keycode); + scancode = vnc_display_keymap_gdk2xtkbd(d->keycode_map, d->keycode_maplen, + key->hardware_keycode); switch (key->type) { case GDK_KEY_PRESS: spice_inputs_key_press(d->inputs, scancode); diff --git a/gtk/vncdisplaykeymap.c b/gtk/vncdisplaykeymap.c index 7dae592..0229859 100644 --- a/gtk/vncdisplaykeymap.c +++ b/gtk/vncdisplaykeymap.c @@ -56,13 +56,13 @@ static unsigned int ref_count_for_untranslated_keys = 0; #include <string.h> /* Xorg Linux + kbd (offset + mangled XT keycodes) */ -#include "vncdisplaykeymap_xorgkbd2rfb.c" +#include "vncdisplaykeymap_xorgkbd2xtkbd.c" /* Xorg Linux + evdev (offset evdev keycodes) */ -#include "vncdisplaykeymap_xorgevdev2rfb.c" +#include "vncdisplaykeymap_xorgevdev2xtkbd.c" /* Xorg OS-X aka XQuartz (offset OS-X keycodes) */ -#include "vncdisplaykeymap_xorgxquartz2rfb.c" +#include "vncdisplaykeymap_xorgxquartz2xtkbd.c" /* Xorg Cygwin aka XWin (offset + mangled XT keycodes) */ -#include "vncdisplaykeymap_xorgxwin2rfb.c" +#include "vncdisplaykeymap_xorgxwin2xtkbd.c" #define STRPREFIX(a,b) (strncmp((a),(b),strlen((b))) == 0) @@ -93,7 +93,7 @@ static gboolean check_for_xquartz(void) return match; } -const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) +const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen) { XkbDescPtr desc; const gchar *keycodes = NULL; @@ -119,20 +119,20 @@ const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) if (check_for_xwin()) { VNC_DEBUG("Using xwin keycode mapping"); - *maplen = G_N_ELEMENTS(keymap_xorgxwin2rfb); - return keymap_xorgxwin2rfb; + *maplen = G_N_ELEMENTS(keymap_xorgxwin2xtkbd); + return keymap_xorgxwin2xtkbd; } else if (check_for_xquartz()) { VNC_DEBUG("Using xquartz keycode mapping"); - *maplen = G_N_ELEMENTS(keymap_xorgxquartz2rfb); - return keymap_xorgxquartz2rfb; + *maplen = G_N_ELEMENTS(keymap_xorgxquartz2xtkbd); + return keymap_xorgxquartz2xtkbd; } else if (keycodes && STRPREFIX(keycodes, "evdev_")) { VNC_DEBUG("Using evdev keycode mapping"); - *maplen = G_N_ELEMENTS(keymap_xorgevdev2rfb); - return keymap_xorgevdev2rfb; + *maplen = G_N_ELEMENTS(keymap_xorgevdev2xtkbd); + return keymap_xorgevdev2xtkbd; } else if (keycodes && STRPREFIX(keycodes, "xfree86_")) { VNC_DEBUG("Using xfree86 keycode mapping"); - *maplen = G_N_ELEMENTS(keymap_xorgkbd2rfb); - return keymap_xorgkbd2rfb; + *maplen = G_N_ELEMENTS(keymap_xorgkbd2xtkbd); + return keymap_xorgkbd2xtkbd; } else { g_warning("Unknown keycode mapping '%s'.\n" "Please report to gtk-vnc-list@gnome.org\n" @@ -150,30 +150,30 @@ const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) #elif defined(GDK_WINDOWING_WIN32) /* Win32 native virtual keycodes */ -#include "vncdisplaykeymap_win322rfb.c" +#include "vncdisplaykeymap_win322xtkbd.c" -const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) +const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen) { VNC_DEBUG("Using Win32 virtual keycode mapping"); - *maplen = sizeof(keymap_win322rfb); - return keymap_win322rfb; + *maplen = sizeof(keymap_win322xtkbd); + return keymap_win322xtkbd; } #elif defined(GDK_WINDOWING_QUARTZ) /* OS-X native keycodes */ -#include "vncdisplaykeymap_osx2rfb.c" +#include "vncdisplaykeymap_osx2xtkbd.c" -const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) +const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen) { VNC_DEBUG("Using OS-X virtual keycode mapping"); - *maplen = sizeof(keymap_osx2rfb); - return keymap_osx2rfb; + *maplen = sizeof(keymap_osx2xtkbd); + return keymap_osx2xtkbd; } #else -const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) +const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen) { g_warning("Unsupported GDK Windowing platform.\n" "Please report to gtk-vnc-list@gnome.org\n" @@ -185,9 +185,9 @@ const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen) } #endif -guint16 vnc_display_keymap_gdk2rfb(const guint16 const *keycode_map, - size_t keycode_maplen, - guint16 keycode) +guint16 vnc_display_keymap_gdk2xtkbd(const guint16 const *keycode_map, + size_t keycode_maplen, + guint16 keycode) { if (!keycode_map) return 0; diff --git a/gtk/vncdisplaykeymap.h b/gtk/vncdisplaykeymap.h index 7cb9946..cee1b5a 100644 --- a/gtk/vncdisplaykeymap.h +++ b/gtk/vncdisplaykeymap.h @@ -24,10 +24,10 @@ #include <glib.h> -const guint16 const *vnc_display_keymap_gdk2rfb_table(size_t *maplen); -guint16 vnc_display_keymap_gdk2rfb(const guint16 *keycode_map, - size_t keycode_maplen, - guint16 keycode); +const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen); +guint16 vnc_display_keymap_gdk2xtkbd(const guint16 *keycode_map, + size_t keycode_maplen, + guint16 keycode); void vnc_display_keyval_set_entries(void); void vnc_display_keyval_free_entries(void); guint vnc_display_keyval_from_keycode(guint keycode, guint keyval); |