diff options
author | Jan Arne Petersen <jan.petersen@kdab.com> | 2013-11-01 11:50:54 +0100 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@digia.com> | 2013-11-22 15:46:33 +0100 |
commit | 7333d506de325cebfa485393bae0141dca15cb06 (patch) | |
tree | bbaecf65671eaca0725fa92ed1ee22839b50ec80 /src/compositor/wayland_wrapper/qwlpointer.cpp | |
parent | 26c303e9f6ac741421d654c6a3d7528aca2e1858 (diff) | |
download | qtwayland-7333d506de325cebfa485393bae0141dca15cb06.tar.gz |
Improve grab support for QtWayland::Pointer
Track time and serial for press/release events which could result in a
grab.
Change-Id: I0d56e66ad02ecc9bd5ed234db646e9e96ccae399
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Diffstat (limited to 'src/compositor/wayland_wrapper/qwlpointer.cpp')
-rw-r--r-- | src/compositor/wayland_wrapper/qwlpointer.cpp | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/src/compositor/wayland_wrapper/qwlpointer.cpp b/src/compositor/wayland_wrapper/qwlpointer.cpp index e1e1305e..b459472a 100644 --- a/src/compositor/wayland_wrapper/qwlpointer.cpp +++ b/src/compositor/wayland_wrapper/qwlpointer.cpp @@ -86,6 +86,9 @@ Pointer::Pointer(Compositor *compositor, InputDevice *seat) , m_compositor(compositor) , m_seat(seat) , m_grab(this) + , m_grabButton() + , m_grabTime() + , m_grabSerial() , m_position(100, 100) , m_focus() , m_focusResource() @@ -146,6 +149,26 @@ bool Pointer::buttonPressed() const return m_buttonCount > 0; } +PointerGrabber *Pointer::currentGrab() const +{ + return m_grab; +} + +Qt::MouseButton Pointer::grabButton() const +{ + return m_grabButton; +} + +uint32_t Pointer::grabTime() const +{ + return m_grabTime; +} + +uint32_t Pointer::grabSerial() const +{ + return m_grabSerial; +} + Surface *Pointer::focusSurface() const { return m_focus; @@ -161,6 +184,16 @@ QPointF Pointer::position() const return m_position; } +QPointF Pointer::currentPosition() const +{ + return m_currentPoint; +} + +QtWaylandServer::wl_pointer::Resource *Pointer::focusResource() const +{ + return m_focusResource; +} + void Pointer::pointer_destroy_resource(wl_pointer::Resource *resource) { if (m_focusResource == resource) @@ -177,20 +210,36 @@ void Pointer::setMouseFocus(Surface *surface, const QPointF &localPos, const QPo m_grab->focus(); } +void Pointer::sendButton(uint32_t time, Qt::MouseButton button, uint32_t state) +{ + uint32_t serial = wl_display_next_serial(m_compositor->wl_display()); + send_button(m_focusResource->handle, serial, time, toWaylandButton(button), state); +} + void Pointer::sendMousePressEvent(Qt::MouseButton button, const QPointF &localPos, const QPointF &globalPos) { sendMouseMoveEvent(localPos, globalPos); - m_buttonCount++; uint32_t time = m_compositor->currentTimeMsecs(); + if (m_buttonCount == 0) { + m_grabButton = button; + m_grabTime = time; + } + m_buttonCount++; m_grab->button(time, button, WL_POINTER_BUTTON_STATE_PRESSED); + + if (m_buttonCount == 1) + m_grabSerial = wl_display_get_serial(m_compositor->wl_display()); } void Pointer::sendMouseReleaseEvent(Qt::MouseButton button, const QPointF &localPos, const QPointF &globalPos) { sendMouseMoveEvent(localPos, globalPos); - m_buttonCount--; uint32_t time = m_compositor->currentTimeMsecs(); + m_buttonCount--; m_grab->button(time, button, WL_POINTER_BUTTON_STATE_RELEASED); + + if (m_buttonCount == 1) + m_grabSerial = wl_display_get_serial(m_compositor->wl_display()); } void Pointer::sendMouseMoveEvent(const QPointF &localPos, const QPointF &globalPos) @@ -234,8 +283,7 @@ void Pointer::motion(uint32_t time) void Pointer::button(uint32_t time, Qt::MouseButton button, uint32_t state) { if (m_focusResource) { - uint32_t serial = wl_display_next_serial(m_compositor->wl_display()); - send_button(m_focusResource->handle, serial, time, toWaylandButton(button), state); + sendButton(time, button, state); } if (!buttonPressed() && state == WL_POINTER_BUTTON_STATE_RELEASED) |