Tag: xcb

全球alt +空间热键抓取 – 奇怪的键盘焦点行为

我正在使用xcb_grab_key获取Alt+Space全局热键,如下所示: xcb_key_symbols_t *keysyms = xcb_key_symbols_alloc(c); xcb_keycode_t *keycodes = xcb_key_symbols_get_keycode(keysyms, XK_space), keycode; // add bindings for all screens xcb_screen_iterator_t iter; iter = xcb_setup_roots_iterator (xcb_get_setup (c)); for (; iter.rem; xcb_screen_next (&iter)) { int i = 0; while(keycodes[i] != XCB_NO_SYMBOL) { keycode = keycodes[i]; xcb_grab_key(c, true, iter.data->root, XCB_MOD_MASK_ANY, keycode, XCB_GRAB_MODE_SYNC, XCB_GRAB_MODE_SYNC); i += 1; } } 然后在Qt的QAbstractNativeEventFilter子类中,我处理它并在密钥匹配Alt+Space发出Qt信号: xcb_keycode_t […]

XEventsQueued等效于xcb

我在XCB中读到了“ Need for XEventsQueued(display,QueuedAfterReading) ”,但答案指定了一个修改内部事件队列的函数( xcb_poll_for_queued_event )。 我需要一个与XEventsQueued(display, QueuedAfterReading) 完全相同的函数。 如果在使用XEventsQueued地方完成,修改事件队列会破坏我正在编写的代码。 什么是xcb中的等效函数或代码块?

在XCB中需要XEventsQueued(display,QueuedAfterReading)

我正在将一些CYBOI代码从Xlib迁移到XCB。 CYBOI使用几个线程用于不同的通信通道,如:serial_port,terminal,socket,x_window_system。 但是,它仅将这些线程用于信号/事件/数据检测; 实际的接收和发送是在主线程中完成的,以避免地址空间的任何multithreading冲突。 对于x_window_system通道,我先前检测到线程中的事件 : int n = XEventsQueued(display, QueuedAfterReading); 在检测到事件时,设置“中断标志”。 之后,主线程正在使用以下方式读取实际事件 : XNextEvent(display, &event); 当没有更多事件可用时,主线程停止接收事件,并且x_window_system通道线程再次开始侦听XEventsQueued。 现在,我正在将代码迁移到XC Binding(XCB)。 有一个阻塞函数“xcb_wait_for_event”,可以用于读取事件。 我想念的是一些function“偷看”,如果有事件待处理,没有实际返回/从队列中删除事件。 我现在正在网上阅读几个小时,但我找不到这样的function。 “xcb_poll_for_event”无济于事。 阻止对我来说很好,因为我的事件检测在它自己的线程中运行。 作为第三个输入函数的“xcb_request_check”似乎不是我想要的。 有人可以帮帮我吗? 谢谢,克里斯蒂安

如何使用XCB将关键事件发送到应用程序?

如何使用XCB从另一个程序向一个窗口(当前活动窗口)发送按键按键或按键释放事件? 我找到了一些使用XLib教程,但是我想使用XCB 。 我想我将不得不调用xcb_send_event ,但是我不知道将它作为参数传递给它。