genode/qt4/src/lib/qt4/src/gui/embedded/qinputnitpicker_qws.cpp

104 lines
2.4 KiB
C++

#include <base/env.h>
#include <input/keycodes.h>
#include <QTimer>
#include <qdebug.h>
#include <qwindowsystem_qws.h>
#include <qmousedriverfactory_qws.h>
#include <qkbddriverfactory_qws.h>
#include "qinputnitpicker_qws.h"
#if !defined(QT_NO_QWS_MOUSE_NITPICKER) || !defined(QT_NO_QWS_KEYBOARD_NITPICKER)
using namespace Genode;
QNitpickerInputHandler::QNitpickerInputHandler(QScreen *screen,
Input::Session_capability input_session_cap,
const QString &driver,
const QString &device)
{
input = new Input::Session_client(input_session_cap);
ev_buf = static_cast<Input::Event *>
(env()->rm_session()->attach(input->dataspace()));
qDebug() << "QNitpickerInputHandler: input buffer at " << ev_buf;
#ifndef QT_NO_QWS_MOUSE_NITPICKER
mouse = new QNitpickerMouseHandler();
qwsServer->setDefaultMouse("None");
#endif
#ifndef QT_NO_QWS_KEYBOARD_NITPICKER
keyboard = new QNitpickerKeyboardHandler();
qwsServer->setDefaultKeyboard("None");
#endif
setScreen(screen);
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(readInputData()));
timer->start(10);
}
QNitpickerInputHandler::~QNitpickerInputHandler()
{
delete timer;
delete input;
#ifndef QT_NO_QWS_MOUSE_NITPICKER
delete mouse;
#endif
#ifndef QT_NO_QWS_KEYBOARD_NITPICKER
delete keyboard;
#endif
}
void QNitpickerInputHandler::setScreen(const QScreen *screen)
{
#ifndef QT_NO_QWS_MOUSE_NITPICKER
if (mouse) {
mouse->setScreen(screen);
}
#endif
}
void QNitpickerInputHandler::readInputData()
{
// qDebug() << "QNitpickerInputHandler::readInputData()";
int i, num_ev;
if (input->is_pending()) {
for (i = 0, num_ev = input->flush(); i < num_ev; i++) {
Input::Event *ev = &ev_buf[i];
if (ev->type() == Input::Event::MOTION
|| ev->type() == Input::Event::WHEEL
|| ev->code() == Input::BTN_LEFT
|| ev->code() == Input::BTN_RIGHT
|| ev->code() == Input::BTN_MIDDLE) {
#ifndef QT_NO_QWS_MOUSE_NITPICKER
mouse->processMouseEvent(ev);
#endif
} else if (ev->code() < 128) {
#ifndef QT_NO_QWS_KEYBOARD_NITPICKER
keyboard->processKeyEvent(ev);
#endif
}
}
}
// qDebug() << "QNitpickerInputHandler::readInputData() finished";
}
#endif // !defined(QT_NO_QWS_MOUSE_NITPICKER) || !defined(QT_NO_QWS_KEYBOARD_NITPICKER)