spice/0012-spicec-x11-Fix-unhandled-exception-no-window-proc-cr.patch
Hans de Goede ee30e70841 - Fix the info layer not showing when used through the XPI
- Do not let the connection gui flash by when a hostname has been specified
  on the cmdline
- Fix spice client locking up when dealing with XIM input (#654265)
- Fix modifier keys getting stuck (#655048)
- Fix spice client crashing when dealing with XIM ibus input (#655836)
- Fix spice client only showing a white screen in full screen mode
2010-11-25 12:17:56 +01:00

44 lines
1.8 KiB
Diff

From c8a034f2858f247d6a00ec1ad47de491b7e99575 Mon Sep 17 00:00:00 2001
From: Hans de Goede <hdegoede@redhat.com>
Date: Tue, 23 Nov 2010 15:32:15 +0100
Subject: [PATCH spice 6/7] spicec-x11: Fix unhandled exception: no window proc crash (rhbz#655836)
When XIM + ibus is in use XIM creates an invisible window for its own
purposes, we sometimes get a _GTK_LOAD_ICONTHEMES ClientMessage event on
this window. Since this window was not explicitly created by spicec, it
does not have a Window Context (with the event handling function for the
window in question) set. This would cause spicec to throw an unhandled
exception and exit.
This patch replaces the exception throwing with silently ignoring
ClientMessage events on Windows without a Context and logging a warning
for other event types.
---
client/x11/platform.cpp | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp
index 2009817..334a74f 100644
--- a/client/x11/platform.cpp
+++ b/client/x11/platform.cpp
@@ -295,7 +295,15 @@ void XEventHandler::on_event()
}
if (XFindContext(&_x_display, event.xany.window, _win_proc_context, &proc_pointer)) {
- THROW("no window proc");
+ /* When XIM + ibus is in use XIM creates an invisible window for
+ its own purposes, we sometimes get a _GTK_LOAD_ICONTHEMES
+ ClientMessage event on this window -> skip logging. */
+ if (event.type != ClientMessage) {
+ LOG_WARN(
+ "Event on window without a win proc, type: %d, window: %u",
+ event.type, (unsigned int)event.xany.window);
+ }
+ continue;
}
XUnlockDisplay(x_display);
((XPlatform::win_proc_t)proc_pointer)(event);
--
1.7.3.2