summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-09-10 17:49:46 +0200
committerGerd Hoffmann <kraxel@redhat.com>2010-09-10 17:49:46 +0200
commit12d6a290b7819627ad97e1519e8e95b6f92553c0 (patch)
tree7b05ed0b8fb9f71dce255522b4d4e168b610f7b1
parentff7a8c7dceecc449cce0513c6d936ca8d0723f56 (diff)
keymap fixing: rfb -> xtkbd
-rw-r--r--gtk/Makefile.am36
-rw-r--r--gtk/channel-inputs.c20
-rw-r--r--gtk/spice-widget.c6
-rw-r--r--gtk/vncdisplaykeymap.c50
-rw-r--r--gtk/vncdisplaykeymap.h8
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);