Deskflow 1.26.0.207
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
18namespace deskflow {
19
21{
22public:
23 PortalInputCapture(EiScreen *screen, IEventQueue *events);
25 void enable();
26 void disable();
27 void release();
28 void release(double x, double y);
29 bool isActive() const
30 {
31 return m_isActive;
32 }
33
34private:
35 void glibThread(const void *);
36 gboolean timeoutHandler() const;
37 gboolean initSession();
38 void setupSession(XdpInputCaptureSession *session);
39 void handleStart(GObject *object, GAsyncResult *res);
40 void handleInitSession(GObject *object, GAsyncResult *res);
41 void handleSetPointerBarriers(const GObject *object, GAsyncResult *res);
42 void handleSessionClosed(XdpSession *session);
43 void handleDisabled(const XdpInputCaptureSession *session, const GVariant *option);
44 void handleActivated(const XdpInputCaptureSession *session, const std::uint32_t activationId, GVariant *options);
45 void
46 handleDeactivated(const XdpInputCaptureSession *session, const std::uint32_t activationId, const GVariant *options);
47 void handleZonesChanged(XdpInputCaptureSession *session, const GVariant *options);
48
50 static void sessionClosed(XdpSession *session, const gpointer data)
51 {
52 static_cast<PortalInputCapture *>(data)->handleSessionClosed(session);
53 }
54 static void disabled(const XdpInputCaptureSession *session, const GVariant *options, const gpointer data)
55 {
56 static_cast<PortalInputCapture *>(data)->handleDisabled(session, options);
57 }
58 static void activated(
59 const XdpInputCaptureSession *session, const std::uint32_t activationId, GVariant *options, const gpointer data
60 )
61 {
62 static_cast<PortalInputCapture *>(data)->handleActivated(session, activationId, options);
63 }
64 static void deactivated(
65 const XdpInputCaptureSession *session, const std::uint32_t activationId, const GVariant *options,
66 const gpointer data
67 )
68 {
69 static_cast<PortalInputCapture *>(data)->handleDeactivated(session, activationId, options);
70 }
71 static void zonesChanged(XdpInputCaptureSession *session, const GVariant *options, const gpointer data)
72 {
73 static_cast<PortalInputCapture *>(data)->handleZonesChanged(session, options);
74 }
75
76private:
77 enum class Signal : uint8_t
78 {
79 SessionClosed,
80 Disabled,
81 Activated,
82 Deactivated,
83 ZonesChanged
84 };
85
86 EiScreen *m_screen = nullptr;
87 IEventQueue *m_events = nullptr;
88 int m_portalVersion = 0;
89
90 Thread *m_glibThread;
91 GMainLoop *m_glibMainLoop = nullptr;
92
93 XdpPortal *m_portal = nullptr;
94 XdpInputCaptureSession *m_session = nullptr;
95
96 std::map<Signal, gulong> m_signals = {
97 {Signal::SessionClosed, 0},
98 {Signal::Disabled, 0},
99 {Signal::Activated, 0},
100 {Signal::Deactivated, 0},
101 {Signal::ZonesChanged, 0}
102 };
103
104 bool m_enabled = false;
105 bool m_isActive = false;
106 std::uint32_t m_activationId = 0;
107
108 std::vector<XdpInputCapturePointerBarrier *> m_barriers;
109};
110
111} // namespace deskflow
static int void FAR * data
Definition ArchNetworkWinsock.cpp:35
int y
Definition ServerConfig.cpp:24
int x
Definition ServerConfig.cpp:23
Event queue interface.
Definition IEventQueue.h:29
Implementation of IPlatformScreen for X11.
Definition EiScreen.h:35
Definition PortalInputCapture.h:21
PortalInputCapture(EiScreen *screen, IEventQueue *events)
Definition PortalInputCapture.cpp:24
bool isActive() const
Definition PortalInputCapture.h:29
void enable()
Definition PortalInputCapture.cpp:260
~PortalInputCapture()
Definition PortalInputCapture.cpp:40
void release()
Definition PortalInputCapture.cpp:278
void disable()
Definition PortalInputCapture.cpp:269
Definition DaemonApp.h:18