#include <QObject>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformscreen.h>
-#include <QWindowSystemInterface>
+#include <qpa/qwindowsysteminterface.h>
#include <wayland-client.h>
public:
QWaylandInputDevice(QWaylandDisplay *display, uint32_t id);
~QWaylandInputDevice();
- void attach(QWaylandBuffer *buffer, int x, int y);
+
+ uint32_t capabilities() const { return mCaps; }
+
+ struct wl_seat *wl_seat() const { return mSeat; }
+
+ void setCursor(wl_surface *surface, int x, int y);
void handleWindowDestroyed(QWaylandWindow *window);
- struct wl_input_device *wl_input_device() const { return mInputDevice; }
void setTransferDevice(struct wl_data_device *device);
struct wl_data_device *transferDevice() const;
- struct wl_input_device *handle() const;
-
void removeMouseButtonFromState(Qt::MouseButton button);
+
private:
QWaylandDisplay *mQDisplay;
struct wl_display *mDisplay;
- struct wl_input_device *mInputDevice;
+
+ struct wl_seat *mSeat;
+ uint32_t mCaps;
+
+ struct {
+ struct wl_pointer *pointer;
+ struct wl_keyboard *keyboard;
+ struct wl_touch *touch;
+ } mDeviceInterfaces;
+
struct wl_data_device *mTransferDevice;
QWaylandWindow *mPointerFocus;
QWaylandWindow *mKeyboardFocus;
QWaylandWindow *mTouchFocus;
- static const struct wl_input_device_listener inputDeviceListener;
+
Qt::MouseButtons mButtons;
- QPoint mSurfacePos;
- QPoint mGlobalPos;
- Qt::KeyboardModifiers mModifiers;
+ QPointF mSurfacePos;
+ QPointF mGlobalPos;
uint32_t mTime;
- static void inputHandleMotion(void *data,
- struct wl_input_device *input_device,
- uint32_t time,
- int32_t sx, int32_t sy);
- static void inputHandleButton(void *data,
- struct wl_input_device *input_device,
- uint32_t serial, uint32_t time,
- uint32_t button, uint32_t state);
- static void inputHandleAxis(void *data,
- struct wl_input_device *wl_input_device,
- uint32_t time,
- uint32_t axis,
- int32_t value);
- static void inputHandleKey(void *data,
- struct wl_input_device *input_device,
+ static const struct wl_seat_listener seatListener;
+
+ static void seat_capabilities(void *data,
+ struct wl_seat *seat,
+ uint32_t caps);
+
+ static const struct wl_pointer_listener pointerListener;
+
+ static void pointer_enter(void *data,
+ struct wl_pointer *pointer,
+ uint32_t time, struct wl_surface *surface,
+ wl_fixed_t sx, wl_fixed_t sy);
+ static void pointer_leave(void *data,
+ struct wl_pointer *pointer,
+ uint32_t time, struct wl_surface *surface);
+ static void pointer_motion(void *data,
+ struct wl_pointer *pointer,
+ uint32_t time,
+ wl_fixed_t sx, wl_fixed_t sy);
+ static void pointer_button(void *data,
+ struct wl_pointer *pointer,
uint32_t serial, uint32_t time,
- uint32_t key, uint32_t state);
- static void inputHandlePointerEnter(void *data,
- struct wl_input_device *input_device,
- uint32_t time, struct wl_surface *surface,
- int32_t sx, int32_t sy);
- static void inputHandlePointerLeave(void *data,
- struct wl_input_device *input_device,
- uint32_t time, struct wl_surface *surface);
- static void inputHandleKeyboardEnter(void *data,
- struct wl_input_device *input_device,
- uint32_t time,
- struct wl_surface *surface,
- struct wl_array *keys);
- static void inputHandleKeyboardLeave(void *data,
- struct wl_input_device *input_device,
- uint32_t time,
- struct wl_surface *surface);
- static void inputHandleTouchDown(void *data,
- struct wl_input_device *wl_input_device,
- uint32_t serial,
- uint32_t time,
- struct wl_surface *surface,
- int id,
- int x,
- int y);
- static void inputHandleTouchUp(void *data,
- struct wl_input_device *wl_input_device,
+ uint32_t button, uint32_t state);
+ static void pointer_axis(void *data,
+ struct wl_pointer *pointer,
+ uint32_t time,
+ uint32_t axis,
+ wl_fixed_t value);
+
+ static const struct wl_keyboard_listener keyboardListener;
+
+ static void keyboard_keymap(void *data,
+ struct wl_keyboard *keyboard,
+ uint32_t format,
+ int32_t fd,
+ uint32_t size);
+ static void keyboard_enter(void *data,
+ struct wl_keyboard *keyboard,
+ uint32_t time,
+ struct wl_surface *surface,
+ struct wl_array *keys);
+ static void keyboard_leave(void *data,
+ struct wl_keyboard *keyboard,
+ uint32_t time,
+ struct wl_surface *surface);
+ static void keyboard_key(void *data,
+ struct wl_keyboard *keyboard,
+ uint32_t serial, uint32_t time,
+ uint32_t key, uint32_t state);
+ static void keyboard_modifiers(void *data,
+ struct wl_keyboard *keyboard,
uint32_t serial,
- uint32_t time,
- int id);
- static void inputHandleTouchMotion(void *data,
- struct wl_input_device *wl_input_device,
- uint32_t time,
- int id,
- int x,
- int y);
- static void inputHandleTouchFrame(void *data,
- struct wl_input_device *wl_input_device);
- static void inputHandleTouchCancel(void *data,
- struct wl_input_device *wl_input_device);
-
- void handleTouchPoint(int id, int x, int y, Qt::TouchPointState state);
+ uint32_t mods_depressed,
+ uint32_t mods_latched,
+ uint32_t mods_locked,
+ uint32_t group);
+
+ static const struct wl_touch_listener touchListener;
+
+ static void touch_down(void *data,
+ struct wl_touch *touch,
+ uint32_t serial,
+ uint32_t time,
+ struct wl_surface *surface,
+ int32_t id,
+ wl_fixed_t x,
+ wl_fixed_t y);
+ static void touch_up(void *data,
+ struct wl_touch *touch,
+ uint32_t serial,
+ uint32_t time,
+ int32_t id);
+ static void touch_motion(void *data,
+ struct wl_touch *touch,
+ uint32_t time,
+ int32_t id,
+ wl_fixed_t x,
+ wl_fixed_t y);
+ static void touch_frame(void *data,
+ struct wl_touch *touch);
+ static void touch_cancel(void *data,
+ struct wl_touch *touch);
+
+ void handleTouchPoint(int id, double x, double y, Qt::TouchPointState state);
void handleTouchFrame();
QList<QWindowSystemInterface::TouchPoint> mTouchPoints;
QList<QWindowSystemInterface::TouchPoint> mPrevTouchPoints;