Hai. Klik kanan mouse tidak berfungsi untuk saya di Linux setelah a0d4393, dan bekerja dengan tambalan ini . Mengapa?
Sayangnya memiliki barang XShape di main_loop()
menyebabkan crash dalam beberapa kasus. Saya tidak dapat menemukan mantra sihir yang benar untuk membuat Xlib bahagia dalam kasus itu.
Jika Anda ingin fungsionalitas XShape bekerja dengan andal di bawah semua pengelola jendela, itu harus dipanggil setelah aplikasi menerima MapNotify
. Juga, beberapa WM (Openbox) memiliki jendela induk yang tidak terlihat meskipun _NET_WM_WINDOW_TYPE
disetel ke _NET_WM_WINDOW_TYPE_DESKTOP
, dan karenanya harus menerapkan kode yang sama ke induknya. Sebagai contoh:
while (XPending(display) > 0) {
XEvent ev;
XNextEvent(display, &ev);
switch (ev.type) {
/* ... */
case MapNotify: {
Window root = DefaultRootWindow(display);
Window win = w->w;
while (win != None) {
Region region;
if ((region = XCreateRegion())) {
XShapeCombineRegion(display, w->w, ShapeInput, 0, 0, region, ShapeSet);
XDestroyRegion(region);
}
Window parent;
find_parent(win, &parent);
win = (parent == root ? None : parent);
}
XFlush(display);
break;
}
}
}
Hormat kami, seseorang yang menghabiskan waktu terlalu lama untuk men-debug ini dalam proyek terpisah.
@ wacossusca34 baik mengetahuinya, terima kasih atas masukannya.
@brndnmtthws apakah saran di atas bagus untuk digabungkan? Sepertinya itu harus berhasil
Komentar yang paling membantu
Jika Anda ingin fungsionalitas XShape bekerja dengan andal di bawah semua pengelola jendela, itu harus dipanggil setelah aplikasi menerima
MapNotify
. Juga, beberapa WM (Openbox) memiliki jendela induk yang tidak terlihat meskipun_NET_WM_WINDOW_TYPE
disetel ke_NET_WM_WINDOW_TYPE_DESKTOP
, dan karenanya harus menerapkan kode yang sama ke induknya. Sebagai contoh:Hormat kami, seseorang yang menghabiskan waktu terlalu lama untuk men-debug ini dalam proyek terpisah.