Skip to content

Вынести вычисление UID виртуальной клавиатуры в статический метод#6

Open
drewrukin wants to merge 1 commit intofreemind001:mainfrom
drewrukin:fix/configure-vk-uid
Open

Вынести вычисление UID виртуальной клавиатуры в статический метод#6
drewrukin wants to merge 1 commit intofreemind001:mainfrom
drewrukin:fix/configure-vk-uid

Conversation

@drewrukin
Copy link
Copy Markdown

Описание

В configure() вызывался vk.get_uid() без предварительного vk.init().
Сейчас это работает, так как get_uid() использует только поля, инициализированные
в объявлении класса (name, bustype, vendor, product, version).
Но это хрупко — если get_uid() когда-либо обратится к dev_ или uidev_,
это приведёт к segfault.

Что сделано

  • Добавлен статический метод VirtualKeyboard::make_uid(name, bus, vid, pid, ver),
    который вычисляет UID из переданных параметров и не зависит от состояния объекта
  • get_uid() теперь делегирует make_uid() — обратная совместимость сохранена
  • В configure() используется make_uid() напрямую

Затронутые файлы

  • src/VirtualKeyboard.h — объявление make_uid()
  • src/VirtualKeyboard.cpp — реализация make_uid(), get_uid() делегирует ему
  • src/main.cppconfigure() использует make_uid() вместо get_uid()

Тестирование

  • Собрать проект (mkdir build && cd build && cmake .. && make)
  • Запустить sudo easy-switcher --debug — убедиться что UID виртуальной клавиатуры совпадает с прежним
  • Запустить sudo easy-switcher --configure — убедиться что конфигурация проходит без ошибок

В configure() вызывался vk.get_uid() без предварительного vk.init().
Это работало случайно, так как get_uid() использовал только поля,
инициализированные в объявлении класса. Но если get_uid() когда-либо
обратится к dev_ или uidev_, это приведёт к segfault.

Добавлен статический метод VirtualKeyboard::make_uid(), который
вычисляет UID из переданных параметров и не зависит от состояния
объекта. get_uid() теперь делегирует ему. В configure() используется
make_uid() напрямую.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants