summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrediano Ziglio <fziglio@redhat.com>2016-03-23 10:56:35 +0000
committerFrediano Ziglio <fziglio@redhat.com>2016-03-23 16:08:40 +0000
commit5c34f8c12e2fbafb387d9af27c5e5a59a963bdd8 (patch)
treed0849e0aa32195f77061a0553ae8121794046e9f
parentbcf2751888444e8404e4f6fe31989fc83e59c2d4 (diff)
Keep the keyboard as compatibleenglish_keyboard
If user try to change keyboard make sure is still compatible with our requirements
-rw-r--r--src/spice-widget.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/spice-widget.c b/src/spice-widget.c
index 426aea9..ae50816 100644
--- a/src/spice-widget.c
+++ b/src/spice-widget.c
@@ -1889,6 +1889,34 @@ static void update_image(SpiceDisplay *display)
do_color_convert(display, &d->area);
}
+#ifdef G_OS_WIN32
+GdkFilterReturn message_filter(GdkXEvent *xevent, GdkEvent *event, gpointer data)
+{
+ enum { WM_RESET_KEYBOARD = WM_USER + 123 };
+
+ MSG *msg = (MSG *) xevent;
+ SpiceDisplay *display;
+
+ // save new input locale
+ switch (msg->message) {
+ case WM_INPUTLANGCHANGE:
+ if (PRIMARYLANGID(LOWORD(msg->lParam)) != LANG_ENGLISH)
+ PostMessage(msg->hwnd, WM_RESET_KEYBOARD, 0, 0);
+ break;
+ case WM_RESET_KEYBOARD:
+ display = SPICE_DISPLAY((GtkWidget *) data);
+ if (msg->wParam == 0 && msg->lParam == 0
+ && PRIMARYLANGID(LOWORD(GetKeyboardLayout(0))) != LANG_ENGLISH
+ && display->priv->keyboard_have_focus) {
+ set_normal_keyboard(display);
+ set_raw_keyboard(display);
+ }
+ break;
+ }
+ return GDK_FILTER_CONTINUE;
+}
+#endif
+
static void realize(GtkWidget *widget)
{
SpiceDisplay *display = SPICE_DISPLAY(widget);
@@ -1900,6 +1928,11 @@ static void realize(GtkWidget *widget)
vnc_display_keymap_gdk2xtkbd_table(gtk_widget_get_window(widget),
&d->keycode_maplen);
update_image(display);
+
+#ifdef G_OS_WIN32
+ // add a filter to capture Windows messages
+ gdk_window_add_filter(GDK_WINDOW(gtk_widget_get_window(widget)), message_filter, widget);
+#endif
}
static void unrealize(GtkWidget *widget)