Theppitak's blog

My personal blog.

21 ตุลาคม 2547

จาก GAL ถึง GtkIMContext

MrChoke มารายงาน bug ในห้อง #tlwg เรื่องการคีย์ภาษาไทยใน widget บางแห่งของ evolution ผมบอกไปว่าขอโยนให้คนอื่น เพราะขนาดใช้ยังไม่เคยใช้เลย (เรื่องของเรื่องคือขี้เกียจ ฮ่าๆ) แต่ช่วงสองสามวันมานี้ หลังจากทำ pango ไปแล้ว เริ่มมาคิดหมกมุ่นกับ gtk-im นั่ง checkout gnome cvs ไปก็ อะ.. เอาซะหน่อย นั่งไล่ evolution จนไปถึง gal (GNOME Application Libraries) ก็เจอพฤติการณ์ซ้ำรอยเดิมกับที่เคยเจอและแก้ไปแล้วใน eel (Eazel Extensions Library) ซึ่งทำให้ Nautilus เปลี่ยนชื่อไฟล์ภาษาไทยคีย์สระบน-ล่างไม่ได้ กล่าวคือ library ทั้งสองทำ text widget เอง จึง handle signal ต่างๆ เอง แต่ดันทำไม่ถูกต้องตาม API ของ GTK+ แถมผิดแบบเดียวกันซะอีก ลอกการบ้านกันเห็นๆ หุๆ คิดว่าน่าจะเป็น gal ที่ลอก eel

แก้ gal แล้วก็เลย file Ximian Bug #68617 พร้อม proposed patch เรียบร้อย

แต่ขณะที่ทำ patch ก็เกิดเอะใจกับบางกรณีที่อาจจะมองข้ามมาใน widget ก่อนๆ คือการ return ตำแหน่ง cursor ในกรณีที่ text ถูกเลือกไว้ ไม่ใช่เป็น cursor เหมือนปกติ ซึ่งที่ผ่านมา จะ return ตำแหน่ง cursor ล่าสุดเสมอ แต่มันทำให้มีผลต่อการ edit text ภาษาไทย เช่น เมื่อคีย์ "นาวา" แล้วกด Shift-LeftArrow เพื่อเลือกสระอาตัวหลัง แล้วคีย์สระอี XIM ไทยจะยอมให้เปลี่ยนเป็น "นาวี" ได้ แต่ถ้าทำอีกแบบ คือเลื่อนซ้ายก่อน แล้วกด Shift-RightArrow เลือกสระอาตัวหลัง คราวนี้มันจะไม่รับสระอี เพราะตำแหน่ง cursor สุดท้ายอยู่ที่หลังสระอา และสระอีห้ามตามหลังสระอา

เรื่องของเรื่องคือ ตำแหน่งเคอร์เซอร์ล่าสุดมันไม่ได้สำคัญเท่า "ตำแหน่งเริ่มข้อความที่เลือก" ตรงนี้ ถ้า text widget แยกแยะก่อน return ก็จะทำให้ IM ตรวจลำดับได้เหมาะสม เช่นกรณีข้างต้น ถ้า return ตำแหน่งเริ่มเสมอ คือหน้าสระอา ไม่ว่าจะเลือกจากข้างหลังหรือข้างหน้า IM ก็จะพิจารณาได้ถูก ว่าจริงๆ แล้ว สระอีที่คีย์ต่อมานั้น จะแทนที่สระอา โดยตามหลัง ว แหวน ซึ่งสระอี ตามหลัง ว แหวนได้

ว่าแล้วก็เลย post ถาม gtk-i18n list ว่าถ้าตัดสินใจแก้โค้ดตามนี้จะควรไหม ไว้เดี๋ยวรอคำตอบ

0 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem