我目前正在尝试在运行X服务器但没有窗口管理器的Linux armv7嵌入式系统上构建并运行一个使用SDL2的UnrealEngine4演示应用程序。
我所看到的是,应用程序不响应键盘事件,尽管鼠标工作正常。
进一步挖掘发现,问题在于如果SDL_Event.key.windowID与应用程序的SDL_Window的ID不匹配,UE4会忽略键盘事件。我通过调用SDL_GetKeyboardFocus()验证了这一点,结果是键盘焦点的窗口ID是0,而应用程序的窗口ID是5。
进一步深入了解一下,键盘焦点似乎是在从X服务器接收到focusIn事件后被设置到特定的SDL2窗口。(请参见SDL_x11events.c中的X11_DispatchEvent() )。
看起来,如果您在没有窗口管理器的情况下运行X11,则此focusIn事件永远不会由X服务器生成,正如这里已经回答的那样:
FocusIn/FocusOut not generated
在SDL_x11windows.c中修改X11_RaiseWindow()之后,添加以下内容:
X11_XSetInputFocus(显示,数据->xwindow,RevertToParent,CurrentTime);SDL_SetKeyboardFocus(数据->窗口);
最终能够让键盘事件得到处理。
上面的评估听起来正确吗?如果是这样,有没有一个干净的解决方案?我仍在深入研究,但任何建议都将不胜感激。
谢谢
发布于 2015-05-31 13:07:06
这被证明是SDL中的一个错误,我们刚刚对其进行了修复:
https://hg.libsdl.org/SDL/rev/aa4e4768c6c1
这个修复将出现在SDL 2.0.4中,并且应该很快就会扩展到虚幻。
https://stackoverflow.com/questions/26863470
复制相似问题