[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