私はX11ウィンドウマネージャーに取り組んでおり、Pythonで書いています。ConfigureWindowEvents を取得して処理する場所で問題が発生しています。ただし、その場合でも、ウィンドウがマップされると、高さ 2 ピクセル、幅 1 ピクセルのウィンドウとして表示されます。他の人がテストできるように、次のサンプル コードをまとめました。これが間違っているかどうか教えてください。私のConfigureEvent処理コードはqtileのものに基づいています
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
エラーをキャッチすることを期待して Checked 関数を使用しています