Холла,
В настоящее время я взламываю некоторые изменения в TinyWM - одно из того, что я хотел бы реализовать, - это политика щелчка по фокусу.
Я понял, чтоМне нужно запустить XGrabButton
на дочернем элементе, как он создается в событии MapNotify
, но я не могу понять, какую маску модификатора использовать, которая игнорирует все маски модификаторов (то есть, я хотел бы, чтобы щелчок фокусировки происходил неважно, какие клавиши-модификаторы активированы).
Я попал в кирпичную стену, так как даже AnyModifier
, кажется, не работает, когда у меня не нажаты клавиши-модификаторы (и даже тогда, этодовольно придирчиво).
Вот соответствующий кусок кода:
void eMapNotify(Display *dpy, XEvent *ev){
// Ignore windows we don't care about
if (!ev.xmap.override_redirect) XSetWindowBorderWidth(dpy, ev.xmap.window, 3);
// Allows us to hook into this window's clicks to let us focus it
XGrabButton(dpy, 1, WHAT_MASK_DO_I_PUT_HERE, ev.xmap.window,
True, ButtonPressMask, GrabModeAsync, GrabModeAsync,
None, None);
}
Есть идеи?
РЕДАКТИРОВАТЬ:
Я нашелиз-за того, что на самом деле обработчик событий делает запись клика, но клик не перенаправляется в дочернее окно, и это именно то поведение, которое я хочу.
UPDATE
В настоящее время я реализовал функцию фокусировки с помощью следующего кода, который отслеживает указательи фокусирует его там, где он есть.На моей машине это не так дорого, как может показаться:
Window dump, child;
int rx, ry, cx, cy;
unsigned int mask;
// Get the pointer's location
XQueryPointer(dpy, root, &dump, &child, &rx, &ry, &cx, &cy, &mask);
// Focuses the pointer's current window
XSetInputFocus(dpy, dump, RevertToNone, CurrentTime);