fixed some bugs arising from french-belgium keyboard layout
This commit is contained in:
parent
16db5057d8
commit
a61de3d671
|
@ -9,6 +9,15 @@
|
||||||
|
|
||||||
// TOP
|
// TOP
|
||||||
|
|
||||||
|
internal b32
|
||||||
|
usable_ascii(char c){
|
||||||
|
b32 result = 1;
|
||||||
|
if ((c < ' ' || c > '~') && c != '\n' && c != '\r' && c != '\t'){
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
sysshared_filter_real_files(char **files, i32 *file_count){
|
sysshared_filter_real_files(char **files, i32 *file_count){
|
||||||
i32 i, j;
|
i32 i, j;
|
||||||
|
|
|
@ -1263,40 +1263,66 @@ Win32Callback(HWND hwnd, UINT uMsg,
|
||||||
}
|
}
|
||||||
control_keys = win32vars.input_chunk.pers.control_keys;
|
control_keys = win32vars.input_chunk.pers.control_keys;
|
||||||
control_keys_size = sizeof(win32vars.input_chunk.pers.control_keys);
|
control_keys_size = sizeof(win32vars.input_chunk.pers.control_keys);
|
||||||
|
|
||||||
if (*count < KEY_INPUT_BUFFER_SIZE){
|
if (*count < KEY_INPUT_BUFFER_SIZE){
|
||||||
if (!key){
|
if (!key){
|
||||||
UINT vk = (UINT)wParam;
|
UINT vk = (UINT)wParam;
|
||||||
UINT scan = (UINT)((lParam >> 16) & 0x7F);
|
UINT scan = (UINT)((lParam >> 16) & 0x7F);
|
||||||
BYTE state[256];
|
BYTE state[256];
|
||||||
WORD x1 = 0, x2 = 0, x = 0;
|
BYTE control_state = 0;
|
||||||
|
WORD x1 = 0, x2 = 0, x = 0, junk_x;
|
||||||
int result1 = 0, result2 = 0, result = 0;
|
int result1 = 0, result2 = 0, result = 0;
|
||||||
|
|
||||||
GetKeyboardState(state);
|
GetKeyboardState(state);
|
||||||
x1 = 0;
|
x1 = 0;
|
||||||
result1 = ToAscii(vk, scan, state, &x1, 0);
|
result1 = ToAscii(vk, scan, state, &x1, 0);
|
||||||
|
if (result1 < 0){
|
||||||
|
ToAscii(vk, scan, state, &junk_x, 0);
|
||||||
|
}
|
||||||
|
result1 = (result1 == 1);
|
||||||
|
if (!usable_ascii((char)x1)){
|
||||||
|
result1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
control_state = state[VK_CONTROL];
|
||||||
state[VK_CONTROL] = 0;
|
state[VK_CONTROL] = 0;
|
||||||
x2 = 0;
|
x2 = 0;
|
||||||
result2 = ToAscii(vk, scan, state, &x2, 0);
|
result2 = ToAscii(vk, scan, state, &x2, 0);
|
||||||
|
if (result2 < 0){
|
||||||
|
ToAscii(vk, scan, state, &junk_x, 0);
|
||||||
|
}
|
||||||
|
result2 = (result2 == 1);
|
||||||
|
if (!usable_ascii((char)x2)){
|
||||||
|
result2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (result1){
|
if (result1){
|
||||||
x = x1;
|
x = x1;
|
||||||
|
state[VK_CONTROL] = control_state;
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
else if (result2){
|
else if (result2){
|
||||||
x = x2;
|
x = x2;
|
||||||
result = 1;
|
result = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == 1 && x < 128){
|
if (result == 1 && x < 128){
|
||||||
key = (u8)x;
|
key = (u8)x;
|
||||||
if (key == '\r') key = '\n';
|
if (key == '\r') key = '\n';
|
||||||
data[*count].character = key;
|
data[*count].character = key;
|
||||||
|
|
||||||
state[VK_CAPITAL] = 0;
|
state[VK_CAPITAL] = 0;
|
||||||
x = 0;
|
x = 0;
|
||||||
result = ToAscii(vk, scan, state, &x, 0);
|
result = ToAscii(vk, scan, state, &x, 0);
|
||||||
if (result == 1 && x < 128){
|
if (result < 0){
|
||||||
|
ToAscii(vk, scan, state, &junk_x, 0);
|
||||||
|
}
|
||||||
|
result = (result == 1);
|
||||||
|
if (!usable_ascii((char)x)){
|
||||||
|
result = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result){
|
||||||
key = (u8)x;
|
key = (u8)x;
|
||||||
if (key == '\r') key = '\n';
|
if (key == '\r') key = '\n';
|
||||||
data[*count].character_no_caps_lock = key;
|
data[*count].character_no_caps_lock = key;
|
||||||
|
@ -1318,11 +1344,11 @@ Win32Callback(HWND hwnd, UINT uMsg,
|
||||||
++(*count);
|
++(*count);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
result = DefWindowProc(hwnd, uMsg, wParam, lParam);
|
result = DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
{
|
{
|
||||||
i32 new_x = LOWORD(lParam);
|
i32 new_x = LOWORD(lParam);
|
||||||
|
|
Loading…
Reference in New Issue