无法在SDL2创建的窗口上打开输入法

问题描述 投票:2回答:3

我为SDL2文本事件处理编写了一个测试程序,当我专注于SDL2创建的窗口时,无法打开输入法。

我正在使用Xfce桌面和Fcitx输入法引擎在Linux上进行测试。

代码很简单:

#include <SDL.h>

int main(int argc, char** argv)
{
    SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER | SDL_INIT_EVENTS);
    SDL_Window* window = SDL_CreateWindow("sdl text test", 50, 50, 400, 400, SDL_WINDOW_OPENGL);

    SDL_StartTextInput();

    while (1)
    {
        // process events
        SDL_Event event{};
        bool should_exit = false;

        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
            case SDL_QUIT:
                should_exit = true;
                break;
            case SDL_TEXTEDITING:
                printf("text edit: %s %d %d\n", event.edit.text, event.edit.start, event.edit.length);
                break;
            case SDL_TEXTINPUT:
                printf("text input: %s\n", event.text.text);
                break;
            }
        }

        if (should_exit) break;

        SDL_Delay(20);
    }

    SDL_StopTextInput();
}

我简要介绍了SDL2的文档,但未能找到与键盘抓取相关的任何内容。

sdl-2 ime
3个回答
1
投票

尝试删除

videodata->ime_uilesss = UILess_SetupSinks(videodata); in函数IME_Init的SDL_windowskeyboard.c。

这很难看,但很有效。

如果videodata->ime_uiless == SDL_False

然后windows会显示输入法,

否则sdl2将呈现并显示输入方法。


1
投票

我正在使用Windows 10 + SDL并且正在考虑在Windows下对IME的SDL支持,并且不知道考虑到在SDL代码库中从不调用IME_Render / IME_Present函数它可能如何工作。

使用SDL_windowskeyboard.c中的#define SDL_DISABLE_WINDOWS_IME编译SDL为我修复了它(xwang的建议将导致类似的结果)。


1
投票

我不知道为什么,但它可以做到这一点:自己构建SDL2。

我曾经使用SDL2自带的Ubuntu apt repo,libsdl2-dev/bionic-updates,now 2.0.8+dfsg1-1ubuntu1.18.04.1 amd64。 IME无法显示或切换。

在我用自己构建的SDL2 lib(相同版本2.0.8)替换后,IME运行良好。

© www.soinside.com 2019 - 2024. All rights reserved.