Updated keyboard list API
This commit is contained in:
parent
1f6476016d
commit
4b9c8e6393
@ -227,8 +227,8 @@ extern "C"
|
|||||||
FREERDP_API DWORD freerdp_keyboard_init(DWORD keyboardLayoutId);
|
FREERDP_API DWORD freerdp_keyboard_init(DWORD keyboardLayoutId);
|
||||||
FREERDP_API DWORD freerdp_keyboard_init_ex(DWORD keyboardLayoutId,
|
FREERDP_API DWORD freerdp_keyboard_init_ex(DWORD keyboardLayoutId,
|
||||||
const char* keyboardRemappingList);
|
const char* keyboardRemappingList);
|
||||||
FREERDP_API RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types);
|
FREERDP_API RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types, size_t* count);
|
||||||
FREERDP_API void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts);
|
FREERDP_API void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts, size_t count);
|
||||||
FREERDP_API const char* freerdp_keyboard_get_layout_name_from_id(DWORD keyboardLayoutId);
|
FREERDP_API const char* freerdp_keyboard_get_layout_name_from_id(DWORD keyboardLayoutId);
|
||||||
FREERDP_API DWORD freerdp_keyboard_get_layout_id_from_name(const char* name);
|
FREERDP_API DWORD freerdp_keyboard_get_layout_id_from_name(const char* name);
|
||||||
FREERDP_API DWORD freerdp_keyboard_get_rdp_scancode_from_x11_keycode(DWORD keycode);
|
FREERDP_API DWORD freerdp_keyboard_get_rdp_scancode_from_x11_keycode(DWORD keycode);
|
||||||
|
@ -797,15 +797,16 @@ static const RDP_KEYBOARD_IME RDP_KEYBOARD_IME_TABLE[] = {
|
|||||||
{ KBD_CHINESE_TRADITIONAL_ALPHANUMERIC, "romanime.ime", "Chinese (Traditional) - Alphanumeric" }
|
{ KBD_CHINESE_TRADITIONAL_ALPHANUMERIC, "romanime.ime", "Chinese (Traditional) - Alphanumeric" }
|
||||||
};
|
};
|
||||||
|
|
||||||
void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts)
|
void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts, size_t count)
|
||||||
{
|
{
|
||||||
RDP_KEYBOARD_LAYOUT* current = layouts;
|
size_t x;
|
||||||
|
|
||||||
if (!layouts)
|
if (!layouts)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
while ((current->code != 0) && (current->name != NULL))
|
for (x = 0; x < count; x++)
|
||||||
{
|
{
|
||||||
|
RDP_KEYBOARD_LAYOUT* current = &layouts[x];
|
||||||
free(current->name);
|
free(current->name);
|
||||||
current++;
|
current++;
|
||||||
}
|
}
|
||||||
@ -813,22 +814,21 @@ void freerdp_keyboard_layouts_free(RDP_KEYBOARD_LAYOUT* layouts)
|
|||||||
free(layouts);
|
free(layouts);
|
||||||
}
|
}
|
||||||
|
|
||||||
RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types)
|
RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types, size_t* count)
|
||||||
{
|
{
|
||||||
size_t num, length, i;
|
size_t num, i;
|
||||||
RDP_KEYBOARD_LAYOUT* layouts;
|
RDP_KEYBOARD_LAYOUT* layouts = NULL;
|
||||||
RDP_KEYBOARD_LAYOUT* new;
|
|
||||||
num = 0;
|
|
||||||
layouts = (RDP_KEYBOARD_LAYOUT*)calloc((num + 1), sizeof(RDP_KEYBOARD_LAYOUT));
|
|
||||||
|
|
||||||
if (!layouts)
|
num = 0;
|
||||||
return NULL;
|
|
||||||
|
WINPR_ASSERT(count);
|
||||||
|
*count = 0;
|
||||||
|
|
||||||
if ((types & RDP_KEYBOARD_LAYOUT_TYPE_STANDARD) != 0)
|
if ((types & RDP_KEYBOARD_LAYOUT_TYPE_STANDARD) != 0)
|
||||||
{
|
{
|
||||||
length = ARRAYSIZE(RDP_KEYBOARD_LAYOUT_TABLE);
|
const size_t length = ARRAYSIZE(RDP_KEYBOARD_LAYOUT_TABLE);
|
||||||
new = (RDP_KEYBOARD_LAYOUT*)realloc(layouts,
|
RDP_KEYBOARD_LAYOUT* new = (RDP_KEYBOARD_LAYOUT*)realloc(
|
||||||
(num + length + 1) * sizeof(RDP_KEYBOARD_LAYOUT));
|
layouts, (num + length + 1) * sizeof(RDP_KEYBOARD_LAYOUT));
|
||||||
|
|
||||||
if (!new)
|
if (!new)
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -847,9 +847,9 @@ RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types)
|
|||||||
|
|
||||||
if ((types & RDP_KEYBOARD_LAYOUT_TYPE_VARIANT) != 0)
|
if ((types & RDP_KEYBOARD_LAYOUT_TYPE_VARIANT) != 0)
|
||||||
{
|
{
|
||||||
length = ARRAYSIZE(RDP_KEYBOARD_LAYOUT_VARIANT_TABLE);
|
const size_t length = ARRAYSIZE(RDP_KEYBOARD_LAYOUT_VARIANT_TABLE);
|
||||||
new = (RDP_KEYBOARD_LAYOUT*)realloc(layouts,
|
RDP_KEYBOARD_LAYOUT* new = (RDP_KEYBOARD_LAYOUT*)realloc(
|
||||||
(num + length + 1) * sizeof(RDP_KEYBOARD_LAYOUT));
|
layouts, (num + length + 1) * sizeof(RDP_KEYBOARD_LAYOUT));
|
||||||
|
|
||||||
if (!new)
|
if (!new)
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -868,9 +868,9 @@ RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types)
|
|||||||
|
|
||||||
if ((types & RDP_KEYBOARD_LAYOUT_TYPE_IME) != 0)
|
if ((types & RDP_KEYBOARD_LAYOUT_TYPE_IME) != 0)
|
||||||
{
|
{
|
||||||
length = ARRAYSIZE(RDP_KEYBOARD_IME_TABLE);
|
const size_t length = ARRAYSIZE(RDP_KEYBOARD_IME_TABLE);
|
||||||
new = (RDP_KEYBOARD_LAYOUT*)realloc(layouts,
|
RDP_KEYBOARD_LAYOUT* new = (RDP_KEYBOARD_LAYOUT*)realloc(
|
||||||
(num + length + 1) * sizeof(RDP_KEYBOARD_LAYOUT));
|
layouts, (num + length + 1) * sizeof(RDP_KEYBOARD_LAYOUT));
|
||||||
|
|
||||||
if (!new)
|
if (!new)
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -887,10 +887,10 @@ RDP_KEYBOARD_LAYOUT* freerdp_keyboard_get_layouts(DWORD types)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ZeroMemory(&layouts[num], sizeof(RDP_KEYBOARD_LAYOUT));
|
*count = num;
|
||||||
return layouts;
|
return layouts;
|
||||||
fail:
|
fail:
|
||||||
freerdp_keyboard_layouts_free(layouts);
|
freerdp_keyboard_layouts_free(layouts, num);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user