[gnome-remote-desktop] session-rdp: Add API to explicitly hide mouse pointer
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-remote-desktop] session-rdp: Add API to explicitly hide mouse pointer
- Date: Fri, 5 Feb 2021 16:36:18 +0000 (UTC)
commit ae3333fc99d82c30dd18a5b883b8146e466fba86
Author: Pascal Nowack <Pascal Nowack gmx de>
Date: Tue Jan 26 11:42:57 2021 +0100
session-rdp: Add API to explicitly hide mouse pointer
grd_session_rdp_update_pointer() will only be called if PipeWire has an
explicit mouse pointer bitmap.
If the mouse pointer is hidden and there is no mouse pointer bitmap,
the RDP client won't hide the mouse pointer, although it should.
Add a new API which allows the PipeWire backend to hide the mouse
pointer.
src/grd-session-rdp.c | 21 +++++++++++++++++++++
src/grd-session-rdp.h | 2 ++
2 files changed, 23 insertions(+)
---
diff --git a/src/grd-session-rdp.c b/src/grd-session-rdp.c
index 58c9ebd..d3daeb9 100644
--- a/src/grd-session-rdp.c
+++ b/src/grd-session-rdp.c
@@ -451,6 +451,27 @@ grd_session_rdp_update_pointer (GrdSessionRdp *session_rdp,
g_free (xor_mask);
}
+void
+grd_session_rdp_hide_pointer (GrdSessionRdp *session_rdp)
+{
+ freerdp_peer *peer = session_rdp->peer;
+ RdpPeerContext *rdp_peer_context = (RdpPeerContext *) peer->context;
+ rdpUpdate *rdp_update = peer->update;
+ POINTER_SYSTEM_UPDATE pointer_system = {0};
+
+ if (!(rdp_peer_context->flags & RDP_PEER_ACTIVATED))
+ return;
+
+ if (session_rdp->pointer_type == POINTER_TYPE_HIDDEN)
+ return;
+
+ session_rdp->last_pointer = NULL;
+ session_rdp->pointer_type = POINTER_TYPE_HIDDEN;
+ pointer_system.type = SYSPTR_NULL;
+
+ rdp_update->pointer->PointerSystem (peer->context, &pointer_system);
+}
+
void
grd_session_rdp_move_pointer (GrdSessionRdp *session_rdp,
uint16_t x,
diff --git a/src/grd-session-rdp.h b/src/grd-session-rdp.h
index abcb37d..1884144 100644
--- a/src/grd-session-rdp.h
+++ b/src/grd-session-rdp.h
@@ -52,6 +52,8 @@ void grd_session_rdp_update_pointer (GrdSessionRdp *session_rdp,
uint16_t height,
uint8_t *data);
+void grd_session_rdp_hide_pointer (GrdSessionRdp *session_rdp);
+
void grd_session_rdp_move_pointer (GrdSessionRdp *session_rdp,
uint16_t x,
uint16_t y);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]