Пересылка событий не будет работать хорошо, как вы уже догадались;он создает множество условий гонки, и некоторые приложения все равно будут игнорировать данные с XSendEvent
.
Что вы можете сделать, это установить маску входной формы.См. http://www.x.org/releases/current/doc/xextproto/shape.html, а затем посмотрите на XFixesSetWindowShapeRegion()
в /usr/include/X11/extensions/Xfixes.h
, который позволяет указать «вид» фигуры (здесь вы хотите ShapeInput
).
Что-то вроде:
XRectangle rect;
XserverRegion region = XFixesCreateRegion(display, &rect, 1);
XFixesSetWindowShapeRegion(display, window, ShapeInput, 0, 0, region);
XFixesDestroyRegion(display, region);
Способность установить ShapeInput
"всего лишь" 5-6 лет, поэтому, если вам небезразличны действительно дрянные старые версии X11, вас могут не заметить.