« Google黑板报 | Blog首页 | 我也来瞎讲三千 »
2006/02/15
如果你使用Firefox 如果你使用紫光拼音
在Firefox下使用紫光拼音有一个很烦人的问题.每次输入数字或者标点都会变成两个字符一起输入.
不过现在这个问题已经有人解决了.作者说:
这个问题在 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地址
这个是原始的网页地址:http://www.jsfsoft.com/temp/Fix.html
Daniel Chan
发表于
2006-02-15 11:37
阅读(4097)
评论(
7)
引用(
7)
Blog
所有人可见
相关内容
回复列表每两分钟自动刷新一次,想立即刷新吗?点击这里








