intercept events, but UI freeze globally
This commit is contained in:
parent
040fcaa756
commit
8656230dec
|
@ -5,3 +5,4 @@ TARGET = fookb
|
|||
|
||||
RESOURCES = fookb.qrc
|
||||
QT += widgets qml
|
||||
QMAKE_LFLAGS +=-lX11
|
||||
|
|
|
@ -1,16 +1,67 @@
|
|||
#include "xlib_wrapper.h"
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
|
||||
/* X Window headers */
|
||||
#include <X11/Xlib.h>
|
||||
#include <X11/Xutil.h>
|
||||
/* XKB fun */
|
||||
#include <X11/XKBlib.h>
|
||||
|
||||
XlibWrapper::XlibWrapper()
|
||||
{
|
||||
timer = new QTimer(this);
|
||||
timer->setSingleShot(true);
|
||||
connect(timer, SIGNAL(timeout()),
|
||||
this, SLOT(XlibWrapperSlot()));
|
||||
this, SLOT(XlibWrapperSlot()));
|
||||
timer->start(1000);
|
||||
}
|
||||
|
||||
void XlibWrapper::XlibWrapperSlot()
|
||||
{
|
||||
int event_rtrn;
|
||||
int error_rtrn;
|
||||
int reason_rtrn;
|
||||
Display *dpy;
|
||||
XkbEvent labuda;
|
||||
|
||||
int state = 0;
|
||||
|
||||
qDebug() << "Timer...";
|
||||
dpy = XkbOpenDisplay(NULL,
|
||||
&event_rtrn,
|
||||
&error_rtrn, NULL, NULL, &reason_rtrn);
|
||||
if (dpy == NULL) {
|
||||
qDebug() << "Cannot open display";
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
/* We would like receive the only Xkb event: XkbStateNotify. And only
|
||||
* when XkbLockGroup happens. */
|
||||
if (False == XkbSelectEvents(dpy,
|
||||
XkbUseCoreKbd,
|
||||
XkbAllEventsMask,
|
||||
0)) {
|
||||
qDebug() << "Cannot XkbSelectEvents.";
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
if (False == XkbSelectEventDetails(dpy,
|
||||
XkbUseCoreKbd,
|
||||
XkbStateNotify,
|
||||
XkbAllEventsMask,
|
||||
XkbGroupLockMask)) {
|
||||
qDebug() << "Cannot XkbSelectEventDetails.";
|
||||
qApp->quit();
|
||||
}
|
||||
|
||||
while (1) {
|
||||
XNextEvent(dpy, &labuda.core);
|
||||
state = labuda.state.group;
|
||||
/* Should not be necessary, here works only with 2 keyboard dispositions */
|
||||
if ((state < 0) || (state > 1))
|
||||
state = 1;
|
||||
qDebug() << "XNextEvent";
|
||||
/* TODO: update flag depending on state */
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue