我可以在openbox中使用\u NET \u WM \u WINDOW \u TYPE \u DOCK EWHM扩展吗?

2024-05-12 14:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

Openbox被声明为与EWMH兼容here。我想使用这个遵从性层来实现一个无装饰的窗口,正如建议的on this question's best answer。你知道吗

因此,我正在尝试使用python和Xlib构建一个简单的窗口,它使用\u NET\u WM\u window\u TYPE\u DOCK TYPE提示来摆脱窗口装饰。但该过程失败,代码如下:

from Xlib import X, display
d = display.Display()
s = d.screen()
w = s.root.create_window(10, 10, 100, 100, 1, s.root_depth, background_pixel=s.black_pixel, event_mask=X.ExposureMask|X.KeyPressMask)
int_atom = d.intern_atom('int')
wm_window_type = d.intern_atom('_NET_WM_WINDOW_TYPE')
wm_window_type_dock = d.intern_atom('_NET_WM_WINDOW_TYPE_DOCK')
w.change_property(wm_window_type, int_atom, 32, [wm_window_type_dock, ], X.PropModeReplace)
w.map()
d.next_event()
d.next_event()

print(w.get_full_property(wm_window_type, X.AnyPropertyType).value[0])
print(wm_window_type_dock)

窗户出现了,但仍有装饰。最后两个print语句都返回434,所以我猜窗口确实有一个有效的EWMH window类型。 所以问题有两个:

  • 我的代码是否有效?

  • openbox应该画一个没有装饰的窗户吗?(为什么不呢?)


Tags: eventnettype装饰windowintatomprint
1条回答
网友
1楼 · 发布于 2024-05-12 14:15:38

我花了12个小时才找到答案:

我在change_property中使用了错误的原子。通话内容应为:

w.change_property(wm_window_type, Xatom.ATOM, 32, [wm_window_type_dock, ], X.PropModeReplace)

因此,使用相关的import语句,整个代码变成:

from Xlib import X, Xatom, display
d = display.Display()
s = d.screen()
w = s.root.create_window(10, 10, 100, 100, 1, s.root_depth, background_pixel=s.black_pixel, event_mask=X.ExposureMask|X.KeyPressMask)
wm_window_type = d.intern_atom('_NET_WM_WINDOW_TYPE')
wm_window_type_dock = d.intern_atom('_NET_WM_WINDOW_TYPE_DOCK')
w.change_property(wm_window_type, Xatom.ATOM, 32, [wm_window_type_dock, ], X.PropModeReplace)
w.map()
d.next_event()
d.next_event()
print(w.get_full_property(wm_window_type, Xatom.ATOM).value[0])
print(wm_window_type_dock)

如预期的那样工作(注意,如果你的屏幕背景是黑色的,你应该改变背景像素值来看到任何东西)。你知道吗

相关问题 更多 >