插件更新开发日志第二期

这一周主要是在写新的输入法事件修复方式
NVDA无条件信任输入法发过来的所有事件,问题是输入法发送的事件并不一定正确,这就是输入法朗读问题的来源。之前的方法是遇到一个问题,根据日志发现问题事件,做针对性检测然后处理。这种方法局限性很大,一次只能处理一种问题。问题多了会导致代码臃肿。新的修复方式采用状态机来智能检测事件,顺序不对的事件直接拒绝不响应。比如搜狗输入法会发送两次输入法结束的事件,内容也很奇怪有时候是第一个空的 有时候第一个是上一次输入的内容,还有时候,第二个是上一次输入的内容。新的方案会检测用户输入的字母,如果和结果对不上,而且是前一次内容的,就拒绝响应事件。微软输入法的读拼音问题也可以一样解决。
要是输入法不发送结果或者输入法发送的结果被QQ的安全模块一类的机制拦截了,那么插件还是没有办法获取到结果的。QQ窗口在NVDA启动之后打开可能会出现这种情况,Word有时候也会这样,重启一下qq或者word一般可以解决。

顺便了修复几个其他问题

搜狗输入法设置界面不朗读
这个设置界面非常奇怪,整个对话框只有一个对象。焦点移动到哪里,这个对象就是哪个控件的信息。发出的事件还全都是out of context的, NVDA不接受这种事件。 只能拦截tab和上下左右按键然后强制NVDA朗读一遍。

群里有人提出过一次ESC取消输入的时候出现的问题,虽然他的问题是插件造成的。日本版NVDA对ESC有特别处理,取消输入的时候,会朗读一条特别的消息比如“清除”来表示这次输入取消,不知道大家是否需要这个功能。

上一期提到的 焦点问题 有了个修复方案 但是会导致切换输入法之后的第一次输入存在延迟 再看看有没有更好的办法

标签: none

添加新评论