[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [анонс патча] поддержка акселераторов в программах использующих gtk (и gnome-libs) в X независимо от текущего языка клавиатуры
Ну и ... довольно кривой патч.
Во-первых, перебирать keycodes от 0 до 1500 - фи.
"Идеологически корректно" - взять display->min_keycode и display->max_keycode.
В бльшинстве случаев (обычные "писишные" клавиатуры) получится на порядок
меньше.
А вот index в XKeycodeToKeysym в общем случае может быть до 255.
Но это не так важно. "Контролизацию" не-latin1 символов должна правильно
отрабатывать Xlib. Но не делает.
Я исправил, но как обычно патч вошел только в current ветку, то есть 4.0.*.
Кстати, буквально на днях приложили патч, в котором я слегка переделал
XLookupString. Теперь она должна правильно работать с не-latin1 keysym'ами
(правильно переводить их в байты) и отрабатывать "контролизацию"
даже в том случае, если сервер не имеет XKB.
(То о чем жаловался в ru.linux Костя Белоус. А Витус посоветовал ему -
"не пользоваться gnome", или KDE? - не помню точно.)
> Это анонс второй ревизии данного патча, в которую добавлена (идеологически
> корректная) операция очистки некоторых битов XEventKey.state которые
И это никак не "корректно".
Во-первых, биты 13,14 в event.state - это 'группа' в терминах XKB.
Самое правильное для gtk - не лезть туда со своими локальными флагами
или если уж залезли - чистить оригинальный state "по полной программе" -
накладывать маску 0xff - это все традиционные модификаторы.
А то завтра или в xkb задействуют биты 8-12, или в gtk запользуют 14'й.
И придется делать новый "идеологически корректный" патч.
> устанавливаются XKB когда текущий язык клавиатуры - не анлийский (не знаю, как
> лучше это грамотно описать). Эти уставноленные биты совпадали с другими
> масками используемыми gdk (GDK_RELEASE_MASK) что нарушало функционирование
> bindings при русском языке клавиатуры (например, не-буквенные клавиши типа
> Ctrl-End не срабатывали в GtkCList).
Как я не смотрел в исходники - так и не понял - где этоа GDK_RELEASE_MASK
проверяется. И соответственно - почему это мешает.
Но в любом случае, как я уже сказал - раз из event.state иннтересуют только
модификаторы - то их и надо отфильтровывать для дальнейшего использования,
а не "давить" отдельные случайно совпавшие биты.
Вот это будет - идеологически корректно.
--
Ivan U. Pascal | e-mail: pascal@tsu.ru
Administrator of | Tomsk State University
University Network | Tomsk, Russia