技术开发 频道

Meego 输入法架构介绍

  【IT168技术】Meego输入法框架与著名的SCIM输入法框架类似,如果对SCIM不了解,可参看之前的转载,Meego输入法主要分为,输入法前端插件,输入法引擎、输入法插件,以及输入法插件管理服务模块、配置模块、进程通信模块。

  输入法前端插件,即实现了QInputContext的对象,这些对象被包装在QInputContextPlugin插件中,放置在/usr/lib/qt4/plugins/inpputmethods目录下,程序启动时对该目录下的所有插件进行加载,程序使用输入法时,创建指定的QInputContext对象。QInputContext对象不做任何实际逻辑操作,作为轻量级模块被应用程序加载,截获用户的输入事件,并将事件通过D-Bus机制转发给输入法插件管理服务模块。

  Meego似乎借鉴了其他系统的代码,这里的插件,实际上并不允许第三方开发插件,Meego仅仅加载了自己写的插件,不会加载其他插件,故这里的插件,是个虚的。

  输入法引擎,即实现了MImEngineWordInterface的对象,主要管理词库、键盘布局等信息,模块存放于/usr/lib/meego-imengines/drivers/目录下,Meego系统的默认输入法只实现了英文输入法,输入法引擎这一块没有实现,甚至连/usr/lib/meego-imengines目录都没有。

  输入法插件,Meego中,输入法是作为插件来加载和管理的,插件的接口为MInputMethodPlugin,其中包含输入法的设置MInputMethodSettingBase。输入法插件的目录为/usr/lib/meego-im-plugins,该目录下的插件由系统服务加载,故如果新增插件,需重启系统方有效。这个插件,是实打实的插件机制。

  输入法插件管理服务,这是一个系统服务进程,名为meego-im-uiserver,在系统启动的时候对输入法插件进行加载、激活、切换,和输入法前端的进程通信,并将信息转发给当前激活的插件。

  配置管理模块,负责输入法的配置。

  进程通信模块,Meego采用D-Bus机制来负责输入法前端和输入法插件管理服务的通信,D-Bus可以完成双向的类似于COM的调用机制。

  在QT中,可以通过实现QInputContext类来完成程序自己的输入法模块,通过

  QApplication::setInputContext来将该对象的指针设置给程序,程序即启用该输入法,Meego号称自己支持QT,是否对该类进行了支持呢?通过实际开发发现,Meego支持QInputContext。

  在QT中,可以通过实现QWSMethodInput类来完成第三方的输入法模块,通过QWSSwever来将该类的对象的指针设置给系统,系统即启用该输入法,Meego号称自己支持QT,是否对该类进行了支持呢?

  通过察看SDK发现,Meego的SDK通过宏QT_NO_QWS_INPUTMETHODS进行了屏蔽,即Meego不支持QWSMethodInput,所以对QT的支持,只是个子集。

0
相关文章