Ignore Touchpad

„Haiku” logo

Исходный код: Ignore Touchpad

Если я программирую или пишу рассказы на ноутбуке во время поездки в поезде, часто случается так, что из-за толчка я касаюсь большим пальцем тачпада. В результате текст, который я строчу, набирается совсем не в том месте, где я хотел бы его видеть. Это ужасно раздражает. В какой-то момент я взбесился и решил, что больше не хочу страдать.

В итоге получилась небольшая консольная утилита для операционной системы Haiku, задача которой — фильтровать случайные нажатия на тачпад ноутбука, если у ноутбука больше одного устройства позиционирования курсора:

Терминал операционной системы „Haiku” с выводом help`а программы.

Алгоритм очень простой: при получении просьбы игнорировать одно из устройств моя программа передаёт эту просьбу операционной системе через BInputDevice→Stop(), а если пользователь просит подключить устройство обратно, утилита вызывает BInputDevice→Start():

Самая главная часть программы.

Вся функциональность занимает около двадцати строк, если не считать пустые. Все остальные двести восемьдесят — это оформление, проверки верности ввода, сообщения об ошибках и тому подобная вода.

Сейчас утилита предназначена для работы из командной строки, у неё есть два режима, интерактивный и неинтерактивный. Неинтерактивный режим очень удобен для использования в качестве системных Shortcut`ов: если подключать мышку к ноутбуку, когда он уже загрузился, то тачпад будет иметь номер 0, поэтому можно одним аккордом отключить тачпад. Ну и на всякий случай полезно иметь аккорд для того, чтобы включить все ранее отключённые устройства: утилита не резидентная, она не проверяет, сколько устройств позиционирования курсора осталось в системе, и если пользователь включил игнорирование тачпада, а потом физически отключил от ноутбука мышь, тачпад сам не разблокируется, и пользователь не сможет управлять курсором вообще.

Пример использования системных настроек „Shortcuts” для вызова моей утилиты.

Я также пишу для неё GUI, репликант, который будет загружаться вместе с операционной системой и резидентно висеть в памяти в Deskbar Shelf, аналоге Taskbar notification area в Windows. Тогда пользователь сможет подключать и отключать устройства, не забираясь в командную строку. Мой GUI будет основан на программе „AutoRaise” разработчика mmu_man. Но написание графического интерфейса — процесс небыстрый, потому что мне этот функционал не нужен, и есть более интересные задачи 🙂

Пример работы утилиты:

Исходный код: Ignore Touchpad