- ส่วนตัวแล้ว ถ้าขาดลูกเล่น Composite แล้วหงุดหงิด แบบเป็นคนติด Eye Candy อ่ะ :p
- ลูกเล่น Composite ของหน้าต่างยังอืด ๆ ทำงานช้า และบางทีก็ทำให้ KDE freeze ไปซะเฉย ๆ
เลยจำเป็นต้องหันมาใช้ compiz-fusion เจ้าเก่าเจ้าเดิม ที่ทำงานได้ดีบน KDE 4.0.x โดยตอนนั้นผมเลือกใช้ kde4-window-decorator เป็น WM เจ้าประจำ
ครั้นพอเปลี่ยนมาใช้ KDE4.1-svn ก็ปรากฏว่า เจ้า kde4-window-decorator ดันมีปัญหากับ KDE4.1 เสียแล้ว
- ถ้าเปิดหน้าต่างตั้งแต่ 2 หน้าต่างขึ้นไป จะไม่สามารถสลับหน้าต่างผ่านการคลิกเมาส์บนหัวหน้าต่างได้
- คลิกแล้วมันกลายเป็นการปรับขนาดหน้าต่างของตัวหน้าต่างที่ได้รับโฟกัสเป็นตัวแรกแทนซะงั้น
- ไล่ ๆ ดูบนอินเทอร์เน็ต ไม่พบคำตอบ แม้กระทั่งบนเว็บไซต์ของ compiz-fusion เอง ฤาจะไม่มีคนใช้ kde4-window-decorator กับ KDE 4.1-svn ???
- ตามไปถามใน IRC ทั้งที่ห้อง KDE และห้อง compiz ฝรั่งก็ตอบไม่ได้ (ไม่มีใครใช้แบบผม ???)
ถ้าให้เดาผมว่าน่าจะเป็นบั๊กที่ไลบรารีของ KDE 4.1 มากกว่า ก็ไปแจ้งให้ผู้พัฒนา KDE ทราบบน IRC แล้ว ตั้งแต่ 2 อาทิตย์ก่อน ไม่รู้เค้าลองหรือยังเห็นบอกว่ากำลังคอมไพล์ :-P
มันคันมันคาใจ พอแจ้งเสร็จก็เลยไล่แก้เองซะ แก้ที่ตัว kde4-window-decorator ของ compiz-fusion มันนี่แหละ ง่ายดีแต่ลืมมาบล็อกไว้ เผื่อมีคนอยากใช้อย่างผม
ผมแก้ที่ไฟล์ kde/window-decorator-kde4/decorator.cpp ในต้นฉบับของ compiz แก้แบบไม่เอาความสมบูรณ์เอาพอใช้ได้:-P ได้ผลลัพธ์ออกมาเป็นแพตช์ดังนี้ (ใช้กับ compiz-0.7.2)
diff -uNr compiz-0.7.2.orig/kde/window-decorator-kde4/decorator.cpp compiz-0.7.2/kde/window-decorator-kde4/decorator.cpp
--- compiz-0.7.2.orig/kde/window-decorator-kde4/decorator.cpp 2008-02-05 23:06:18.000000000 +0700
+++ compiz-0.7.2/kde/window-decorator-kde4/decorator.cpp 2008-04-06 19:32:19.000000000 +0700
@@ -598,10 +598,23 @@
xbe2.x = xbe->x - child->pos ().x ();
xbe2.y = xbe->y - child->pos ().y ();
}
-
- QApplication::x11ProcessEvent ((XEvent *) &xbe2);
-
- return true;
+ bool chk = xbe->button==1 && (xbe->x == xbe2.x && xbe->y == xbe2.y);
+ if (client->activeChild() != child) client->setActiveChild(child);
+ if (chk)
+ {
+ Qt::MouseButton mouseBtn = xbe->button==1 ? Qt::LeftButton : (xbe->button==3 ? Qt::RightButton : Qt::NoButton);
+ QPoint qp2 (xbe2.x, xbe2.y);
+ QMouseEvent qme (xevent->type==ButtonPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease,
+ qp2,
+ mouseBtn,
+ mouseBtn,
+ Qt::NoModifier);
+ QApplication::sendEvent (child, &qme);
+ return false;
+ }
+ else {
+ return QApplication::x11ProcessEvent ( (XEvent *) &xbe2);
+ }
}
} break;
case ClientMessage:
โดยยังมีบั๊กอยู่คือ
- ไม่ตอบสนองการดับเบิลคลิกที่หัวหน้าต่าง
- เมนูผุดจากการคลิกเมาส์ปุ่มขวาจะไม่แสดงค้างถ้าปล่อยปุ่มเมาส์ ต้องคลิกขวาค้างไว้เพื่อเรียกเมนู
- อื่น ๆ ที่ยังไม่รู้
เอาเป็นว่าผมได้ Eye Candy คืนมาละ ในขณะที่ยังได้ใช้กรอบหน้าต่างแบบ Oxygen ต่อไปได้อีกด้วย โฮ่ะ ๆ ๆ
พอใจแล้ว ไม่แก้เพิ่มแล้ว ไม่มีเวลา ใครว่าง ๆ แก้ให้สมบูรณ์ด้วยก็ดีครับ โค้ดยังห่วยเลยไม่ส่งกลับ compiz ขออภัย ลอล
1 ความคิดเห็น:
อ่ะ ผมกำลังจะโหลดตัว 4.3 มาลองพอดีเลย เห็นมี bug แบบนี้ไม่กล้าแล้วแฮะ - -"
แสดงความคิดเห็น