gpt4 book ai didi

x11 - SDL2输入焦点

转载 作者:行者123 更新时间:2023-12-03 03:23:49 24 4
gpt4 key购买 nike

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

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

进一步挖掘发现问题在于,如果 SDL_Event.key.windowID 与应用程序的 SDL_Window ID 不匹配,UE4 会忽略键盘事件。我通过调用 SDL_GetKeyboardFocus() 验证了这一点,结果发现键盘焦点的窗口 ID 为 0,而应用程序的窗口 ID 为 5。

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

看起来如果您在没有窗口管理器的情况下运行 X11,但是 X 服务器永远不会生成此 focusIn 事件,正如此处已经回答的那样:

FocusIn/FocusOut not generated

在 SDL_x11windows.c 中通过添加以下内容破解 X11_RaiseWindow() 后:

X11_XSetInputFocus(显示, 数据->xwindow, RevertToParent, CurrentTime);SDL_SetKeyboardFocus(数据->窗口);

终于能够处理键盘事件了。

上述评估听起来正确吗?如果是这样,有一个干净的解决方案吗?我仍在探索,但任何建议将不胜感激。

谢谢

最佳答案

事实证明这是 SDL 中的一个错误,我们刚刚推出了修复程序:

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

此修复将出现在 SDL 2.0.4 中,并且应该会在不久之后转移到 Unreal。

关于x11 - SDL2输入焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26863470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com