diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2013-05-10 19:13:53 +0200 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2013-05-11 21:18:31 +0200 |
commit | c1a95284007c078f9615175ec41056b2bb4d1ec5 (patch) | |
tree | 7758388ff4ef74c42ef34ae9b197a1fc65b39a9e | |
parent | ca760353999c2e0c6f48cda68a79ec3d8fbb055a (diff) |
vncdisplaykeymap: use a window to associate table
-rw-r--r-- | gtk/spice-widget.c | 5 | ||||
-rw-r--r-- | gtk/vncdisplaykeymap.c | 12 | ||||
-rw-r--r-- | gtk/vncdisplaykeymap.h | 3 |
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); |