Closed vladimir-g closed 11 years ago
Исправлено в b86c8e4 . Спасибо за багрепорт и исправление, существенных побочных эффектов при нём не будет.
Данное исправление будет добавлено в следующий тег, если нужно, выложить промежуточную версию только с этим исправлением - обращайтесь.
Проблема такая - посылка команды через dbus срабатывает только после переключения в другое окно, от чего, соответственно, раскладка для текущего выбранного окна не переключается.
Например, такая команда висит и не выдаёт ответа:
WM - awesome из гита, но такая же проблема была и с версией 3.4. В dbus-monitor при вышеуказанной команде не выводится никакого ответа от kbdd.
При этом сам kbdd вполне нормально выдаёт сигналы по dbus-у о смене раскладки при переключении окна.
Я попробовал немного посмотреть в код, поставил несколько printf-ов и помучал его разными способами, и мне показалось, что проблема в том, что main loop блокируется функцией XNextEvent так, что даже сообщения дбаса не приходят. Поэтому и при переключении на другое окно main loop всё же читает то, что ему написали. Но я плохо разбираюсь в Си, glib, дбасе и иксах, и поэтому могу ошибаться.
Я попробовал заменить x11_fd_check из kbdd.c вот такой штукой:
и все проблемы моментально исчезли - указанная в начале команда начала отрабатывать мгновенно, и раскладка для текущего окна менялась как надо. Но я не уверен, что это лучшее решение, и не знаю, не приведёт ли это к каким-нибудь побочным эффектам.