2007年12月20日 星期四

oxim Patch: Event BUG

Standard
最近移植 oxim 時碰到一個問題,就是當我使用 xinit 啟動 X Server 和 oxim 時,oxim 會 wait 在那動都不動,使用 strace 也無法 debug,因為一旦以 strace oxim 這樣的方式啟動 oxim,它就沒這個問題。﹝什麼!?這 Bug 還會自動躲 debug 程式!﹞

一邊努力 debug 一邊在 IRC 上抱怨,最後終於靠 jserv 的建議與指導之下,用了 gdb + XSynchronize() 找出了出問題的地方,果然皇天不負苦心人啊!

問題出在 oxim 對 gui event 的處理,大概是使用 xinit 直接啟動的環境太簡單乾淨,oxim 的 Trayicon 等需要 GUI 的部份完全收不到 X 的 event,所以就停在 XNextEvent 苦命等待。

不過就在解決掉 event 等待的問題後,我將 debug 時用的 XSynchronize() 移除,隨即碰到的就是 GUI 重繪問題。雖然 oxim 順利的啟動了,但選字區、選單都一片空白,將 XSynchronize 開啟就正常,這點非常怪異令我不得其解,不過想到 oxim 只是處理使用者輸入中文,對 graphic 的處理速度並不非常要求,所以我將 XSynchronize 保留。

關於這次的小修正,我已經做成 patch:oxim-1.1.3-xevent.patch