[Spice-devel] [spice-gtk v2] widget: Disable IME context on display widget

Frediano Ziglio fziglio at redhat.com
Thu Jun 16 14:05:35 UTC 2016


This prevent Windows to handle IME on the widget which cause the
application to not receive keyboard events.

To test this issue set keyboard layour to Japanese and Microsoft
IME (the default one). Set the input method to full katakana, assure
your remote-viewer is using this method and start pressing
alphabetical keys. On the guest (open a terminal, an editor or
a word processor to make easier) you won't see any character.

Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
---
 src/spice-widget.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Changes from v1:
- explain the problem in the commit message.

diff --git a/src/spice-widget.c b/src/spice-widget.c
index c528614..595c8f5 100644
--- a/src/spice-widget.c
+++ b/src/spice-widget.c
@@ -1687,6 +1687,15 @@ static gboolean focus_in_event(GtkWidget *widget, GdkEventFocus *focus G_GNUC_UN
         return true;
 
     release_keys(display);
+#ifdef G_OS_WIN32
+    /* Reset the IME context of the focused window.
+     * Note that the focused window can be different from SpiceDisplay
+     * one but the events are received and forwarder by this window. */
+    HWND hwnd_focused = GetFocus();
+    if (hwnd_focused != NULL) {
+        ImmAssociateContext(hwnd_focused, NULL);
+    }
+#endif
     if (!d->disable_inputs)
         spice_gtk_session_sync_keyboard_modifiers(d->gtk_session);
     if (d->keyboard_grab_released)
-- 
2.7.4



More information about the Spice-devel mailing list