Get linux input plugin compiling by removing keyboard support
Change-Id: I46ade27b5dde6c8d326a84e94abbbde1435889f8 Reviewed-on: http://codereview.qt.nokia.com/2765 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
This commit is contained in:
parent
a36f23292b
commit
f66065f281
@ -5,8 +5,6 @@ DESTDIR = $$QT.gui.plugins/generic
|
|||||||
target.path = $$[QT_INSTALL_PLUGINS]/generic
|
target.path = $$[QT_INSTALL_PLUGINS]/generic
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
DEFINES += QT_QWS_KBD_LINUXINPUT
|
|
||||||
|
|
||||||
HEADERS = qlinuxinput.h
|
HEADERS = qlinuxinput.h
|
||||||
|
|
||||||
QT += core-private
|
QT += core-private
|
||||||
@ -14,7 +12,3 @@ QT += core-private
|
|||||||
SOURCES = main.cpp \
|
SOURCES = main.cpp \
|
||||||
qlinuxinput.cpp
|
qlinuxinput.cpp
|
||||||
|
|
||||||
HEADERS += $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws.h \
|
|
||||||
$$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws_p.h
|
|
||||||
|
|
||||||
SOURCES += $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws.cpp
|
|
||||||
|
@ -61,8 +61,7 @@ QLinuxInputPlugin::QLinuxInputPlugin()
|
|||||||
QStringList QLinuxInputPlugin::keys() const
|
QStringList QLinuxInputPlugin::keys() const
|
||||||
{
|
{
|
||||||
return (QStringList()
|
return (QStringList()
|
||||||
<< QLatin1String("LinuxInputMouse")
|
<< QLatin1String("LinuxInputMouse"));
|
||||||
<< QLatin1String("LinuxInputKeyboard"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QObject* QLinuxInputPlugin::create(const QString &key,
|
QObject* QLinuxInputPlugin::create(const QString &key,
|
||||||
@ -70,8 +69,6 @@ QObject* QLinuxInputPlugin::create(const QString &key,
|
|||||||
{
|
{
|
||||||
if (!key.compare(QLatin1String("LinuxInputMouse"), Qt::CaseInsensitive))
|
if (!key.compare(QLatin1String("LinuxInputMouse"), Qt::CaseInsensitive))
|
||||||
return new QLinuxInputMouseHandler(key, specification);
|
return new QLinuxInputMouseHandler(key, specification);
|
||||||
if (!key.compare(QLatin1String("LinuxInputKeyboard"), Qt::CaseInsensitive))
|
|
||||||
return new QLinuxInputKeyboardHandler(key, specification);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,9 +48,6 @@
|
|||||||
#include <QPoint>
|
#include <QPoint>
|
||||||
#include <QWindowSystemInterface>
|
#include <QWindowSystemInterface>
|
||||||
|
|
||||||
#include <qkbd_qws.h>
|
|
||||||
|
|
||||||
|
|
||||||
#include <qplatformdefs.h>
|
#include <qplatformdefs.h>
|
||||||
#include <private/qcore_unix_p.h> // overrides QT_OPEN
|
#include <private/qcore_unix_p.h> // overrides QT_OPEN
|
||||||
|
|
||||||
@ -361,195 +358,6 @@ void QLinuxInputMouseHandler::readMouseData()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
//Keyboard handler
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class QWSLinuxInputKeyboardHandler : public QWSKeyboardHandler
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QWSLinuxInputKeyboardHandler(const QString&);
|
|
||||||
~QWSLinuxInputKeyboardHandler();
|
|
||||||
|
|
||||||
virtual bool filterInputEvent(quint16 &input_code, qint32 &input_value);
|
|
||||||
|
|
||||||
//private:
|
|
||||||
// QWSLinuxInputKbPrivate *d;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
QWSLinuxInputKeyboardHandler::QWSLinuxInputKeyboardHandler(const QString &device)
|
|
||||||
: QWSKeyboardHandler(device)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QWSLinuxInputKeyboardHandler::~QWSLinuxInputKeyboardHandler()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QWSLinuxInputKeyboardHandler::filterInputEvent(quint16 &, qint32 &)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QLinuxInputKeyboardHandler::QLinuxInputKeyboardHandler(const QString &key, const QString &specification)
|
|
||||||
: m_handler(0), m_fd(-1), m_tty_fd(-1), m_orig_kbmode(K_XLATE)
|
|
||||||
{
|
|
||||||
setObjectName(QLatin1String("LinuxInputSubsystem Keyboard Handler"));
|
|
||||||
|
|
||||||
QString dev = QLatin1String("/dev/input/event1");
|
|
||||||
int repeat_delay = -1;
|
|
||||||
int repeat_rate = -1;
|
|
||||||
|
|
||||||
bool ttymode = false;
|
|
||||||
|
|
||||||
QStringList args = specification.split(QLatin1Char(':'));
|
|
||||||
foreach (const QString &arg, args) {
|
|
||||||
if (arg.startsWith(QLatin1String("repeat-delay=")))
|
|
||||||
repeat_delay = arg.mid(13).toInt();
|
|
||||||
else if (arg.startsWith(QLatin1String("repeat-rate=")))
|
|
||||||
repeat_rate = arg.mid(12).toInt();
|
|
||||||
else if (arg.startsWith(QLatin1String("ttymode")))
|
|
||||||
ttymode = true;
|
|
||||||
else if (arg.startsWith(QLatin1String("/dev/")))
|
|
||||||
dev = arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_handler = new QWSLinuxInputKeyboardHandler(dev); //This is a hack to avoid copying all the QWS code
|
|
||||||
|
|
||||||
m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDWR, 0);
|
|
||||||
if (m_fd >= 0) {
|
|
||||||
if (repeat_delay > 0 && repeat_rate > 0) {
|
|
||||||
int kbdrep[2] = { repeat_delay, repeat_rate };
|
|
||||||
::ioctl(m_fd, EVIOCSREP, kbdrep);
|
|
||||||
}
|
|
||||||
|
|
||||||
QSocketNotifier *notifier;
|
|
||||||
notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this);
|
|
||||||
connect(notifier, SIGNAL(activated(int)), this, SLOT(readKeycode()));
|
|
||||||
|
|
||||||
if (ttymode) {
|
|
||||||
// play nice in case we are started from a shell (e.g. for debugging)
|
|
||||||
m_tty_fd = isatty(0) ? 0 : -1;
|
|
||||||
|
|
||||||
if (m_tty_fd >= 0) {
|
|
||||||
// save tty config for restore.
|
|
||||||
tcgetattr(m_tty_fd, &m_tty_attr);
|
|
||||||
|
|
||||||
struct ::termios termdata;
|
|
||||||
tcgetattr(m_tty_fd, &termdata);
|
|
||||||
|
|
||||||
// record the original mode so we can restore it again in the destructor.
|
|
||||||
::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode);
|
|
||||||
|
|
||||||
// setting this translation mode is even needed in INPUT mode to prevent
|
|
||||||
// the shell from also interpreting codes, if the process has a tty
|
|
||||||
// attached: e.g. Ctrl+C wouldn't copy, but kill the application.
|
|
||||||
::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW);
|
|
||||||
|
|
||||||
// set the tty layer to pass-through
|
|
||||||
termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP);
|
|
||||||
termdata.c_oflag = 0;
|
|
||||||
termdata.c_cflag = CREAD | CS8;
|
|
||||||
termdata.c_lflag = 0;
|
|
||||||
termdata.c_cc[VTIME]=0;
|
|
||||||
termdata.c_cc[VMIN]=1;
|
|
||||||
cfsetispeed(&termdata, 9600);
|
|
||||||
cfsetospeed(&termdata, 9600);
|
|
||||||
tcsetattr(m_tty_fd, TCSANOW, &termdata);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qWarning("Cannot open keyboard input device '%s': %s", qPrintable(dev), strerror(errno));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QLinuxInputKeyboardHandler::~QLinuxInputKeyboardHandler()
|
|
||||||
{
|
|
||||||
if (m_tty_fd >= 0) {
|
|
||||||
::ioctl(m_tty_fd, KDSKBMODE, m_orig_kbmode);
|
|
||||||
tcsetattr(m_tty_fd, TCSANOW, &m_tty_attr);
|
|
||||||
}
|
|
||||||
if (m_fd >= 0)
|
|
||||||
QT_CLOSE(m_fd);
|
|
||||||
delete m_handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QLinuxInputKeyboardHandler::switchLed(int led, bool state)
|
|
||||||
{
|
|
||||||
struct ::input_event led_ie;
|
|
||||||
::gettimeofday(&led_ie.time, 0);
|
|
||||||
led_ie.type = EV_LED;
|
|
||||||
led_ie.code = led;
|
|
||||||
led_ie.value = state;
|
|
||||||
|
|
||||||
QT_WRITE(m_fd, &led_ie, sizeof(led_ie));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void QLinuxInputKeyboardHandler::readKeycode()
|
|
||||||
{
|
|
||||||
struct ::input_event buffer[32];
|
|
||||||
int n = 0;
|
|
||||||
|
|
||||||
forever {
|
|
||||||
n = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
|
|
||||||
|
|
||||||
if (n == 0) {
|
|
||||||
qWarning("Got EOF from the input device.");
|
|
||||||
return;
|
|
||||||
} else if (n < 0 && (errno != EINTR && errno != EAGAIN)) {
|
|
||||||
qWarning("Could not read from input device: %s", strerror(errno));
|
|
||||||
return;
|
|
||||||
} else if (n % sizeof(buffer[0]) == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
n /= sizeof(buffer[0]);
|
|
||||||
|
|
||||||
for (int i = 0; i < n; ++i) {
|
|
||||||
if (buffer[i].type != EV_KEY)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
quint16 code = buffer[i].code;
|
|
||||||
qint32 value = buffer[i].value;
|
|
||||||
|
|
||||||
if (m_handler->filterInputEvent(code, value))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
QWSKeyboardHandler::KeycodeAction ka;
|
|
||||||
ka = m_handler->processKeycode(code, value != 0, value == 2);
|
|
||||||
|
|
||||||
switch (ka) {
|
|
||||||
case QWSKeyboardHandler::CapsLockOn:
|
|
||||||
case QWSKeyboardHandler::CapsLockOff:
|
|
||||||
switchLed(LED_CAPSL, ka == QWSKeyboardHandler::CapsLockOn);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QWSKeyboardHandler::NumLockOn:
|
|
||||||
case QWSKeyboardHandler::NumLockOff:
|
|
||||||
switchLed(LED_NUML, ka == QWSKeyboardHandler::NumLockOn);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QWSKeyboardHandler::ScrollLockOn:
|
|
||||||
case QWSKeyboardHandler::ScrollLockOff:
|
|
||||||
switchLed(LED_SCROLLL, ka == QWSKeyboardHandler::ScrollLockOn);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
// ignore console switching and reboot
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,31 +79,6 @@ private:
|
|||||||
QLinuxInputMouseHandlerData *d;
|
QLinuxInputMouseHandlerData *d;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class QWSLinuxInputKeyboardHandler;
|
|
||||||
|
|
||||||
class QLinuxInputKeyboardHandler : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QLinuxInputKeyboardHandler(const QString &key, const QString &specification);
|
|
||||||
~QLinuxInputKeyboardHandler();
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
void switchLed(int, bool);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void readKeycode();
|
|
||||||
|
|
||||||
private:
|
|
||||||
QWSLinuxInputKeyboardHandler *m_handler;
|
|
||||||
int m_fd;
|
|
||||||
int m_tty_fd;
|
|
||||||
struct termios m_tty_attr;
|
|
||||||
int m_orig_kbmode;
|
|
||||||
};
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
QT_END_HEADER
|
QT_END_HEADER
|
||||||
|
Loading…
Reference in New Issue
Block a user