Pass Xcb errors through the native event filter

So far only the xcb plugin is able to handle xcb errors and there is no
way for an application to get access to the errors even if the app is
using xcb directly.

This means Qt is filtering out all xcb errors which are relevant to the
app and at the same time the xcb plugin is getting spammed with errors
it did not cause and which are logged with a qWarning.

By passing the error event through the native event filter an app can
filter out all errors it knows to have caused.

Change-Id: I158deee2e1c71630f2b1d77174f1091532851b3d
Reviewed-by: David Faure (KDE) <faure@kde.org>
This commit is contained in:
Martin Gräßlin 2013-08-06 15:27:36 +02:00 committed by The Qt Project
parent 3ead44fcac
commit d916ed12b3

View File

@ -658,6 +658,11 @@ void QXcbConnection::log(const char *file, int line, int sequence)
void QXcbConnection::handleXcbError(xcb_generic_error_t *error)
{
long result = 0;
QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance();
if (dispatcher && dispatcher->filterNativeEvent(m_nativeInterface->genericEventFilterType(), error, &result))
return;
uint clamped_error_code = qMin<uint>(error->error_code, (sizeof(xcb_errors) / sizeof(xcb_errors[0])) - 1);
uint clamped_major_code = qMin<uint>(error->major_code, (sizeof(xcb_protocol_request_codes) / sizeof(xcb_protocol_request_codes[0])) - 1);