From 69296ce3bd5ac21333f1a1a9bf505e0856aaa49b Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Tue, 4 Mar 2014 07:28:31 +0800 Subject: [PATCH 1/5] wfreerdp: build fix. --- channels/cliprdr/client/cliprdr_main.c | 2 +- channels/drdynvc/client/drdynvc_main.c | 2 +- channels/rail/client/rail_main.c | 2 +- channels/rdpdr/client/rdpdr_main.c | 2 +- channels/rdpsnd/client/rdpsnd_main.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/channels/cliprdr/client/cliprdr_main.c b/channels/cliprdr/client/cliprdr_main.c index 77e4c9d8c..982c33473 100644 --- a/channels/cliprdr/client/cliprdr_main.c +++ b/channels/cliprdr/client/cliprdr_main.c @@ -464,7 +464,7 @@ int cliprdr_client_format_data_response(CliprdrClientContext* context, CLIPRDR_F /* cliprdr is always built-in */ #define VirtualChannelEntry cliprdr_VirtualChannelEntry -int VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) +BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) { cliprdrPlugin* cliprdr; CliprdrClientContext* context; diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c index 03f0c7bea..d10f9a751 100644 --- a/channels/drdynvc/client/drdynvc_main.c +++ b/channels/drdynvc/client/drdynvc_main.c @@ -407,7 +407,7 @@ int drdynvc_get_version(DrdynvcClientContext* context) /* drdynvc is always built-in */ #define VirtualChannelEntry drdynvc_VirtualChannelEntry -int VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) +BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) { drdynvcPlugin* _p; DrdynvcClientContext* context; diff --git a/channels/rail/client/rail_main.c b/channels/rail/client/rail_main.c index a65e7d29c..99934bbfd 100644 --- a/channels/rail/client/rail_main.c +++ b/channels/rail/client/rail_main.c @@ -501,7 +501,7 @@ int rail_server_get_appid_response(RailClientContext* context, RAIL_GET_APPID_RE /* rail is always built-in */ #define VirtualChannelEntry rail_VirtualChannelEntry -int VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) +BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) { railPlugin* rail; RailClientContext* context; diff --git a/channels/rdpdr/client/rdpdr_main.c b/channels/rdpdr/client/rdpdr_main.c index 323dc8a1a..e48999887 100644 --- a/channels/rdpdr/client/rdpdr_main.c +++ b/channels/rdpdr/client/rdpdr_main.c @@ -989,7 +989,7 @@ static VOID VCAPITYPE rdpdr_virtual_channel_init_event(LPVOID pInitHandle, UINT /* rdpdr is always built-in */ #define VirtualChannelEntry rdpdr_VirtualChannelEntry -int VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) +BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) { rdpdrPlugin* rdpdr; diff --git a/channels/rdpsnd/client/rdpsnd_main.c b/channels/rdpsnd/client/rdpsnd_main.c index 3d4cc1900..ceaa47d73 100644 --- a/channels/rdpsnd/client/rdpsnd_main.c +++ b/channels/rdpsnd/client/rdpsnd_main.c @@ -1065,7 +1065,7 @@ static VOID VCAPITYPE rdpsnd_virtual_channel_init_event(LPVOID pInitHandle, UINT /* rdpsnd is always built-in */ #define VirtualChannelEntry rdpsnd_VirtualChannelEntry -int VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) +BOOL VCAPITYPE VirtualChannelEntry(PCHANNEL_ENTRY_POINTS pEntryPoints) { rdpsndPlugin* rdpsnd; From 0d86ee942fe6e7bf0a4b640f959048aa26fb800c Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Tue, 4 Mar 2014 13:39:22 +0800 Subject: [PATCH 2/5] wfreerdp: fix export names. --- channels/client/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/channels/client/CMakeLists.txt b/channels/client/CMakeLists.txt index 21c04fc1f..05cb34697 100644 --- a/channels/client/CMakeLists.txt +++ b/channels/client/CMakeLists.txt @@ -34,7 +34,11 @@ foreach(STATIC_ENTRY ${CHANNEL_STATIC_CLIENT_ENTRIES}) set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${STATIC_MODULE_NAME}) set(ENTRY_POINT_NAME "${STATIC_MODULE_CHANNEL}_${${STATIC_MODULE}_CLIENT_ENTRY}") - set(ENTRY_POINT_IMPORT "extern void ${ENTRY_POINT_NAME}();") + if(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL "VirtualChannelEntry") + set(ENTRY_POINT_IMPORT "extern BOOL VCAPITYPE ${ENTRY_POINT_NAME}(PCHANNEL_ENTRY_POINTS);") + else() + set(ENTRY_POINT_IMPORT "extern void ${ENTRY_POINT_NAME}();") + endif() set(${STATIC_ENTRY}_IMPORTS "${${STATIC_ENTRY}_IMPORTS}\n${ENTRY_POINT_IMPORT}") set(${STATIC_ENTRY}_TABLE "${${STATIC_ENTRY}_TABLE}\n\t{ \"${STATIC_MODULE_CHANNEL}\", ${ENTRY_POINT_NAME} },") endif() From 83f8d47d208a1a74975cced4889816e76f0c2a85 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Tue, 4 Mar 2014 13:49:37 +0800 Subject: [PATCH 3/5] wfreerdp: floatbar: minor cleanup. --- client/Windows/wf_floatbar.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/client/Windows/wf_floatbar.c b/client/Windows/wf_floatbar.c index b331dc5c0..87b161b41 100644 --- a/client/Windows/wf_floatbar.c +++ b/client/Windows/wf_floatbar.c @@ -136,11 +136,6 @@ static int button_paint(Button* button, HDC hdc) static Button* floatbar_create_button(FloatBar* floatbar, int type, int resid, int resid_act, int x, int y, int h, int w) { Button *button; - HDC hDC; - HDC hMemDC; - HBITMAP hBitmap; - HBITMAP hOldBitmap; - BITMAP bm; button = (Button *)malloc(sizeof(Button)); From dcc4477e640e08b9f9a0f5b27f9803dfe421e613 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Tue, 4 Mar 2014 13:50:31 +0800 Subject: [PATCH 4/5] wfreerdp: disable fullscreen toggle in fix size mode. --- client/Windows/wf_interface.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/client/Windows/wf_interface.c b/client/Windows/wf_interface.c index 6eca6cab9..3ae6dfa81 100644 --- a/client/Windows/wf_interface.c +++ b/client/Windows/wf_interface.c @@ -236,7 +236,8 @@ BOOL wf_pre_connect(freerdp* instance) settings->GlyphSupportLevel = GLYPH_SUPPORT_NONE; wfc->fullscreen = settings->Fullscreen; - wfc->fs_toggle = 1; + if (wfc->fullscreen) + wfc->fs_toggle = 1; wfc->sw_gdi = settings->SoftwareGdi; wfc->clrconv = (HCLRCONV) malloc(sizeof(CLRCONV)); @@ -444,7 +445,8 @@ BOOL wf_post_connect(freerdp* instance) freerdp_channels_post_connect(instance->context->channels, instance); wf_cliprdr_init(wfc, instance->context->channels); - floatbar_window_create(wfc); + if (wfc->fullscreen) + floatbar_window_create(wfc); return TRUE; } From cee1807bd2d561a6527a7d805c0184747a75dd14 Mon Sep 17 00:00:00 2001 From: Zhang Zhaolong Date: Tue, 4 Mar 2014 15:35:21 +0800 Subject: [PATCH 5/5] wfreerdp: fix screen crash when connecting to XP desktop with some resolution. --- client/Windows/wf_interface.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/client/Windows/wf_interface.c b/client/Windows/wf_interface.c index 3ae6dfa81..f0680b44d 100644 --- a/client/Windows/wf_interface.c +++ b/client/Windows/wf_interface.c @@ -259,7 +259,7 @@ BOOL wf_pre_connect(freerdp* instance) desktopHeight = (GetSystemMetrics(SM_CYSCREEN) * wfc->percentscreen) / 100; settings->DesktopHeight = desktopHeight; } - + if (wfc->fullscreen) { if (settings->UseMultimon) @@ -274,6 +274,10 @@ BOOL wf_pre_connect(freerdp* instance) } } + /* FIXME: desktopWidth has a limitation that it should be divisible by 4, + * otherwise the screen will crash when connecting to an XP desktop.*/ + desktopWidth = (desktopWidth + 3) & (~3); + if (desktopWidth != settings->DesktopWidth) { freerdp_set_param_uint32(settings, FreeRDP_DesktopWidth, desktopWidth);