47 void glibThread(
const void *);
48 gboolean timeoutHandler()
const;
49 gboolean initSession();
50 void setupSession(XdpInputCaptureSession *session);
51 void handleStart(GObject *
object, GAsyncResult *res);
52 void handleInitSession(GObject *
object, GAsyncResult *res);
53 void handleSetPointerBarriers(
const GObject *
object, GAsyncResult *res);
54 void handleSessionClosed(XdpSession *session);
55 void handleDisabled(
const XdpInputCaptureSession *session,
const GVariant *option);
56 void handleActivated(
const XdpInputCaptureSession *session,
const std::uint32_t activationId, GVariant *options);
58 handleDeactivated(
const XdpInputCaptureSession *session,
const std::uint32_t activationId,
const GVariant *options);
59 void handleZonesChanged(XdpInputCaptureSession *session,
const GVariant *options);
61 void handleSelectionTransfer(XdpSession *session,
const char *mimeType, uint32_t serial)
const;
62 void readClipboardSelection(XdpSession *session)
const;
63 void claimClipboardOwnership(XdpSession *session)
const;
66 static void sessionClosed(XdpSession *session,
const gpointer
data)
70 static void disabled(
const XdpInputCaptureSession *session,
const GVariant *options,
const gpointer
data)
74 static void activated(
75 const XdpInputCaptureSession *session,
const std::uint32_t activationId, GVariant *options,
const gpointer
data
80 static void deactivated(
81 const XdpInputCaptureSession *session,
const std::uint32_t activationId,
const GVariant *options,
87 static void zonesChanged(XdpInputCaptureSession *session,
const GVariant *options,
const gpointer
data)
91 static void selectionTransfer(XdpSession *session,
const char *mimeType, uint32_t serial,
const gpointer
data)
96 enum class Signal : uint8_t
108 enum class BarrierSide : uint8_t
119 BarrierSide side = BarrierSide::Left;
138 static const char *barrierSideName(BarrierSide side);
140 scaleCoordinateBetweenRanges(
double value,
int sourceMin,
int sourceMax,
int destinationMin,
int destinationMax);
141 bool getPortalBounds(Bounds &bounds)
const;
142 bool getClosestReleaseBarrier(
143 double x,
double y,
int screenLeft,
int screenTop,
int screenRight,
int screenBottom,
const Bounds &portalBounds,
146 std::pair<int, int> mapPortalActivationToScreenPosition(guint barrierId,
double rawX,
double rawY)
const;
147 std::pair<double, double> mapPortalReleasePosition(
double x,
double y)
const;
148 void addBarrier(guint
id, BarrierSide side, gint zoneX, gint zoneY, guint zoneWidth, guint zoneHeight);
150 EiScreen *m_screen =
nullptr;
151 IEventQueue *m_events =
nullptr;
152 int m_portalVersion = 0;
154 Thread *m_glibThread;
155 GMainLoop *m_glibMainLoop =
nullptr;
157 XdpPortal *m_portal =
nullptr;
158 XdpInputCaptureSession *m_session =
nullptr;
160 std::map<Signal, gulong> m_signals = {
161 {Signal::SessionClosed, 0}, {Signal::Disabled, 0}, {Signal::Activated, 0},
162 {Signal::Deactivated, 0}, {Signal::ZonesChanged, 0},
164 {Signal::SelectionTransfer, 0},
167 bool m_enabled =
false;
168 bool m_isActive =
false;
169 std::uint32_t m_activationId = 0;
171 std::vector<XdpInputCapturePointerBarrier *> m_barriers;
172 std::vector<BarrierInfo> m_barrierInfo;
174 EiClipboard *m_clipboard =
nullptr;