6#include <QSocketNotifier>
9#include <QLoggingCategory>
11#include <qpa/qwindowsysteminterface.h>
18using namespace Qt::StringLiterals;
22QTsLibMouseHandler::QTsLibMouseHandler(
const QString &key,
23 const QString &specification,
26 m_rawMode(!key.compare(
"TslibRaw"_L1, Qt::CaseInsensitive))
28 qCDebug(qLcTsLib) <<
"Initializing tslib plugin" << key << specification;
29 setObjectName(
"TSLib Mouse Handler"_L1);
31 m_dev = ts_setup(
nullptr, 1);
33 qErrnoWarning(errno,
"ts_setup() failed");
37#ifdef TSLIB_VERSION_EVENTPATH
38 qCDebug(qLcTsLib) <<
"tslib device is" << ts_get_eventpath(m_dev);
40 m_notify =
new QSocketNotifier(ts_fd(m_dev), QSocketNotifier::Read,
this);
41 connect(m_notify, &QSocketNotifier::activated,
this, &QTsLibMouseHandler::readMouseData);
50static bool get_sample(
struct tsdev *dev,
struct ts_sample *sample,
bool rawMode)
53 return (ts_read_raw(dev, sample, 1) == 1);
55 return (ts_read(dev, sample, 1) == 1);
63 bool pressed = sample.pressure;
68 if (sample.pressure == 0) {
77 if (dx*dx <= 4 && dy*dy <= 4 && pressed == m_pressed)
82 Qt::MouseButton button = pressed ^ m_pressed ? Qt::LeftButton : Qt::NoButton;
83 Qt::MouseButtons state = pressed ? Qt::LeftButton : Qt::NoButton;
84 QEvent::Type type = pressed ? (m_pressed ? QEvent::MouseMove : QEvent::MouseButtonPress)
85 : QEvent::MouseButtonRelease;
87 QWindowSystemInterface::handleMouseEvent(
nullptr, pos, pos, state, button, type);
97#include "moc_qtslib_p.cpp"
Q_STATIC_LOGGING_CATEGORY(lcAccessibilityCore, "qt.accessibility.core")
static bool get_sample(struct tsdev *dev, struct ts_sample *sample, bool rawMode)