From bc2c50602e8370875c7c02299dbec09e8300797d Mon Sep 17 00:00:00 2001 From: Jay Sorg Date: Sun, 19 May 2013 19:19:18 -0700 Subject: [PATCH 1/2] X11rdp: only remove pixmap if usage_hint is zero --- xorg/X11R7.6/rdp/rdpdraw.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xorg/X11R7.6/rdp/rdpdraw.c b/xorg/X11R7.6/rdp/rdpdraw.c index 068f8267..e711733b 100644 --- a/xorg/X11R7.6/rdp/rdpdraw.c +++ b/xorg/X11R7.6/rdp/rdpdraw.c @@ -739,7 +739,8 @@ xrdp_is_os(PixmapPtr pix, rdpPixmapPtr priv) { width = pix->drawable.width; height = pix->drawable.height; - if ((pix->drawable.depth >= g_rdpScreen.depth) && + if ((pix->usage_hint == 0) && + (pix->drawable.depth >= g_rdpScreen.depth) && (width > 1) && (height > 1) && (priv->kind_width > 0)) { LLOGLN(10, ("%d %d", priv->kind_width, pix->drawable.width)); From 2039bbe397b9cdd937eed196e987ade4e194e65c Mon Sep 17 00:00:00 2001 From: Jay Sorg Date: Mon, 20 May 2013 11:50:05 -0700 Subject: [PATCH 2/2] xrdp: fix for non 'new' cursor clients like rdesktop --- libxrdp/libxrdp.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/libxrdp/libxrdp.c b/libxrdp/libxrdp.c index 91ff1e35..19e8a2c6 100644 --- a/libxrdp/libxrdp.c +++ b/libxrdp/libxrdp.c @@ -428,17 +428,20 @@ libxrdp_send_pointer(struct xrdp_session *session, int cache_idx, int data_bytes; DEBUG(("libxrdp_send_pointer sending cursor")); + if (bpp == 0) + { + bpp = 24; + } /* error check */ if ((session->client_info->pointer_flags & 1) == 0) { - if (bpp != 0) + if (bpp != 24) { g_writeln("libxrdp_send_pointer: error"); return 1; } } - if ((bpp != 0) && (bpp == 15) && (bpp != 16) && - (bpp != 24) && (bpp != 32)) + if ((bpp == 15) && (bpp != 16) && (bpp != 24) && (bpp != 32)) { g_writeln("libxrdp_send_pointer: error"); return 1; @@ -446,7 +449,7 @@ libxrdp_send_pointer(struct xrdp_session *session, int cache_idx, make_stream(s); init_stream(s, 8192); xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s); - if (bpp == 0) + if ((session->client_info->pointer_flags & 1) == 0) { out_uint16_le(s, RDP_POINTER_COLOR); out_uint16_le(s, 0); /* pad */ @@ -481,7 +484,6 @@ libxrdp_send_pointer(struct xrdp_session *session, int cache_idx, } } break; - case 0: case 24: p = data; for (i = 0; i < 32; i++)