Главная

Внимание. Ветка обязательна для протчения и ответа: В BeOS битые кеймапы ! ! ! ! ! ! ! ! ! ! ! !

Решил я в своей программе задействовать правую клавишу option/win. И столкнулся с тем что при нажатии на нее input_server не посылает сообщение B_MODIFIERS_CHANGED- вообще молчит, за то посылает B_UNMAPPED_KEY_DOWN. Cделал дамп кеймапа (команда keymap -d) для разных раскладок и вот что там было кроме всего прочего:

// american

….

Version = 3
CapsLock = 0x3b
ScrollLock = 0x0f
NumLock = 0x22
LShift = 0x4b
RShift = 0x56
LCommand = 0x5d
RCommand = 0x5f
LControl = 0x5c
RControl = 0x00 //
LOption = 0x66
ROption = 0x60 // должно быть 0x67 !!!!!!
Menu = 0x68

// russian

Version = 3
CapsLock = 0x3b
ScrollLock = 0x0f
NumLock = 0x22
LShift = 0x4b
RShift = 0x56
LCommand = 0x5d
RCommand = 0x60 // 100% ошибка !!!!
LControl = 0x5c
RControl = 0x00 //
LOption = 0x66
ROption = 0x5f // должно быть 0x67 !!!!!!
Menu = 0x68

А это отрывок из BeBook для справки (раздел Input Server/Input Functions):

uint32 right_control_key Another key that functions as a Control key; by default on keyboards that have Option keys, this key is the key labeled “Control” on the right, key 0x60. For keyboards that don't have Option keys, this field is unmapped (its value is 0); key
0x60 is used as an Option key.

uint32 right_option_key A key that functions as an Option key; by default, this is key 0x67, which has different labels on different keyboards —"Option," “Command,” or a Windows symbol. For keyboards without this key, the field is mapped to the key labeled “Control” on the right, key 0x60.

Короче, если option нету, правый control имеет код 0x60 и именуется ROption и следовательно выше приведнные листинги соответсвуют 101 клавишной клаве. Еще из этого следует, что для разных клавиатур (с и без option) RControl будет иметь разные коды, что собственно и произошло со мной. Все это происходит из–за каши со скан–кодами, кто работал с клавиатурой на низком уровне поймет меня. Нормальная ОС должна, по идее, скрывать такие вещи, т.е. коды должны не зависеть от типа клавиатуры.

Еще обратите внимание, что в русской раскладке RCommand и ROption по сравнению c американской поменяны местами. Я проверил еще несколько кеймапов везде все так же.

С помощью все той же keymap скомпилил правильные кеймапы и все заработало как надо.

К стати и в Haiku эти же кеймапы планируется поставлять, они их просто скопировали, по крайней мере в Input Kit Replacement доступном для скачивания находятся именно они. Надо что–то делать господа, это собственно главная цель этого поста, надо обратить внимание разработчиков Haiku. Я бы и сам не поленился, но т.к. с английским у меня неважно, лучше если это сделает кто–то более грамотный.

И еще те у кого Zeta, посмотрите что у вас.

Эта проблема

Эта проблема всё ещё актуальна в последних ревизиях или уже исправлена?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <i> <img> <strong> <b> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Введите перечисленные символы, чтобы мы убедились, что вы не робот. Не требуется для зарегистрированных пользователей.
m
d
C
f
c
e
Enter the code without spaces and pay attention to upper/lower case.