From 8b443989bbf6667dca418e8bd9c409b689f720ef Mon Sep 17 00:00:00 2001 From: Benoit LeBlanc Date: Wed, 24 Apr 2013 16:33:43 -0400 Subject: [PATCH] Cleaned up settings, removed duplicate functions param change callback mechanism moved to settings.c Started replacing settings->Field = value with freerdp_set_param_XXX(settings, FreeRDP_Field, value); --- client/Windows/wf_interface.c | 122 +++++++++++----------------------- client/Windows/wf_interface.h | 18 ++--- include/freerdp/client.h | 2 + libfreerdp/common/settings.c | 9 ++- 4 files changed, 52 insertions(+), 99 deletions(-) diff --git a/client/Windows/wf_interface.c b/client/Windows/wf_interface.c index e8f7b2bd8..b4609c9e8 100644 --- a/client/Windows/wf_interface.c +++ b/client/Windows/wf_interface.c @@ -82,6 +82,9 @@ void wf_context_new(freerdp* instance, rdpContext* context) ((wfContext*) context)->wfi = wfi; wfi->instance = instance; + + // Register callbacks + instance->context->client->OnParamChange = wf_on_param_change; } void wf_context_free(freerdp* instance, rdpContext* context) @@ -222,7 +225,7 @@ void wf_hw_desktop_resize(rdpContext* context) BOOL wf_pre_connect(freerdp* instance) { - int i1; + int desktopWidth, desktopHeight; wfInfo* wfi; wfContext* context; rdpSettings* settings; @@ -288,24 +291,32 @@ BOOL wf_pre_connect(freerdp* instance) instance->context->cache = cache_new(settings); + desktopWidth = settings->DesktopWidth; + desktopHeight = settings->DesktopHeight; + if (wfi->percentscreen > 0) { - i1 = (GetSystemMetrics(SM_CXSCREEN) * wfi->percentscreen) / 100; - settings->DesktopWidth = i1; - - i1 = (GetSystemMetrics(SM_CYSCREEN) * wfi->percentscreen) / 100; - settings->DesktopHeight = i1; + desktopWidth = (GetSystemMetrics(SM_CXSCREEN) * wfi->percentscreen) / 100; + desktopHeight = (GetSystemMetrics(SM_CYSCREEN) * wfi->percentscreen) / 100; } if (wfi->fullscreen) { - settings->DesktopWidth = GetSystemMetrics(SM_CXSCREEN); - settings->DesktopHeight = GetSystemMetrics(SM_CYSCREEN); + desktopWidth = GetSystemMetrics(SM_CXSCREEN); + desktopHeight = GetSystemMetrics(SM_CYSCREEN); } - i1 = settings->DesktopWidth; - i1 = (i1 + 3) & (~3); - settings->DesktopWidth = i1; + desktopWidth = (desktopWidth + 3) & (~3); + + if (desktopWidth != settings->DesktopWidth) + { + freerdp_set_param_uint32(settings, FreeRDP_DesktopWidth, desktopWidth); + } + + if (desktopHeight != settings->DesktopHeight) + { + freerdp_set_param_uint32(settings, FreeRDP_DesktopHeight, desktopHeight); + } if ((settings->DesktopWidth < 64) || (settings->DesktopHeight < 64) || (settings->DesktopWidth > 4096) || (settings->DesktopHeight > 4096)) @@ -314,7 +325,7 @@ BOOL wf_pre_connect(freerdp* instance) return 1; } - settings->KeyboardLayout = (int) GetKeyboardLayout(0) & 0x0000FFFF; + freerdp_set_param_uint32(settings, FreeRDP_KeyboardLayout, (int) GetKeyboardLayout(0) & 0x0000FFFF); freerdp_channels_pre_connect(instance->context->channels, instance); return TRUE; @@ -436,9 +447,9 @@ BOOL wf_post_connect(freerdp* instance) wf_cliprdr_init(wfi, instance->context->channels); // Callback - if (wfi->callback_func != NULL) + if (wfi->client_callback_func != NULL) { - wfi->callback_func(wfi, CALLBACK_TYPE_CONNECTED, 0, 0); + wfi->client_callback_func(wfi, CALLBACK_TYPE_CONNECTED, 0, 0); } return TRUE; @@ -697,9 +708,9 @@ DWORD WINAPI wf_thread(LPVOID lpParam) freerdp_disconnect(instance); // Callback - if (((wfContext*) instance->context)->wfi->callback_func != NULL) + if (((wfContext*) instance->context)->wfi->client_callback_func != NULL) { - ((wfContext*) instance->context)->wfi->callback_func(((wfContext*) instance->context)->wfi, CALLBACK_TYPE_DISCONNECTED, 12, 34); + ((wfContext*) instance->context)->wfi->client_callback_func(((wfContext*) instance->context)->wfi, CALLBACK_TYPE_DISCONNECTED, 12, 34); } return 0; @@ -812,6 +823,11 @@ wfInfo* freerdp_client_new(int argc, char** argv) return wfi; } +rdpSettings* freerdp_client_get_settings(wfInfo* wfi) +{ + return wfi->instance->settings; +} + int freerdp_client_start(wfInfo* wfi) { HWND hWndParent; @@ -900,8 +916,9 @@ int freerdp_client_free(wfInfo* wfi) return 0; } -void wf_on_param_change(wfInfo* cfi, int id) +void wf_on_param_change(freerdp* instance, int id) { + wfInfo* cfi = ((wfContext*) instance->context)->wfi; RECT rect; // specific processing here @@ -922,79 +939,16 @@ void wf_on_param_change(wfInfo* cfi, int id) // trigger callback to client - if (cfi->callback_func != NULL) + if (cfi->client_callback_func != NULL) { fprintf(stderr, "Notifying client..."); - cfi->callback_func(cfi, CALLBACK_TYPE_PARAM_CHANGE, id, 0); + cfi->client_callback_func(cfi, CALLBACK_TYPE_PARAM_CHANGE, id, 0); } } -BOOL freerdp_client_get_param_bool(wfInfo* cfi, int id) +int freerdp_client_set_client_callback_function(wfInfo* cfi, callbackFunc callbackFunc) { - return freerdp_get_param_bool(cfi->instance->settings, id); -} - -int freerdp_client_set_param_bool(wfInfo* cfi, int id, BOOL param) -{ - int rc; - - rc = freerdp_set_param_bool(cfi->instance->settings, id, param); - - wf_on_param_change(cfi, id); - - return rc; -} - -UINT32 freerdp_client_get_param_uint32(wfInfo* cfi, int id) -{ - return freerdp_get_param_uint32(cfi->instance->settings, id); -} - -int freerdp_client_set_param_uint32(wfInfo* cfi, int id, UINT32 param) -{ - int rc; - - rc = freerdp_set_param_uint32(cfi->instance->settings, id, param); - - wf_on_param_change(cfi, id); - - return rc; -} - -UINT64 freerdp_client_get_param_uint64(wfInfo* cfi, int id) -{ - return freerdp_get_param_uint64(cfi->instance->settings, id); -} - -int freerdp_client_set_param_uint64(wfInfo* cfi, int id, UINT64 param) -{ - int rc; - - rc = freerdp_set_param_uint64(cfi->instance->settings, id, param); - - wf_on_param_change(cfi, id); - - return rc; -} - -char* freerdp_client_get_param_string(wfInfo* cfi, int id) -{ - return freerdp_get_param_string(cfi->instance->settings, id); -} - -int freerdp_client_set_param_string(wfInfo* cfi, int id, char* param) -{ - int rc; - rc = freerdp_set_param_string(cfi->instance->settings, id, param); - - wf_on_param_change(cfi, id); - - return rc; -} - -int freerdp_client_set_callback_function(wfInfo* cfi, callbackFunc callbackFunc) -{ - cfi->callback_func = callbackFunc; + cfi->client_callback_func = callbackFunc; return 0; } diff --git a/client/Windows/wf_interface.h b/client/Windows/wf_interface.h index 53ab55564..825b8ae69 100644 --- a/client/Windows/wf_interface.h +++ b/client/Windows/wf_interface.h @@ -124,7 +124,7 @@ struct wf_info NSC_CONTEXT* nsc_context; BOOL sw_gdi; - callbackFunc callback_func; + callbackFunc client_callback_func; rdpFile* connectionRdpFile; }; @@ -135,6 +135,8 @@ struct wf_info #define cfInfo wfInfo +void wf_on_param_change(freerdp* instance, int id); + FREERDP_API int freerdp_client_global_init(); FREERDP_API int freerdp_client_global_uninit(); @@ -149,19 +151,9 @@ FREERDP_API int freerdp_client_set_window_size(wfInfo* cfi, int width, int heigh FREERDP_API cfInfo* freerdp_client_new(int argc, char** argv); FREERDP_API int freerdp_client_free(wfInfo* cfi); -FREERDP_API BOOL freerdp_client_get_param_bool(wfInfo* cfi, int id); -FREERDP_API int freerdp_client_set_param_bool(wfInfo* cfi, int id, BOOL param); +FREERDP_API int freerdp_client_set_client_callback_function(wfInfo* cfi, callbackFunc callbackFunc); -FREERDP_API UINT32 freerdp_client_get_param_uint32(wfInfo* cfi, int id); -FREERDP_API int freerdp_client_set_param_uint32(wfInfo* cfi, int id, UINT32 param); - -FREERDP_API UINT64 freerdp_client_get_param_uint64(wfInfo* cfi, int id); -FREERDP_API int freerdp_client_set_param_uint64(wfInfo* cfi, int id, UINT64 param); - -FREERDP_API char* freerdp_client_get_param_string(wfInfo* cfi, int id); -FREERDP_API int freerdp_client_set_param_string(wfInfo* cfi, int id, char* param); - -FREERDP_API int freerdp_client_set_callback_function(wfInfo* cfi, callbackFunc callbackFunc); +FREERDP_API rdpSettings* freerdp_client_get_settings(wfInfo* wfi); FREERDP_API int freerdp_client_load_settings_from_rdp_file(wfInfo* cfi, char* filename); FREERDP_API int freerdp_client_save_settings_to_rdp_file(wfInfo* cfi, char* filename); diff --git a/include/freerdp/client.h b/include/freerdp/client.h index 5c0cc966d..87d998834 100644 --- a/include/freerdp/client.h +++ b/include/freerdp/client.h @@ -30,10 +30,12 @@ extern "C" { #endif typedef void (*pOnResizeWindow)(freerdp* instance, int width, int height); +typedef void (*pOnParamChange)(freerdp* instance, int id); struct rdp_client { pOnResizeWindow OnResizeWindow; + pOnParamChange OnParamChange; }; /** diff --git a/libfreerdp/common/settings.c b/libfreerdp/common/settings.c index c20437371..5c3ad49ab 100644 --- a/libfreerdp/common/settings.c +++ b/libfreerdp/common/settings.c @@ -28,6 +28,7 @@ #include #include +#include int freerdp_addin_set_argument(ADDIN_ARGV* args, char* argument) { @@ -1176,6 +1177,7 @@ int freerdp_set_param_bool(rdpSettings* settings, int id, BOOL param) // Mark field as modified settings->settings_modified[id] = 1; + IFCALL(((freerdp*) settings->instance)->context->client->OnParamChange, ((freerdp*) settings->instance), id); return -1; } @@ -1795,7 +1797,8 @@ int freerdp_set_param_uint32(rdpSettings* settings, int id, UINT32 param) // Mark field as modified settings->settings_modified[id] = 1; - + IFCALL(((freerdp*) settings->instance)->context->client->OnParamChange, ((freerdp*) settings->instance), id); + return 0; } @@ -1830,7 +1833,8 @@ int freerdp_set_param_uint64(rdpSettings* settings, int id, UINT64 param) // Mark field as modified settings->settings_modified[id] = 1; - + IFCALL(((freerdp*) settings->instance)->context->client->OnParamChange, ((freerdp*) settings->instance), id); + return 0; } @@ -2161,6 +2165,7 @@ int freerdp_set_param_string(rdpSettings* settings, int id, char* param) // Mark field as modified settings->settings_modified[id] = 1; + IFCALL(((freerdp*) settings->instance)->context->client->OnParamChange, ((freerdp*) settings->instance), id); return 0; }