16#include <QAbstractEventDispatcher>
24 , m_timeStamp(XCB_TIME_CURRENT_TIME)
26 , m_hasXInput(xInputSupport)
30 m_resetTimeStampTimer.setSingleShot(
true);
31 connect(&m_resetTimeStampTimer, &QTimer::timeout,
this, &X11Cursor::resetTimeStamp);
33 m_mousePollingTimer.setInterval(50);
34 connect(&m_mousePollingTimer, &QTimer::timeout,
this, &X11Cursor::mousePolled);
37 connect(qApp->eventDispatcher(), &QAbstractEventDispatcher::aboutToBlock,
this, &X11Cursor::aboutToBlock);
43 m_xfixesFilter = std::make_unique<XFixesCursorEventFilter>(
this);
63 if (m_timeStamp != XCB_TIME_CURRENT_TIME && m_timeStamp ==
xTime()) {
67 m_timeStamp =
xTime();
69 if (pointer.isNull()) {
72 m_buttonMask = pointer->mask;
73 updatePos(QPointF(pointer->root_x, pointer->root_y));
74 m_resetTimeStampTimer.start(0);
77void X11Cursor::resetTimeStamp()
79 m_timeStamp = XCB_TIME_CURRENT_TIME;
82void X11Cursor::aboutToBlock()
93 m_mousePollingTimer.start();
100 m_mousePollingTimer.stop();
106 xcb_xfixes_select_cursor_input(
connection(),
rootWindow(), XCB_XFIXES_CURSOR_NOTIFY_MASK_DISPLAY_CURSOR);
114void X11Cursor::mousePolled()
117 static uint16_t lastMask = m_buttonMask;
119 if (lastPos !=
currentPos() || lastMask != m_buttonMask) {
124 lastMask = m_buttonMask;
139#include "moc_x11_standalone_cursor.cpp"
void mouseChanged(const QPointF &pos, const QPointF &oldpos, Qt::MouseButtons buttons, Qt::MouseButtons oldbuttons, Qt::KeyboardModifiers modifiers, Qt::KeyboardModifiers oldmodifiers)
bool isCursorTracking() const
void updatePos(const QPointF &pos)
const QPointF & currentPos() const
void cursorChanged()
Signal emitted when the cursor image changes.
void setMouse(Cursor *mouse)
void doStopMousePolling() override
void doStartMousePolling() override
void doStartCursorTracking() override
void notifyCursorChanged()
void doStopCursorTracking() override
X11Cursor(bool xInputSupport=false)
static Extensions * self()
KWIN_EXPORT xcb_window_t rootWindow()
Qt::MouseButtons x11ToQtMouseButtons(int state)
KWIN_EXPORT xcb_timestamp_t xTime()
KWIN_EXPORT xcb_connection_t * connection()
Qt::KeyboardModifiers x11ToQtKeyboardModifiers(int state)