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);
This commit is contained in:
Benoit LeBlanc 2013-04-24 16:33:43 -04:00
parent e98bb31d27
commit 8b443989bb
4 changed files with 52 additions and 99 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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;
};
/**

View File

@ -28,6 +28,7 @@
#include <winpr/crt.h>
#include <freerdp/settings.h>
#include <freerdp/freerdp.h>
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;
}