diff options
author | Hans de Goede <hdegoede@redhat.com> | 2010-11-17 12:19:41 +0100 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2010-11-22 19:47:21 +0100 |
commit | c5a903b6655f4f6dacb333fa897d60636aa92d58 (patch) | |
tree | e7d621f17d871774c3b7d455c1b6785819269bd5 | |
parent | 0bb53766fae863b927f82d06eb85e4f5a8e25280 (diff) | |
download | spice-c5a903b6655f4f6dacb333fa897d60636aa92d58.tar.gz spice-c5a903b6655f4f6dacb333fa897d60636aa92d58.tar.xz spice-c5a903b6655f4f6dacb333fa897d60636aa92d58.zip |
spicec-x11: Add a few missing XLockDisplay calls (rhbz#654265)
The XIM functions end up waiting for a reply from the server, so they
need locking around them. Idem for the XLookupString call.
-rw-r--r-- | client/x11/red_window.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/client/x11/red_window.cpp b/client/x11/red_window.cpp index c3ee1b02..c50e3074 100644 --- a/client/x11/red_window.cpp +++ b/client/x11/red_window.cpp @@ -733,7 +733,9 @@ void RedWindow_p::handle_key_press_event(RedWindow& window, XKeyEvent* event) if (x_input_context != NULL) { for (;;) { + XLockDisplay(x_display); len = XwcLookupString(x_input_context, event, utf32_buf, buf_size, &key_sym, &status); + XUnlockDisplay(x_display); if (status != XBufferOverflow) { break; } @@ -767,7 +769,9 @@ void RedWindow_p::handle_key_press_event(RedWindow& window, XKeyEvent* event) unsigned char buffer[16]; int i; + XLockDisplay(x_display); len = XLookupString(event, (char *)buffer, sizeof(buffer), NULL, NULL); + XUnlockDisplay(x_display); for (i = 0; i < len; i++) { window.get_listener().on_char((uint32_t)buffer[i]); } @@ -2135,7 +2139,9 @@ void RedWindow::on_focus_in() } _focused = true; if (x_input_context) { + XLockDisplay(x_display); XwcResetIC(x_input_context); + XUnlockDisplay(x_display); } XPlatform::on_focus_in(); get_listener().on_activate(); |