1
我正在使用X11窗口管理器,將它寫入python。我遇到了一個問題,我得到它,並處理ConfigureWindowEvents。但是,即便如此,當窗口被映射時,它顯示爲兩個像素高,一個像素寬的窗口。我將以下示例代碼放在一起,以便其他人可以對其進行測試,並告訴我我是否做錯了。我根據我的ConfigureEvent處理的代碼qtile的如何在Python中使用xcb ConfigureWindow正確配置windows
import xcb
import xcb.xproto as xproto
from xcb.xproto import ConfigWindow as cw
conn = xcb.connect()
root = conn.get_setup().roots[0].root
eventmask = [xproto.EventMask.SubstructureRedirect]
err =conn.core.ChangeWindowAttributesChecked(root, xproto.CW.EventMask, eventmask)
check = err.check()
if check:
print check
while True:
e = conn.wait_for_event()
if isinstance(e, xproto.MapRequestEvent):
conn.core.MapWindow(e.window)
if isinstance(e, xproto.ConfigureRequestEvent):
y = x = w = h = bw = 0
if e.value_mask & cw.X:
x = e.x
print "x:", x
if e.value_mask & cw.Y:
y = e.y
print "y:", y
if e.value_mask & cw.Height:
h = e.height
print "h:", h
if e.value_mask & cw.Width:
w = e.width
print 'w:', w
if e.value_mask & cw.BorderWidth:
bw = e.border_width
print 'bw:', bw
mask = cw.X | cw.Y | cw.Width | cw.Height | cw.BorderWidth
values = {cw.X: x, cw.Y: y, cw.Width: w, cw.Height: h, cw.BorderWidth: bw}
err = conn.core.ConfigureWindowChecked(e.window, mask, values)
err.check()
conn.flush()
print e
我使用捕捉錯誤
它適用於我 - 我試圖推出Xnest +這個腳本+ xeyes和xeyes窗口映射 – 2012-08-17 00:05:54
@AndreySidorov無論是在Xephyr中還是在全面的X會話中啓動,我仍然可以看到這個小窗口。在窗口映射之前,我得到了ConfigureRequestEvents,那是應該發生什麼? – 2012-08-17 01:36:57
這可能反映了客戶端的順序:創建窗口,配置,映射。由於您正在攔截地圖並使用SubstructureRedirect進行配置,因此您正在接收這些* RequestEvent事件。 – 2012-08-17 01:53:47