From 666ef4ab345e73b3ba8f415121b7801dfe298f58 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Tue, 20 Nov 2018 09:09:52 +0100 Subject: [PATCH] Fix #4864: Register pointer cache after PostConnect is called With #4950 client side pointer implementation was made optional. This addresses an issue that each client had to call pointer_cache_register_callbacks on its own. --- client/Android/android_freerdp.c | 1 - client/DirectFB/dfreerdp.c | 1 - client/Mac/MRDPView.m | 1 - client/Windows/wf_client.c | 1 - client/X11/xf_client.c | 1 - client/iOS/FreeRDP/ios_freerdp.m | 1 - libfreerdp/core/connection.c | 3 +++ libfreerdp/core/freerdp.c | 2 ++ 8 files changed, 5 insertions(+), 6 deletions(-) diff --git a/client/Android/android_freerdp.c b/client/Android/android_freerdp.c index 8a8cc88a0..dbf9c7b71 100644 --- a/client/Android/android_freerdp.c +++ b/client/Android/android_freerdp.c @@ -375,7 +375,6 @@ static BOOL android_post_connect(freerdp* instance) instance->update->BeginPaint = android_begin_paint; instance->update->EndPaint = android_end_paint; instance->update->DesktopResize = android_desktop_resize; - pointer_cache_register_callbacks(update); freerdp_callback("OnSettingsChanged", "(JIII)V", (jlong)instance, settings->DesktopWidth, settings->DesktopHeight, settings->ColorDepth); diff --git a/client/DirectFB/dfreerdp.c b/client/DirectFB/dfreerdp.c index 34bbf2305..8e11b01ca 100644 --- a/client/DirectFB/dfreerdp.c +++ b/client/DirectFB/dfreerdp.c @@ -204,7 +204,6 @@ BOOL df_post_connect(freerdp* instance) instance->update->BeginPaint = df_begin_paint; instance->update->EndPaint = df_end_paint; df_keyboard_init(); - pointer_cache_register_callbacks(instance->update); df_register_graphics(instance->context->graphics); return TRUE; } diff --git a/client/Mac/MRDPView.m b/client/Mac/MRDPView.m index 40b0c2f2c..a0e20ac82 100644 --- a/client/Mac/MRDPView.m +++ b/client/Mac/MRDPView.m @@ -944,7 +944,6 @@ BOOL mac_post_connect(freerdp* instance) gdi = instance->context->gdi; view->bitmap_context = mac_create_bitmap_context(instance->context); - pointer_cache_register_callbacks(instance->update); graphics_register_pointer(instance->context->graphics, &rdp_pointer); /* setup pasteboard (aka clipboard) for copy operations (write only) */ view->pasteboard_wr = [NSPasteboard generalPasteboard]; diff --git a/client/Windows/wf_client.c b/client/Windows/wf_client.c index 4636d10d4..6369ddfe7 100644 --- a/client/Windows/wf_client.c +++ b/client/Windows/wf_client.c @@ -372,7 +372,6 @@ static BOOL wf_post_connect(freerdp* instance) instance->update->BeginPaint = wf_begin_paint; instance->update->DesktopResize = wf_desktop_resize; instance->update->EndPaint = wf_end_paint; - pointer_cache_register_callbacks(instance->update); wf_register_pointer(context->graphics); if (!settings->SoftwareGdi) diff --git a/client/X11/xf_client.c b/client/X11/xf_client.c index 8e1503c16..4a3e0d2e8 100644 --- a/client/X11/xf_client.c +++ b/client/X11/xf_client.c @@ -1274,7 +1274,6 @@ static BOOL xf_post_connect(freerdp* instance) update->DesktopResize = xf_hw_desktop_resize; } - pointer_cache_register_callbacks(update); update->PlaySound = xf_play_sound; update->SetKeyboardIndicators = xf_keyboard_set_indicators; update->SetKeyboardImeStatus = xf_keyboard_set_ime_status; diff --git a/client/iOS/FreeRDP/ios_freerdp.m b/client/iOS/FreeRDP/ios_freerdp.m index 915af957d..1da19ec21 100644 --- a/client/iOS/FreeRDP/ios_freerdp.m +++ b/client/iOS/FreeRDP/ios_freerdp.m @@ -258,7 +258,6 @@ static BOOL ios_post_connect(freerdp* instance) instance->update->BeginPaint = ios_ui_begin_paint; instance->update->EndPaint = ios_ui_end_paint; instance->update->DesktopResize = ios_ui_resize_window; - pointer_cache_register_callbacks(instance->update); [mfi->session performSelectorOnMainThread:@selector(sessionDidConnect) withObject:nil waitUntilDone:YES]; return TRUE; diff --git a/libfreerdp/core/connection.c b/libfreerdp/core/connection.c index 9248742df..6482f2977 100644 --- a/libfreerdp/core/connection.c +++ b/libfreerdp/core/connection.c @@ -37,6 +37,7 @@ #include #include #include +#include #define TAG FREERDP_TAG("core.connection") @@ -395,6 +396,8 @@ static BOOL rdp_client_reconnect_channels(rdpRdp* rdp, BOOL redirect) if (redirect) return TRUE; + pointer_cache_register_callbacks(context->update); + if (!IFCALLRESULT(FALSE, context->instance->PostConnect, context->instance)) return FALSE; diff --git a/libfreerdp/core/freerdp.c b/libfreerdp/core/freerdp.c index 47ce0fb79..3152c49f4 100644 --- a/libfreerdp/core/freerdp.c +++ b/libfreerdp/core/freerdp.c @@ -48,6 +48,7 @@ #include #include #include +#include #define TAG FREERDP_TAG("core") @@ -208,6 +209,7 @@ BOOL freerdp_connect(freerdp* instance) if (status) { + pointer_cache_register_callbacks(instance->context->update); IFCALLRET(instance->PostConnect, status, instance); instance->ConnectionCallbackState = CLIENT_STATE_POSTCONNECT_PASSED;