在X11中获取活动

时间:2013-03-19 06:09:13

标签: x11

我正在使用Canon SDK从相机中获取事件。在SDK中,我们注册了一个回调函数,该函数在特定事件发生时被调用。我已经构建了一个Java包装器,它与SDK通信。

但是当触发事件时,我的窗口不直接获取事件。事实上,在Windows上,这就是我获取事件并将其发送给自己的方式:

private static final User32 lib = User32.INSTANCE;
boolean hasMessage = lib.PeekMessage( msg, null, 0, 0, 1 ); // peek and remove
if( hasMessage ){
lib.TranslateMessage( msg ); 
lib.DispatchMessage( msg ); //message gets dispatched and hence the callback function is     called
}

如果窗口已收到某个事件,则基本上会发出一个窥视然后继续。在Mac上,可以使用Cocoa通过使用NSApplication并WindowServer发送事件(如果有)来执行此操作。

我正在寻找使用X11的类似替代方案。任何示例代码/链接都足够了。

PS:这是this.

的后续问题

1 个答案:

答案 0 :(得分:2)

我想你正在寻找XPeekEvent。 Xlib有很好的文档,XNextEvent(3)的联机帮助页说:

The XPeekEvent function returns the first event from the event queue,
but it does not remove the event from the queue.  If the queue is
empty, XPeekEvent flushes the output buffer and blocks until an event
is received.  It then copies the event into the client-supplied XEvent
structure without removing it from the event queue.

可以找到用于显示基本Xwindow和用于处理事件的主事件循环的示例代码(例如)on wikibooks