summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@redhat.com>2013-05-10 19:13:53 +0200
committerMarc-André Lureau <marcandre.lureau@redhat.com>2013-05-11 21:18:31 +0200
commitc1a95284007c078f9615175ec41056b2bb4d1ec5 (patch)
tree7758388ff4ef74c42ef34ae9b197a1fc65b39a9e
parentca760353999c2e0c6f48cda68a79ec3d8fbb055a (diff)
vncdisplaykeymap: use a window to associate table
-rw-r--r--gtk/spice-widget.c5
-rw-r--r--gtk/vncdisplaykeymap.c12
-rw-r--r--gtk/vncdisplaykeymap.h3
3 files changed, 12 insertions, 8 deletions
diff --git a/gtk/spice-widget.c b/gtk/spice-widget.c
index 481f482..3694da3 100644
--- a/gtk/spice-widget.c
+++ b/gtk/spice-widget.c
@@ -574,7 +574,6 @@ static void spice_display_init(SpiceDisplay *display)
#endif
gtk_widget_set_can_focus(widget, true);
gtk_widget_set_has_window(widget, true);
- d->keycode_map = vnc_display_keymap_gdk2xtkbd_table(&d->keycode_maplen);
d->grabseq = spice_grab_sequence_new_from_string("Control_L+Alt_L");
d->activeseq = g_new0(gboolean, d->grabseq->nkeysyms);
@@ -1716,9 +1715,13 @@ static void update_image(SpiceDisplay *display)
static void realize(GtkWidget *widget)
{
SpiceDisplay *display = SPICE_DISPLAY(widget);
+ SpiceDisplayPrivate *d = display->priv;
GTK_WIDGET_CLASS(spice_display_parent_class)->realize(widget);
+ d->keycode_map =
+ vnc_display_keymap_gdk2xtkbd_table(gtk_widget_get_window(widget),
+ &d->keycode_maplen);
update_image(display);
}
diff --git a/gtk/vncdisplaykeymap.c b/gtk/vncdisplaykeymap.c
index bf79f9b..1f17165 100644
--- a/gtk/vncdisplaykeymap.c
+++ b/gtk/vncdisplaykeymap.c
@@ -133,14 +133,14 @@ static gboolean check_for_xquartz(GdkDisplay *dpy)
}
#endif
-const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen)
+const guint16 const *vnc_display_keymap_gdk2xtkbd_table(GdkWindow *window,
+ size_t *maplen)
{
- GdkDisplay *dpy = gdk_display_get_default();
-
#ifdef GDK_WINDOWING_X11
- if (GDK_IS_X11_DISPLAY(dpy)) {
+ if (GDK_IS_X11_WINDOW(window)) {
XkbDescPtr desc;
const gchar *keycodes = NULL;
+ GdkDisplay *dpy = gdk_window_get_display(window);
/* There is no easy way to determine what X11 server
* and platform & keyboard driver is in use. Thus we
@@ -195,7 +195,7 @@ const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen)
#endif
#ifdef GDK_WINDOWING_WIN32
- if (GDK_IS_WIN32_DISPLAY(dpy)) {
+ if (GDK_IS_WIN32_WINDOW(window)) {
VNC_DEBUG("Using Win32 virtual keycode mapping");
*maplen = G_N_ELEMENTS(keymap_win322xtkbd);
return keymap_win322xtkbd;
@@ -203,7 +203,7 @@ const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen)
#endif
#ifdef GDK_WINDOWING_QUARTZ
- if (GDK_IS_QUARTZ_DISPLAY(dpy)) {
+ if (GDK_IS_QUARTZ_WINDOW(window)) {
VNC_DEBUG("Using OS-X virtual keycode mapping");
*maplen = G_N_ELEMENTS(keymap_osx2xtkbd);
return keymap_osx2xtkbd;
diff --git a/gtk/vncdisplaykeymap.h b/gtk/vncdisplaykeymap.h
index cee1b5a..3cb2abb 100644
--- a/gtk/vncdisplaykeymap.h
+++ b/gtk/vncdisplaykeymap.h
@@ -24,7 +24,8 @@
#include <glib.h>
-const guint16 const *vnc_display_keymap_gdk2xtkbd_table(size_t *maplen);
+const guint16 const *vnc_display_keymap_gdk2xtkbd_table(GdkWindow *window,
+ size_t *maplen);
guint16 vnc_display_keymap_gdk2xtkbd(const guint16 *keycode_map,
size_t keycode_maplen,
guint16 keycode);