0004 단축키가 QWERTY 자리에 있음
From 카카오톡 on Wine
Jump to navigationJump to search
드보락을 쓰는데도 단축키가 전부 QWERTY 자리에 있었습니다. Ctrl+V는 v를 치는 키가 아니라 각인이 V인 키에서 동작했고, 나머지도 사정이 같았습니다. 스캔코드는 제대로 도착하고 드라이버 안의 드보락 표도 멀쩡한데, 정작 그 표가 쓰이지 않고 있었습니다.
WAYLAND_KbdLayerDescriptor는 HKL을 다시 만들어 비교하는
식으로 레이아웃을 찾고, get_layout_hkl은 상위 워드에
레이아웃의 언어를 넣습니다. 묻는 쪽은 스캔코드를 VK로 바꾸는 키보드
이벤트 스레드인데, 이 스레드는 레이아웃이 활성화된 적이 없습니다.
활성화는 포커스된 창에 보내는 메시지라 여기 오지 않습니다. 그래서
NtUserGetKeyboardLayout이 로캘로 지어낸
MAKELONG(locale, locale)을 건네고, 로캘이 레이아웃의 언어와
같지 않으면 어느 레이아웃과도 맞아떨어지지 않습니다. 못 찾으면 NULL이
돌아가고, win32u는 그제야 자기 내장 표로 답하는데 그것이 QWERTY입니다.
신고되지 않은 이유
QWERTY 사용자에게는 그 잘못된 폴백이 우연히 맞아떨어지기 때문입니다. 이 꾸러미는 프리픽스 로캘이 한국어라서 자판과 상관없이 모두에게 어긋나 있습니다.
WINEDEBUG=+keyboard를 켜면 한 줄로 드러납니다.
warn:keyboard:WAYLAND_KbdLayerDescriptor Failed to find Xkb layout for HKL 0x4120412
0412는 한국어이고, 어느 레이아웃도 상위 워드에 그걸 갖고
있지 않습니다.