[英]xcb: LeaveNotify received immediately after EnterNotify
我正在使用xcb庫在 Rust 中編寫一個用於學習目的的窗口管理器。 我的代碼和幾個測試窗口( xterm
實例)都在 Xephyr 會話中運行。 我將根窗口上的事件掩碼設置為
xproto::EVENT_MASK_SUBSTRUCTURE_REDIRECT
| xproto::EVENT_MASK_SUBSTRUCTURE_NOTIFY
| xproto::EVENT_MASK_POINTER_MOTION
| xproto::EVENT_MASK_LEAVE_WINDOW
| xproto::EVENT_MASK_ENTER_WINDOW
| xproto::EVENT_MASK_BUTTON_PRESS
| xproto::EVENT_MASK_PROPERTY_CHANGE
| xproto::EVENT_MASK_FOCUS_CHANGE
並且所有子窗口都有一個事件掩碼
xproto::EVENT_MASK_ENTER_WINDOW
| xproto::EVENT_MASK_LEAVE_WINDOW
| xproto::EVENT_MASK_BUTTON_PRESS
| xproto::EVENT_MASK_PROPERTY_CHANGE
| xproto::EVENT_MASK_POINTER_MOTION
| xproto::EVENT_MASK_FOCUS_CHANGE
| xproto::EVENT_MASK_STRUCTURE_NOTIFY
| xproto::EVENT_MASK_EXPOSURE
當我將鼠標移到非根窗口上時,我使用EnterNotify
事件在該窗口上抓取鼠標按鈕,用於點擊聚焦目的,並在LeaveNotify
取消LeaveNotify
。 事件的順序是:
EnterNotify
LeaveNotify
,而鼠標仍在非根窗口上LeaveNotify
抓取按鈕LeaveNotify
EnterNotify
,並在根窗口上抓取鼠標按鈕ButtonPress
根窗口發送ButtonPress
我真的不確定這可能是什么原因; 使用谷歌之類的東西沒有任何用處。
對於稍后可能會遇到此問題的任何人,部分解決方案是:
SUBSTRUCTURE_REDIRECT | SUBSTRUCTURE_NOTIFY | BUTTON_PRESS
SUBSTRUCTURE_REDIRECT | SUBSTRUCTURE_NOTIFY | BUTTON_PRESS
僅SUBSTRUCTURE_REDIRECT | SUBSTRUCTURE_NOTIFY | BUTTON_PRESS
LEAVE_WINDOW
屏蔽到非根窗口上,並且不要處理這些事件我不想將其添加為答案,因為:
查看協議參考手冊。 它描述了(除其他外)生成進入和離開事件的確切算法: https : //www.x.org/releases/X11R7.6/doc/xproto/x11protocol.html#events : pointer_window
在您的特定情況下,我希望LeaveNotify
事件具有mode: Grab
,這意味着窗口不再具有“正常”指針焦點,因為某些東西(您的程序)抓取了輸入。
如果這不是答案,我可以建議在xtrace / x11trace (在基於 Debian 的發行版中作為包xtrace
)下運行您的 WM。 該程序打印“通過”的所有 X11 流量。 這可能有助於弄清楚發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.