You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dwm窗口管理器中Xlib EnterNotify事件未按预期生成的问题

Dwm中EnterNotify事件未触发的异常问题

我正在运行dwm平铺窗口管理器,通过以下方式检测EnterNotify事件接收情况:

  • 在另一个虚拟终端执行sudo gdb -p $(pidof dwm),将gdb附加到dwm进程
  • 在enternotify函数上设置断点(b enternotify),该函数会在dwm收到EnterNotify事件时被调用

正常触发场景

将鼠标移到不同窗口,或鼠标在空显示器上时把窗口移到该显示器,断点都会正常触发,说明dwm能接收到EnterNotify事件。

异常未触发场景

打开两个各占半屏的窗口A和B,指针初始位于右上角的A窗口上;使用快捷键打开新窗口后,布局变更:A被移到右下角,B移到右上角,此时指针落在B窗口上,但断点未触发——dwm未接收到EnterNotify事件。

根据Xlib文档,当指针移动或窗口层级/位置变更导致指针落在不同窗口时,X服务器应向订阅该事件的客户端发送EnterNotify或LeaveNotify事件,此场景完全符合触发条件,但事件未生成。

补充测试结果

  • 将其他显示器的现有窗口移到指针所在显示器:断点正常触发
  • 关闭指针下的聚焦窗口后,同显示器的其他窗口扩展到指针下方:断点未触发
  • 通过setmfact按键绑定调整布局,导致指针落在不同窗口上:断点未触发

事件订阅配置

所有窗口均已订阅EnterNotify事件,相关代码如下:

/* called after MapRequest */
XSelectInput(dpy, w, EnterWindowMask|FocusChangeMask|PropertyChangeMask|StructureNotifyMask);
...
/* on setup, the root window is subscribed */
wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask
    |ButtonPressMask|PointerMotionMask|EnterWindowMask
    |LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
XSelectInput(dpy, root, wa.event_mask);
...

dwm完整源码可通过git://git.suckless.org/dwm获取。

请问为何会出现此情况?如何解决?


内容的提问来源于stack exchange,提问作者C. Lang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:15:16