[gnome-remote-desktop] session-rdp: Add support for monitor layout changes during a session
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-remote-desktop] session-rdp: Add support for monitor layout changes during a session
- Date: Thu, 3 Mar 2022 14:23:09 +0000 (UTC)
commit a09b1c99141b98978ebdf8772172e8c2dd93ca5e
Author: Pascal Nowack <Pascal Nowack gmx de>
Date: Tue Jan 26 18:42:29 2021 +0100
session-rdp: Add support for monitor layout changes during a session
With the display control class now being implemented, add support for
monitor layout changes during the remote desktop session by creating an
instance of the display control class.
As the Display Control channel is a dynamic channel, the socket thread
will take care opening it.
src/grd-rdp-private.h | 1 +
src/grd-session-rdp.c | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+)
---
diff --git a/src/grd-rdp-private.h b/src/grd-rdp-private.h
index eebc2ce5..9faebef4 100644
--- a/src/grd-rdp-private.h
+++ b/src/grd-rdp-private.h
@@ -42,6 +42,7 @@ typedef struct _RdpPeerContext
HANDLE vcm;
GrdClipboardRdp *clipboard_rdp;
+ GrdRdpDisplayControl *display_control;
GrdRdpGraphicsPipeline *graphics_pipeline;
} RdpPeerContext;
diff --git a/src/grd-session-rdp.c b/src/grd-session-rdp.c
index 1f1acd2c..1e11dbfd 100644
--- a/src/grd-session-rdp.c
+++ b/src/grd-session-rdp.c
@@ -34,6 +34,7 @@
#include "grd-hwaccel-nvidia.h"
#include "grd-rdp-buffer.h"
#include "grd-rdp-damage-detector.h"
+#include "grd-rdp-display-control.h"
#include "grd-rdp-event-queue.h"
#include "grd-rdp-graphics-pipeline.h"
#include "grd-rdp-network-autodetection.h"
@@ -1992,6 +1993,7 @@ socket_thread_func (gpointer data)
if (WTSVirtualChannelManagerIsChannelJoined (vcm, "drdynvc"))
{
GrdRdpGraphicsPipeline *graphics_pipeline;
+ GrdRdpDisplayControl *display_control;
switch (WTSVirtualChannelManagerGetDrdynvcState (vcm))
{
@@ -2004,9 +2006,12 @@ socket_thread_func (gpointer data)
break;
case DRDYNVC_STATE_READY:
graphics_pipeline = rdp_peer_context->graphics_pipeline;
+ display_control = rdp_peer_context->display_control;
if (rdp_settings->SupportGraphicsPipeline)
grd_rdp_graphics_pipeline_maybe_init (graphics_pipeline);
+
+ grd_rdp_display_control_maybe_init (display_control);
break;
}
@@ -2151,6 +2156,7 @@ grd_session_rdp_stop (GrdSession *session)
g_clear_object (&session_rdp->pipewire_stream);
g_clear_object (&rdp_peer_context->clipboard_rdp);
+ g_clear_object (&rdp_peer_context->display_control);
g_clear_object (&rdp_peer_context->graphics_pipeline);
g_clear_pointer (&session_rdp->socket_thread, g_thread_join);
@@ -2286,6 +2292,21 @@ grd_session_rdp_stream_ready (GrdSession *session,
g_signal_connect (session_rdp->pipewire_stream, "closed",
G_CALLBACK (on_pipewire_stream_closed),
session_rdp);
+
+ if (session_rdp->screen_share_mode == GRD_RDP_SCREEN_SHARE_MODE_EXTEND)
+ {
+ freerdp_peer *peer = session_rdp->peer;
+ RdpPeerContext *rdp_peer_context = (RdpPeerContext *) peer->context;
+
+ if (!rdp_peer_context->display_control)
+ {
+ rdp_peer_context->display_control =
+ grd_rdp_display_control_new (session_rdp,
+ rdp_peer_context->vcm,
+ session_rdp->stop_event,
+ MAX_MONITOR_COUNT);
+ }
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]