From ddf96521e46c8f99712dacd764ddd33c60b1f846 Mon Sep 17 00:00:00 2001 From: Guillaume Castagnino Date: Thu, 12 Mar 2020 15:42:36 +0100 Subject: [PATCH] handle xcb/xkb --- fookb.cpp | 4 +++- xcbEventFilter.cpp | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/fookb.cpp b/fookb.cpp index de93742..3ba015c 100644 --- a/fookb.cpp +++ b/fookb.cpp @@ -6,14 +6,16 @@ int main(int argc, char *argv[]) { + /* create qapp and QML engine */ QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QApplication app(argc, argv); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/fookb.qml"))); - // Install event filter to handle mapping change + /* Install event filter to handle mapping change */ XcbEventFilter eventFilter; app.installNativeEventFilter(&eventFilter); + /* run application */ return app.exec(); } diff --git a/xcbEventFilter.cpp b/xcbEventFilter.cpp index b7e300b..0141f77 100644 --- a/xcbEventFilter.cpp +++ b/xcbEventFilter.cpp @@ -3,6 +3,9 @@ #include #include +#define explicit dont_use_cxx_explicit +#include +#undef explicit XcbEventFilter::XcbEventFilter() { @@ -15,9 +18,17 @@ XcbEventFilter::~XcbEventFilter() bool XcbEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *) { if (eventType == "xcb_generic_event_t") { - xcb_generic_event_t* ev = static_cast(message); + xcb_generic_event_t *event = static_cast(message); + uint response_type = event->response_type & ~0x80; + qDebug() << "XCB Event"; - // ... + /* We are only interested in XCB_XKB_STATE_NOTIFY */ + if (response_type == XCB_XKB_STATE_NOTIFY) + { + xcb_xkb_state_notify_event_t *kbd_event = reinterpret_cast(event); + + qDebug() << "XCB Mapping Event - group: " << kbd_event->group; + } } return false; } -- 2.30.1