kbdd
kbdd copied to clipboard
Ошибка получения названия раскладки при смене набора раскладок после старта kbdd
Если поменять набор раскладок с помощью setxkbmap -layout после старта kbdd, вызовы к ru.gentoo.kbdd.getLayoutName с номером новой раскладки возвращают ошибку.
Пример:
$ setxkbmap -query
rules: evdev
model: pc104
layout: us,ru
options: grp:caps_toggle
$ qdbus-qt4 ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName 2
Error: org.freedesktop.DBus.GLib.ErrorError
Method invoked for getLayoutName returned FALSE but did not set error
$ setxkbmap -layout us,ru,ua
$ setxkbmap -query
rules: evdev
model: pc104
layout: us,ru,ua
options: grp:caps_toggle
$ qdbus-qt4 ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName 2
Error: org.freedesktop.DBus.GLib.ErrorError
Method invoked for getLayoutName returned FALSE but did not set error
Рестартуем kbdd
$ qdbus-qt4 ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.getLayoutName 2
Ukrainian
Здравствуйте, во-первых, спасибо за багзепорт, данная проблема возникает из-за того, что у в таблице раскладок нету творого элемента. Есть 2 способа это решить: 1). выставлять соответсвующую ошибку в результате запроса, и возврщать ошибку. 2). возвращать "n/a" в качестве ответа ветка layout-name-na коммит (b526d91)
если такое решение подходит, то я волью изменения в мастер.
У kbdd нет названия языка - это исключительная ситуация. Так что, на мой взгляд, вернуть ошибку - логически правильнее. Особенно, если dbus это позволяет. А дальше уже приложение-фронтэнд, которое использует информацию о названии языка, пусть само разбирается, как эту ошибку обработать и вывести.
А вообще, у меня есть следующие идеи, как можно улучшить программу:
- Сделать еще один dbus-вызов, который переинициализирует список раскладок и их имен. В таком случае, не придется перезапускать kbdd каждый раз при смене набора раскладок. Фронтэнд может в случае, если получена ошибка, попробовать попросить kbdd пересоздать список имен и, затем, спросить имя текущей раскладки еще раз.
- Если возможно, получать от xkb событие смены набора раскладок и обрабатывать его в kbdd - автоматически переинициализировать список названий раскладок. Если это возможно сделать, тогда можно будет решить, например, такой случай:
- kbdd стартовал при наборе раскладок "us,ru" и запомнил их имена;
- набор сменился на "de,ua" - количество то же самое, но раскладки все другие;
- kbdd по прежнему считает, что раскладки были "us,ru" и не выдает никаких ошибок, потому как количество раскладок не изменилось.