SDL2输入焦点

时间:2014-11-11 11:09:08

标签: x11 sdl-2

我目前正在尝试在运行X服务器但没有窗口管理器的Linux armv7嵌入式系统上构建和运行使用SDL2的UnrealEngine4演示应用程序。

我看到的是应用程序对键盘事件没有响应,尽管鼠标工作正常。

进一步研究结果表明,如果SDL_Event.key.windowID与应用程序的SDL_Window的ID不匹配,则UE4会忽略键盘事件。我通过调用SDL_GetKeyboardFocus()验证了这一点,结果显示键盘焦点的窗口ID为0,而应用程序窗口的ID为5。

在SDL2内部进一步挖掘,看起来在从X服务器收到focusIn事件后,键盘焦点被设置为特定的SDL窗口。 (请参阅SDL_x11events.c中的X11_DispatchEvent())。

看起来如果你在没有窗口管理器的情况下运行X11,但是这个focusIn事件永远不会被X-server生成,如下所示:

FocusIn/FocusOut not generated

通过添加以下内容在SDL_x11windows.c中攻击X11_RaiseWindow()之后:

X11_XSetInputFocus(display,data-> xwindow,RevertToParent,CurrentTime); SDL_SetKeyboardFocus(DATA->窗口);

能够最终处理键盘事件。

上述评估听起来是否正确?如果是这样,有一个干净的解决方案吗?我还在四处寻找,但任何建议都会受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:0)

这证明是SDL中的一个错误,我们只是推动了修复:

https://hg.libsdl.org/SDL/rev/aa4e4768c6c1

此修复程序将在SDL 2.0.4中,并且此后不久就应该冒泡到Unreal。