Tag: xlib

为什么XGrabKey生成额外的焦点和焦点事件?

有没有人知道一个xlib函数来捕获按键事件,而不会失去原来的焦点? 如何摆脱它? (或者“使用XGrabKey()而不生成抓取式聚焦”?) (或者“在系统级别如何摆脱NotifyGrab和NotifyUngrab焦点事件? XGrabKey将失去对按键的焦点,并恢复焦点释放的按键。 我想捕捉按键没有泄漏到原来的窗口(就像XGrabKey可以做到这一点)。 参考文献: … XGrabKey将窃取焦点… https://bugs.launchpad.net/gtkhotkey/+bug/390552/comments/8 …程序收到控制权以响应组合键。 同时,程序已经暂时集中在 … 在XGrabKey(板),发现哪个窗口已经集中 … XGrabKeyboard函数主动抓取键盘控件,并生成FocusIn和FocusOut事件… http://www.x.org/archive/X11R6.8.0/doc/XGrabKeyboard.3.html#toc3 …我看不到一种方式来提供metacity当前的桌面changin行为(同时更改并显示popup对话框),而不会导致窗口上的Grabtypes焦点… https://mail.gnome .ORG /档案馆/ WM说明列表/ 2007-月/ msg00000.html …全屏模式不应该退出与NotifyGrab的FocusOut事件… https://bugzilla.mozilla.org/show_bug.cgi?id=578265 抓住键盘不允许改变焦点… 抓住键盘不允许改变焦点 Grabs生成的焦点事件(XGrabKeyboard的主动抓取和XGrabKey的被动抓取) http://www.x.org/releases/X11R7.6/doc/libX11/specs/libX11/libX11.html#Focus_Events_Generated_by_Grabs XGrabKey源代码: http ://cgit.freedesktop.org/xorg/lib/libX11/tree/src/GrKey.c也许我们可以修改这个来摆脱焦点事件? 有“DoFocusEvents(keybd,oldWin,grab-> window,NotifyGrab);” 在ActivateKeyboardGrab()中: http : //cgit.freedesktop.org/xorg/xserver/tree/dix/events.c 我正在为按键组合(和鼠标移动)绘图软件写一个按键: https : //code.google.com/p/diyism-myboard/ 我已经在Windows中用RegisterHotKey()和UnRegisterHotKey()实现了它: https : //code.google.com/p/diyism-myboard/downloads/detail? name = MyBoard.pas 我想用XGrabKey()和XUngrabKey()把它迁移到Linux中: https : //code.google.com/p/diyism-myboard/downloads/detail? name […]

Xlib和Firefox的行为

我试图创build一个小窗口pipe理器(只是为了好玩),但我在处理由Firefox创build的窗口时遇到问题(只有使用该应用程序,其他应用程序工作正常) 问题是,我启动Firefox后,添加我的装饰,似乎工作正常,但如果例如我尝试点击菜单button,(子)窗口不会出现。 什么似乎发生的是,点击后,ClientMessage事件触发与以下值: Data: (null) Data: _NET_WM_STATE_HIDDEN Data: (null) Data: (null) Data: (null) 现在的问题是,我不知道如何显示窗口,哪个窗口。 我试着用: XRaiseWindow XMapWindow 我试图得到瞬态窗口,并显示它 但没有成功。 我不明白的是,如果这个客户端消息是由菜单子窗口生成或不。 我应该如何显示一个窗口在_NET_WM_STATE_HIDDEN? 另一个奇怪的问题是,收到ClientMessage后,我总是收到2个UnMapNotify事件。 我还有另一个问题,如果我想显示“文件,编辑”菜单(在Firefox中,如果我没有记错的话,当你按下Alt键时。 也许Firefox创build一个窗口树? 这是我处理事件的循环: while(1){ XNextEvent(display, &local_event); switch(local_event.type){ case ConfigureNotify: configure_notify_handler(local_event, display); break; case MotionNotify: motion_handler(local_event, display); break; case CreateNotify: cur_win = local_event.xcreatewindow.window; char *window_name; XFetchName(display, cur_win, &window_name); printf("Window name: %s\n", window_name); if(window_name!=NULL){ if(!strcmp(window_name, […]

全球热键与X11 / Xlib

我的目标是有一个程序,睡在后台,但可以由用户通过一些“热键”激活。 从Xlib手册和Xlib O'reilly手册的深入挖掘中,我可以得出正确的方法是使用XGrabKey。 然而,我对这个过程的理解是不正确的,因为一个简单的概念certificate是行不通的。 我的理解是,如果我用根窗口作为grab_window调用XGrabKey,并且owner_events为false,那么无论何时按下我的热键,事件将只发送到根窗口。 如果我然后从根窗口中selectKeyPress事件,然后监听X事件,当按下热键时,我应该得到一个按键事件。 我在下面贴了一个简单的例子。 我期望的是当程序运行时,不pipe窗口有什么焦点,如果按下Ctrl + Shift + K,我的程序应该输出“Hot key pressed! 在控制台中,然后终止。 此外,这是我的理解,如果XGrabKey失败,默认的error handling程序将显示一条消息,因为它不,我假设调用成功。 显然,我的理解有点不对劲。 任何人都可以指向正确的方向吗? #include <iostream> #include <X11/Xlib.h> #include <X11/Xutil.h> using namespace std; int main() { Display* dpy = XOpenDisplay(0); Window root = DefaultRootWindow(dpy); XEvent ev; unsigned int modifiers = ControlMask | ShiftMask; int keycode = XKeysymToKeycode(dpy,XK_Y); Window grab_window = […]

如何确定多边形是复杂的/凸的/非凸的?

从XFillPolygon的手册页 ·如果形状是复杂的,path可以自相交。 请注意,path中的重合点不被视为自交。 ·如果形状为凸,则对于多边形内的每对点,连接它们的线段不会与path相交。 如果客户知道,指定凸面可以提高性能。 如果将凸指定为非凸的path,则graphics结果是不确定的。 ·如果形状为非凸,path不自相交,但形状不是完全凸的。 如果客户端知道,指定Nonconvex而不是Complex可能会提高性能。 如果您为自相交path指定Nonconvex,则graphics结果未定义。 我遇到了填充XFillPolygon性能问题,因为手册页build议我要采取的第一步是指定Polygon的正确形状(我目前正在使用Complex来保证安全)。 是否有一个有效的algorithm来确定多边形(由一系列坐标定义)是凸的,非凸的还是复杂的?