cht電腦資訊gcin已解決問題
adm Find login register

[請益] gcin 與 emesene

guest
1 [請益] gcin 與 emesene
Promote 0 Bookmark 02012-05-11quote  

各位先進好, 最近在使用 emesene 的開發版本時會出現這個情況: 輸入完後按下 enter, 字不會出現在 emesene 的 textbox; 但如果輸入完是使用切換輸入法, 則文字還是會送到 textbox 中.

在下抓了一下問題點是在這隻程式, 不過由於對 gtk 不熟, 在加上外國朋友(開發者)們不用輸入法所以也不會遇到這問題. 想說來這邊跟各位請益一下有什麼比較好的作法. 出問題的程式跟修改的部份如下:

https://github.com/emesene/emesene/blob/f53d1b3a83a385f8200975ae906948a26b1b5256/emesene/gui/gtkui/TextBox.py

     def __init__(self):
         gobject.GObject.__init__(self)
         gtk.TextView.__init__(self)
-        gtk.binding_entry_add_signal(self, gtk.keysyms.KP_Enter, 0, 'message-send')
-        gtk.binding_entry_add_signal(self, gtk.keysyms.Return, 0, 'message-send')
+        self.connect('key-press-event', self.on_key_press_event)
+
+    def on_key_press_event(self, widget, event):
+        if event.keyval in [gtk.keysyms.Return, gtk.keysyms.KP_Enter]:
+            self.emit('message-send')
+            return True
+        return False

 

比較不解的是, connect 在目前也可以使用, 但是為什麼為造成這樣的影響. 希望各位先進如果有相關經驗可以幫忙解答一下. 我有 fork 一份並且利用他們在這次修改的時候有一個檢查 gtk 版本的函式做了一個可以使用的修改, 位置如下:

https://github.com/moneycat/emesene/commit/cf9bbd004506ea116718a6429aa40344f08dbd42

eliu
2
Promote 0 Bookmark 02012-05-11quote  

gtk_im_context_filter_keypress

http://developer.gnome.org/gtk/2.24/GtkIMContext.html#gtk-im-context-filter-keypress

用 gtk_im_context_filter_keypress 送給 gcin 處理按鍵,如果 return TRUE,代表 gcin 已經吃了這個 key,不要處理。

問題可能出在 Enter key 沒有這樣處理,這樣就會出問題

guest
3
Promote 0 Bookmark 02012-05-11quote  

謝謝您, 我再研究看看要怎麼處理

guest
4
Promote 0 Bookmark 02012-05-11quote  

感謝 eliu 前輩的指點, 加入這個函式之後看起來已經正常不會被吃掉 event 了

就等 upstream 看有沒有其他意見要修正, 感謝

cht電腦資訊gcin已解決問題
adm Find login register
views:11795