xcb: re-factor QXcbConnection::printXcbEvent
- To use categorized logging. - Print also non-core event types. - Added QLoggingCategory as one of the parameters because I will need it in a subsequent patch. - A call to this function in QXcbConnection::handleXcbEvent I left disabled from builds by default as the "handled" variable is broken. Change-Id: I15cd71c40b5772a4352a69cdc24a0ae026626060 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>bb10
parent
60ad66ce3c
commit
5f1df771b6
|
|
@ -109,6 +109,7 @@ Q_LOGGING_CATEGORY(lcQpaXInput, "qt.qpa.input")
|
|||
Q_LOGGING_CATEGORY(lcQpaXInputDevices, "qt.qpa.input.devices")
|
||||
Q_LOGGING_CATEGORY(lcQpaXInputEvents, "qt.qpa.input.events")
|
||||
Q_LOGGING_CATEGORY(lcQpaScreen, "qt.qpa.screen")
|
||||
Q_LOGGING_CATEGORY(lcQpaEvents, "qt.qpa.events")
|
||||
|
||||
// this event type was added in libxcb 1.10,
|
||||
// but we support also older version
|
||||
|
|
@ -726,58 +727,73 @@ break;
|
|||
} \
|
||||
break;
|
||||
|
||||
//#define XCB_EVENT_DEBUG
|
||||
|
||||
void printXcbEvent(const char *message, xcb_generic_event_t *event)
|
||||
void QXcbConnection::printXcbEvent(const QLoggingCategory &log, const char *message,
|
||||
xcb_generic_event_t *event) const
|
||||
{
|
||||
#ifdef XCB_EVENT_DEBUG
|
||||
#define PRINT_XCB_EVENT(ev) \
|
||||
case ev: \
|
||||
qDebug("QXcbConnection: %s: %d - %s - sequence: %d", message, int(ev), #ev, event->sequence); \
|
||||
break;
|
||||
quint8 response_type = event->response_type & ~0x80;
|
||||
quint16 sequence = event->sequence;
|
||||
|
||||
switch (event->response_type & ~0x80) {
|
||||
PRINT_XCB_EVENT(XCB_KEY_PRESS);
|
||||
PRINT_XCB_EVENT(XCB_KEY_RELEASE);
|
||||
PRINT_XCB_EVENT(XCB_BUTTON_PRESS);
|
||||
PRINT_XCB_EVENT(XCB_BUTTON_RELEASE);
|
||||
PRINT_XCB_EVENT(XCB_MOTION_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_ENTER_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_LEAVE_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_FOCUS_IN);
|
||||
PRINT_XCB_EVENT(XCB_FOCUS_OUT);
|
||||
PRINT_XCB_EVENT(XCB_KEYMAP_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_EXPOSE);
|
||||
PRINT_XCB_EVENT(XCB_GRAPHICS_EXPOSURE);
|
||||
PRINT_XCB_EVENT(XCB_NO_EXPOSURE);
|
||||
PRINT_XCB_EVENT(XCB_VISIBILITY_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_CREATE_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_DESTROY_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_UNMAP_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_MAP_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_MAP_REQUEST);
|
||||
PRINT_XCB_EVENT(XCB_REPARENT_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_CONFIGURE_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_CONFIGURE_REQUEST);
|
||||
PRINT_XCB_EVENT(XCB_GRAVITY_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_RESIZE_REQUEST);
|
||||
PRINT_XCB_EVENT(XCB_CIRCULATE_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_CIRCULATE_REQUEST);
|
||||
PRINT_XCB_EVENT(XCB_PROPERTY_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_SELECTION_CLEAR);
|
||||
PRINT_XCB_EVENT(XCB_SELECTION_REQUEST);
|
||||
PRINT_XCB_EVENT(XCB_SELECTION_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_COLORMAP_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_CLIENT_MESSAGE);
|
||||
PRINT_XCB_EVENT(XCB_MAPPING_NOTIFY);
|
||||
PRINT_XCB_EVENT(XCB_GE_GENERIC);
|
||||
default:
|
||||
qDebug("QXcbConnection: %s: unknown event - response_type: %d - sequence: %d", message, int(event->response_type & ~0x80), int(event->sequence));
|
||||
#define PRINT_AND_RETURN(name) { \
|
||||
qCDebug(log, "%s | %s(%d) | sequence: %d", message, name, response_type, sequence); \
|
||||
return; \
|
||||
}
|
||||
#define CASE_PRINT_AND_RETURN(name) case name : PRINT_AND_RETURN(#name);
|
||||
|
||||
switch (response_type) {
|
||||
CASE_PRINT_AND_RETURN( XCB_KEY_PRESS );
|
||||
CASE_PRINT_AND_RETURN( XCB_KEY_RELEASE );
|
||||
CASE_PRINT_AND_RETURN( XCB_BUTTON_PRESS );
|
||||
CASE_PRINT_AND_RETURN( XCB_BUTTON_RELEASE );
|
||||
CASE_PRINT_AND_RETURN( XCB_MOTION_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_ENTER_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_LEAVE_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_FOCUS_IN );
|
||||
CASE_PRINT_AND_RETURN( XCB_FOCUS_OUT );
|
||||
CASE_PRINT_AND_RETURN( XCB_KEYMAP_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_EXPOSE );
|
||||
CASE_PRINT_AND_RETURN( XCB_GRAPHICS_EXPOSURE );
|
||||
CASE_PRINT_AND_RETURN( XCB_NO_EXPOSURE );
|
||||
CASE_PRINT_AND_RETURN( XCB_VISIBILITY_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_CREATE_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_DESTROY_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_UNMAP_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_MAP_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_MAP_REQUEST );
|
||||
CASE_PRINT_AND_RETURN( XCB_REPARENT_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_CONFIGURE_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_CONFIGURE_REQUEST );
|
||||
CASE_PRINT_AND_RETURN( XCB_GRAVITY_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_RESIZE_REQUEST );
|
||||
CASE_PRINT_AND_RETURN( XCB_CIRCULATE_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_CIRCULATE_REQUEST );
|
||||
CASE_PRINT_AND_RETURN( XCB_PROPERTY_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_SELECTION_CLEAR );
|
||||
CASE_PRINT_AND_RETURN( XCB_SELECTION_REQUEST );
|
||||
CASE_PRINT_AND_RETURN( XCB_SELECTION_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_COLORMAP_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_CLIENT_MESSAGE );
|
||||
CASE_PRINT_AND_RETURN( XCB_MAPPING_NOTIFY );
|
||||
CASE_PRINT_AND_RETURN( XCB_GE_GENERIC );
|
||||
}
|
||||
#else
|
||||
Q_UNUSED(message);
|
||||
Q_UNUSED(event);
|
||||
#endif
|
||||
// XFixes
|
||||
if (has_xfixes && response_type == xfixes_first_event + XCB_XFIXES_SELECTION_NOTIFY)
|
||||
PRINT_AND_RETURN("XCB_XFIXES_SELECTION_NOTIFY");
|
||||
// XRandR
|
||||
if (has_randr_extension) {
|
||||
if (response_type == xrandr_first_event + XCB_RANDR_NOTIFY)
|
||||
PRINT_AND_RETURN("XCB_RANDR_NOTIFY");
|
||||
if (response_type == xrandr_first_event + XCB_RANDR_SCREEN_CHANGE_NOTIFY)
|
||||
PRINT_AND_RETURN("XCB_RANDR_SCREEN_CHANGE_NOTIFY");
|
||||
}
|
||||
// XKB
|
||||
if (response_type == xkb_first_event)
|
||||
PRINT_AND_RETURN("XCB_XKB_* event");
|
||||
|
||||
// UNKNOWN
|
||||
qCDebug(log, "%s | unknown(%d) | sequence: %d", message, response_type, sequence);
|
||||
|
||||
#undef PRINT_AND_RETURN
|
||||
#undef CASE_PRINT_AND_RETURN
|
||||
}
|
||||
|
||||
const char *xcb_errors[] =
|
||||
|
|
@ -1200,10 +1216,10 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
|
|||
if (!handled && m_glIntegration)
|
||||
handled = m_glIntegration->handleXcbEvent(event, response_type);
|
||||
|
||||
if (handled)
|
||||
printXcbEvent("Handled XCB event", event);
|
||||
else
|
||||
printXcbEvent("Unhandled XCB event", event);
|
||||
#if 0
|
||||
if (Q_UNLIKELY(lcQpaEvents().isDebugEnabled()))
|
||||
printXcbEvent(lcQpaEvents(), handled ? "Handled" : "Unhandled", event);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QXcbConnection::addPeekFunc(PeekFunc f)
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ Q_DECLARE_LOGGING_CATEGORY(lcQpaXInput)
|
|||
Q_DECLARE_LOGGING_CATEGORY(lcQpaXInputDevices)
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcQpaXInputEvents)
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcQpaScreen)
|
||||
Q_DECLARE_LOGGING_CATEGORY(lcQpaEvents)
|
||||
|
||||
class QXcbVirtualDesktop;
|
||||
class QXcbScreen;
|
||||
|
|
@ -429,6 +430,8 @@ public:
|
|||
|
||||
void handleXcbError(xcb_generic_error_t *error);
|
||||
void handleXcbEvent(xcb_generic_event_t *event);
|
||||
void printXcbEvent(const QLoggingCategory &log, const char *message,
|
||||
xcb_generic_event_t *event) const;
|
||||
|
||||
void addWindowEventListener(xcb_window_t id, QXcbWindowEventListener *eventListener);
|
||||
void removeWindowEventListener(xcb_window_t id);
|
||||
|
|
|
|||
Loading…
Reference in New Issue