Xlib - 忽略XGrab *中的修饰键

时间:2011-03-17 01:26:09

标签: mask xlib

呼啦,

我目前正在对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);
}

有什么想法吗?


编辑:

我发现实际上事件处理程序 记录了点击,但点击是转发到子窗口,这正是我的行为想。

更新

我目前使用以下代码实现了聚焦功能,它跟踪指针并将其聚焦在任何地方。在我的机器上,它看起来并不像它看起来那么昂贵:

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 :(得分:0)

对于没有修饰符,掩码为0