首页 > 解决方案 > 如何在 linux 上运行的 fltk 程序中启用 fcitx 输入法?

问题描述

我试图在我在 linux 上运行的 fltk 程序中输入一些汉字,但失败了。我用的是fcitx,专门fcitx-googlepinyin作为中文输入法的。

以下代码将生成一个包含单个输入框的窗口。

#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Input.H>

int main(int argc, char **argv) {
    Fl::scheme("GTK+");

    Fl::background(35, 35, 35);
    Fl::background2(90, 90, 90);
    Fl::foreground(240, 240, 240);

    Fl_Window *window = new Fl_Window(640, 480);

    Fl_Input *input = new Fl_Input(20, 20, 200, 20);

    window->end();
    window->show(argc, argv);

    return Fl::run();
}

ctrl + space当我点击输入框的时候,在fltk程序中按一下是无法切换到我的中文输入法的。但在 Firefox 或 Atom 等其他 GUI 程序中,中文输入法运行良好。

我设置了一些变量如下:

export XIM="fcitx"
export XIM_PROGRAM="fcitx"
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"

如何在 fltk 程序中启用 fcitx 输入法?

标签: fltkfcitx

解决方案


研究了X输入法后发现这是fltk >= 1.3.4的bug(fltk-1.3.3有正确的实现)。

在第 673 行src/Fl_x.cxx,正确的代码应该是XSetLocaleModifiers("");而不是XSetLocaleModifiers("@im=");。第 1329 行也有同样的问题。

只需更正这两行代码并重新编译库,输入法将再次正常工作。

我还在fltk 的网站上发布了一个错误报告,请查看它以获取更多详细信息。


推荐阅读