请考虑以下在线最小窗口管理器。它可以编译并运行良好。
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
Display *display;
Window window;
XEvent event;
int s;
/* open connection with the server */
display = XOpenDisplay(NULL);
if (display == NULL)
{
fprintf(stderr, "Cannot open display\n");
exit(1);
}
s = DefaultScreen(display);
/* create window */
window = XCreateSimpleWindow(display, RootWindow(display, s), 10, 10, 200, 200, 1,
BlackPixel(display, s), WhitePixel(display, s));
/* select kind of events we are interested in */
XSelectInput(display, window, KeyPressMask | KeyReleaseMask );
/* map (show) the window */
XMapWindow(display, window);
/* event loop */
while (1)
{
XNextEvent(display, &event);
/* keyboard events */
if (event.type == KeyPress)
{
printf( "KeyPress: %x\n", event.xkey.keycode );
/* exit on ESC key press */
if ( event.xkey.keycode == 0x09 )
break;
}
else if (event.type == KeyRelease)
{
printf( "KeyRelease: %x\n", event.xkey.keycode );
}
}
/* close connection to server */
XCloseDisplay(display);
return 0;
}
[在此窗口管理器中,我可以使用ubuntu(服务器添加,安装xinit)来加载终端(例如xterm)和屏幕键盘程序上的“板载”。屏幕键盘上的板载键盘不会在此最小窗口管理器中向其他窗口发送键输入(板载在屏幕底部)。
请注意,DWM极简窗口管理器可以按预期工作(板载输入将发送到所有其他窗口)。我无法在DWM源中找到考虑这种情况的地方。
我的问题是:我如何使这个极简主义的窗口管理器允许Onboard屏幕键盘将输入发送到其他窗口?
找到了解决方案。我应该一直在终端上使用XSetInputFocus,然后输入正确地到达那里。