读取非客户区的X窗口属性

读取非客户区的X窗口属性

如何读取X窗口非客户区(窗口管理器窗口)的属性?我XChangeProperty在 C 程序中设置了 X 属性。当通过鼠标使用xprop和选择非客户区域(我的意思是:窗口的标题栏)时,不会显示我的应用程序创建的窗口的属性。我测试了这两种情况。当使用xprop 8s name_of_non_registered_propertyxprop 8s name_of_registered_property消息不同时,所以我正确创建XAtom。

我仅在 Plasma5.15 上测试 xprop(KWin 在 X.org 下工作)

我正在混合 GTK+2 和 XCB(或 XLib)代码。当使用 时XListPropertyXGetAtomName在先前调用前一个函数的元素和XGetAtomName放入puts(C stdlib)的结果上,我的原子的名称是可见的。也许 GTK 混乱,当第一次调用主循环时?在将我的属性添加到其中之前,我意识到了该窗口。

我认为,与其说是系统问题,不如说是编程问题。

> xwininfo -all -root
....
0xba00001 "program": ("program" "Program")  10x10+10+10  +10+10
    1 child:
    0xba00002 (has no name): ()  1x1+-1+-1  +9+9
...
>xprop -id 0xba00001
 WM_CLASS(STRING) = "program", "Program"
 WM_COMMAND(STRING) = { "program" }
 _NET_WM_USER_TIME_WINDOW(WINDOW): window id # 0xba00002
 _KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 29562975
 WM_CLIENT_LEADER(WINDOW): window id # 0xba00001
 _NET_WM_PID(CARDINAL) = 25223
 WM_LOCALE_NAME(STRING) = "pl_PL.UTF-8"
 WM_CLIENT_MACHINE(STRING) = "linux-rvnb"
 WM_NORMAL_HINTS(WM_SIZE_HINTS):
                 program specified size: 10 by 10
>xprop -id 0xba00002
>

答案1

此命令打印所有子项:

xwininfo -all -root

并非所有窗口管理器都使用根窗口来显示背景。单击非客户区域将显示有关显示背景的窗口的信息。要显示有关根窗口的信息,请使用:

xprop -root

如果你正确设置了一个原子,xprop就可以读取它。命令中的格式部分xprop不是必需的:

xprop name_of_registered_property

您可能必须遍历所有子项才能找到带有您的原子的窗口。

如果您不编写 wm 代码,则应该忽略标题栏。它们是 wm 内部组件,而不是客户端,并且它们可能没有注册事件。

相关内容