[wayland] Add support for pointer warping in InputRedirectionCursor

With libinput we do can support warping pointers, let's do it.
This commit is contained in:
Martin Gräßlin 2015-06-05 06:43:12 +02:00
parent 4ca3734d12
commit 74c111ef88
4 changed files with 27 additions and 1 deletions

View file

@ -536,8 +536,11 @@ InputRedirectionCursor::~InputRedirectionCursor()
void InputRedirectionCursor::doSetPos()
{
// no support for pointer warping - reset to true position
if (input()->supportsPointerWarping()) {
input()->warpPointer(currentPos());
}
slotPosChanged(input()->globalPointer());
emit posChanged(currentPos());
}
void InputRedirectionCursor::slotPosChanged(const QPointF &pos)

View file

@ -286,6 +286,7 @@ void InputRedirection::setupLibInput()
m_libInput = conn;
if (conn) {
conn->setup();
m_pointerWarping = true;
connect(conn, &LibInput::Connection::pointerButtonChanged, this, &InputRedirection::processPointerButton);
connect(conn, &LibInput::Connection::pointerAxisChanged, this, &InputRedirection::processPointerAxis);
connect(conn, &LibInput::Connection::keyChanged, this, &InputRedirection::processKeyboardKey);
@ -1046,4 +1047,11 @@ void InputRedirection::updatePointerAfterScreenChange()
emit globalPointerChanged(m_globalPointer);
}
void InputRedirection::warpPointer(const QPointF &pos)
{
if (m_pointerWarping) {
updatePointerPosition(pos);
}
}
} // namespace

11
input.h
View file

@ -139,6 +139,9 @@ public:
void cancelTouch();
void touchFrame();
bool supportsPointerWarping() const;
void warpPointer(const QPointF &pos);
static uint8_t toXPointerButton(uint32_t button);
static uint8_t toXPointerButton(PointerAxis axis, qreal delta);
@ -219,6 +222,8 @@ private:
LibInput::Connection *m_libInput = nullptr;
bool m_pointerWarping = false;
KWIN_SINGLETON(InputRedirection)
friend InputRedirection *input();
};
@ -282,6 +287,12 @@ void InputRedirection::registerShortcut(const QKeySequence &shortcut, QAction *a
connect(action, &QAction::triggered, receiver, slot);
}
inline
bool InputRedirection::supportsPointerWarping() const
{
return m_pointerWarping;
}
#if HAVE_XKB
inline
Qt::KeyboardModifiers Xkb::modifiers() const

View file

@ -38,3 +38,7 @@ Qt::KeyboardModifiers KWin::InputRedirection::keyboardModifiers() const
{
return Qt::NoModifier;
}
void KWin::InputRedirection::warpPointer(const QPointF&)
{
}