LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1031|回复: 3

老大,关于光标跟随的问题

[复制链接]
发表于 2006-12-5 20:18:36 | 显示全部楼层 |阅读模式
在俺的系统中(Debian Sid, Gnome),候选窗口会遮住正在输入的那一行的光标位置右边的一部分字符。如果候选字窗口在下方则遮住下面一小半,如果候选字窗口在文字的上方则遮住上面一小半。
相关的代码位于ime.c,如下:
  1. INT8            iOffsetY = 12;
  2. .
  3. .
  4. .
  5. if (iTempInputWindowY < 0)
  6.     iTempInputWindowY = 0;
  7. else if ((iTempInputWindowY + iInputWindowHeight + iOffsetY) > DisplayHeight (dpy, iScreen))
  8.     iTempInputWindowY = DisplayHeight (dpy, iScreen) - 2 * iInputWindowHeight;
  9. else
  10.     iTempInputWindowY += iOffsetY;
复制代码
其中,
  1. iTempInputWindowY = DisplayHeight (dpy, iScreen) - 2 * iInputWindowHeight;
复制代码
直接改为
  1. iTempInputWindowY -= iInputWindowHeight;
复制代码
之后,遮住上小半部分字的问题解决了。
  1. iOffsetY = 12;
复制代码
改为
  1. iOffsetY = 16;
复制代码
后,在一般情况下,遮住下小半部分的问题也改善了。[color="Red"]注意:俺使用的字体大小是12,不是16。但是还是会遮住一点点。而且遮住多少与字体大小有关系,字体大就遮得多。俺想,iOffsetY这个变量一定不能是一个固定值,[color="Red"]要设置为当前字体的高度才可以避免这个问题。
但是,就算是按以上方式解决了一般情况下的候选字窗口遮住当前行的问题,还是有一个问题。在“一般情况”下iTempInputWindowY的值是当前行的上边界,但俺发现在OpenOffice中,iTempInputWindowY是当前行的下边界!所以在OpenOffice中,下半部分是遮不住的,但是上半部分则可能完全把光标右边的字给遮住了。也不知道是哪里的问题。
以上情况完全在Debian Sid官方软件包情况下测试的,希望老大有办法解决。
 楼主| 发表于 2006-12-6 02:04:24 | 显示全部楼层
顺便提交一下俺的修改,针对3.4.1版本
1、分号健行为设置为1与2都可以输入任意英文及符号,按回车键结束输入英文及符号。现在可以输入完整的英文句子了
2、分号健行为设置为2时,提供了逐键提示功能。也就是说现在只要求匹配前面的编码就可以了
3、由于分号可以输入符号,所以自定义输入时的翻页功能给取消了。个人觉得没人会变态到自定义时还有一大堆重码的吧。但是这里有个要求,就是自定义码表文件(QuickPhrase.mb)要求是按升序排好序的,否则空格键输入的就不是最匹配的那个了
4、增加了两个分号输出一个分号的能力
5、修正了分号键行为设置为2时,输入大写字母切换为英文输入的BUG(重现方法:分号、自定义编码、A,变英文状态了),也许可以不算是BUG吧
6、修正了分号键行为设置为2时,使用热键(L_SHIFT、R_SHIFT)选择第二或第三候选字时出现错误或者fcitx崩溃的BUG(重现方法:CTRL+5、分号、输入自定义编码出现候选字、R_SHIFT,fcitx崩溃了)
7、增加了使用热键选择第二或第三候选字时,可以连续联想的能力
老大看看不否有可取之处?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2006-12-7 15:29:04 | 显示全部楼层
呵呵,我已经把这个补丁放进来了
关于挡字的问题,还没有好的方法。似乎gtk和qt对这个问题解决的不一样,只能先暂时这样了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-12-7 22:07:45 | 显示全部楼层
老大还是小心验证才好,俺也没有进行全面的测试,不过现在用的就是这个了,如果使用上有问题俺再汇报就是了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表