Deskflow 1.22.0.197
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
PortalInputCapture.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2024 Symless Ltd.
5 * SPDX-FileCopyrightText: (C) 2022 Red Hat, Inc.
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include "mt/Thread.h"
12#include "platform/EiScreen.h"
13
14#include <glib.h>
15#include <libportal/inputcapture.h>
16#include <libportal/portal.h>
17#include <memory>
18
19namespace deskflow {
20
22{
23public:
24 PortalInputCapture(EiScreen *screen, IEventQueue *events);
26 void enable();
27 void disable();
28 void release();
29 void release(double x, double y);
30 bool is_active() const
31 {
32 return m_isActive;
33 }
34
35private:
36 void glibThread(void *);
37 gboolean timeoutHandler() const;
38 gboolean initSession();
39 void handleInitSession(GObject *object, GAsyncResult *res);
40 void handleSetPointerBarriers(const GObject *object, GAsyncResult *res);
41 void handleSessionClosed(XdpSession *session);
42 void handleDisabled(const XdpInputCaptureSession *session, const GVariant *option);
43 void handleActivated(const XdpInputCaptureSession *session, const std::uint32_t activationId, GVariant *options);
44 void
45 handleDeactivated(const XdpInputCaptureSession *session, const std::uint32_t activationId, const GVariant *options);
46 void handleZonesChanged(XdpInputCaptureSession *session, const GVariant *options);
47
49 static void sessionClosed(XdpSession *session, const gpointer data)
50 {
51 static_cast<PortalInputCapture *>(data)->handleSessionClosed(session);
52 }
53 static void disabled(const XdpInputCaptureSession *session, const GVariant *options, const gpointer data)
54 {
55 static_cast<PortalInputCapture *>(data)->handleDisabled(session, options);
56 }
57 static void activated(
58 const XdpInputCaptureSession *session, const std::uint32_t activationId, GVariant *options, const gpointer data
59 )
60 {
61 static_cast<PortalInputCapture *>(data)->handleActivated(session, activationId, options);
62 }
63 static void deactivated(
64 const XdpInputCaptureSession *session, const std::uint32_t activationId, const GVariant *options,
65 const gpointer data
66 )
67 {
68 static_cast<PortalInputCapture *>(data)->handleDeactivated(session, activationId, options);
69 }
70 static void zonesChanged(XdpInputCaptureSession *session, const GVariant *options, const gpointer data)
71 {
72 static_cast<PortalInputCapture *>(data)->handleZonesChanged(session, options);
73 }
74
75private:
76 enum class Signal : uint8_t
77 {
78 SessionClosed,
79 Disabled,
80 Activated,
81 Deactivated,
82 ZonesChanged
83 };
84
85 EiScreen *m_screen = nullptr;
86 IEventQueue *m_events = nullptr;
87
88 Thread *m_glibThread;
89 GMainLoop *m_glibMainLoop = nullptr;
90
91 XdpPortal *m_portal = nullptr;
92 XdpInputCaptureSession *m_session = nullptr;
93
94 std::map<Signal, gulong> m_signals = {
95 {Signal::SessionClosed, 0},
96 {Signal::Disabled, 0},
97 {Signal::Activated, 0},
98 {Signal::Deactivated, 0},
99 {Signal::ZonesChanged, 0}
100 };
101
102 bool m_enabled = false;
103 bool m_isActive = false;
104 std::uint32_t m_activationId = 0;
105
106 std::vector<XdpInputCapturePointerBarrier *> m_barriers;
107};
108
109} // namespace deskflow
static int void FAR * data
Definition ArchNetworkWinsock.cpp:34
int y
Definition ServerConfig.cpp:27
int x
Definition ServerConfig.cpp:26
Event queue interface.
Definition IEventQueue.h:32
Implementation of IPlatformScreen for X11.
Definition EiScreen.h:33
Definition PortalInputCapture.h:22
PortalInputCapture(EiScreen *screen, IEventQueue *events)
Definition PortalInputCapture.cpp:20
void enable()
Definition PortalInputCapture.cpp:168
bool is_active() const
Definition PortalInputCapture.h:30
~PortalInputCapture()
Definition PortalInputCapture.cpp:35
void release()
Definition PortalInputCapture.cpp:186
void disable()
Definition PortalInputCapture.cpp:177
Definition EventTypes.h:11