summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2012-02-13 10:23:41 +0100
committerJørgen Lind <jorgen.lind@nokia.com>2012-04-11 13:41:59 +0200
commitf984c7985ca26096dd293f18ba4d0b8271fdb4f5 (patch)
tree76293fd58a3124a2216585951ccb58fa47f14f9a /src/plugins/platforms/wayland/qwaylandinputdevice.cpp
parent921fefbf2a5e4078f4dff19c3c664cbbd9b751d1 (diff)
Client side decoration
Something is alot better than nothing :) This gives window decorations for QWidgets and other applications that use QBackingStore Change-Id: Ic748ee1df88236b20416029e20e26532f7fb4476 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
Diffstat (limited to 'src/plugins/platforms/wayland/qwaylandinputdevice.cpp')
-rw-r--r--src/plugins/platforms/wayland/qwaylandinputdevice.cpp49
1 files changed, 33 insertions, 16 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
index ac5ac8b17..2be5946b2 100644
--- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
+++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
@@ -121,12 +121,24 @@ struct wl_data_device *QWaylandInputDevice::transferDevice() const
return mTransferDevice;
}
+struct wl_input_device *QWaylandInputDevice::handle() const
+{
+ return mInputDevice;
+}
+
+void QWaylandInputDevice::removeMouseButtonFromState(Qt::MouseButton button)
+{
+ mButtons = mButtons & !button;
+}
+
void QWaylandInputDevice::inputHandleMotion(void *data,
struct wl_input_device *input_device,
uint32_t time,
int32_t surface_x, int32_t surface_y)
{
Q_UNUSED(input_device);
+ Q_UNUSED(surface_x);
+ Q_UNUSED(surface_y);
QWaylandInputDevice *inputDevice = (QWaylandInputDevice *) data;
QWaylandWindow *window = inputDevice->mPointerFocus;
@@ -142,9 +154,13 @@ void QWaylandInputDevice::inputHandleMotion(void *data,
inputDevice->mSurfacePos = pos;
inputDevice->mGlobalPos = global;
inputDevice->mTime = time;
- QWindowSystemInterface::handleMouseEvent(window->window(),
- time, pos, global,
- inputDevice->mButtons);
+
+ window->handleMouse(inputDevice,
+ time,
+ inputDevice->mSurfacePos,
+ inputDevice->mSurfacePos,
+ inputDevice->mButtons,
+ Qt::NoModifier);
}
void QWaylandInputDevice::inputHandleButton(void *data,
@@ -156,11 +172,6 @@ void QWaylandInputDevice::inputHandleButton(void *data,
QWaylandWindow *window = inputDevice->mPointerFocus;
Qt::MouseButton qt_button;
- if (window == NULL) {
- /* We destroyed the pointer focus surface, but the server
- * didn't get the message yet. */
- return;
- }
// translate from kernel (input.h) 'button' to corresponding Qt:MouseButton.
// The range of mouse values is 0x110 <= mouse_button < 0x120, the first Joystick button.
@@ -190,11 +201,15 @@ void QWaylandInputDevice::inputHandleButton(void *data,
inputDevice->mButtons &= ~qt_button;
inputDevice->mTime = time;
- QWindowSystemInterface::handleMouseEvent(window->window(),
- time,
- inputDevice->mSurfacePos,
- inputDevice->mGlobalPos,
- inputDevice->mButtons);
+
+ if (window) {
+ window->handleMouse(inputDevice,
+ time,
+ inputDevice->mSurfacePos,
+ inputDevice->mSurfacePos,
+ inputDevice->mButtons,
+ Qt::NoModifier);
+ }
}
void QWaylandInputDevice::inputHandleAxis(void *data,
@@ -351,7 +366,7 @@ void QWaylandInputDevice::inputHandlePointerEnter(void *data,
Q_ASSERT(surface);
QWaylandWindow *window = (QWaylandWindow *) wl_surface_get_user_data(surface);
- QWindowSystemInterface::handleEnterEvent(window->window());
+ window->handleMouseEnter();
inputDevice->mPointerFocus = window;
inputDevice->mTime = time;
@@ -368,8 +383,9 @@ void QWaylandInputDevice::inputHandlePointerLeave(void *data,
Q_ASSERT(surface);
QWaylandWindow *window = (QWaylandWindow *) wl_surface_get_user_data(surface);
- QWindowSystemInterface::handleLeaveEvent(window->window());
+ window->handleMouseLeave();
inputDevice->mPointerFocus = 0;
+ inputDevice->mButtons = Qt::NoButton;
inputDevice->mTime = time;
}
@@ -494,7 +510,8 @@ void QWaylandInputDevice::handleTouchPoint(int id, int x, int y, Qt::TouchPointS
return;
tp.area = QRectF(0, 0, 8, 8);
- tp.area.moveCenter(win->window()->mapToGlobal(QPoint(x, y)));
+ QMargins margins = win->frameMargins();
+ tp.area.moveCenter(win->window()->mapToGlobal(QPoint(x+margins.left(), y+margins.top())));
}
tp.state = state;