fcitx是使用xlib写的界面。我们知道,xlib在linux下是最底层的图形库。QT和GTK都是基于xlib写的。所以,理论上讲,fcitx完全可以在没有QT和GTK的情况下运行。但是,也正是这个原因,fcitx的界面非常的简单。连基本的配置界面都没有。从程序的易用性方面讲,有一个配置窗口是非常合理而且合情的。但是,直接使用xlib处理界面实在不是太好的主意。尤其是用它来处理复杂一些的界面。
其实,fcitx完全可以将界面独立出来,而不在主程序中实现。写成一个so,抽象一下。将界面作为一个整体来处理。然后,在使用gtk之类的高级一点的图形库写复杂的配置界面等等。所以,个人认为,fcitx的界面部分实在是没有多少好分析的。仅仅是因为采用xlib写,非常繁琐,所以,代码感觉比较多。如果使用Gtk之类的写,代码肯定要少很多,而且很容易阅读。不过,那样一来,也失去了现在这种界面的优势。
在fcitx中,主要有3个窗口,主窗口、虚拟键盘窗口和候选词窗口。这3个窗口都比较简单。没有多少界面元素。所以,我就不再详细的解说了。仅仅对创建主窗口部分的代码做一点简单的注解。
// 创建主窗口。
// 主窗口的颜色之类的信息已经全部在LoadConfig函数里读入。
Bool CreateMainWindow (void)
{
XSetWindowAttributes attrib;
unsigned long attribmask;
int iBackPixel;
attrib