kbdd icon indicating copy to clipboard operation
kbdd copied to clipboard

Ошибка получения названия раскладки при смене набора раскладок после старта kbdd

Open PIlin opened this issue 11 years ago • 2 comments

Если поменять набор раскладок с помощью 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

PIlin avatar Nov 12 '13 14:11 PIlin

Здравствуйте, во-первых, спасибо за багзепорт, данная проблема возникает из-за того, что у в таблице раскладок нету творого элемента. Есть 2 способа это решить: 1). выставлять соответсвующую ошибку в результате запроса, и возврщать ошибку. 2). возвращать "n/a" в качестве ответа ветка layout-name-na коммит (b526d91)

если такое решение подходит, то я волью изменения в мастер.

qnikst avatar Nov 15 '13 11:11 qnikst

У kbdd нет названия языка - это исключительная ситуация. Так что, на мой взгляд, вернуть ошибку - логически правильнее. Особенно, если dbus это позволяет. А дальше уже приложение-фронтэнд, которое использует информацию о названии языка, пусть само разбирается, как эту ошибку обработать и вывести.

А вообще, у меня есть следующие идеи, как можно улучшить программу:

  1. Сделать еще один dbus-вызов, который переинициализирует список раскладок и их имен. В таком случае, не придется перезапускать kbdd каждый раз при смене набора раскладок. Фронтэнд может в случае, если получена ошибка, попробовать попросить kbdd пересоздать список имен и, затем, спросить имя текущей раскладки еще раз.
  2. Если возможно, получать от xkb событие смены набора раскладок и обрабатывать его в kbdd - автоматически переинициализировать список названий раскладок. Если это возможно сделать, тогда можно будет решить, например, такой случай:
  1. kbdd стартовал при наборе раскладок "us,ru" и запомнил их имена;
  2. набор сменился на "de,ua" - количество то же самое, но раскладки все другие;
  3. kbdd по прежнему считает, что раскладки были "us,ru" и не выдает никаких ошибок, потому как количество раскладок не изменилось.

PIlin avatar Nov 16 '13 11:11 PIlin