Suppress QWindowSystemInterface inclusion warnings.
[profile/ivi/qtwayland.git] / src / plugins / platforms / wayland / qwaylandinputdevice.h
index 251259b..1408263 100644 (file)
@@ -1,34 +1,34 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
 **
 ** This file is part of the plugins of the Qt Toolkit.
 **
 ** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
 ** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 **
 ** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
+** rights. These rights are described in the Nokia Qt LGPL Exception
 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
 **
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
 **
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
 **
 **
 **
 
 #include <QSocketNotifier>
 #include <QObject>
-#include <QtGui/QPlatformIntegration>
-#include <QtGui/QPlatformScreen>
+#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformscreen.h>
+#include <qpa/qwindowsysteminterface.h>
 
 #include <wayland-client.h>
 
+#ifndef QT_NO_WAYLAND_XKB
+struct xkb_context;
+struct xkb_keymap;
+struct xkb_state;
+#endif
+
 QT_BEGIN_NAMESPACE
 
 class QWaylandWindow;
+class QWaylandDisplay;
 
 class QWaylandInputDevice {
 public:
-    QWaylandInputDevice(struct wl_display *display, uint32_t id);
-    void attach(QWaylandBuffer *buffer, int x, int y);
+    QWaylandInputDevice(QWaylandDisplay *display, uint32_t id);
+    ~QWaylandInputDevice();
+
+    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;
+
+    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;
-    static const struct wl_input_device_listener inputDeviceListener;
+    QWaylandWindow *mTouchFocus;
+
     Qt::MouseButtons mButtons;
-    QPoint mSurfacePos;
-    QPoint mGlobalPos;
-    struct xkb_desc *mXkb;
-    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 x, int32_t y,
-                                 int32_t sx, int32_t sy);
-    static void inputHandleButton(void *data,
-                                 struct wl_input_device *input_device,
-                                 uint32_t time, uint32_t button, uint32_t state);
-    static void inputHandleKey(void *data,
-                              struct wl_input_device *input_device,
-                              uint32_t time, uint32_t key, uint32_t state);
-    static void inputHandlePointerFocus(void *data,
-                                       struct wl_input_device *input_device,
-                                       uint32_t time, struct wl_surface *surface,
-                                       int32_t x, int32_t y, int32_t sx, int32_t sy);
-    static void inputHandleKeyboardFocus(void *data,
-                                        struct wl_input_device *input_device,
-                                        uint32_t time,
-                                        struct wl_surface *surface,
-                                        struct wl_array *keys);
+    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 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 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;
+    QTouchDevice *mTouchDevice;
+
+#ifndef QT_NO_WAYLAND_XKB
+    xkb_context *mXkbContext;
+    xkb_keymap *mXkbMap;
+    xkb_state *mXkbState;
+#endif
+
+    friend class QWaylandTouchExtension;
+    friend class QWaylandQtKeyExtension;
 };
 
 QT_END_NAMESPACE