พักหลังๆ ผมเขียนเกี่ยวกับ OSS เยอะมากๆ เพราะได้ลองเล่น + พัฒนาแอพลิเคชั่นบน Linux เลยอยากเล่าให้พัง หัวข้อบล็อกเป็น PHP แต่ข้างในเป็น Ubuntu ซะเยอะ อย่าเพิ่งเบื่อก้อแล้วกันครับ

เมื่อคืนผมได้โค้ด Gnome Dock มาจาก  Macewan เขาเขียน How to ในการติดตั้ง Gnome Dock บน Ubuntu 


 

เขาให้ download code applete มา compile ผมก้อ compile ไปตาม How to นั่นแหละครับ ลองดูเรื่อยๆ แต่ว่าพอ run ขึ้นมากลับมีปัญหา คือ ไม่มี menu โผล่มาน่ะสิ ผมพอจะรู้ว่า Gnome Dock หรือ Cairo Dock นี่เพิ่งจะเริ่มทำกันไม่นานมานี้เอง  ก้อเลยได้โอกาสแกะโค้ด applet นี้ดู ตัวโค้ดเขียนอ้างอิง library Cairo กับ SVG เป็นหลัก เอาเป็นว่าใช้ภาพฟอร์แมทอื่นไม่ได้เลย ต้องเป็น SVG อย่างเดียว ไม่เป็นไรพอรับได้เพราะผมมี Inkscape อยู่ ผมดู comment ด้านบนก้อพบว่าเป็นโด้ดตั้งต้นของ Cairo Dock เลย จะไปหาเวอร์ชั่นที่ใหม่กว่าก้อเสียเวลา เอาเป็นว่าผมลงมือแก้ไขเลยละกัน 

แนวความคิดของโค้ดต้นแบบนี้ง่ายมากๆ คือ เอารายการเมนูแปะไว้ใน Array ในอาเรย์แบบนี้ครับ (บรรทัดที่ 80)

 

static Icon g_aIcons[] =
{
    {"user-home.svg", "Home", "nautilus /home/raziel"},
    {"gnome-terminal.svg", "Terminal", "gnome-terminal --working-directory=/home/raziel"},
    {"mozilla-firefox.svg", "Firefox", "firefox"},
    {"xmms.svg", "XMMS", "xmms"},
    {"gaim.svg", "Gaim", "gaim"},
    {"gnome-multimedia.svg", "Xine", "gxine"},
    {"ooo-writer.svg", "Writer", "ooffice -writer"},
    {"ooo-calc.svg", "Calc", "ooffice -calc"},
    {"ooo-impress.svg", "Impress", "ooffice -impress"},
    {"gnome-gimp.svg", "GIMP", "gimp"},
    {"gnome-fs-trash-full.svg", "Trash", "nautilus trash:///"}
};

ข้อมมูลก้อจะแบ่งเป็น 3 ส่วน คือ ภาพไอคอน, ชื่อเมนู และ คำสั่งที่ใช้เมื่อคลิก เมนู ง่ายไหมครับ ผมก้อเลยจัดการแก้ซะให้เรียบร้อย จากนั้นก้อ compile ใหม่ ด้วยคำสั่ง make ครับ  ผมเอาตัวอย่างมาหน้าจอเดสทอป รกๆ ของผมให้ดูเป็นตัวอย่างครับ  :)

 my cairo dock  


สำหรับโค้ด Gnome-Dock (Cairo-Dock) ที่ผมแก้ไข download ได้ที่นี่ ครับ

Gnome Dock เวอร์ชั่นปรับปรุงให้ใช้ไฟล์ภาพฟอร์แมท PNG และ SVG ได้อยู่ที่ เว็บไซต์โครงการ  http://www.gnome-dock.org/ ผมกำลังนั่งดูโค้ดของเวอร์ชั่นใหม่อยู่ครับ น่าสนใจมากทีเดียว เอาไว้คราวหน้าจะมา review  อีกรอบก็แล้วกันครับ :)