Commit 6cdb8101 authored by Vlad Zahorodnii's avatar Vlad Zahorodnii
Browse files

Port pointer-gestures-v1 interface to the new design

parent c69afd76
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
#include "../../src/server/display.h" #include "../../src/server/display.h"
#include "../../src/server/keyboard_interface.h" #include "../../src/server/keyboard_interface.h"
#include "../../src/server/pointer_interface.h" #include "../../src/server/pointer_interface.h"
#include "../../src/server/pointergestures_interface.h" #include "../../src/server/pointergestures_v1_interface.h"
#include "../../src/server/relativepointer_v1_interface.h" #include "../../src/server/relativepointer_v1_interface.h"
#include "../../src/server/seat_interface.h" #include "../../src/server/seat_interface.h"
#include "../../src/server/subcompositor_interface.h" #include "../../src/server/subcompositor_interface.h"
...@@ -84,7 +84,7 @@ private: ...@@ -84,7 +84,7 @@ private:
KWaylandServer::SeatInterface *m_seatInterface; KWaylandServer::SeatInterface *m_seatInterface;
KWaylandServer::SubCompositorInterface *m_subCompositorInterface; KWaylandServer::SubCompositorInterface *m_subCompositorInterface;
KWaylandServer::RelativePointerManagerV1Interface *m_relativePointerManagerV1Interface; KWaylandServer::RelativePointerManagerV1Interface *m_relativePointerManagerV1Interface;
KWaylandServer::PointerGesturesInterface *m_pointerGesturesInterface; KWaylandServer::PointerGesturesV1Interface *m_pointerGesturesV1Interface;
KWayland::Client::ConnectionThread *m_connection; KWayland::Client::ConnectionThread *m_connection;
KWayland::Client::Compositor *m_compositor; KWayland::Client::Compositor *m_compositor;
KWayland::Client::Seat *m_seat; KWayland::Client::Seat *m_seat;
...@@ -105,7 +105,7 @@ TestWaylandSeat::TestWaylandSeat(QObject *parent) ...@@ -105,7 +105,7 @@ TestWaylandSeat::TestWaylandSeat(QObject *parent)
, m_seatInterface(nullptr) , m_seatInterface(nullptr)
, m_subCompositorInterface(nullptr) , m_subCompositorInterface(nullptr)
, m_relativePointerManagerV1Interface(nullptr) , m_relativePointerManagerV1Interface(nullptr)
, m_pointerGesturesInterface(nullptr) , m_pointerGesturesV1Interface(nullptr)
, m_connection(nullptr) , m_connection(nullptr)
, m_compositor(nullptr) , m_compositor(nullptr)
, m_seat(nullptr) , m_seat(nullptr)
...@@ -133,10 +133,7 @@ void TestWaylandSeat::init() ...@@ -133,10 +133,7 @@ void TestWaylandSeat::init()
QVERIFY(m_subCompositorInterface); QVERIFY(m_subCompositorInterface);
m_relativePointerManagerV1Interface = m_display->createRelativePointerManagerV1(m_display); m_relativePointerManagerV1Interface = m_display->createRelativePointerManagerV1(m_display);
m_pointerGesturesInterface = m_display->createPointerGestures(PointerGesturesInterfaceVersion::UnstableV1, m_display); m_pointerGesturesV1Interface = m_display->createPointerGesturesV1(m_display);
QVERIFY(m_pointerGesturesInterface);
m_pointerGesturesInterface->create();
QVERIFY(m_pointerGesturesInterface->isValid());
// setup connection // setup connection
m_connection = new KWayland::Client::ConnectionThread; m_connection = new KWayland::Client::ConnectionThread;
...@@ -251,8 +248,8 @@ void TestWaylandSeat::cleanup() ...@@ -251,8 +248,8 @@ void TestWaylandSeat::cleanup()
delete m_relativePointerManagerV1Interface; delete m_relativePointerManagerV1Interface;
m_relativePointerManagerV1Interface = nullptr; m_relativePointerManagerV1Interface = nullptr;
delete m_pointerGesturesInterface; delete m_pointerGesturesV1Interface;
m_pointerGesturesInterface = nullptr; m_pointerGesturesV1Interface = nullptr;
delete m_display; delete m_display;
m_display = nullptr; m_display = nullptr;
...@@ -1737,7 +1734,7 @@ void TestWaylandSeat::testDestroy() ...@@ -1737,7 +1734,7 @@ void TestWaylandSeat::testDestroy()
m_seatInterface = nullptr; m_seatInterface = nullptr;
m_subCompositorInterface = nullptr; m_subCompositorInterface = nullptr;
m_relativePointerManagerV1Interface = nullptr; m_relativePointerManagerV1Interface = nullptr;
m_pointerGesturesInterface = nullptr; m_pointerGesturesV1Interface = nullptr;
QVERIFY(connectionDiedSpy.wait()); QVERIFY(connectionDiedSpy.wait());
// now the seat should be destroyed; // now the seat should be destroyed;
......
...@@ -39,8 +39,7 @@ set(SERVER_LIB_SRCS ...@@ -39,8 +39,7 @@ set(SERVER_LIB_SRCS
pointer_interface.cpp pointer_interface.cpp
pointerconstraints_interface.cpp pointerconstraints_interface.cpp
pointerconstraints_interface_v1.cpp pointerconstraints_interface_v1.cpp
pointergestures_interface.cpp pointergestures_v1_interface.cpp
pointergestures_interface_v1.cpp
primaryselectiondevice_v1_interface.cpp primaryselectiondevice_v1_interface.cpp
primaryselectiondevicemanager_v1_interface.cpp primaryselectiondevicemanager_v1_interface.cpp
primaryselectionoffer_v1_interface.cpp primaryselectionoffer_v1_interface.cpp
...@@ -171,7 +170,7 @@ ecm_add_qtwayland_server_protocol(SERVER_LIB_SRCS ...@@ -171,7 +170,7 @@ ecm_add_qtwayland_server_protocol(SERVER_LIB_SRCS
BASENAME text-input-unstable-v3 BASENAME text-input-unstable-v3
) )
ecm_add_wayland_server_protocol(SERVER_LIB_SRCS ecm_add_qtwayland_server_protocol(SERVER_LIB_SRCS
PROTOCOL ${WaylandProtocols_DATADIR}/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml PROTOCOL ${WaylandProtocols_DATADIR}/unstable/pointer-gestures/pointer-gestures-unstable-v1.xml
BASENAME pointer-gestures-unstable-v1 BASENAME pointer-gestures-unstable-v1
) )
...@@ -411,7 +410,7 @@ set(SERVER_LIB_HEADERS ...@@ -411,7 +410,7 @@ set(SERVER_LIB_HEADERS
plasmawindowmanagement_interface.h plasmawindowmanagement_interface.h
pointer_interface.h pointer_interface.h
pointerconstraints_interface.h pointerconstraints_interface.h
pointergestures_interface.h pointergestures_v1_interface.h
primaryselectiondevicemanager_v1_interface.h primaryselectiondevicemanager_v1_interface.h
region_interface.h region_interface.h
relativepointer_v1_interface.h relativepointer_v1_interface.h
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#include "plasmavirtualdesktop_interface.h" #include "plasmavirtualdesktop_interface.h"
#include "plasmawindowmanagement_interface.h" #include "plasmawindowmanagement_interface.h"
#include "pointerconstraints_interface_p.h" #include "pointerconstraints_interface_p.h"
#include "pointergestures_interface_p.h" #include "pointergestures_v1_interface.h"
#include "primaryselectiondevicemanager_v1_interface.h" #include "primaryselectiondevicemanager_v1_interface.h"
#include "relativepointer_v1_interface.h" #include "relativepointer_v1_interface.h"
#include "seat_interface.h" #include "seat_interface.h"
...@@ -373,14 +373,9 @@ RelativePointerManagerV1Interface *Display::createRelativePointerManagerV1(QObje ...@@ -373,14 +373,9 @@ RelativePointerManagerV1Interface *Display::createRelativePointerManagerV1(QObje
return r; return r;
} }
PointerGesturesInterface *Display::createPointerGestures(const PointerGesturesInterfaceVersion &version, QObject *parent) PointerGesturesV1Interface *Display::createPointerGesturesV1(QObject *parent)
{ {
PointerGesturesInterface *p = nullptr; PointerGesturesV1Interface *p = new PointerGesturesV1Interface(this, parent);
switch (version) {
case PointerGesturesInterfaceVersion::UnstableV1:
p = new PointerGesturesUnstableV1Interface(this, parent);
break;
}
connect(this, &Display::aboutToTerminate, p, [p] { delete p; }); connect(this, &Display::aboutToTerminate, p, [p] { delete p; });
return p; return p;
} }
......
...@@ -58,8 +58,7 @@ class TextInputManagerV2Interface; ...@@ -58,8 +58,7 @@ class TextInputManagerV2Interface;
class TextInputManagerV3Interface; class TextInputManagerV3Interface;
class XdgShellInterface; class XdgShellInterface;
class RelativePointerManagerV1Interface; class RelativePointerManagerV1Interface;
enum class PointerGesturesInterfaceVersion; class PointerGesturesV1Interface;
class PointerGesturesInterface;
enum class PointerConstraintsInterfaceVersion; enum class PointerConstraintsInterfaceVersion;
class PointerConstraintsInterface; class PointerConstraintsInterface;
class XdgForeignV2Interface; class XdgForeignV2Interface;
...@@ -221,12 +220,12 @@ public: ...@@ -221,12 +220,12 @@ public:
RelativePointerManagerV1Interface *createRelativePointerManagerV1(QObject *parent = nullptr); RelativePointerManagerV1Interface *createRelativePointerManagerV1(QObject *parent = nullptr);
/** /**
* Creates the PointerGesturesInterface in interface @p version * Creates the PointerGesturesV1Interface
* *
* @returns The created manager object * @returns The created manager object
* @since 5.29 * @since 5.29
**/ **/
PointerGesturesInterface *createPointerGestures(const PointerGesturesInterfaceVersion &version, QObject *parent = nullptr); PointerGesturesV1Interface *createPointerGesturesV1(QObject *parent = nullptr);
/** /**
* Creates the PointerConstraintsInterface in interface @p version * Creates the PointerConstraintsInterface in interface @p version
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "pointer_interface.h" #include "pointer_interface.h"
#include "pointer_interface_p.h" #include "pointer_interface_p.h"
#include "pointerconstraints_interface.h" #include "pointerconstraints_interface.h"
#include "pointergestures_interface_p.h" #include "pointergestures_v1_interface_p.h"
#include "resource_p.h" #include "resource_p.h"
#include "relativepointer_v1_interface_p.h" #include "relativepointer_v1_interface_p.h"
#include "seat_interface.h" #include "seat_interface.h"
...@@ -76,24 +76,28 @@ void PointerInterface::Private::unregisterRelativePointerV1(RelativePointerV1Int ...@@ -76,24 +76,28 @@ void PointerInterface::Private::unregisterRelativePointerV1(RelativePointerV1Int
relativePointersV1.removeOne(relativePointer); relativePointersV1.removeOne(relativePointer);
} }
void PointerInterface::Private::registerSwipeGesture(PointerSwipeGestureInterface *gesture) void PointerInterface::Private::registerSwipeGestureV1(PointerSwipeGestureV1Interface *gesture)
{ {
swipeGestures << gesture; Q_ASSERT(!swipeGesturesV1.contains(gesture));
QObject::connect(gesture, &QObject::destroyed, q, swipeGesturesV1.append(gesture);
[this, gesture] {
swipeGestures.removeOne(gesture);
}
);
} }
void PointerInterface::Private::registerPinchGesture(PointerPinchGestureInterface *gesture) void PointerInterface::Private::unregisterSwipeGestureV1(PointerSwipeGestureV1Interface *gesture)
{ {
pinchGestures << gesture; Q_ASSERT(swipeGesturesV1.contains(gesture));
QObject::connect(gesture, &QObject::destroyed, q, swipeGesturesV1.removeOne(gesture);
[this, gesture] { }
pinchGestures.removeOne(gesture);
} void PointerInterface::Private::registerPinchGestureV1(PointerPinchGestureV1Interface *gesture)
); {
Q_ASSERT(!pinchGesturesV1.contains(gesture));
pinchGesturesV1.append(gesture);
}
void PointerInterface::Private::unregisterPinchGestureV1(PointerPinchGestureV1Interface *gesture)
{
Q_ASSERT(pinchGesturesV1.contains(gesture));
pinchGesturesV1.removeOne(gesture);
} }
namespace { namespace {
...@@ -118,81 +122,69 @@ void PointerInterface::Private::sendEnter(SurfaceInterface *surface, const QPoin ...@@ -118,81 +122,69 @@ void PointerInterface::Private::sendEnter(SurfaceInterface *surface, const QPoin
void PointerInterface::Private::startSwipeGesture(quint32 serial, quint32 fingerCount) void PointerInterface::Private::startSwipeGesture(quint32 serial, quint32 fingerCount)
{ {
if (swipeGestures.isEmpty()) { if (!focusedSurface) {
return; return;
} }
for (auto it = swipeGestures.constBegin(), end = swipeGestures.constEnd(); it != end; it++) { for (PointerSwipeGestureV1Interface *gesture : qAsConst(swipeGesturesV1)) {
(*it)->start(serial, fingerCount); gesture->send_begin(serial, seat->timestamp(), focusedSurface->resource(), fingerCount);
} }
} }
void PointerInterface::Private::updateSwipeGesture(const QSizeF &delta) void PointerInterface::Private::updateSwipeGesture(const QSizeF &delta)
{ {
if (swipeGestures.isEmpty()) { for (PointerSwipeGestureV1Interface *gesture : qAsConst(swipeGesturesV1)) {
return; gesture->send_update(seat->timestamp(),
} wl_fixed_from_double(delta.width()),
for (auto it = swipeGestures.constBegin(), end = swipeGestures.constEnd(); it != end; it++) { wl_fixed_from_double(delta.height()));
(*it)->update(delta);
} }
} }
void PointerInterface::Private::endSwipeGesture(quint32 serial) void PointerInterface::Private::endSwipeGesture(quint32 serial)
{ {
if (swipeGestures.isEmpty()) { for (PointerSwipeGestureV1Interface *gesture : qAsConst(swipeGesturesV1)) {
return; gesture->send_end(serial, seat->timestamp(), false);
}
for (auto it = swipeGestures.constBegin(), end = swipeGestures.constEnd(); it != end; it++) {
(*it)->end(serial);
} }
} }
void PointerInterface::Private::cancelSwipeGesture(quint32 serial) void PointerInterface::Private::cancelSwipeGesture(quint32 serial)
{ {
if (swipeGestures.isEmpty()) { for (PointerSwipeGestureV1Interface *gesture : qAsConst(swipeGesturesV1)) {
return; gesture->send_end(serial, seat->timestamp(), true);
}
for (auto it = swipeGestures.constBegin(), end = swipeGestures.constEnd(); it != end; it++) {
(*it)->cancel(serial);
} }
} }
void PointerInterface::Private::startPinchGesture(quint32 serial, quint32 fingerCount) void PointerInterface::Private::startPinchGesture(quint32 serial, quint32 fingerCount)
{ {
if (pinchGestures.isEmpty()) { if (!focusedSurface) {
return; return;
} }
for (auto it = pinchGestures.constBegin(), end = pinchGestures.constEnd(); it != end; it++) { for (PointerPinchGestureV1Interface *gesture : qAsConst(pinchGesturesV1)) {
(*it)->start(serial, fingerCount); gesture->send_begin(serial, seat->timestamp(), focusedSurface->resource(), fingerCount);
} }
} }
void PointerInterface::Private::updatePinchGesture(const QSizeF &delta, qreal scale, qreal rotation) void PointerInterface::Private::updatePinchGesture(const QSizeF &delta, qreal scale, qreal rotation)
{ {
if (pinchGestures.isEmpty()) { for (PointerPinchGestureV1Interface *gesture : qAsConst(pinchGesturesV1)) {
return; gesture->send_update(seat->timestamp(),
} wl_fixed_from_double(delta.width()),
for (auto it = pinchGestures.constBegin(), end = pinchGestures.constEnd(); it != end; it++) { wl_fixed_from_double(delta.height()),
(*it)->update(delta, scale, rotation); wl_fixed_from_double(scale),
wl_fixed_from_double(rotation));
} }
} }
void PointerInterface::Private::endPinchGesture(quint32 serial) void PointerInterface::Private::endPinchGesture(quint32 serial)
{ {
if (pinchGestures.isEmpty()) { for (PointerPinchGestureV1Interface *gesture : qAsConst(pinchGesturesV1)) {
return; gesture->send_end(serial, seat->timestamp(), false);
}
for (auto it = pinchGestures.constBegin(), end = pinchGestures.constEnd(); it != end; it++) {
(*it)->end(serial);
} }
} }
void PointerInterface::Private::cancelPinchGesture(quint32 serial) void PointerInterface::Private::cancelPinchGesture(quint32 serial)
{ {
if (pinchGestures.isEmpty()) { for (PointerPinchGestureV1Interface *gesture : qAsConst(pinchGesturesV1)) {
return; gesture->send_end(serial, seat->timestamp(), true);
}
for (auto it = pinchGestures.constBegin(), end = pinchGestures.constEnd(); it != end; it++) {
(*it)->cancel(serial);
} }
} }
......
...@@ -14,7 +14,6 @@ namespace KWaylandServer ...@@ -14,7 +14,6 @@ namespace KWaylandServer
{ {
class Cursor; class Cursor;
class PointerGesturesUnstableV1Interface;
class SeatInterface; class SeatInterface;
class SurfaceInterface; class SurfaceInterface;
...@@ -63,7 +62,8 @@ private: ...@@ -63,7 +62,8 @@ private:
void relativeMotion(const QSizeF &delta, const QSizeF &deltaNonAccelerated, quint64 microseconds); void relativeMotion(const QSizeF &delta, const QSizeF &deltaNonAccelerated, quint64 microseconds);
friend class SeatInterface; friend class SeatInterface;
friend class RelativePointerV1Interface; friend class RelativePointerV1Interface;
friend class PointerGesturesUnstableV1Interface; friend class PointerPinchGestureV1Interface;
friend class PointerSwipeGestureV1Interface;
explicit PointerInterface(SeatInterface *parent, wl_resource *parentResource); explicit PointerInterface(SeatInterface *parent, wl_resource *parentResource);
class Private; class Private;
Private *d_func() const; Private *d_func() const;
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
namespace KWaylandServer namespace KWaylandServer
{ {
class PointerPinchGestureInterface; class PointerPinchGestureV1Interface;
class PointerSwipeGestureInterface; class PointerSwipeGestureV1Interface;
class RelativePointerV1Interface; class RelativePointerV1Interface;
class PointerInterface::Private : public Resource::Private class PointerInterface::Private : public Resource::Private
...@@ -28,18 +28,20 @@ public: ...@@ -28,18 +28,20 @@ public:
QMetaObject::Connection destroyConnection; QMetaObject::Connection destroyConnection;
Cursor *cursor = nullptr; Cursor *cursor = nullptr;
QVector<RelativePointerV1Interface *> relativePointersV1; QVector<RelativePointerV1Interface *> relativePointersV1;
QVector<PointerSwipeGestureInterface*> swipeGestures; QVector<PointerSwipeGestureV1Interface *> swipeGesturesV1;
QVector<PointerPinchGestureInterface*> pinchGestures; QVector<PointerPinchGestureV1Interface *> pinchGesturesV1;
void sendLeave(SurfaceInterface *surface, quint32 serial); void sendLeave(SurfaceInterface *surface, quint32 serial);
void sendEnter(SurfaceInterface *surface, const QPointF &parentSurfacePosition, quint32 serial); void sendEnter(SurfaceInterface *surface, const QPointF &parentSurfacePosition, quint32 serial);
void sendFrame(); void sendFrame();
void registerRelativePointerV1(RelativePointerV1Interface *relativePointer); void registerRelativePointerV1(RelativePointerV1Interface *relativePointer);
void registerSwipeGesture(PointerSwipeGestureInterface *gesture); void registerSwipeGestureV1(PointerSwipeGestureV1Interface *gesture);
void registerPinchGesture(PointerPinchGestureInterface *gesture); void registerPinchGestureV1(PointerPinchGestureV1Interface *gesture);
void unregisterRelativePointerV1(RelativePointerV1Interface *relativePointer); void unregisterRelativePointerV1(RelativePointerV1Interface *relativePointer);
void unregisterSwipeGestureV1(PointerSwipeGestureV1Interface *gesture);
void unregisterPinchGestureV1(PointerPinchGestureV1Interface *gesture);
void startSwipeGesture(quint32 serial, quint32 fingerCount); void startSwipeGesture(quint32 serial, quint32 fingerCount);
void updateSwipeGesture(const QSizeF &delta); void updateSwipeGesture(const QSizeF &delta);
......
/*
SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "pointergestures_interface_p.h"
namespace KWaylandServer
{
PointerGesturesInterface::Private::Private(PointerGesturesInterfaceVersion interfaceVersion, PointerGesturesInterface *q, Display *d, const wl_interface *interface, quint32 version)
: Global::Private(d, interface, version)
, interfaceVersion(interfaceVersion)
, q(q)
{
}
PointerGesturesInterface::PointerGesturesInterface(Private *d, QObject *parent)
: Global(d, parent)
{
}
PointerGesturesInterface::~PointerGesturesInterface() = default;
PointerGesturesInterfaceVersion PointerGesturesInterface::interfaceVersion() const
{
Q_D();
return d->interfaceVersion;
}
PointerGesturesInterface::Private *PointerGesturesInterface::d_func() const
{
return reinterpret_cast<Private*>(d.data());
}
PointerSwipeGestureInterface::Private::Private(PointerSwipeGestureInterface *q, Global *c, wl_resource *parentResource, const wl_interface *interface, const void *implementation, PointerInterface *pointer)
: Resource::Private(q, c, parentResource, interface, implementation)
, pointer(pointer)
{
}
PointerSwipeGestureInterface::Private::~Private()
{
if (resource) {
wl_resource_destroy(resource);
resource = nullptr;
}
}
PointerSwipeGestureInterface::PointerSwipeGestureInterface(Private *p, QObject *parent)
: Resource(p, parent)
{
}
PointerSwipeGestureInterface::~PointerSwipeGestureInterface() = default;
PointerSwipeGestureInterface::Private *PointerSwipeGestureInterface::d_func() const
{
return reinterpret_cast<Private*>(d.data());
}
PointerPinchGestureInterface::Private::Private(PointerPinchGestureInterface *q, Global *c, wl_resource *parentResource, const wl_interface *interface, const void *implementation, PointerInterface *pointer)
: Resource::Private(q, c, parentResource, interface, implementation)
, pointer(pointer)
{
}
PointerPinchGestureInterface::Private::~Private()
{
if (resource) {
wl_resource_destroy(resource);
resource = nullptr;
}
}
PointerPinchGestureInterface::PointerPinchGestureInterface(Private *p, QObject *parent)
: Resource(p, parent)
{
}
PointerPinchGestureInterface::~PointerPinchGestureInterface() = default;
PointerPinchGestureInterface::Private *PointerPinchGestureInterface::d_func() const
{
return reinterpret_cast<Private*>(d.data());
}
}
/*
SPDX-FileCopyrightText: 2016 Martin Gräßlin <mgraesslin@kde.org>
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#ifndef KWAYLAND_SERVER_POINTERGESTURES_INTERFACE_P_H
#define KWAYLAND_SERVER_POINTERGESTURES_INTERFACE_P_H
#include "pointergestures_interface.h"
#include "resource_p.h"
#include "global_p.h"
namespace KWaylandServer
{
class PointerInterface;
class PointerGesturesInterface::Private : public Global::Private
{
public:
PointerGesturesInterfaceVersion interfaceVersion;
protected:
Private(PointerGesturesInterfaceVersion interfaceVersion, PointerGesturesInterface *q, Display *d, const wl_interface *interface, quint32 version);
PointerGesturesInterface *q;
};
class PointerGesturesUnstableV1Interface : public PointerGesturesInterface
{
Q_OBJECT
public:
explicit PointerGesturesUnstableV1Interface(Display *display, QObject *parent = nullptr);
virtual ~PointerGesturesUnstableV1Interface();
private:
class Private;
};