summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans de Goede <hdegoede@redhat.com>2010-11-17 12:19:41 +0100
committerHans de Goede <hdegoede@redhat.com>2010-11-22 19:47:21 +0100
commitc5a903b6655f4f6dacb333fa897d60636aa92d58 (patch)
treee7d621f17d871774c3b7d455c1b6785819269bd5
parent0bb53766fae863b927f82d06eb85e4f5a8e25280 (diff)
downloadspice-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.cpp6
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();