summaryrefslogtreecommitdiffstats
path: root/xorg/X11R7.6
diff options
context:
space:
mode:
authorJim Grandy <jgrandy@authentic8.com>2013-06-30 12:36:01 -0700
committerJim Grandy <jgrandy@authentic8.com>2013-08-22 12:49:40 -0700
commitdfe5911b5552fb9faaf94e998b019727a32ca21d (patch)
tree2afa7b431fda83ad7a5f665a5162245648c8db6d /xorg/X11R7.6
parentb8388a65a2d561c23cc08613d1c4d7cf5dbb96d0 (diff)
downloadxrdp-proprietary-dfe5911b5552fb9faaf94e998b019727a32ca21d.tar.gz
xrdp-proprietary-dfe5911b5552fb9faaf94e998b019727a32ca21d.zip
Hand-apply patches (rail improvements) from Authentic8 branch: 507694d, 0e21d45, 44447d5, e452e4f, 3d05576, dd69d8f
Diffstat (limited to 'xorg/X11R7.6')
-rw-r--r--xorg/X11R7.6/rdp/rdpdraw.c13
-rw-r--r--xorg/X11R7.6/rdp/rdpup.c23
2 files changed, 34 insertions, 2 deletions
diff --git a/xorg/X11R7.6/rdp/rdpdraw.c b/xorg/X11R7.6/rdp/rdpdraw.c
index 4b900f4e..45148d6d 100644
--- a/xorg/X11R7.6/rdp/rdpdraw.c
+++ b/xorg/X11R7.6/rdp/rdpdraw.c
@@ -852,6 +852,8 @@ rdpDestroyWindow(WindowPtr pWindow)
if (g_use_rail)
{
+ LLOGLN(10, (" rdpup_delete_window"));
+ rdpup_delete_window(pWindow, priv);
}
return rv;
@@ -942,7 +944,16 @@ rdpUnrealizeWindow(WindowPtr pWindow)
{
LLOGLN(10, ("rdpUnrealizeWindow:"));
priv->status = 0;
- rdpup_delete_window(pWindow, priv);
+ if (pWindow->overrideRedirect) {
+ /*
+ * Popups are unmapped by X server, so probably
+ * they will be mapped again. Thereby we should
+ * just hide those popups instead of destroying
+ * them.
+ */
+ LLOGLN(10, (" rdpup_show_window"));
+ rdpup_show_window(pWindow, priv, 0x0); /* 0x0 - do not show the window */
+ }
}
}
diff --git a/xorg/X11R7.6/rdp/rdpup.c b/xorg/X11R7.6/rdp/rdpup.c
index 06c8bd73..dc59e26d 100644
--- a/xorg/X11R7.6/rdp/rdpup.c
+++ b/xorg/X11R7.6/rdp/rdpup.c
@@ -1772,7 +1772,7 @@ rdpup_create_window(WindowPtr pWindow, rdpWindowRec *priv)
out_uint32_le(g_out_s, style); /* style */
out_uint32_le(g_out_s, ext_style); /* extended_style */
flags |= WINDOW_ORDER_FIELD_STYLE;
- out_uint32_le(g_out_s, 0); /* show_state */
+ out_uint32_le(g_out_s, 0x05); /* show_state */
flags |= WINDOW_ORDER_FIELD_SHOW;
out_uint16_le(g_out_s, title_bytes); /* title_info */
out_uint8a(g_out_s, title, title_bytes);
@@ -1843,6 +1843,27 @@ rdpup_delete_window(WindowPtr pWindow, rdpWindowRec *priv)
}
/******************************************************************************/
+void
+rdpup_show_window(WindowPtr pWindow, rdpWindowRec* priv, int showState)
+{
+ LLOGLN(10, ("rdpup_show_window: id 0x%8.8x state 0x%x", pWindow->drawable.id,
+ showState));
+ if (g_connected)
+ {
+ int flags = WINDOW_ORDER_TYPE_WINDOW;
+
+ rdpup_pre_check(16);
+ out_uint16_le(g_out_s, 27);
+ out_uint16_le(g_out_s, 16);
+ g_count++;
+ out_uint32_le(g_out_s, pWindow->drawable.id);
+ flags |= WINDOW_ORDER_FIELD_SHOW;
+ out_uint32_le(g_out_s, flags);
+ out_uint32_le(g_out_s, showState);
+ }
+}
+
+/******************************************************************************/
int
rdpup_check_dirty(PixmapPtr pDirtyPixmap, rdpPixmapRec *pDirtyPriv)
{