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