SDL2 输入焦点

3
我目前正在尝试在没有窗口管理器的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服务器生成,如此处所述: FocusIn/FocusOut not generated 在SDL_x11windows.c中添加X11_RaiseWindow()后,问题得以解决。

X11_XSetInputFocus(显示器,数据->xwindow,RevertToParent,CurrentTime); SDL_SetKeyboardFocus(data->window);

现在可以最终处理键盘事件。

以上评估是否正确?如果是,是否有干净的解决方案?我仍在探索中,但任何建议都将不胜感激。

谢谢


我遇到了同样的问题。在我的看法中,这应该是SDL的实际行为,因此您应该向他们提交错误报告。 - Display Name
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接