Я написал программу на C, которая активирует команды, когда пользователь щелкает по краям экрана. Например, взмах вверх от нижнего края поднимает клавиатуру. Эта часть моего кода работает нормально.
Проблема, с которой я сталкиваюсь, заключается в том, что само движение щелчком также прерывает приложения, так как пальцы должны перетаскивать часть экрана, чтобы активировать триггер. Я не хочу, чтобы это действие влияло на приложения, отображаемые на экране, пока пользователь щелкает края экрана.
Я хотел бы добавить код на C, который будет временно маскировать сенсорные события. Я могу обработать код, который правильно активирует маскирование (например, события, происходящие с краев экрана) и когда снимать маску.
Я могу справиться со всем вышеперечисленным, за исключением кода, который маскирует и снимает маску событий касания. Я не прошу полный полный код, а просто указатель в правильном направлении. Я хотел бы знать, какую библиотеку использовать, и соответствующую команду, которая выполняет маскирование.
Я не буду публиковать код, так как он длиной в пару сотен строк и, несомненно, приведет к отклонению от вопроса; код работает нормально, кроме вопроса выше.
Я на Raspberry Pi 3b + с Rasbian OS и официальным сенсорным экраном Raspberry Pi 7 ". Основные библиотеки C, которые я использую для программы, - это linux / input.h и X11 / extensions / XTest.h.
Я предоставлю любую дополнительную информацию, если ее попросят.
* РЕДАКТИРОВАТЬ *
Наконец-то понял! Самая большая проблема в том, что найти, что искать ...
Я замаскировал события указателя / касания следующей командой:
XGrabPointer(dpy, root, False, PointerMotionMask, GrabModeSync, GrabModeAsync, None, None, CurrentTime);
В приведенном выше коде движение касания маскируется (PointerMotionMask), указатель / касание для окон маскируется (GrabModeSync), а события клавиш клавиатуры не маскируются (GrabModeAsync).
Для снятия маски я использовал следующие команды:
XQueryPointer(dpy, RootWindow (dpy, 0),
&event.xbutton.root, &event.xbutton.window,
&event.xbutton.x_root, &event.xbutton.y_root,
&event.xbutton.x, &event.xbutton.y,
&event.xbutton.state);
usleep(10000);
XUngrabPointer(dpy, CurrentTime);
usleep(10000);
XQueryPointer(dpy, RootWindow (dpy, 0),
&event.xbutton.root, &event.xbutton.window,
&event.xbutton.x_root, &event.xbutton.y_root,
&event.xbutton.x, &event.xbutton.y,
&event.xbutton.state);
Я все еще изучаю Xlib, поэтому я не совсем понимаю, зачем нужно добавлять usleep и XQueryPointer, но я обнаружил, что это необходимо, или программа непредсказуема. Я просто скопировал этот тип кода из моей функции buttonPress (). Я не смог найти никакого полного, простого и ясного ответа, поэтому для этого потребовалось много попыток / неудач.
Теперь я могу провести по краям на сенсорном экране Raspberry Pi, и в текущее активное окно не прерывается.
Если кто-то захочет увидеть код, просто спросите, и я выложу его полностью. И если кто-нибудь знает, как работает этот код и почему мне нужно добавить usleep и XQueryPointer, я бы хотел услышать.
Использованные источники:
X11: будет ли XGrabPointer предотвращать другие приложения от какого-либо события мыши?
https://tronche.com/gui/x/xlib/input/pointer-grabbing.html