如何读取X窗口非客户区(窗口管理器窗口)的属性?我XChangeProperty
在 C 程序中设置了 X 属性。当通过鼠标使用xprop
和选择非客户区域(我的意思是:窗口的标题栏)时,不会显示我的应用程序创建的窗口的属性。我测试了这两种情况。当使用xprop 8s name_of_non_registered_property
和xprop 8s name_of_registered_property
消息不同时,所以我正确创建XAtom。
我仅在 Plasma5.15 上测试 xprop(KWin 在 X.org 下工作)
我正在混合 GTK+2 和 XCB(或 XLib)代码。当使用 时XListProperty
,XGetAtomName
在先前调用前一个函数的元素和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 内部组件,而不是客户端,并且它们可能没有注册事件。