diff options
author | Hans de Goede <hdegoede@redhat.com> | 2010-11-23 15:32:15 +0100 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2010-11-23 18:18:48 +0100 |
commit | 32d94860910aabc7212e4059bf095d0bcd99cc1c (patch) | |
tree | c20d267833848bcf9ce412f67e538cd9f3031079 /client | |
parent | 86e62813b3513cf8138e11d02fb1500b69516632 (diff) | |
download | spice-32d94860910aabc7212e4059bf095d0bcd99cc1c.tar.gz spice-32d94860910aabc7212e4059bf095d0bcd99cc1c.tar.xz spice-32d94860910aabc7212e4059bf095d0bcd99cc1c.zip |
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.
Diffstat (limited to 'client')
-rw-r--r-- | 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 20098176..334a74ff 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); |