2020-03-15 15:19:28 +00:00
|
|
|
/*
|
|
|
|
SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
|
2015-07-02 19:21:57 +00:00
|
|
|
|
2020-03-15 15:19:28 +00:00
|
|
|
SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
|
|
|
*/
|
2021-03-10 16:08:30 +00:00
|
|
|
#pragma once
|
2015-07-02 19:21:57 +00:00
|
|
|
|
2020-11-30 20:57:35 +00:00
|
|
|
#include <QPointF>
|
|
|
|
#include <QSizeF>
|
|
|
|
#include <QObject>
|
|
|
|
|
2020-04-29 14:56:38 +00:00
|
|
|
#include <KWaylandServer/kwaylandserver_export.h>
|
2015-07-02 19:21:57 +00:00
|
|
|
|
|
|
|
struct wl_resource;
|
|
|
|
|
2020-04-29 14:56:38 +00:00
|
|
|
namespace KWaylandServer
|
2015-07-02 19:21:57 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
class Display;
|
|
|
|
class FakeInputDevice;
|
2020-11-30 20:57:35 +00:00
|
|
|
class FakeInputDevicePrivate;
|
|
|
|
class FakeInputInterfacePrivate;
|
2015-07-02 19:21:57 +00:00
|
|
|
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* @brief Represents the Global for org_kde_kwin_fake_input interface.
|
|
|
|
*
|
|
|
|
* The fake input interface allows clients to send fake input events to the
|
|
|
|
* Wayland server. For the actual events it creates a FakeInputDevice. Whenever
|
|
|
|
* the FakeInputInterface creates a device the signal deviceCreated gets emitted.
|
|
|
|
*
|
|
|
|
* Accepting fake input events is a security risk. The server should make a
|
|
|
|
* dedicated decision about whether it wants to accept fake input events from a
|
|
|
|
* device. Because of that by default no events are forwarded to the server. The
|
|
|
|
* device needs to request authentication and the server must explicitly authenticate
|
|
|
|
* the device. The recommendation is that the server only accepts input for in some
|
|
|
|
* way trusted clients.
|
|
|
|
*
|
|
|
|
* @see FakeInputDevice
|
|
|
|
**/
|
2020-11-30 20:57:35 +00:00
|
|
|
class KWAYLANDSERVER_EXPORT FakeInputInterface : public QObject
|
2015-07-02 19:21:57 +00:00
|
|
|
{
|
|
|
|
Q_OBJECT
|
2020-12-09 20:13:19 +00:00
|
|
|
|
2015-07-02 19:21:57 +00:00
|
|
|
public:
|
2020-12-09 20:13:19 +00:00
|
|
|
explicit FakeInputInterface(Display *display, QObject *parent = nullptr);
|
2020-11-30 20:57:35 +00:00
|
|
|
~FakeInputInterface() override;
|
2015-07-02 19:21:57 +00:00
|
|
|
|
|
|
|
Q_SIGNALS:
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Signal emitted whenever a client bound the fake input @p device.
|
|
|
|
* @param device The created FakeInputDevice
|
|
|
|
**/
|
2020-04-29 14:56:38 +00:00
|
|
|
void deviceCreated(KWaylandServer::FakeInputDevice *device);
|
2015-07-02 19:21:57 +00:00
|
|
|
|
|
|
|
private:
|
2020-11-30 20:57:35 +00:00
|
|
|
QScopedPointer<FakeInputInterfacePrivate> d;
|
2015-07-02 19:21:57 +00:00
|
|
|
};
|
|
|
|
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* @brief Represents the Resource for a org_kde_kwin_fake_input interface.
|
|
|
|
*
|
|
|
|
* @see FakeInputInterface
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
class KWAYLANDSERVER_EXPORT FakeInputDevice : public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
public:
|
2020-11-30 20:57:35 +00:00
|
|
|
~FakeInputDevice() override;
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* @returns the native wl_resource.
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
wl_resource *resource();
|
|
|
|
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Authenticate this device to send events. If @p authenticated is @c true events are
|
|
|
|
* accepted, for @c false events are no longer accepted.
|
|
|
|
*
|
|
|
|
* @param authenticated Whether the FakeInputDevice should be considered authenticated
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
void setAuthentication(bool authenticated);
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* @returns whether the FakeInputDevice is authenticated and allowed to send events, default is @c false.
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
bool isAuthenticated() const;
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Request for authentication.
|
|
|
|
*
|
|
|
|
* The server might use the provided information to make a decision on whether the
|
|
|
|
* FakeInputDevice should get authenticated. It is recommended to not trust the data
|
|
|
|
* and to combine it with information from ClientConnection.
|
|
|
|
*
|
|
|
|
* @param application A textual description of the application
|
|
|
|
* @param reason A textual description of the reason why the application wants to send fake input events
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
void authenticationRequested(const QString &application, const QString &reason);
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Request a pointer motion by @p delta.
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
void pointerMotionRequested(const QSizeF &delta);
|
2019-01-09 15:16:36 +00:00
|
|
|
/**
|
|
|
|
* Request an absolute pointer motion to @p pos.
|
|
|
|
**/
|
|
|
|
void pointerMotionAbsoluteRequested(const QPointF &pos);
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Requests a pointer button pressed for @p button.
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
void pointerButtonPressRequested(quint32 button);
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Requests a pointer button release for @p button.
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
void pointerButtonReleaseRequested(quint32 button);
|
2015-09-10 11:36:42 +00:00
|
|
|
/**
|
|
|
|
* Requests a pointer axis for the given @p orientation by @p delta.
|
|
|
|
**/
|
2015-07-02 19:21:57 +00:00
|
|
|
void pointerAxisRequested(Qt::Orientation orientation, qreal delta);
|
2016-05-24 11:57:47 +00:00
|
|
|
/**
|
|
|
|
* Requests a touch down at @p pos and identified by @p id.
|
|
|
|
**/
|
|
|
|
void touchDownRequested(quint32 id, const QPointF &pos);
|
|
|
|
/**
|
|
|
|
* Requests a touch motion by @p pos and identified by @p id.
|
|
|
|
**/
|
|
|
|
void touchMotionRequested(quint32 id, const QPointF &pos);
|
|
|
|
/**
|
|
|
|
* Requests a touch up identified by @p id.
|
|
|
|
**/
|
|
|
|
void touchUpRequested(quint32 id);
|
|
|
|
/**
|
|
|
|
* Requests a touch cancel event.
|
|
|
|
**/
|
|
|
|
void touchCancelRequested();
|
|
|
|
/**
|
|
|
|
* Requests a touch frame event.
|
|
|
|
**/
|
|
|
|
void touchFrameRequested();
|
2019-09-07 20:47:46 +00:00
|
|
|
/**
|
|
|
|
* Requests a keyboard key pressed for @p key.
|
|
|
|
**/
|
|
|
|
void keyboardKeyPressRequested(quint32 key);
|
|
|
|
/**
|
|
|
|
* Requests a keyboard key release for @p key.
|
|
|
|
**/
|
|
|
|
void keyboardKeyReleaseRequested(quint32 key);
|
2015-07-02 19:21:57 +00:00
|
|
|
|
|
|
|
private:
|
2020-11-30 20:57:35 +00:00
|
|
|
friend class FakeInputInterfacePrivate;
|
|
|
|
FakeInputDevice(FakeInputInterface *parent, wl_resource *resource);
|
|
|
|
QScopedPointer<FakeInputDevicePrivate> d;
|
2015-07-02 19:21:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2020-04-29 14:56:38 +00:00
|
|
|
Q_DECLARE_METATYPE(KWaylandServer::FakeInputDevice*)
|