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-17 12:31:53 +0100 |
commit | e0911d1c92ff92ce7cbd9bc51964e45a4be02e1d (patch) | |
tree | 6bab1fb39a187601c1d366b985a1984040d96cdb /client/x11 | |
parent | c278cfa88c22b9426ac4a37847f69318c2b1de20 (diff) | |
download | spice-e0911d1c92ff92ce7cbd9bc51964e45a4be02e1d.tar.gz spice-e0911d1c92ff92ce7cbd9bc51964e45a4be02e1d.tar.xz spice-e0911d1c92ff92ce7cbd9bc51964e45a4be02e1d.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.
Diffstat (limited to 'client/x11')
-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(); |