Fix min/max monitor placing issue

when a multi-monitor session has the top-left vertex of the primary
monitor at a desktop location other than (0,0), minimising and maximising
the session results in the (0,0) co-ordinate of the entire desktop being
placed at the top-left of the primary monitor.

The implementation seems to be at odds with [MS-RDPEGFX] 2.2.2.14 which
suggests the monitorDefArray of the RDPGFX_RESET_GRAPHICS_PDU should be
the same as that in the Monitor Layout PDU ([MS-RDPBCGR] 2.2.12.1)
This commit is contained in:
matt335672 2024-06-10 20:01:56 +01:00
parent 6fa941e208
commit 095f0d0e4c
2 changed files with 5 additions and 1 deletions

View File

@ -222,6 +222,10 @@ xrdp_egfx_send_wire_to_surface2(struct xrdp_egfx *egfx, int surface_id,
int codec_id, int codec_context_id, int codec_id, int codec_context_id,
int pixel_format, int pixel_format,
void *bitmap_data, int bitmap_data_length); void *bitmap_data, int bitmap_data_length);
/*
* NB: mi below must be such that the (top,left) co-ordinate of
* the primary monitor is (0.0)
*/
struct stream * struct stream *
xrdp_egfx_reset_graphics(struct xrdp_egfx_bulk *bulk, int width, int height, xrdp_egfx_reset_graphics(struct xrdp_egfx_bulk *bulk, int width, int height,
int monitor_count, struct monitor_info *mi); int monitor_count, struct monitor_info *mi);

View File

@ -1444,7 +1444,7 @@ xrdp_mm_egfx_caps_advertise(void *user, int caps_count,
error = xrdp_egfx_send_reset_graphics(self->egfx, error = xrdp_egfx_send_reset_graphics(self->egfx,
screen->width, screen->height, screen->width, screen->height,
self->wm->client_info->display_sizes.monitorCount, self->wm->client_info->display_sizes.monitorCount,
self->wm->client_info->display_sizes.minfo_wm); self->wm->client_info->display_sizes.minfo);
LOG(LOG_LEVEL_INFO, "xrdp_mm_egfx_caps_advertise: xrdp_egfx_send_reset_graphics " LOG(LOG_LEVEL_INFO, "xrdp_mm_egfx_caps_advertise: xrdp_egfx_send_reset_graphics "
"error %d monitorCount %d", "error %d monitorCount %d",
error, self->wm->client_info->display_sizes.monitorCount); error, self->wm->client_info->display_sizes.monitorCount);