- 论坛徽章:
- 0
|
Fix SeaMonkey/Firefox 与紫光拼音输入法的兼容问题
[color="#ff0000"]Update: 原来这里提供的 firefox binary 是用 VC 7.1 编译的, 有人反映说退出时有时候会有错误. 因此现在重新用 vc 6 编译了一下. 下面的连接已更新. Thanks. 03/07/2006
这个问题在 Gecko 1.8 出来后就一直存在了. 主要原因是 Gecko 1.8 的 nsWindow.cpp 中的 nsWindow::OnKeyDown
方法为了兼容几个日文的输入法改了一大堆. 最后变成了这样: 只要有+-/*\.,=;`'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
这些键 WM_KEYDOWN 了,
不管是否后续会有 WM_CHAR 或者 WM_IME_CHAR, 都会产生一个NS_KEY_PRESS event. 本来也是很正常的事.
可是紫光偏偏在中文输入模式下按 01234567890;',./`-=\
这些键的时候在该产生的 WM_KEYDOWN, WM_CHAR, WM_KEYUP 序列之前还会有一个 WM_KEYDOWN, WM_KEYUP 序列.
对于通常的程序这不构成问题, 这一对消息会被 ignore 的. 但是在 Gecko 1.8 这里就出问题了, 这一对消息产生了一个额外的
NS_KEY_PRESS event, 于是我们就可以看到一下输入两个符号的现象了.
严格说来, 很难说这是谁的问题. Windows 也不存在一个标准说怎么样的 WM 序列才是正确的. 反正就是不兼容了. 紫光没有源码,
所以只好来改 Gecko 了.
fix 很简单:
bash-2.05b$ diff -u widget/src/windows/nsWindow.cpp
widget/src/windows/nsWindow.cpp.orig
--- widget/src/windows/nsWindow.cpp 2006-02-10 11:22:20.000000000 +0800
+++ widget/src/windows/nsWindow.cpp.orig 2006-02-10 11:24:30.000000000
+0800
@@ -3578,7 +3578,7 @@
}
}
- if (asciiKey && !(gotMsg && msg.message == WM_KEYUP))
+ if (asciiKey)
DispatchKeyEvent(NS_KEY_PRESS, asciiKey, 0, aKeyData, extraFlags);
else
DispatchKeyEvent(NS_KEY_PRESS, 0, virtualKeyCode, aKeyData, extraFlags);
这里有编译好的 binary:
For SeaMonkey 1.0:
gkwidget.zip
解压后的 gkwidget.dll, 放到 系统盘\Program Files\Common
Files\mozilla.org\GRE\1.8.0.1_xxxxx\components\ 下覆盖同名文件.
For FireFox 1.5.0.1:
firefox.zip
解压后的 firefox.exe 直接覆盖 Firefox 安装目录下的同名文件即可.
有什么问题或者建议请 mail 到 holly.lee
(at) gmail.com. Thanks for support.
.
还得做个声明. 这里提供 binary 只是为了方便大家, 我并不想 fork 也不想做 distribution. Mozilla
那帮人是否会 merge 进去我也并不关心. 所以请勿对格式或者文件或者下载或者别的什么横挑鼻子竖挑眼. 妈的国内就是有这么一帮从没见他们
contribute 过代码却成天以卫道士自居的人. 自以为是开源英雄了? 笑话. 老子 contribute to open source
projects 的时候估计他们还没上小学吧.
一笑.
原文地址:http://www.jsfsoft.com/temp/Fix.html
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/7367/showart_96040.html |
|