1import xcffib 2import struct 3import six 4MAJOR_VERSION = 0 5MINOR_VERSION = 4 6key = xcffib.ExtensionKey("Composite") 7_events = {} 8_errors = {} 9from . import xproto 10from . import xfixes 11class Redirect: 12 Automatic = 0 13 Manual = 1 14class QueryVersionReply(xcffib.Reply): 15 def __init__(self, unpacker): 16 if isinstance(unpacker, xcffib.Protobj): 17 unpacker = xcffib.MemoryUnpacker(unpacker.pack()) 18 xcffib.Reply.__init__(self, unpacker) 19 base = unpacker.offset 20 self.major_version, self.minor_version = unpacker.unpack("xx2x4xII16x") 21 self.bufsize = unpacker.offset - base 22class QueryVersionCookie(xcffib.Cookie): 23 reply_type = QueryVersionReply 24class GetOverlayWindowReply(xcffib.Reply): 25 def __init__(self, unpacker): 26 if isinstance(unpacker, xcffib.Protobj): 27 unpacker = xcffib.MemoryUnpacker(unpacker.pack()) 28 xcffib.Reply.__init__(self, unpacker) 29 base = unpacker.offset 30 self.overlay_win, = unpacker.unpack("xx2x4xI20x") 31 self.bufsize = unpacker.offset - base 32class GetOverlayWindowCookie(xcffib.Cookie): 33 reply_type = GetOverlayWindowReply 34class compositeExtension(xcffib.Extension): 35 def QueryVersion(self, client_major_version, client_minor_version, is_checked=True): 36 buf = six.BytesIO() 37 buf.write(struct.pack("=xx2xII", client_major_version, client_minor_version)) 38 return self.send_request(0, buf, QueryVersionCookie, is_checked=is_checked) 39 def RedirectWindow(self, window, update, is_checked=False): 40 buf = six.BytesIO() 41 buf.write(struct.pack("=xx2xIB3x", window, update)) 42 return self.send_request(1, buf, is_checked=is_checked) 43 def RedirectSubwindows(self, window, update, is_checked=False): 44 buf = six.BytesIO() 45 buf.write(struct.pack("=xx2xIB3x", window, update)) 46 return self.send_request(2, buf, is_checked=is_checked) 47 def UnredirectWindow(self, window, update, is_checked=False): 48 buf = six.BytesIO() 49 buf.write(struct.pack("=xx2xIB3x", window, update)) 50 return self.send_request(3, buf, is_checked=is_checked) 51 def UnredirectSubwindows(self, window, update, is_checked=False): 52 buf = six.BytesIO() 53 buf.write(struct.pack("=xx2xIB3x", window, update)) 54 return self.send_request(4, buf, is_checked=is_checked) 55 def CreateRegionFromBorderClip(self, region, window, is_checked=False): 56 buf = six.BytesIO() 57 buf.write(struct.pack("=xx2xII", region, window)) 58 return self.send_request(5, buf, is_checked=is_checked) 59 def NameWindowPixmap(self, window, pixmap, is_checked=False): 60 buf = six.BytesIO() 61 buf.write(struct.pack("=xx2xII", window, pixmap)) 62 return self.send_request(6, buf, is_checked=is_checked) 63 def GetOverlayWindow(self, window, is_checked=True): 64 buf = six.BytesIO() 65 buf.write(struct.pack("=xx2xI", window)) 66 return self.send_request(7, buf, GetOverlayWindowCookie, is_checked=is_checked) 67 def ReleaseOverlayWindow(self, window, is_checked=False): 68 buf = six.BytesIO() 69 buf.write(struct.pack("=xx2xI", window)) 70 return self.send_request(8, buf, is_checked=is_checked) 71xcffib._add_ext(key, compositeExtension, _events, _errors) 72