Xlib - игнорировать клавиши-модификаторы в XGrab * - PullRequest
0 голосов
/ 17 марта 2011

Холла,

В настоящее время я взламываю некоторые изменения в 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); 

1 Ответ

0 голосов
/ 17 марта 2011

Маска будет 0 без модификаторов.

...