handle xcb/xkb

This commit is contained in:
Guillaume Castagnino 2020-03-12 15:42:36 +01:00
parent 40af227b7f
commit ddf96521e4
2 changed files with 16 additions and 3 deletions

View file

@ -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();
}

View file

@ -3,6 +3,9 @@
#include <QDebug>
#include <xcb/xcb.h>
#define explicit dont_use_cxx_explicit
#include <xcb/xkb.h>
#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<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;
}