不同于传统的PC设备+传统PC操作系统,移动端设备+平板模式下紧张的笔墨输入办法为虚拟键盘而非实体键盘,因此一款好用、易用、稳定的虚拟键盘将大幅提升移动端设备+平板模式下的利用体验,但遗憾的是传统的Linux生态中一贯短缺一款这样的产品。
为此,openKylin社区InputMethod SIG和Fcitx社区核心开拓职员取得联系,并一起谈论剖析了当前情形,终极双方决定由InputMethod SIG组主导,基于最新的Fcitx5输入法框架进行扩展,增加Fcitx5对虚拟键盘的支持,然后在此根本上再开拓openKylin虚拟键盘。同时为减少国内外其他开拓者的重复事情,InputMethod SIG组的技能成果也将同步提交到Fcitx社区的干系项目中去!
难点打破

在实际研发过程中,InputMethod SIG组碰着了不少技能难点须冲要破,紧张总结为以下5点:
01
虚拟键盘的按键事宜与物理键盘的按键事宜存在的实质差异;
02
Fcitx5既要许可虚拟键盘利用已有的物理键盘输入法引擎也要许可虚拟键盘利用未来专门的虚拟键盘输入法引擎;
03
Fcitx5输入法框架不能引入Qt或Gtk这种重量级UI框架;
04
虚拟键盘存在多种按键:字母键、数字键、开关键、掌握键、功能键等;
05
虚拟键盘须要考虑多措辞输入法。
方案确定
为办理以上难题,经由与Fcitx5社区反复剖析和谈论,InputMethod SIG组决定采取以下方案分阶段各个击破。
一是分两个阶段实现虚拟键盘和Fcitx5输入法框架对虚拟键盘的支持。在第一期中虚拟键盘先实现跟物理键盘布局等价的UI;Fcitx5输入法框架则增加相应的虚拟键盘UI代理模块用来跟虚拟键盘UI进行通信。在第二期中虚拟键盘UI做事实现根据输入法引擎的要求显示输入法引擎自定义虚拟键盘UI;Fcitx5输入法则增加相应的虚拟键盘UI自定义模块来许可输入法引擎要求自定义的虚拟键盘UI。二是虚拟键盘UI的事宜不须要走传统的Fcitx5 frontend进行通信,而是跟Fcitx5中专门的虚拟键盘UI代理模块进行通信。该虚拟键盘UI代码模块的功能类似于Fcitx5中已有的kimpanel模块。三是在Fcitx5输入法框架中增加新的虚拟键盘输入法引擎接口类以及虚拟键盘按键事宜处理函数。在该接口中,通过动态检测当前的输入法引擎是虚拟键盘输入法引擎还是物理键盘输入法引擎来决定将虚拟键盘的按键事宜发给送哪个按键事宜处理函数。四是虚拟键盘UI作为一个单独的做事存在,专门用于跟Fcitx5输入法框架中的虚拟键盘UI代理模块进行IPC通信。开拓进程
在确定好总体思路之后,接下来便是进行实际开拓了。8月8日,InputMethod SIG向Fcitx5仓库提交了第一个PR,由此开启了Fcitx5开始供应虚拟键盘支持机制的新阶段。经由和Fcitx5作者的反复沟通,以及Fcitx5作者自己对提交的代码的修正和优化,于8月10日,InputMethod SIG提交的PR终于合并到了dev分支。
这次代码提交紧张是在Fcitx5中实现了虚拟键盘UI代理模块以及打通了从dbus frontend和虚拟键盘UI代理模块之间的联系。紧张实现功能如下:
运用程序可以通过dbus frontend供应的接口掌握虚拟键盘的显示和隐蔽;Fcitx5在收到focus in后自动显示虚拟键盘以及focus out后自动隐蔽虚拟键盘;虚拟键盘UI代理模块可以将虚拟键盘按键事宜发送给物理键盘输入法引擎以及发送仿照按键。不过,这次提交还短缺一个主要的功能没有实现,便是让虚拟键盘的按键事宜能够跟物理键盘按键事宜区分出来并且能够让虚拟键盘不仅仅利用已有的物理键盘输入法引擎,还可以利用新的专用的虚拟键盘输入法引擎。终极经由完善,在8月12日完成了末了一个PR的合并!
至此,实现了Fcitx5输入法框架基本的虚拟键盘支持机制!
在Fcitx5支持虚拟键盘机制的根本之上,InputMethod SIG组采取QML和C++稠浊编程的办法实现了虚拟键盘UI做事。个中,C++卖力供应DBus做事并实现了Fcitx5中的虚拟键盘代理模块进行双向通信的接口;QML卖力虚拟键盘UI做事的界面。
展望未来
当前第一阶段的openKylin虚拟键盘输入法的开拓已经完成,openKylin社区InputMethod SIG组向Fcitx社区的4个项目贡献了20多个PR近1200行代码,为开源社区的繁荣发展做出了自己的贡献!
在接下来的方案中,InputMethod SIG组将进一步优化虚拟键盘支持机制,实现输入法引擎自定义虚拟键盘UI。在这个机制的加持下,虚拟键盘增加多措辞输入法支持将变得更加随意马虎!
生态培植,道阻且长。唯有开源聚力,方能行稳致远。InputMethod SIG组目标是为openKylin用户供应一个好用易用、多模、多形态、多措辞的输入法,为openKylin操作系统生态培植添砖加瓦,让openKylin操作系统生态更加繁荣!
ps:想理解详细技能细节的小伙伴们可以点击 https://forum.openkylin.top/portal.php 前往openKylin论坛查看完全开拓进程~
openKylin(开放麒麟)社区旨在以“共创”为核心,在开源、志愿、平等、协作的根本上,通过开源、开放的办法与企业构建互助伙伴生态体系,共同打造桌面操作系统顶级社区,推动Linux开源技能及其软硬件生态繁荣发展。
社区首批理事成员单位包括麒麟软件、普华根本软件、中科方德、麒麟信安、凝思软件、一铭软件、复兴新支点、元心科技、中国电科32所、技德系统、北京麟卓、前辈操作系统创新中央等13家家当同仁和行业机构。
来源:InputMethod SIG
审核:openKylin