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();
}
#include <QDebug>
#include <xcb/xcb.h>
+#define explicit dont_use_cxx_explicit
+#include <xcb/xkb.h>
+#undef explicit
XcbEventFilter::XcbEventFilter()
{
bool XcbEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *)
{
if (eventType == "xcb_generic_event_t") {
- xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
+ xcb_generic_event_t *event = static_cast<xcb_generic_event_t *>(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<xcb_xkb_state_notify_event_t *>(event);
+
+ qDebug() << "XCB Mapping Event - group: " << kbd_event->group;
+ }
}
return false;
}