49 lines
1.7 KiB
Diff
49 lines
1.7 KiB
Diff
From 084225fda75be2bead6e2dad313b9e861d93bffc Mon Sep 17 00:00:00 2001
|
|
From: Hans de Goede <hdegoede@redhat.com>
|
|
Date: Wed, 17 Nov 2010 12:19:41 +0100
|
|
Subject: [PATCH spice] 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.
|
|
---
|
|
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 c3ee1b0..c50e307 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();
|
|
--
|
|
1.7.3.2
|
|
|