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