From 0c50dc6241fa21712e041cfa2bfb9db4ccaef10a Mon Sep 17 00:00:00 2001
From: "Andrew Gallant (Ocelot)" <Andrew.Gallant@tufts.edu>
Date: Thu, 10 May 2012 17:01:42 -0400
Subject: a huge commit. splitting extensions into their own sub-packages.

---
 nexgb/xproto/xproto.go      | 14347 ++++++++++++++++++++++++++++++++++++++++++
 nexgb/xproto/xproto_test.go |   365 ++
 2 files changed, 14712 insertions(+)
 create mode 100644 nexgb/xproto/xproto.go
 create mode 100644 nexgb/xproto/xproto_test.go

(limited to 'nexgb/xproto')

diff --git a/nexgb/xproto/xproto.go b/nexgb/xproto/xproto.go
new file mode 100644
index 0000000..2516225
--- /dev/null
+++ b/nexgb/xproto/xproto.go
@@ -0,0 +1,14347 @@
+package xproto
+
+/*
+	This file was generated by xproto.xml on May 10 2012 4:20:28pm EDT.
+	This file is automatically generated. Edit at your peril!
+*/
+
+import (
+	"github.com/BurntSushi/xgb"
+)
+
+// Setup parses the setup bytes retrieved when
+// connecting into a SetupInfo struct.
+func Setup(c *xgb.Conn) *SetupInfo {
+	setup := new(SetupInfo)
+	SetupInfoRead(c.SetupBytes, setup)
+	return setup
+}
+
+// DefaultScreen gets the default screen info from SetupInfo.
+func (s *SetupInfo) DefaultScreen(c *xgb.Conn) *ScreenInfo {
+	return &s.Roots[c.DefaultScreen]
+}
+
+// Skipping definition for base type 'Int8'
+
+// Skipping definition for base type 'Card16'
+
+// Skipping definition for base type 'Char'
+
+// Skipping definition for base type 'Card32'
+
+// Skipping definition for base type 'Double'
+
+// Skipping definition for base type 'Bool'
+
+// Skipping definition for base type 'Float'
+
+// Skipping definition for base type 'Card8'
+
+// Skipping definition for base type 'Int16'
+
+// Skipping definition for base type 'Int32'
+
+// Skipping definition for base type 'Void'
+
+// Skipping definition for base type 'Byte'
+
+const (
+	VisualClassStaticGray  = 0
+	VisualClassGrayScale   = 1
+	VisualClassStaticColor = 2
+	VisualClassPseudoColor = 3
+	VisualClassTrueColor   = 4
+	VisualClassDirectColor = 5
+)
+
+const (
+	EventMaskNoEvent              = 0
+	EventMaskKeyPress             = 1
+	EventMaskKeyRelease           = 2
+	EventMaskButtonPress          = 4
+	EventMaskButtonRelease        = 8
+	EventMaskEnterWindow          = 16
+	EventMaskLeaveWindow          = 32
+	EventMaskPointerMotion        = 64
+	EventMaskPointerMotionHint    = 128
+	EventMaskButton1Motion        = 256
+	EventMaskButton2Motion        = 512
+	EventMaskButton3Motion        = 1024
+	EventMaskButton4Motion        = 2048
+	EventMaskButton5Motion        = 4096
+	EventMaskButtonMotion         = 8192
+	EventMaskKeymapState          = 16384
+	EventMaskExposure             = 32768
+	EventMaskVisibilityChange     = 65536
+	EventMaskStructureNotify      = 131072
+	EventMaskResizeRedirect       = 262144
+	EventMaskSubstructureNotify   = 524288
+	EventMaskSubstructureRedirect = 1048576
+	EventMaskFocusChange          = 2097152
+	EventMaskPropertyChange       = 4194304
+	EventMaskColorMapChange       = 8388608
+	EventMaskOwnerGrabButton      = 16777216
+)
+
+const (
+	BackingStoreNotUseful  = 0
+	BackingStoreWhenMapped = 1
+	BackingStoreAlways     = 2
+)
+
+const (
+	ImageOrderLSBFirst = 0
+	ImageOrderMSBFirst = 1
+)
+
+const (
+	ModMaskShift   = 1
+	ModMaskLock    = 2
+	ModMaskControl = 4
+	ModMask1       = 8
+	ModMask2       = 16
+	ModMask3       = 32
+	ModMask4       = 64
+	ModMask5       = 128
+	ModMaskAny     = 32768
+)
+
+const (
+	KeyButMaskShift   = 1
+	KeyButMaskLock    = 2
+	KeyButMaskControl = 4
+	KeyButMaskMod1    = 8
+	KeyButMaskMod2    = 16
+	KeyButMaskMod3    = 32
+	KeyButMaskMod4    = 64
+	KeyButMaskMod5    = 128
+	KeyButMaskButton1 = 256
+	KeyButMaskButton2 = 512
+	KeyButMaskButton3 = 1024
+	KeyButMaskButton4 = 2048
+	KeyButMaskButton5 = 4096
+)
+
+const (
+	WindowNone = 0
+)
+
+const (
+	ButtonMask1   = 256
+	ButtonMask2   = 512
+	ButtonMask3   = 1024
+	ButtonMask4   = 2048
+	ButtonMask5   = 4096
+	ButtonMaskAny = 32768
+)
+
+const (
+	MotionNormal = 0
+	MotionHint   = 1
+)
+
+const (
+	NotifyDetailAncestor         = 0
+	NotifyDetailVirtual          = 1
+	NotifyDetailInferior         = 2
+	NotifyDetailNonlinear        = 3
+	NotifyDetailNonlinearVirtual = 4
+	NotifyDetailPointer          = 5
+	NotifyDetailPointerRoot      = 6
+	NotifyDetailNone             = 7
+)
+
+const (
+	NotifyModeNormal       = 0
+	NotifyModeGrab         = 1
+	NotifyModeUngrab       = 2
+	NotifyModeWhileGrabbed = 3
+)
+
+const (
+	VisibilityUnobscured        = 0
+	VisibilityPartiallyObscured = 1
+	VisibilityFullyObscured     = 2
+)
+
+const (
+	PlaceOnTop    = 0
+	PlaceOnBottom = 1
+)
+
+const (
+	PropertyNewValue = 0
+	PropertyDelete   = 1
+)
+
+const (
+	TimeCurrentTime = 0
+)
+
+const (
+	AtomNone               = 0
+	AtomAny                = 0
+	AtomPrimary            = 1
+	AtomSecondary          = 2
+	AtomArc                = 3
+	AtomAtom               = 4
+	AtomBitmap             = 5
+	AtomCardinal           = 6
+	AtomColormap           = 7
+	AtomCursor             = 8
+	AtomCutBuffer0         = 9
+	AtomCutBuffer1         = 10
+	AtomCutBuffer2         = 11
+	AtomCutBuffer3         = 12
+	AtomCutBuffer4         = 13
+	AtomCutBuffer5         = 14
+	AtomCutBuffer6         = 15
+	AtomCutBuffer7         = 16
+	AtomDrawable           = 17
+	AtomFont               = 18
+	AtomInteger            = 19
+	AtomPixmap             = 20
+	AtomPoint              = 21
+	AtomRectangle          = 22
+	AtomResourceManager    = 23
+	AtomRgbColorMap        = 24
+	AtomRgbBestMap         = 25
+	AtomRgbBlueMap         = 26
+	AtomRgbDefaultMap      = 27
+	AtomRgbGrayMap         = 28
+	AtomRgbGreenMap        = 29
+	AtomRgbRedMap          = 30
+	AtomString             = 31
+	AtomVisualid           = 32
+	AtomWindow             = 33
+	AtomWmCommand          = 34
+	AtomWmHints            = 35
+	AtomWmClientMachine    = 36
+	AtomWmIconName         = 37
+	AtomWmIconSize         = 38
+	AtomWmName             = 39
+	AtomWmNormalHints      = 40
+	AtomWmSizeHints        = 41
+	AtomWmZoomHints        = 42
+	AtomMinSpace           = 43
+	AtomNormSpace          = 44
+	AtomMaxSpace           = 45
+	AtomEndSpace           = 46
+	AtomSuperscriptX       = 47
+	AtomSuperscriptY       = 48
+	AtomSubscriptX         = 49
+	AtomSubscriptY         = 50
+	AtomUnderlinePosition  = 51
+	AtomUnderlineThickness = 52
+	AtomStrikeoutAscent    = 53
+	AtomStrikeoutDescent   = 54
+	AtomItalicAngle        = 55
+	AtomXHeight            = 56
+	AtomQuadWidth          = 57
+	AtomWeight             = 58
+	AtomPointSize          = 59
+	AtomResolution         = 60
+	AtomCopyright          = 61
+	AtomNotice             = 62
+	AtomFontName           = 63
+	AtomFamilyName         = 64
+	AtomFullName           = 65
+	AtomCapHeight          = 66
+	AtomWmClass            = 67
+	AtomWmTransientFor     = 68
+)
+
+const (
+	ColormapStateUninstalled = 0
+	ColormapStateInstalled   = 1
+)
+
+const (
+	ColormapNone = 0
+)
+
+const (
+	MappingModifier = 0
+	MappingKeyboard = 1
+	MappingPointer  = 2
+)
+
+const (
+	WindowClassCopyFromParent = 0
+	WindowClassInputOutput    = 1
+	WindowClassInputOnly      = 2
+)
+
+const (
+	CwBackPixmap       = 1
+	CwBackPixel        = 2
+	CwBorderPixmap     = 4
+	CwBorderPixel      = 8
+	CwBitGravity       = 16
+	CwWinGravity       = 32
+	CwBackingStore     = 64
+	CwBackingPlanes    = 128
+	CwBackingPixel     = 256
+	CwOverrideRedirect = 512
+	CwSaveUnder        = 1024
+	CwEventMask        = 2048
+	CwDontPropagate    = 4096
+	CwColormap         = 8192
+	CwCursor           = 16384
+)
+
+const (
+	BackPixmapNone           = 0
+	BackPixmapParentRelative = 1
+)
+
+const (
+	GravityBitForget = 0
+	GravityWinUnmap  = 0
+	GravityNorthWest = 1
+	GravityNorth     = 2
+	GravityNorthEast = 3
+	GravityWest      = 4
+	GravityCenter    = 5
+	GravityEast      = 6
+	GravitySouthWest = 7
+	GravitySouth     = 8
+	GravitySouthEast = 9
+	GravityStatic    = 10
+)
+
+const (
+	MapStateUnmapped   = 0
+	MapStateUnviewable = 1
+	MapStateViewable   = 2
+)
+
+const (
+	SetModeInsert = 0
+	SetModeDelete = 1
+)
+
+const (
+	ConfigWindowX           = 1
+	ConfigWindowY           = 2
+	ConfigWindowWidth       = 4
+	ConfigWindowHeight      = 8
+	ConfigWindowBorderWidth = 16
+	ConfigWindowSibling     = 32
+	ConfigWindowStackMode   = 64
+)
+
+const (
+	StackModeAbove    = 0
+	StackModeBelow    = 1
+	StackModeTopIf    = 2
+	StackModeBottomIf = 3
+	StackModeOpposite = 4
+)
+
+const (
+	CirculateRaiseLowest  = 0
+	CirculateLowerHighest = 1
+)
+
+const (
+	PropModeReplace = 0
+	PropModePrepend = 1
+	PropModeAppend  = 2
+)
+
+const (
+	GetPropertyTypeAny = 0
+)
+
+const (
+	SendEventDestPointerWindow = 0
+	SendEventDestItemFocus     = 1
+)
+
+const (
+	GrabModeSync  = 0
+	GrabModeAsync = 1
+)
+
+const (
+	GrabStatusSuccess        = 0
+	GrabStatusAlreadyGrabbed = 1
+	GrabStatusInvalidTime    = 2
+	GrabStatusNotViewable    = 3
+	GrabStatusFrozen         = 4
+)
+
+const (
+	CursorNone = 0
+)
+
+const (
+	ButtonIndexAny = 0
+	ButtonIndex1   = 1
+	ButtonIndex2   = 2
+	ButtonIndex3   = 3
+	ButtonIndex4   = 4
+	ButtonIndex5   = 5
+)
+
+const (
+	GrabAny = 0
+)
+
+const (
+	AllowAsyncPointer   = 0
+	AllowSyncPointer    = 1
+	AllowReplayPointer  = 2
+	AllowAsyncKeyboard  = 3
+	AllowSyncKeyboard   = 4
+	AllowReplayKeyboard = 5
+	AllowAsyncBoth      = 6
+	AllowSyncBoth       = 7
+)
+
+const (
+	InputFocusNone           = 0
+	InputFocusPointerRoot    = 1
+	InputFocusParent         = 2
+	InputFocusFollowKeyboard = 3
+)
+
+const (
+	FontDrawLeftToRight = 0
+	FontDrawRightToLeft = 1
+)
+
+const (
+	GcFunction           = 1
+	GcPlaneMask          = 2
+	GcForeground         = 4
+	GcBackground         = 8
+	GcLineWidth          = 16
+	GcLineStyle          = 32
+	GcCapStyle           = 64
+	GcJoinStyle          = 128
+	GcFillStyle          = 256
+	GcFillRule           = 512
+	GcTile               = 1024
+	GcStipple            = 2048
+	GcTileStippleOriginX = 4096
+	GcTileStippleOriginY = 8192
+	GcFont               = 16384
+	GcSubwindowMode      = 32768
+	GcGraphicsExposures  = 65536
+	GcClipOriginX        = 131072
+	GcClipOriginY        = 262144
+	GcClipMask           = 524288
+	GcDashOffset         = 1048576
+	GcDashList           = 2097152
+	GcArcMode            = 4194304
+)
+
+const (
+	GxClear        = 0
+	GxAnd          = 1
+	GxAndReverse   = 2
+	GxCopy         = 3
+	GxAndInverted  = 4
+	GxNoop         = 5
+	GxXor          = 6
+	GxOr           = 7
+	GxNor          = 8
+	GxEquiv        = 9
+	GxInvert       = 10
+	GxOrReverse    = 11
+	GxCopyInverted = 12
+	GxOrInverted   = 13
+	GxNand         = 14
+	GxSet          = 15
+)
+
+const (
+	LineStyleSolid      = 0
+	LineStyleOnOffDash  = 1
+	LineStyleDoubleDash = 2
+)
+
+const (
+	CapStyleNotLast    = 0
+	CapStyleButt       = 1
+	CapStyleRound      = 2
+	CapStyleProjecting = 3
+)
+
+const (
+	JoinStyleMiter = 0
+	JoinStyleRound = 1
+	JoinStyleBevel = 2
+)
+
+const (
+	FillStyleSolid          = 0
+	FillStyleTiled          = 1
+	FillStyleStippled       = 2
+	FillStyleOpaqueStippled = 3
+)
+
+const (
+	FillRuleEvenOdd = 0
+	FillRuleWinding = 1
+)
+
+const (
+	SubwindowModeClipByChildren   = 0
+	SubwindowModeIncludeInferiors = 1
+)
+
+const (
+	ArcModeChord    = 0
+	ArcModePieSlice = 1
+)
+
+const (
+	ClipOrderingUnsorted = 0
+	ClipOrderingYSorted  = 1
+	ClipOrderingYXSorted = 2
+	ClipOrderingYXBanded = 3
+)
+
+const (
+	CoordModeOrigin   = 0
+	CoordModePrevious = 1
+)
+
+const (
+	PolyShapeComplex   = 0
+	PolyShapeNonconvex = 1
+	PolyShapeConvex    = 2
+)
+
+const (
+	ImageFormatXYBitmap = 0
+	ImageFormatXYPixmap = 1
+	ImageFormatZPixmap  = 2
+)
+
+const (
+	ColormapAllocNone = 0
+	ColormapAllocAll  = 1
+)
+
+const (
+	ColorFlagRed   = 1
+	ColorFlagGreen = 2
+	ColorFlagBlue  = 4
+)
+
+const (
+	PixmapNone = 0
+)
+
+const (
+	FontNone = 0
+)
+
+const (
+	QueryShapeOfLargestCursor  = 0
+	QueryShapeOfFastestTile    = 1
+	QueryShapeOfFastestStipple = 2
+)
+
+const (
+	KbKeyClickPercent = 1
+	KbBellPercent     = 2
+	KbBellPitch       = 4
+	KbBellDuration    = 8
+	KbLed             = 16
+	KbLedMode         = 32
+	KbKey             = 64
+	KbAutoRepeatMode  = 128
+)
+
+const (
+	LedModeOff = 0
+	LedModeOn  = 1
+)
+
+const (
+	AutoRepeatModeOff     = 0
+	AutoRepeatModeOn      = 1
+	AutoRepeatModeDefault = 2
+)
+
+const (
+	BlankingNotPreferred = 0
+	BlankingPreferred    = 1
+	BlankingDefault      = 2
+)
+
+const (
+	ExposuresNotAllowed = 0
+	ExposuresAllowed    = 1
+	ExposuresDefault    = 2
+)
+
+const (
+	HostModeInsert = 0
+	HostModeDelete = 1
+)
+
+const (
+	FamilyInternet          = 0
+	FamilyDECnet            = 1
+	FamilyChaos             = 2
+	FamilyServerInterpreted = 5
+	FamilyInternet6         = 6
+)
+
+const (
+	AccessControlDisable = 0
+	AccessControlEnable  = 1
+)
+
+const (
+	CloseDownDestroyAll      = 0
+	CloseDownRetainPermanent = 1
+	CloseDownRetainTemporary = 2
+)
+
+const (
+	KillAllTemporary = 0
+)
+
+const (
+	ScreenSaverReset  = 0
+	ScreenSaverActive = 1
+)
+
+const (
+	MappingStatusSuccess = 0
+	MappingStatusBusy    = 1
+	MappingStatusFailure = 2
+)
+
+const (
+	MapIndexShift   = 0
+	MapIndexLock    = 1
+	MapIndexControl = 2
+	MapIndex1       = 3
+	MapIndex2       = 4
+	MapIndex3       = 5
+	MapIndex4       = 6
+	MapIndex5       = 7
+)
+
+type Window uint32
+
+func NewWindowId(c *xgb.Conn) (Window, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Window(id), nil
+}
+
+type Pixmap uint32
+
+func NewPixmapId(c *xgb.Conn) (Pixmap, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Pixmap(id), nil
+}
+
+type Cursor uint32
+
+func NewCursorId(c *xgb.Conn) (Cursor, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Cursor(id), nil
+}
+
+type Font uint32
+
+func NewFontId(c *xgb.Conn) (Font, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Font(id), nil
+}
+
+type Gcontext uint32
+
+func NewGcontextId(c *xgb.Conn) (Gcontext, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Gcontext(id), nil
+}
+
+type Colormap uint32
+
+func NewColormapId(c *xgb.Conn) (Colormap, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Colormap(id), nil
+}
+
+type Atom uint32
+
+func NewAtomId(c *xgb.Conn) (Atom, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Atom(id), nil
+}
+
+type Drawable uint32
+
+func NewDrawableId(c *xgb.Conn) (Drawable, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Drawable(id), nil
+}
+
+type Fontable uint32
+
+func NewFontableId(c *xgb.Conn) (Fontable, error) {
+	id, err := c.NewId()
+	if err != nil {
+		return 0, err
+	}
+	return Fontable(id), nil
+}
+
+type Visualid uint32
+
+type Timestamp uint32
+
+type Keysym uint32
+
+type Keycode byte
+
+type Button byte
+
+// 'Char2b' struct definition
+// Size: 2
+type Char2b struct {
+	Byte1 byte
+	Byte2 byte
+}
+
+// Struct read Char2b
+func Char2bRead(buf []byte, v *Char2b) int {
+	b := 0
+
+	v.Byte1 = buf[b]
+	b += 1
+
+	v.Byte2 = buf[b]
+	b += 1
+
+	return b
+}
+
+// Struct list read Char2b
+func Char2bReadList(buf []byte, dest []Char2b) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Char2b{}
+		b += Char2bRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Char2b
+func (v Char2b) Bytes() []byte {
+	buf := make([]byte, 2)
+	b := 0
+
+	buf[b] = v.Byte1
+	b += 1
+
+	buf[b] = v.Byte2
+	b += 1
+
+	return buf
+}
+
+// Write struct list Char2b
+func Char2bListBytes(buf []byte, list []Char2b) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Point' struct definition
+// Size: 4
+type Point struct {
+	X int16
+	Y int16
+}
+
+// Struct read Point
+func PointRead(buf []byte, v *Point) int {
+	b := 0
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	return b
+}
+
+// Struct list read Point
+func PointReadList(buf []byte, dest []Point) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Point{}
+		b += PointRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Point
+func (v Point) Bytes() []byte {
+	buf := make([]byte, 4)
+	b := 0
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	return buf
+}
+
+// Write struct list Point
+func PointListBytes(buf []byte, list []Point) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Rectangle' struct definition
+// Size: 8
+type Rectangle struct {
+	X      int16
+	Y      int16
+	Width  uint16
+	Height uint16
+}
+
+// Struct read Rectangle
+func RectangleRead(buf []byte, v *Rectangle) int {
+	b := 0
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	return b
+}
+
+// Struct list read Rectangle
+func RectangleReadList(buf []byte, dest []Rectangle) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Rectangle{}
+		b += RectangleRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Rectangle
+func (v Rectangle) Bytes() []byte {
+	buf := make([]byte, 8)
+	b := 0
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	return buf
+}
+
+// Write struct list Rectangle
+func RectangleListBytes(buf []byte, list []Rectangle) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Arc' struct definition
+// Size: 12
+type Arc struct {
+	X      int16
+	Y      int16
+	Width  uint16
+	Height uint16
+	Angle1 int16
+	Angle2 int16
+}
+
+// Struct read Arc
+func ArcRead(buf []byte, v *Arc) int {
+	b := 0
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Angle1 = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Angle2 = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	return b
+}
+
+// Struct list read Arc
+func ArcReadList(buf []byte, dest []Arc) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Arc{}
+		b += ArcRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Arc
+func (v Arc) Bytes() []byte {
+	buf := make([]byte, 12)
+	b := 0
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Angle1))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Angle2))
+	b += 2
+
+	return buf
+}
+
+// Write struct list Arc
+func ArcListBytes(buf []byte, list []Arc) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Format' struct definition
+// Size: 8
+type Format struct {
+	Depth        byte
+	BitsPerPixel byte
+	ScanlinePad  byte
+	// padding: 5 bytes
+}
+
+// Struct read Format
+func FormatRead(buf []byte, v *Format) int {
+	b := 0
+
+	v.Depth = buf[b]
+	b += 1
+
+	v.BitsPerPixel = buf[b]
+	b += 1
+
+	v.ScanlinePad = buf[b]
+	b += 1
+
+	b += 5 // padding
+
+	return b
+}
+
+// Struct list read Format
+func FormatReadList(buf []byte, dest []Format) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Format{}
+		b += FormatRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Format
+func (v Format) Bytes() []byte {
+	buf := make([]byte, 8)
+	b := 0
+
+	buf[b] = v.Depth
+	b += 1
+
+	buf[b] = v.BitsPerPixel
+	b += 1
+
+	buf[b] = v.ScanlinePad
+	b += 1
+
+	b += 5 // padding
+
+	return buf
+}
+
+// Write struct list Format
+func FormatListBytes(buf []byte, list []Format) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'VisualInfo' struct definition
+// Size: 24
+type VisualInfo struct {
+	VisualId        Visualid
+	Class           byte
+	BitsPerRgbValue byte
+	ColormapEntries uint16
+	RedMask         uint32
+	GreenMask       uint32
+	BlueMask        uint32
+	// padding: 4 bytes
+}
+
+// Struct read VisualInfo
+func VisualInfoRead(buf []byte, v *VisualInfo) int {
+	b := 0
+
+	v.VisualId = Visualid(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Class = buf[b]
+	b += 1
+
+	v.BitsPerRgbValue = buf[b]
+	b += 1
+
+	v.ColormapEntries = xgb.Get16(buf[b:])
+	b += 2
+
+	v.RedMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.GreenMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.BlueMask = xgb.Get32(buf[b:])
+	b += 4
+
+	b += 4 // padding
+
+	return b
+}
+
+// Struct list read VisualInfo
+func VisualInfoReadList(buf []byte, dest []VisualInfo) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = VisualInfo{}
+		b += VisualInfoRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write VisualInfo
+func (v VisualInfo) Bytes() []byte {
+	buf := make([]byte, 24)
+	b := 0
+
+	xgb.Put32(buf[b:], uint32(v.VisualId))
+	b += 4
+
+	buf[b] = v.Class
+	b += 1
+
+	buf[b] = v.BitsPerRgbValue
+	b += 1
+
+	xgb.Put16(buf[b:], v.ColormapEntries)
+	b += 2
+
+	xgb.Put32(buf[b:], v.RedMask)
+	b += 4
+
+	xgb.Put32(buf[b:], v.GreenMask)
+	b += 4
+
+	xgb.Put32(buf[b:], v.BlueMask)
+	b += 4
+
+	b += 4 // padding
+
+	return buf
+}
+
+// Write struct list VisualInfo
+func VisualInfoListBytes(buf []byte, list []VisualInfo) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'DepthInfo' struct definition
+// Size: (8 + xgb.Pad((int(VisualsLen) * 24)))
+type DepthInfo struct {
+	Depth byte
+	// padding: 1 bytes
+	VisualsLen uint16
+	// padding: 4 bytes
+	Visuals []VisualInfo // size: xgb.Pad((int(VisualsLen) * 24))
+}
+
+// Struct read DepthInfo
+func DepthInfoRead(buf []byte, v *DepthInfo) int {
+	b := 0
+
+	v.Depth = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	v.VisualsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 4 // padding
+
+	v.Visuals = make([]VisualInfo, v.VisualsLen)
+	b += VisualInfoReadList(buf[b:], v.Visuals)
+
+	return b
+}
+
+// Struct list read DepthInfo
+func DepthInfoReadList(buf []byte, dest []DepthInfo) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = DepthInfo{}
+		b += DepthInfoRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write DepthInfo
+func (v DepthInfo) Bytes() []byte {
+	buf := make([]byte, (8 + xgb.Pad((int(v.VisualsLen) * 24))))
+	b := 0
+
+	buf[b] = v.Depth
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], v.VisualsLen)
+	b += 2
+
+	b += 4 // padding
+
+	b += VisualInfoListBytes(buf[b:], v.Visuals)
+
+	return buf
+}
+
+// Write struct list DepthInfo
+func DepthInfoListBytes(buf []byte, list []DepthInfo) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size DepthInfo
+func DepthInfoListSize(list []DepthInfo) int {
+	size := 0
+	for _, item := range list {
+		size += (8 + xgb.Pad((int(item.VisualsLen) * 24)))
+	}
+	return size
+}
+
+// 'ScreenInfo' struct definition
+// Size: (40 + DepthInfoListSize(AllowedDepths))
+type ScreenInfo struct {
+	Root                Window
+	DefaultColormap     Colormap
+	WhitePixel          uint32
+	BlackPixel          uint32
+	CurrentInputMasks   uint32
+	WidthInPixels       uint16
+	HeightInPixels      uint16
+	WidthInMillimeters  uint16
+	HeightInMillimeters uint16
+	MinInstalledMaps    uint16
+	MaxInstalledMaps    uint16
+	RootVisual          Visualid
+	BackingStores       byte
+	SaveUnders          bool
+	RootDepth           byte
+	AllowedDepthsLen    byte
+	AllowedDepths       []DepthInfo // size: DepthInfoListSize(AllowedDepths)
+}
+
+// Struct read ScreenInfo
+func ScreenInfoRead(buf []byte, v *ScreenInfo) int {
+	b := 0
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.DefaultColormap = Colormap(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.WhitePixel = xgb.Get32(buf[b:])
+	b += 4
+
+	v.BlackPixel = xgb.Get32(buf[b:])
+	b += 4
+
+	v.CurrentInputMasks = xgb.Get32(buf[b:])
+	b += 4
+
+	v.WidthInPixels = xgb.Get16(buf[b:])
+	b += 2
+
+	v.HeightInPixels = xgb.Get16(buf[b:])
+	b += 2
+
+	v.WidthInMillimeters = xgb.Get16(buf[b:])
+	b += 2
+
+	v.HeightInMillimeters = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MinInstalledMaps = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MaxInstalledMaps = xgb.Get16(buf[b:])
+	b += 2
+
+	v.RootVisual = Visualid(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.BackingStores = buf[b]
+	b += 1
+
+	if buf[b] == 1 {
+		v.SaveUnders = true
+	} else {
+		v.SaveUnders = false
+	}
+	b += 1
+
+	v.RootDepth = buf[b]
+	b += 1
+
+	v.AllowedDepthsLen = buf[b]
+	b += 1
+
+	v.AllowedDepths = make([]DepthInfo, v.AllowedDepthsLen)
+	b += DepthInfoReadList(buf[b:], v.AllowedDepths)
+
+	return b
+}
+
+// Struct list read ScreenInfo
+func ScreenInfoReadList(buf []byte, dest []ScreenInfo) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = ScreenInfo{}
+		b += ScreenInfoRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write ScreenInfo
+func (v ScreenInfo) Bytes() []byte {
+	buf := make([]byte, (40 + DepthInfoListSize(v.AllowedDepths)))
+	b := 0
+
+	xgb.Put32(buf[b:], uint32(v.Root))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.DefaultColormap))
+	b += 4
+
+	xgb.Put32(buf[b:], v.WhitePixel)
+	b += 4
+
+	xgb.Put32(buf[b:], v.BlackPixel)
+	b += 4
+
+	xgb.Put32(buf[b:], v.CurrentInputMasks)
+	b += 4
+
+	xgb.Put16(buf[b:], v.WidthInPixels)
+	b += 2
+
+	xgb.Put16(buf[b:], v.HeightInPixels)
+	b += 2
+
+	xgb.Put16(buf[b:], v.WidthInMillimeters)
+	b += 2
+
+	xgb.Put16(buf[b:], v.HeightInMillimeters)
+	b += 2
+
+	xgb.Put16(buf[b:], v.MinInstalledMaps)
+	b += 2
+
+	xgb.Put16(buf[b:], v.MaxInstalledMaps)
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(v.RootVisual))
+	b += 4
+
+	buf[b] = v.BackingStores
+	b += 1
+
+	if v.SaveUnders {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	buf[b] = v.RootDepth
+	b += 1
+
+	buf[b] = v.AllowedDepthsLen
+	b += 1
+
+	b += DepthInfoListBytes(buf[b:], v.AllowedDepths)
+
+	return buf
+}
+
+// Write struct list ScreenInfo
+func ScreenInfoListBytes(buf []byte, list []ScreenInfo) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size ScreenInfo
+func ScreenInfoListSize(list []ScreenInfo) int {
+	size := 0
+	for _, item := range list {
+		size += (40 + DepthInfoListSize(item.AllowedDepths))
+	}
+	return size
+}
+
+// 'SetupRequest' struct definition
+// Size: ((12 + xgb.Pad((int(AuthorizationProtocolNameLen) * 1))) + xgb.Pad((int(AuthorizationProtocolDataLen) * 1)))
+type SetupRequest struct {
+	ByteOrder byte
+	// padding: 1 bytes
+	ProtocolMajorVersion         uint16
+	ProtocolMinorVersion         uint16
+	AuthorizationProtocolNameLen uint16
+	AuthorizationProtocolDataLen uint16
+	// padding: 2 bytes
+	AuthorizationProtocolName string // size: xgb.Pad((int(AuthorizationProtocolNameLen) * 1))
+	AuthorizationProtocolData string // size: xgb.Pad((int(AuthorizationProtocolDataLen) * 1))
+}
+
+// Struct read SetupRequest
+func SetupRequestRead(buf []byte, v *SetupRequest) int {
+	b := 0
+
+	v.ByteOrder = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	v.ProtocolMajorVersion = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ProtocolMinorVersion = xgb.Get16(buf[b:])
+	b += 2
+
+	v.AuthorizationProtocolNameLen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.AuthorizationProtocolDataLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	{
+		byteString := make([]byte, v.AuthorizationProtocolNameLen)
+		copy(byteString[:v.AuthorizationProtocolNameLen], buf[b:])
+		v.AuthorizationProtocolName = string(byteString)
+		b += xgb.Pad(int(v.AuthorizationProtocolNameLen))
+	}
+
+	{
+		byteString := make([]byte, v.AuthorizationProtocolDataLen)
+		copy(byteString[:v.AuthorizationProtocolDataLen], buf[b:])
+		v.AuthorizationProtocolData = string(byteString)
+		b += xgb.Pad(int(v.AuthorizationProtocolDataLen))
+	}
+
+	return b
+}
+
+// Struct list read SetupRequest
+func SetupRequestReadList(buf []byte, dest []SetupRequest) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = SetupRequest{}
+		b += SetupRequestRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write SetupRequest
+func (v SetupRequest) Bytes() []byte {
+	buf := make([]byte, ((12 + xgb.Pad((int(v.AuthorizationProtocolNameLen) * 1))) + xgb.Pad((int(v.AuthorizationProtocolDataLen) * 1))))
+	b := 0
+
+	buf[b] = v.ByteOrder
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], v.ProtocolMajorVersion)
+	b += 2
+
+	xgb.Put16(buf[b:], v.ProtocolMinorVersion)
+	b += 2
+
+	xgb.Put16(buf[b:], v.AuthorizationProtocolNameLen)
+	b += 2
+
+	xgb.Put16(buf[b:], v.AuthorizationProtocolDataLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], v.AuthorizationProtocolName[:v.AuthorizationProtocolNameLen])
+	b += xgb.Pad(int(v.AuthorizationProtocolNameLen))
+
+	copy(buf[b:], v.AuthorizationProtocolData[:v.AuthorizationProtocolDataLen])
+	b += xgb.Pad(int(v.AuthorizationProtocolDataLen))
+
+	return buf
+}
+
+// Write struct list SetupRequest
+func SetupRequestListBytes(buf []byte, list []SetupRequest) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size SetupRequest
+func SetupRequestListSize(list []SetupRequest) int {
+	size := 0
+	for _, item := range list {
+		size += ((12 + xgb.Pad((int(item.AuthorizationProtocolNameLen) * 1))) + xgb.Pad((int(item.AuthorizationProtocolDataLen) * 1)))
+	}
+	return size
+}
+
+// 'SetupFailed' struct definition
+// Size: (8 + xgb.Pad((int(ReasonLen) * 1)))
+type SetupFailed struct {
+	Status               byte
+	ReasonLen            byte
+	ProtocolMajorVersion uint16
+	ProtocolMinorVersion uint16
+	Length               uint16
+	Reason               string // size: xgb.Pad((int(ReasonLen) * 1))
+}
+
+// Struct read SetupFailed
+func SetupFailedRead(buf []byte, v *SetupFailed) int {
+	b := 0
+
+	v.Status = buf[b]
+	b += 1
+
+	v.ReasonLen = buf[b]
+	b += 1
+
+	v.ProtocolMajorVersion = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ProtocolMinorVersion = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get16(buf[b:])
+	b += 2
+
+	{
+		byteString := make([]byte, v.ReasonLen)
+		copy(byteString[:v.ReasonLen], buf[b:])
+		v.Reason = string(byteString)
+		b += xgb.Pad(int(v.ReasonLen))
+	}
+
+	return b
+}
+
+// Struct list read SetupFailed
+func SetupFailedReadList(buf []byte, dest []SetupFailed) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = SetupFailed{}
+		b += SetupFailedRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write SetupFailed
+func (v SetupFailed) Bytes() []byte {
+	buf := make([]byte, (8 + xgb.Pad((int(v.ReasonLen) * 1))))
+	b := 0
+
+	buf[b] = v.Status
+	b += 1
+
+	buf[b] = v.ReasonLen
+	b += 1
+
+	xgb.Put16(buf[b:], v.ProtocolMajorVersion)
+	b += 2
+
+	xgb.Put16(buf[b:], v.ProtocolMinorVersion)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Length)
+	b += 2
+
+	copy(buf[b:], v.Reason[:v.ReasonLen])
+	b += xgb.Pad(int(v.ReasonLen))
+
+	return buf
+}
+
+// Write struct list SetupFailed
+func SetupFailedListBytes(buf []byte, list []SetupFailed) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size SetupFailed
+func SetupFailedListSize(list []SetupFailed) int {
+	size := 0
+	for _, item := range list {
+		size += (8 + xgb.Pad((int(item.ReasonLen) * 1)))
+	}
+	return size
+}
+
+// 'SetupAuthenticate' struct definition
+// Size: (8 + xgb.Pad(((int(Length) * 4) * 1)))
+type SetupAuthenticate struct {
+	Status byte
+	// padding: 5 bytes
+	Length uint16
+	Reason string // size: xgb.Pad(((int(Length) * 4) * 1))
+}
+
+// Struct read SetupAuthenticate
+func SetupAuthenticateRead(buf []byte, v *SetupAuthenticate) int {
+	b := 0
+
+	v.Status = buf[b]
+	b += 1
+
+	b += 5 // padding
+
+	v.Length = xgb.Get16(buf[b:])
+	b += 2
+
+	{
+		byteString := make([]byte, (int(v.Length) * 4))
+		copy(byteString[:(int(v.Length)*4)], buf[b:])
+		v.Reason = string(byteString)
+		b += xgb.Pad(int((int(v.Length) * 4)))
+	}
+
+	return b
+}
+
+// Struct list read SetupAuthenticate
+func SetupAuthenticateReadList(buf []byte, dest []SetupAuthenticate) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = SetupAuthenticate{}
+		b += SetupAuthenticateRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write SetupAuthenticate
+func (v SetupAuthenticate) Bytes() []byte {
+	buf := make([]byte, (8 + xgb.Pad(((int(v.Length) * 4) * 1))))
+	b := 0
+
+	buf[b] = v.Status
+	b += 1
+
+	b += 5 // padding
+
+	xgb.Put16(buf[b:], v.Length)
+	b += 2
+
+	copy(buf[b:], v.Reason[:(int(v.Length)*4)])
+	b += xgb.Pad(int((int(v.Length) * 4)))
+
+	return buf
+}
+
+// Write struct list SetupAuthenticate
+func SetupAuthenticateListBytes(buf []byte, list []SetupAuthenticate) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size SetupAuthenticate
+func SetupAuthenticateListSize(list []SetupAuthenticate) int {
+	size := 0
+	for _, item := range list {
+		size += (8 + xgb.Pad(((int(item.Length) * 4) * 1)))
+	}
+	return size
+}
+
+// 'SetupInfo' struct definition
+// Size: (((40 + xgb.Pad((int(VendorLen) * 1))) + xgb.Pad((int(PixmapFormatsLen) * 8))) + ScreenInfoListSize(Roots))
+type SetupInfo struct {
+	Status byte
+	// padding: 1 bytes
+	ProtocolMajorVersion     uint16
+	ProtocolMinorVersion     uint16
+	Length                   uint16
+	ReleaseNumber            uint32
+	ResourceIdBase           uint32
+	ResourceIdMask           uint32
+	MotionBufferSize         uint32
+	VendorLen                uint16
+	MaximumRequestLength     uint16
+	RootsLen                 byte
+	PixmapFormatsLen         byte
+	ImageByteOrder           byte
+	BitmapFormatBitOrder     byte
+	BitmapFormatScanlineUnit byte
+	BitmapFormatScanlinePad  byte
+	MinKeycode               Keycode
+	MaxKeycode               Keycode
+	// padding: 4 bytes
+	Vendor        string       // size: xgb.Pad((int(VendorLen) * 1))
+	PixmapFormats []Format     // size: xgb.Pad((int(PixmapFormatsLen) * 8))
+	Roots         []ScreenInfo // size: ScreenInfoListSize(Roots)
+}
+
+// Struct read SetupInfo
+func SetupInfoRead(buf []byte, v *SetupInfo) int {
+	b := 0
+
+	v.Status = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	v.ProtocolMajorVersion = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ProtocolMinorVersion = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ReleaseNumber = xgb.Get32(buf[b:])
+	b += 4
+
+	v.ResourceIdBase = xgb.Get32(buf[b:])
+	b += 4
+
+	v.ResourceIdMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.MotionBufferSize = xgb.Get32(buf[b:])
+	b += 4
+
+	v.VendorLen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MaximumRequestLength = xgb.Get16(buf[b:])
+	b += 2
+
+	v.RootsLen = buf[b]
+	b += 1
+
+	v.PixmapFormatsLen = buf[b]
+	b += 1
+
+	v.ImageByteOrder = buf[b]
+	b += 1
+
+	v.BitmapFormatBitOrder = buf[b]
+	b += 1
+
+	v.BitmapFormatScanlineUnit = buf[b]
+	b += 1
+
+	v.BitmapFormatScanlinePad = buf[b]
+	b += 1
+
+	v.MinKeycode = Keycode(buf[b])
+	b += 1
+
+	v.MaxKeycode = Keycode(buf[b])
+	b += 1
+
+	b += 4 // padding
+
+	{
+		byteString := make([]byte, v.VendorLen)
+		copy(byteString[:v.VendorLen], buf[b:])
+		v.Vendor = string(byteString)
+		b += xgb.Pad(int(v.VendorLen))
+	}
+
+	v.PixmapFormats = make([]Format, v.PixmapFormatsLen)
+	b += FormatReadList(buf[b:], v.PixmapFormats)
+
+	v.Roots = make([]ScreenInfo, v.RootsLen)
+	b += ScreenInfoReadList(buf[b:], v.Roots)
+
+	return b
+}
+
+// Struct list read SetupInfo
+func SetupInfoReadList(buf []byte, dest []SetupInfo) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = SetupInfo{}
+		b += SetupInfoRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write SetupInfo
+func (v SetupInfo) Bytes() []byte {
+	buf := make([]byte, (((40 + xgb.Pad((int(v.VendorLen) * 1))) + xgb.Pad((int(v.PixmapFormatsLen) * 8))) + ScreenInfoListSize(v.Roots)))
+	b := 0
+
+	buf[b] = v.Status
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], v.ProtocolMajorVersion)
+	b += 2
+
+	xgb.Put16(buf[b:], v.ProtocolMinorVersion)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Length)
+	b += 2
+
+	xgb.Put32(buf[b:], v.ReleaseNumber)
+	b += 4
+
+	xgb.Put32(buf[b:], v.ResourceIdBase)
+	b += 4
+
+	xgb.Put32(buf[b:], v.ResourceIdMask)
+	b += 4
+
+	xgb.Put32(buf[b:], v.MotionBufferSize)
+	b += 4
+
+	xgb.Put16(buf[b:], v.VendorLen)
+	b += 2
+
+	xgb.Put16(buf[b:], v.MaximumRequestLength)
+	b += 2
+
+	buf[b] = v.RootsLen
+	b += 1
+
+	buf[b] = v.PixmapFormatsLen
+	b += 1
+
+	buf[b] = v.ImageByteOrder
+	b += 1
+
+	buf[b] = v.BitmapFormatBitOrder
+	b += 1
+
+	buf[b] = v.BitmapFormatScanlineUnit
+	b += 1
+
+	buf[b] = v.BitmapFormatScanlinePad
+	b += 1
+
+	buf[b] = byte(v.MinKeycode)
+	b += 1
+
+	buf[b] = byte(v.MaxKeycode)
+	b += 1
+
+	b += 4 // padding
+
+	copy(buf[b:], v.Vendor[:v.VendorLen])
+	b += xgb.Pad(int(v.VendorLen))
+
+	b += FormatListBytes(buf[b:], v.PixmapFormats)
+
+	b += ScreenInfoListBytes(buf[b:], v.Roots)
+
+	return buf
+}
+
+// Write struct list SetupInfo
+func SetupInfoListBytes(buf []byte, list []SetupInfo) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size SetupInfo
+func SetupInfoListSize(list []SetupInfo) int {
+	size := 0
+	for _, item := range list {
+		size += (((40 + xgb.Pad((int(item.VendorLen) * 1))) + xgb.Pad((int(item.PixmapFormatsLen) * 8))) + ScreenInfoListSize(item.Roots))
+	}
+	return size
+}
+
+// 'Timecoord' struct definition
+// Size: 8
+type Timecoord struct {
+	Time Timestamp
+	X    int16
+	Y    int16
+}
+
+// Struct read Timecoord
+func TimecoordRead(buf []byte, v *Timecoord) int {
+	b := 0
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	return b
+}
+
+// Struct list read Timecoord
+func TimecoordReadList(buf []byte, dest []Timecoord) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Timecoord{}
+		b += TimecoordRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Timecoord
+func (v Timecoord) Bytes() []byte {
+	buf := make([]byte, 8)
+	b := 0
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	return buf
+}
+
+// Write struct list Timecoord
+func TimecoordListBytes(buf []byte, list []Timecoord) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Fontprop' struct definition
+// Size: 8
+type Fontprop struct {
+	Name  Atom
+	Value uint32
+}
+
+// Struct read Fontprop
+func FontpropRead(buf []byte, v *Fontprop) int {
+	b := 0
+
+	v.Name = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Value = xgb.Get32(buf[b:])
+	b += 4
+
+	return b
+}
+
+// Struct list read Fontprop
+func FontpropReadList(buf []byte, dest []Fontprop) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Fontprop{}
+		b += FontpropRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Fontprop
+func (v Fontprop) Bytes() []byte {
+	buf := make([]byte, 8)
+	b := 0
+
+	xgb.Put32(buf[b:], uint32(v.Name))
+	b += 4
+
+	xgb.Put32(buf[b:], v.Value)
+	b += 4
+
+	return buf
+}
+
+// Write struct list Fontprop
+func FontpropListBytes(buf []byte, list []Fontprop) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Charinfo' struct definition
+// Size: 12
+type Charinfo struct {
+	LeftSideBearing  int16
+	RightSideBearing int16
+	CharacterWidth   int16
+	Ascent           int16
+	Descent          int16
+	Attributes       uint16
+}
+
+// Struct read Charinfo
+func CharinfoRead(buf []byte, v *Charinfo) int {
+	b := 0
+
+	v.LeftSideBearing = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RightSideBearing = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.CharacterWidth = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Ascent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Descent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Attributes = xgb.Get16(buf[b:])
+	b += 2
+
+	return b
+}
+
+// Struct list read Charinfo
+func CharinfoReadList(buf []byte, dest []Charinfo) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Charinfo{}
+		b += CharinfoRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Charinfo
+func (v Charinfo) Bytes() []byte {
+	buf := make([]byte, 12)
+	b := 0
+
+	xgb.Put16(buf[b:], uint16(v.LeftSideBearing))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.RightSideBearing))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.CharacterWidth))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Ascent))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Descent))
+	b += 2
+
+	xgb.Put16(buf[b:], v.Attributes)
+	b += 2
+
+	return buf
+}
+
+// Write struct list Charinfo
+func CharinfoListBytes(buf []byte, list []Charinfo) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Str' struct definition
+// Size: (1 + xgb.Pad((int(NameLen) * 1)))
+type Str struct {
+	NameLen byte
+	Name    string // size: xgb.Pad((int(NameLen) * 1))
+}
+
+// Struct read Str
+func StrRead(buf []byte, v *Str) int {
+	b := 0
+
+	v.NameLen = buf[b]
+	b += 1
+
+	{
+		byteString := make([]byte, v.NameLen)
+		copy(byteString[:v.NameLen], buf[b:])
+		v.Name = string(byteString)
+		b += xgb.Pad(int(v.NameLen))
+	}
+
+	return b
+}
+
+// Struct list read Str
+func StrReadList(buf []byte, dest []Str) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Str{}
+		b += StrRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Str
+func (v Str) Bytes() []byte {
+	buf := make([]byte, (1 + xgb.Pad((int(v.NameLen) * 1))))
+	b := 0
+
+	buf[b] = v.NameLen
+	b += 1
+
+	copy(buf[b:], v.Name[:v.NameLen])
+	b += xgb.Pad(int(v.NameLen))
+
+	return buf
+}
+
+// Write struct list Str
+func StrListBytes(buf []byte, list []Str) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size Str
+func StrListSize(list []Str) int {
+	size := 0
+	for _, item := range list {
+		size += (1 + xgb.Pad((int(item.NameLen) * 1)))
+	}
+	return size
+}
+
+// 'Segment' struct definition
+// Size: 8
+type Segment struct {
+	X1 int16
+	Y1 int16
+	X2 int16
+	Y2 int16
+}
+
+// Struct read Segment
+func SegmentRead(buf []byte, v *Segment) int {
+	b := 0
+
+	v.X1 = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y1 = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.X2 = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y2 = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	return b
+}
+
+// Struct list read Segment
+func SegmentReadList(buf []byte, dest []Segment) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Segment{}
+		b += SegmentRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Segment
+func (v Segment) Bytes() []byte {
+	buf := make([]byte, 8)
+	b := 0
+
+	xgb.Put16(buf[b:], uint16(v.X1))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y1))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.X2))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y2))
+	b += 2
+
+	return buf
+}
+
+// Write struct list Segment
+func SegmentListBytes(buf []byte, list []Segment) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Coloritem' struct definition
+// Size: 12
+type Coloritem struct {
+	Pixel uint32
+	Red   uint16
+	Green uint16
+	Blue  uint16
+	Flags byte
+	// padding: 1 bytes
+}
+
+// Struct read Coloritem
+func ColoritemRead(buf []byte, v *Coloritem) int {
+	b := 0
+
+	v.Pixel = xgb.Get32(buf[b:])
+	b += 4
+
+	v.Red = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Green = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Blue = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Flags = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	return b
+}
+
+// Struct list read Coloritem
+func ColoritemReadList(buf []byte, dest []Coloritem) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Coloritem{}
+		b += ColoritemRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Coloritem
+func (v Coloritem) Bytes() []byte {
+	buf := make([]byte, 12)
+	b := 0
+
+	xgb.Put32(buf[b:], v.Pixel)
+	b += 4
+
+	xgb.Put16(buf[b:], v.Red)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Green)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Blue)
+	b += 2
+
+	buf[b] = v.Flags
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+// Write struct list Coloritem
+func ColoritemListBytes(buf []byte, list []Coloritem) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Rgb' struct definition
+// Size: 8
+type Rgb struct {
+	Red   uint16
+	Green uint16
+	Blue  uint16
+	// padding: 2 bytes
+}
+
+// Struct read Rgb
+func RgbRead(buf []byte, v *Rgb) int {
+	b := 0
+
+	v.Red = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Green = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Blue = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	return b
+}
+
+// Struct list read Rgb
+func RgbReadList(buf []byte, dest []Rgb) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Rgb{}
+		b += RgbRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Rgb
+func (v Rgb) Bytes() []byte {
+	buf := make([]byte, 8)
+	b := 0
+
+	xgb.Put16(buf[b:], v.Red)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Green)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Blue)
+	b += 2
+
+	b += 2 // padding
+
+	return buf
+}
+
+// Write struct list Rgb
+func RgbListBytes(buf []byte, list []Rgb) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// 'Host' struct definition
+// Size: (4 + xgb.Pad((int(AddressLen) * 1)))
+type Host struct {
+	Family byte
+	// padding: 1 bytes
+	AddressLen uint16
+	Address    []byte // size: xgb.Pad((int(AddressLen) * 1))
+}
+
+// Struct read Host
+func HostRead(buf []byte, v *Host) int {
+	b := 0
+
+	v.Family = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	v.AddressLen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Address = make([]byte, v.AddressLen)
+	copy(v.Address[:v.AddressLen], buf[b:])
+	b += xgb.Pad(int(v.AddressLen))
+
+	return b
+}
+
+// Struct list read Host
+func HostReadList(buf []byte, dest []Host) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = Host{}
+		b += HostRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Struct write Host
+func (v Host) Bytes() []byte {
+	buf := make([]byte, (4 + xgb.Pad((int(v.AddressLen) * 1))))
+	b := 0
+
+	buf[b] = v.Family
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], v.AddressLen)
+	b += 2
+
+	copy(buf[b:], v.Address[:v.AddressLen])
+	b += xgb.Pad(int(v.AddressLen))
+
+	return buf
+}
+
+// Write struct list Host
+func HostListBytes(buf []byte, list []Host) int {
+	b := 0
+	var structBytes []byte
+	for _, item := range list {
+		structBytes = item.Bytes()
+		copy(buf[b:], structBytes)
+		b += xgb.Pad(len(structBytes))
+	}
+	return b
+}
+
+// Struct list size Host
+func HostListSize(list []Host) int {
+	size := 0
+	for _, item := range list {
+		size += (4 + xgb.Pad((int(item.AddressLen) * 1)))
+	}
+	return size
+}
+
+// Union definition ClientMessageDataUnion
+// Note that to *create* a Union, you should *never* create
+// this struct directly (unless you know what you're doing).
+// Instead use one of the following constructors for 'ClientMessageDataUnion':
+//     ClientMessageDataUnionData8New(Data8 []byte) ClientMessageDataUnion
+//     ClientMessageDataUnionData16New(Data16 []uint16) ClientMessageDataUnion
+//     ClientMessageDataUnionData32New(Data32 []uint32) ClientMessageDataUnion
+type ClientMessageDataUnion struct {
+	Data8  []byte   // size: 20
+	Data16 []uint16 // size: 20
+	Data32 []uint32 // size: 20
+}
+
+// Union constructor for ClientMessageDataUnion for field Data8.
+func ClientMessageDataUnionData8New(Data8 []byte) ClientMessageDataUnion {
+	var b int
+	buf := make([]byte, 20)
+
+	copy(buf[b:], Data8[:20])
+	b += xgb.Pad(int(20))
+
+	// Create the Union type
+	v := ClientMessageDataUnion{}
+
+	// Now copy buf into all fields
+
+	b = 0 // always read the same bytes
+	v.Data8 = make([]byte, 20)
+	copy(v.Data8[:20], buf[b:])
+	b += xgb.Pad(int(20))
+
+	b = 0 // always read the same bytes
+	v.Data16 = make([]uint16, 10)
+	for i := 0; i < int(10); i++ {
+		v.Data16[i] = xgb.Get16(buf[b:])
+		b += 2
+	}
+	b = xgb.Pad(b)
+
+	b = 0 // always read the same bytes
+	v.Data32 = make([]uint32, 5)
+	for i := 0; i < int(5); i++ {
+		v.Data32[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Union constructor for ClientMessageDataUnion for field Data16.
+func ClientMessageDataUnionData16New(Data16 []uint16) ClientMessageDataUnion {
+	var b int
+	buf := make([]byte, 20)
+
+	for i := 0; i < int(10); i++ {
+		xgb.Put16(buf[b:], Data16[i])
+		b += 2
+	}
+	b = xgb.Pad(b)
+
+	// Create the Union type
+	v := ClientMessageDataUnion{}
+
+	// Now copy buf into all fields
+
+	b = 0 // always read the same bytes
+	v.Data8 = make([]byte, 20)
+	copy(v.Data8[:20], buf[b:])
+	b += xgb.Pad(int(20))
+
+	b = 0 // always read the same bytes
+	v.Data16 = make([]uint16, 10)
+	for i := 0; i < int(10); i++ {
+		v.Data16[i] = xgb.Get16(buf[b:])
+		b += 2
+	}
+	b = xgb.Pad(b)
+
+	b = 0 // always read the same bytes
+	v.Data32 = make([]uint32, 5)
+	for i := 0; i < int(5); i++ {
+		v.Data32[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Union constructor for ClientMessageDataUnion for field Data32.
+func ClientMessageDataUnionData32New(Data32 []uint32) ClientMessageDataUnion {
+	var b int
+	buf := make([]byte, 20)
+
+	for i := 0; i < int(5); i++ {
+		xgb.Put32(buf[b:], Data32[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	// Create the Union type
+	v := ClientMessageDataUnion{}
+
+	// Now copy buf into all fields
+
+	b = 0 // always read the same bytes
+	v.Data8 = make([]byte, 20)
+	copy(v.Data8[:20], buf[b:])
+	b += xgb.Pad(int(20))
+
+	b = 0 // always read the same bytes
+	v.Data16 = make([]uint16, 10)
+	for i := 0; i < int(10); i++ {
+		v.Data16[i] = xgb.Get16(buf[b:])
+		b += 2
+	}
+	b = xgb.Pad(b)
+
+	b = 0 // always read the same bytes
+	v.Data32 = make([]uint32, 5)
+	for i := 0; i < int(5); i++ {
+		v.Data32[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Union read ClientMessageDataUnion
+func ClientMessageDataUnionRead(buf []byte, v *ClientMessageDataUnion) int {
+	var b int
+
+	b = 0 // re-read the same bytes
+	v.Data8 = make([]byte, 20)
+	copy(v.Data8[:20], buf[b:])
+	b += xgb.Pad(int(20))
+
+	b = 0 // re-read the same bytes
+	v.Data16 = make([]uint16, 10)
+	for i := 0; i < int(10); i++ {
+		v.Data16[i] = xgb.Get16(buf[b:])
+		b += 2
+	}
+	b = xgb.Pad(b)
+
+	b = 0 // re-read the same bytes
+	v.Data32 = make([]uint32, 5)
+	for i := 0; i < int(5); i++ {
+		v.Data32[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return 20
+}
+
+// Union list read ClientMessageDataUnion
+func ClientMessageDataUnionReadList(buf []byte, dest []ClientMessageDataUnion) int {
+	b := 0
+	for i := 0; i < len(dest); i++ {
+		dest[i] = ClientMessageDataUnion{}
+		b += ClientMessageDataUnionRead(buf[b:], &dest[i])
+	}
+	return xgb.Pad(b)
+}
+
+// Union write ClientMessageDataUnion
+// Each field in a union must contain the same data.
+// So simply pick the first field and write that to the wire.
+func (v ClientMessageDataUnion) Bytes() []byte {
+	buf := make([]byte, 20)
+	b := 0
+
+	copy(buf[b:], v.Data8[:20])
+	b += xgb.Pad(int(20))
+	return buf
+}
+
+// Union list write ClientMessageDataUnion
+func ClientMessageDataUnionListBytes(buf []byte, list []ClientMessageDataUnion) int {
+	b := 0
+	var unionBytes []byte
+	for _, item := range list {
+		unionBytes = item.Bytes()
+		copy(buf[b:], unionBytes)
+		b += xgb.Pad(len(unionBytes))
+	}
+	return b
+}
+
+// Event definition KeyPress (2)
+// Size: 32
+
+const KeyPress = 2
+
+type KeyPressEvent struct {
+	Sequence   uint16
+	Detail     Keycode
+	Time       Timestamp
+	Root       Window
+	Event      Window
+	Child      Window
+	RootX      int16
+	RootY      int16
+	EventX     int16
+	EventY     int16
+	State      uint16
+	SameScreen bool
+	// padding: 1 bytes
+}
+
+// Event read KeyPress
+func KeyPressEventNew(buf []byte) xgb.Event {
+	v := KeyPressEvent{}
+	b := 1 // don't read event number
+
+	v.Detail = Keycode(buf[b])
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Child = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.RootX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RootY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.State = xgb.Get16(buf[b:])
+	b += 2
+
+	if buf[b] == 1 {
+		v.SameScreen = true
+	} else {
+		v.SameScreen = false
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write KeyPress
+func (v KeyPressEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 2
+	b += 1
+
+	buf[b] = byte(v.Detail)
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Root))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Child))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.RootX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.RootY))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventY))
+	b += 2
+
+	xgb.Put16(buf[b:], v.State)
+	b += 2
+
+	if v.SameScreen {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v KeyPressEvent) ImplementsEvent() {}
+
+func (v KeyPressEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v KeyPressEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
+	return "KeyPress {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[2] = KeyPressEventNew
+}
+
+// Event definition ButtonPress (4)
+// Size: 32
+
+const ButtonPress = 4
+
+type ButtonPressEvent struct {
+	Sequence   uint16
+	Detail     Button
+	Time       Timestamp
+	Root       Window
+	Event      Window
+	Child      Window
+	RootX      int16
+	RootY      int16
+	EventX     int16
+	EventY     int16
+	State      uint16
+	SameScreen bool
+	// padding: 1 bytes
+}
+
+// Event read ButtonPress
+func ButtonPressEventNew(buf []byte) xgb.Event {
+	v := ButtonPressEvent{}
+	b := 1 // don't read event number
+
+	v.Detail = Button(buf[b])
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Child = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.RootX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RootY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.State = xgb.Get16(buf[b:])
+	b += 2
+
+	if buf[b] == 1 {
+		v.SameScreen = true
+	} else {
+		v.SameScreen = false
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write ButtonPress
+func (v ButtonPressEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 4
+	b += 1
+
+	buf[b] = byte(v.Detail)
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Root))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Child))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.RootX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.RootY))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventY))
+	b += 2
+
+	xgb.Put16(buf[b:], v.State)
+	b += 2
+
+	if v.SameScreen {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v ButtonPressEvent) ImplementsEvent() {}
+
+func (v ButtonPressEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ButtonPressEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
+	return "ButtonPress {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[4] = ButtonPressEventNew
+}
+
+// Event definition MotionNotify (6)
+// Size: 32
+
+const MotionNotify = 6
+
+type MotionNotifyEvent struct {
+	Sequence   uint16
+	Detail     byte
+	Time       Timestamp
+	Root       Window
+	Event      Window
+	Child      Window
+	RootX      int16
+	RootY      int16
+	EventX     int16
+	EventY     int16
+	State      uint16
+	SameScreen bool
+	// padding: 1 bytes
+}
+
+// Event read MotionNotify
+func MotionNotifyEventNew(buf []byte) xgb.Event {
+	v := MotionNotifyEvent{}
+	b := 1 // don't read event number
+
+	v.Detail = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Child = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.RootX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RootY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.State = xgb.Get16(buf[b:])
+	b += 2
+
+	if buf[b] == 1 {
+		v.SameScreen = true
+	} else {
+		v.SameScreen = false
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write MotionNotify
+func (v MotionNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 6
+	b += 1
+
+	buf[b] = v.Detail
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Root))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Child))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.RootX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.RootY))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventY))
+	b += 2
+
+	xgb.Put16(buf[b:], v.State)
+	b += 2
+
+	if v.SameScreen {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v MotionNotifyEvent) ImplementsEvent() {}
+
+func (v MotionNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v MotionNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
+	return "MotionNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[6] = MotionNotifyEventNew
+}
+
+// Event definition EnterNotify (7)
+// Size: 32
+
+const EnterNotify = 7
+
+type EnterNotifyEvent struct {
+	Sequence        uint16
+	Detail          byte
+	Time            Timestamp
+	Root            Window
+	Event           Window
+	Child           Window
+	RootX           int16
+	RootY           int16
+	EventX          int16
+	EventY          int16
+	State           uint16
+	Mode            byte
+	SameScreenFocus byte
+}
+
+// Event read EnterNotify
+func EnterNotifyEventNew(buf []byte) xgb.Event {
+	v := EnterNotifyEvent{}
+	b := 1 // don't read event number
+
+	v.Detail = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Child = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.RootX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RootY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.EventY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.State = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Mode = buf[b]
+	b += 1
+
+	v.SameScreenFocus = buf[b]
+	b += 1
+
+	return v
+}
+
+// Event write EnterNotify
+func (v EnterNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 7
+	b += 1
+
+	buf[b] = v.Detail
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Root))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Child))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.RootX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.RootY))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.EventY))
+	b += 2
+
+	xgb.Put16(buf[b:], v.State)
+	b += 2
+
+	buf[b] = v.Mode
+	b += 1
+
+	buf[b] = v.SameScreenFocus
+	b += 1
+
+	return buf
+}
+
+func (v EnterNotifyEvent) ImplementsEvent() {}
+
+func (v EnterNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v EnterNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreenFocus: %d", v.SameScreenFocus))
+	return "EnterNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[7] = EnterNotifyEventNew
+}
+
+// Event definition FocusIn (9)
+// Size: 32
+
+const FocusIn = 9
+
+type FocusInEvent struct {
+	Sequence uint16
+	Detail   byte
+	Event    Window
+	Mode     byte
+	// padding: 3 bytes
+}
+
+// Event read FocusIn
+func FocusInEventNew(buf []byte) xgb.Event {
+	v := FocusInEvent{}
+	b := 1 // don't read event number
+
+	v.Detail = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Mode = buf[b]
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write FocusIn
+func (v FocusInEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 9
+	b += 1
+
+	buf[b] = v.Detail
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	buf[b] = v.Mode
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v FocusInEvent) ImplementsEvent() {}
+
+func (v FocusInEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v FocusInEvent) String() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
+	return "FocusIn {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[9] = FocusInEventNew
+}
+
+// Event definition KeymapNotify (11)
+// Size: 32
+
+const KeymapNotify = 11
+
+type KeymapNotifyEvent struct {
+	Keys []byte // size: 32
+}
+
+// Event read KeymapNotify
+func KeymapNotifyEventNew(buf []byte) xgb.Event {
+	v := KeymapNotifyEvent{}
+	b := 1 // don't read event number
+
+	v.Keys = make([]byte, 31)
+	copy(v.Keys[:31], buf[b:])
+	b += xgb.Pad(int(31))
+
+	return v
+}
+
+// Event write KeymapNotify
+func (v KeymapNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 11
+	b += 1
+
+	copy(buf[b:], v.Keys[:31])
+	b += xgb.Pad(int(31))
+
+	return buf
+}
+
+func (v KeymapNotifyEvent) ImplementsEvent() {}
+
+func (v KeymapNotifyEvent) SequenceId() uint16 {
+	return uint16(0)
+}
+
+func (v KeymapNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 1)
+	return "KeymapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[11] = KeymapNotifyEventNew
+}
+
+// Event definition Expose (12)
+// Size: 32
+
+const Expose = 12
+
+type ExposeEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Window Window
+	X      uint16
+	Y      uint16
+	Width  uint16
+	Height uint16
+	Count  uint16
+	// padding: 2 bytes
+}
+
+// Event read Expose
+func ExposeEventNew(buf []byte) xgb.Event {
+	v := ExposeEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Y = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Count = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	return v
+}
+
+// Event write Expose
+func (v ExposeEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 12
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put16(buf[b:], v.X)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Y)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Count)
+	b += 2
+
+	b += 2 // padding
+
+	return buf
+}
+
+func (v ExposeEvent) ImplementsEvent() {}
+
+func (v ExposeEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ExposeEvent) String() string {
+	fieldVals := make([]string, 0, 8)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+	fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
+	return "Expose {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[12] = ExposeEventNew
+}
+
+// Event definition GraphicsExposure (13)
+// Size: 32
+
+const GraphicsExposure = 13
+
+type GraphicsExposureEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Drawable    Drawable
+	X           uint16
+	Y           uint16
+	Width       uint16
+	Height      uint16
+	MinorOpcode uint16
+	Count       uint16
+	MajorOpcode byte
+	// padding: 3 bytes
+}
+
+// Event read GraphicsExposure
+func GraphicsExposureEventNew(buf []byte) xgb.Event {
+	v := GraphicsExposureEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Drawable = Drawable(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Y = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MinorOpcode = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Count = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MajorOpcode = buf[b]
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write GraphicsExposure
+func (v GraphicsExposureEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 13
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Drawable))
+	b += 4
+
+	xgb.Put16(buf[b:], v.X)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Y)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	xgb.Put16(buf[b:], v.MinorOpcode)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Count)
+	b += 2
+
+	buf[b] = v.MajorOpcode
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v GraphicsExposureEvent) ImplementsEvent() {}
+
+func (v GraphicsExposureEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v GraphicsExposureEvent) String() string {
+	fieldVals := make([]string, 0, 10)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", v.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", v.MajorOpcode))
+	return "GraphicsExposure {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[13] = GraphicsExposureEventNew
+}
+
+// Event definition NoExposure (14)
+// Size: 32
+
+const NoExposure = 14
+
+type NoExposureEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Drawable    Drawable
+	MinorOpcode uint16
+	MajorOpcode byte
+	// padding: 1 bytes
+}
+
+// Event read NoExposure
+func NoExposureEventNew(buf []byte) xgb.Event {
+	v := NoExposureEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Drawable = Drawable(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.MinorOpcode = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MajorOpcode = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write NoExposure
+func (v NoExposureEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 14
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Drawable))
+	b += 4
+
+	xgb.Put16(buf[b:], v.MinorOpcode)
+	b += 2
+
+	buf[b] = v.MajorOpcode
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v NoExposureEvent) ImplementsEvent() {}
+
+func (v NoExposureEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v NoExposureEvent) String() string {
+	fieldVals := make([]string, 0, 5)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", v.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", v.MajorOpcode))
+	return "NoExposure {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[14] = NoExposureEventNew
+}
+
+// Event definition VisibilityNotify (15)
+// Size: 32
+
+const VisibilityNotify = 15
+
+type VisibilityNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Window Window
+	State  byte
+	// padding: 3 bytes
+}
+
+// Event read VisibilityNotify
+func VisibilityNotifyEventNew(buf []byte) xgb.Event {
+	v := VisibilityNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.State = buf[b]
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write VisibilityNotify
+func (v VisibilityNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 15
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	buf[b] = v.State
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v VisibilityNotifyEvent) ImplementsEvent() {}
+
+func (v VisibilityNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v VisibilityNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	return "VisibilityNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[15] = VisibilityNotifyEventNew
+}
+
+// Event definition CreateNotify (16)
+// Size: 32
+
+const CreateNotify = 16
+
+type CreateNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Parent           Window
+	Window           Window
+	X                int16
+	Y                int16
+	Width            uint16
+	Height           uint16
+	BorderWidth      uint16
+	OverrideRedirect bool
+	// padding: 1 bytes
+}
+
+// Event read CreateNotify
+func CreateNotifyEventNew(buf []byte) xgb.Event {
+	v := CreateNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Parent = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BorderWidth = xgb.Get16(buf[b:])
+	b += 2
+
+	if buf[b] == 1 {
+		v.OverrideRedirect = true
+	} else {
+		v.OverrideRedirect = false
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write CreateNotify
+func (v CreateNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 16
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Parent))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	xgb.Put16(buf[b:], v.BorderWidth)
+	b += 2
+
+	if v.OverrideRedirect {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v CreateNotifyEvent) ImplementsEvent() {}
+
+func (v CreateNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v CreateNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 10)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+	fieldVals = append(fieldVals, xgb.Sprintf("BorderWidth: %d", v.BorderWidth))
+	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
+	return "CreateNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[16] = CreateNotifyEventNew
+}
+
+// Event definition DestroyNotify (17)
+// Size: 32
+
+const DestroyNotify = 17
+
+type DestroyNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event  Window
+	Window Window
+}
+
+// Event read DestroyNotify
+func DestroyNotifyEventNew(buf []byte) xgb.Event {
+	v := DestroyNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Event write DestroyNotify
+func (v DestroyNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 17
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	return buf
+}
+
+func (v DestroyNotifyEvent) ImplementsEvent() {}
+
+func (v DestroyNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v DestroyNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 3)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	return "DestroyNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[17] = DestroyNotifyEventNew
+}
+
+// Event definition UnmapNotify (18)
+// Size: 32
+
+const UnmapNotify = 18
+
+type UnmapNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event         Window
+	Window        Window
+	FromConfigure bool
+	// padding: 3 bytes
+}
+
+// Event read UnmapNotify
+func UnmapNotifyEventNew(buf []byte) xgb.Event {
+	v := UnmapNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	if buf[b] == 1 {
+		v.FromConfigure = true
+	} else {
+		v.FromConfigure = false
+	}
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write UnmapNotify
+func (v UnmapNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 18
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	if v.FromConfigure {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v UnmapNotifyEvent) ImplementsEvent() {}
+
+func (v UnmapNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v UnmapNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 5)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("FromConfigure: %t", v.FromConfigure))
+	return "UnmapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[18] = UnmapNotifyEventNew
+}
+
+// Event definition MapNotify (19)
+// Size: 32
+
+const MapNotify = 19
+
+type MapNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event            Window
+	Window           Window
+	OverrideRedirect bool
+	// padding: 3 bytes
+}
+
+// Event read MapNotify
+func MapNotifyEventNew(buf []byte) xgb.Event {
+	v := MapNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	if buf[b] == 1 {
+		v.OverrideRedirect = true
+	} else {
+		v.OverrideRedirect = false
+	}
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write MapNotify
+func (v MapNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 19
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	if v.OverrideRedirect {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v MapNotifyEvent) ImplementsEvent() {}
+
+func (v MapNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v MapNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 5)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
+	return "MapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[19] = MapNotifyEventNew
+}
+
+// Event definition MapRequest (20)
+// Size: 32
+
+const MapRequest = 20
+
+type MapRequestEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Parent Window
+	Window Window
+}
+
+// Event read MapRequest
+func MapRequestEventNew(buf []byte) xgb.Event {
+	v := MapRequestEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Parent = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Event write MapRequest
+func (v MapRequestEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 20
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Parent))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	return buf
+}
+
+func (v MapRequestEvent) ImplementsEvent() {}
+
+func (v MapRequestEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v MapRequestEvent) String() string {
+	fieldVals := make([]string, 0, 3)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	return "MapRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[20] = MapRequestEventNew
+}
+
+// Event definition ReparentNotify (21)
+// Size: 32
+
+const ReparentNotify = 21
+
+type ReparentNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event            Window
+	Window           Window
+	Parent           Window
+	X                int16
+	Y                int16
+	OverrideRedirect bool
+	// padding: 3 bytes
+}
+
+// Event read ReparentNotify
+func ReparentNotifyEventNew(buf []byte) xgb.Event {
+	v := ReparentNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Parent = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	if buf[b] == 1 {
+		v.OverrideRedirect = true
+	} else {
+		v.OverrideRedirect = false
+	}
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write ReparentNotify
+func (v ReparentNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 21
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Parent))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	if v.OverrideRedirect {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v ReparentNotifyEvent) ImplementsEvent() {}
+
+func (v ReparentNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ReparentNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 8)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
+	return "ReparentNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[21] = ReparentNotifyEventNew
+}
+
+// Event definition ConfigureNotify (22)
+// Size: 32
+
+const ConfigureNotify = 22
+
+type ConfigureNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event            Window
+	Window           Window
+	AboveSibling     Window
+	X                int16
+	Y                int16
+	Width            uint16
+	Height           uint16
+	BorderWidth      uint16
+	OverrideRedirect bool
+	// padding: 1 bytes
+}
+
+// Event read ConfigureNotify
+func ConfigureNotifyEventNew(buf []byte) xgb.Event {
+	v := ConfigureNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.AboveSibling = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BorderWidth = xgb.Get16(buf[b:])
+	b += 2
+
+	if buf[b] == 1 {
+		v.OverrideRedirect = true
+	} else {
+		v.OverrideRedirect = false
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write ConfigureNotify
+func (v ConfigureNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 22
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.AboveSibling))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	xgb.Put16(buf[b:], v.BorderWidth)
+	b += 2
+
+	if v.OverrideRedirect {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v ConfigureNotifyEvent) ImplementsEvent() {}
+
+func (v ConfigureNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ConfigureNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 11)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("AboveSibling: %d", v.AboveSibling))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+	fieldVals = append(fieldVals, xgb.Sprintf("BorderWidth: %d", v.BorderWidth))
+	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
+	return "ConfigureNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[22] = ConfigureNotifyEventNew
+}
+
+// Event definition ConfigureRequest (23)
+// Size: 32
+
+const ConfigureRequest = 23
+
+type ConfigureRequestEvent struct {
+	Sequence    uint16
+	StackMode   byte
+	Parent      Window
+	Window      Window
+	Sibling     Window
+	X           int16
+	Y           int16
+	Width       uint16
+	Height      uint16
+	BorderWidth uint16
+	ValueMask   uint16
+}
+
+// Event read ConfigureRequest
+func ConfigureRequestEventNew(buf []byte) xgb.Event {
+	v := ConfigureRequestEvent{}
+	b := 1 // don't read event number
+
+	v.StackMode = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Parent = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Sibling = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BorderWidth = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ValueMask = xgb.Get16(buf[b:])
+	b += 2
+
+	return v
+}
+
+// Event write ConfigureRequest
+func (v ConfigureRequestEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 23
+	b += 1
+
+	buf[b] = v.StackMode
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Parent))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Sibling))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	xgb.Put16(buf[b:], v.BorderWidth)
+	b += 2
+
+	xgb.Put16(buf[b:], v.ValueMask)
+	b += 2
+
+	return buf
+}
+
+func (v ConfigureRequestEvent) ImplementsEvent() {}
+
+func (v ConfigureRequestEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ConfigureRequestEvent) String() string {
+	fieldVals := make([]string, 0, 10)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("StackMode: %d", v.StackMode))
+	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Sibling: %d", v.Sibling))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+	fieldVals = append(fieldVals, xgb.Sprintf("BorderWidth: %d", v.BorderWidth))
+	fieldVals = append(fieldVals, xgb.Sprintf("ValueMask: %d", v.ValueMask))
+	return "ConfigureRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[23] = ConfigureRequestEventNew
+}
+
+// Event definition GravityNotify (24)
+// Size: 32
+
+const GravityNotify = 24
+
+type GravityNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event  Window
+	Window Window
+	X      int16
+	Y      int16
+}
+
+// Event read GravityNotify
+func GravityNotifyEventNew(buf []byte) xgb.Event {
+	v := GravityNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	return v
+}
+
+// Event write GravityNotify
+func (v GravityNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 24
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(v.X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(v.Y))
+	b += 2
+
+	return buf
+}
+
+func (v GravityNotifyEvent) ImplementsEvent() {}
+
+func (v GravityNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v GravityNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 5)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
+	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
+	return "GravityNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[24] = GravityNotifyEventNew
+}
+
+// Event definition ResizeRequest (25)
+// Size: 32
+
+const ResizeRequest = 25
+
+type ResizeRequestEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Window Window
+	Width  uint16
+	Height uint16
+}
+
+// Event read ResizeRequest
+func ResizeRequestEventNew(buf []byte) xgb.Event {
+	v := ResizeRequestEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	return v
+}
+
+// Event write ResizeRequest
+func (v ResizeRequestEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 25
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put16(buf[b:], v.Width)
+	b += 2
+
+	xgb.Put16(buf[b:], v.Height)
+	b += 2
+
+	return buf
+}
+
+func (v ResizeRequestEvent) ImplementsEvent() {}
+
+func (v ResizeRequestEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ResizeRequestEvent) String() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+	return "ResizeRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[25] = ResizeRequestEventNew
+}
+
+// Event definition CirculateNotify (26)
+// Size: 32
+
+const CirculateNotify = 26
+
+type CirculateNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Event  Window
+	Window Window
+	// padding: 4 bytes
+	Place byte
+	// padding: 3 bytes
+}
+
+// Event read CirculateNotify
+func CirculateNotifyEventNew(buf []byte) xgb.Event {
+	v := CirculateNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Event = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	b += 4 // padding
+
+	v.Place = buf[b]
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write CirculateNotify
+func (v CirculateNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 26
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Event))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	b += 4 // padding
+
+	buf[b] = v.Place
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v CirculateNotifyEvent) ImplementsEvent() {}
+
+func (v CirculateNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v CirculateNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 6)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Place: %d", v.Place))
+	return "CirculateNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[26] = CirculateNotifyEventNew
+}
+
+// Event definition PropertyNotify (28)
+// Size: 32
+
+const PropertyNotify = 28
+
+type PropertyNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Window Window
+	Atom   Atom
+	Time   Timestamp
+	State  byte
+	// padding: 3 bytes
+}
+
+// Event read PropertyNotify
+func PropertyNotifyEventNew(buf []byte) xgb.Event {
+	v := PropertyNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Atom = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.State = buf[b]
+	b += 1
+
+	b += 3 // padding
+
+	return v
+}
+
+// Event write PropertyNotify
+func (v PropertyNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 28
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Atom))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	buf[b] = v.State
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+func (v PropertyNotifyEvent) ImplementsEvent() {}
+
+func (v PropertyNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v PropertyNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 6)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Atom: %d", v.Atom))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	return "PropertyNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[28] = PropertyNotifyEventNew
+}
+
+// Event definition SelectionClear (29)
+// Size: 32
+
+const SelectionClear = 29
+
+type SelectionClearEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Time      Timestamp
+	Owner     Window
+	Selection Atom
+}
+
+// Event read SelectionClear
+func SelectionClearEventNew(buf []byte) xgb.Event {
+	v := SelectionClearEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Owner = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Selection = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Event write SelectionClear
+func (v SelectionClearEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 29
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Owner))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Selection))
+	b += 4
+
+	return buf
+}
+
+func (v SelectionClearEvent) ImplementsEvent() {}
+
+func (v SelectionClearEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v SelectionClearEvent) String() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Owner: %d", v.Owner))
+	fieldVals = append(fieldVals, xgb.Sprintf("Selection: %d", v.Selection))
+	return "SelectionClear {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[29] = SelectionClearEventNew
+}
+
+// Event definition SelectionRequest (30)
+// Size: 32
+
+const SelectionRequest = 30
+
+type SelectionRequestEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Time      Timestamp
+	Owner     Window
+	Requestor Window
+	Selection Atom
+	Target    Atom
+	Property  Atom
+}
+
+// Event read SelectionRequest
+func SelectionRequestEventNew(buf []byte) xgb.Event {
+	v := SelectionRequestEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Owner = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Requestor = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Selection = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Target = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Property = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Event write SelectionRequest
+func (v SelectionRequestEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 30
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Owner))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Requestor))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Selection))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Target))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Property))
+	b += 4
+
+	return buf
+}
+
+func (v SelectionRequestEvent) ImplementsEvent() {}
+
+func (v SelectionRequestEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v SelectionRequestEvent) String() string {
+	fieldVals := make([]string, 0, 7)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Owner: %d", v.Owner))
+	fieldVals = append(fieldVals, xgb.Sprintf("Requestor: %d", v.Requestor))
+	fieldVals = append(fieldVals, xgb.Sprintf("Selection: %d", v.Selection))
+	fieldVals = append(fieldVals, xgb.Sprintf("Target: %d", v.Target))
+	fieldVals = append(fieldVals, xgb.Sprintf("Property: %d", v.Property))
+	return "SelectionRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[30] = SelectionRequestEventNew
+}
+
+// Event definition SelectionNotify (31)
+// Size: 32
+
+const SelectionNotify = 31
+
+type SelectionNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Time      Timestamp
+	Requestor Window
+	Selection Atom
+	Target    Atom
+	Property  Atom
+}
+
+// Event read SelectionNotify
+func SelectionNotifyEventNew(buf []byte) xgb.Event {
+	v := SelectionNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Time = Timestamp(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Requestor = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Selection = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Target = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Property = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Event write SelectionNotify
+func (v SelectionNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 31
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Time))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Requestor))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Selection))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Target))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Property))
+	b += 4
+
+	return buf
+}
+
+func (v SelectionNotifyEvent) ImplementsEvent() {}
+
+func (v SelectionNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v SelectionNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 6)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Requestor: %d", v.Requestor))
+	fieldVals = append(fieldVals, xgb.Sprintf("Selection: %d", v.Selection))
+	fieldVals = append(fieldVals, xgb.Sprintf("Target: %d", v.Target))
+	fieldVals = append(fieldVals, xgb.Sprintf("Property: %d", v.Property))
+	return "SelectionNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[31] = SelectionNotifyEventNew
+}
+
+// Event definition ColormapNotify (32)
+// Size: 32
+
+const ColormapNotify = 32
+
+type ColormapNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Window   Window
+	Colormap Colormap
+	New      bool
+	State    byte
+	// padding: 2 bytes
+}
+
+// Event read ColormapNotify
+func ColormapNotifyEventNew(buf []byte) xgb.Event {
+	v := ColormapNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Colormap = Colormap(xgb.Get32(buf[b:]))
+	b += 4
+
+	if buf[b] == 1 {
+		v.New = true
+	} else {
+		v.New = false
+	}
+	b += 1
+
+	v.State = buf[b]
+	b += 1
+
+	b += 2 // padding
+
+	return v
+}
+
+// Event write ColormapNotify
+func (v ColormapNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 32
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Colormap))
+	b += 4
+
+	if v.New {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	buf[b] = v.State
+	b += 1
+
+	b += 2 // padding
+
+	return buf
+}
+
+func (v ColormapNotifyEvent) ImplementsEvent() {}
+
+func (v ColormapNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ColormapNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 6)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Colormap: %d", v.Colormap))
+	fieldVals = append(fieldVals, xgb.Sprintf("New: %t", v.New))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	return "ColormapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[32] = ColormapNotifyEventNew
+}
+
+// Event definition ClientMessage (33)
+// Size: 32
+
+const ClientMessage = 33
+
+type ClientMessageEvent struct {
+	Sequence uint16
+	Format   byte
+	Window   Window
+	Type     Atom
+	Data     ClientMessageDataUnion
+}
+
+// Event read ClientMessage
+func ClientMessageEventNew(buf []byte) xgb.Event {
+	v := ClientMessageEvent{}
+	b := 1 // don't read event number
+
+	v.Format = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Window = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Type = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Data = ClientMessageDataUnion{}
+	b += ClientMessageDataUnionRead(buf[b:], &v.Data)
+
+	return v
+}
+
+// Event write ClientMessage
+func (v ClientMessageEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 33
+	b += 1
+
+	buf[b] = v.Format
+	b += 1
+
+	b += 2 // skip sequence number
+
+	xgb.Put32(buf[b:], uint32(v.Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(v.Type))
+	b += 4
+
+	{
+		unionBytes := v.Data.Bytes()
+		copy(buf[b:], unionBytes)
+		b += xgb.Pad(len(unionBytes))
+	}
+
+	return buf
+}
+
+func (v ClientMessageEvent) ImplementsEvent() {}
+
+func (v ClientMessageEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ClientMessageEvent) String() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Format: %d", v.Format))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Type: %d", v.Type))
+	return "ClientMessage {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[33] = ClientMessageEventNew
+}
+
+// Event definition MappingNotify (34)
+// Size: 32
+
+const MappingNotify = 34
+
+type MappingNotifyEvent struct {
+	Sequence uint16
+	// padding: 1 bytes
+	Request      byte
+	FirstKeycode Keycode
+	Count        byte
+	// padding: 1 bytes
+}
+
+// Event read MappingNotify
+func MappingNotifyEventNew(buf []byte) xgb.Event {
+	v := MappingNotifyEvent{}
+	b := 1 // don't read event number
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Request = buf[b]
+	b += 1
+
+	v.FirstKeycode = Keycode(buf[b])
+	b += 1
+
+	v.Count = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+// Event write MappingNotify
+func (v MappingNotifyEvent) Bytes() []byte {
+	buf := make([]byte, 32)
+	b := 0
+
+	// write event number
+	buf[b] = 34
+	b += 1
+
+	b += 1 // padding
+
+	b += 2 // skip sequence number
+
+	buf[b] = v.Request
+	b += 1
+
+	buf[b] = byte(v.FirstKeycode)
+	b += 1
+
+	buf[b] = v.Count
+	b += 1
+
+	b += 1 // padding
+
+	return buf
+}
+
+func (v MappingNotifyEvent) ImplementsEvent() {}
+
+func (v MappingNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v MappingNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 5)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Request: %d", v.Request))
+	fieldVals = append(fieldVals, xgb.Sprintf("FirstKeycode: %d", v.FirstKeycode))
+	fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
+	return "MappingNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[34] = MappingNotifyEventNew
+}
+
+// EventCopy definition KeyRelease (3)
+
+const KeyRelease = 3
+
+type KeyReleaseEvent KeyPressEvent
+
+func KeyReleaseEventNew(buf []byte) xgb.Event {
+	return KeyReleaseEvent(KeyPressEventNew(buf).(KeyPressEvent))
+}
+
+func (v KeyReleaseEvent) Bytes() []byte {
+	return KeyPressEvent(v).Bytes()
+}
+
+func (v KeyReleaseEvent) ImplementsEvent() {}
+
+func (v KeyReleaseEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v KeyReleaseEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
+	return "KeyRelease {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[3] = KeyReleaseEventNew
+}
+
+// EventCopy definition ButtonRelease (5)
+
+const ButtonRelease = 5
+
+type ButtonReleaseEvent ButtonPressEvent
+
+func ButtonReleaseEventNew(buf []byte) xgb.Event {
+	return ButtonReleaseEvent(ButtonPressEventNew(buf).(ButtonPressEvent))
+}
+
+func (v ButtonReleaseEvent) Bytes() []byte {
+	return ButtonPressEvent(v).Bytes()
+}
+
+func (v ButtonReleaseEvent) ImplementsEvent() {}
+
+func (v ButtonReleaseEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v ButtonReleaseEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
+	return "ButtonRelease {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[5] = ButtonReleaseEventNew
+}
+
+// EventCopy definition LeaveNotify (8)
+
+const LeaveNotify = 8
+
+type LeaveNotifyEvent EnterNotifyEvent
+
+func LeaveNotifyEventNew(buf []byte) xgb.Event {
+	return LeaveNotifyEvent(EnterNotifyEventNew(buf).(EnterNotifyEvent))
+}
+
+func (v LeaveNotifyEvent) Bytes() []byte {
+	return EnterNotifyEvent(v).Bytes()
+}
+
+func (v LeaveNotifyEvent) ImplementsEvent() {}
+
+func (v LeaveNotifyEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v LeaveNotifyEvent) String() string {
+	fieldVals := make([]string, 0, 12)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
+	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
+	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
+	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
+	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
+	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
+	fieldVals = append(fieldVals, xgb.Sprintf("SameScreenFocus: %d", v.SameScreenFocus))
+	return "LeaveNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[8] = LeaveNotifyEventNew
+}
+
+// EventCopy definition FocusOut (10)
+
+const FocusOut = 10
+
+type FocusOutEvent FocusInEvent
+
+func FocusOutEventNew(buf []byte) xgb.Event {
+	return FocusOutEvent(FocusInEventNew(buf).(FocusInEvent))
+}
+
+func (v FocusOutEvent) Bytes() []byte {
+	return FocusInEvent(v).Bytes()
+}
+
+func (v FocusOutEvent) ImplementsEvent() {}
+
+func (v FocusOutEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v FocusOutEvent) String() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
+	return "FocusOut {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[10] = FocusOutEventNew
+}
+
+// EventCopy definition CirculateRequest (27)
+
+const CirculateRequest = 27
+
+type CirculateRequestEvent CirculateNotifyEvent
+
+func CirculateRequestEventNew(buf []byte) xgb.Event {
+	return CirculateRequestEvent(CirculateNotifyEventNew(buf).(CirculateNotifyEvent))
+}
+
+func (v CirculateRequestEvent) Bytes() []byte {
+	return CirculateNotifyEvent(v).Bytes()
+}
+
+func (v CirculateRequestEvent) ImplementsEvent() {}
+
+func (v CirculateRequestEvent) SequenceId() uint16 {
+	return v.Sequence
+}
+
+func (v CirculateRequestEvent) String() string {
+	fieldVals := make([]string, 0, 6)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
+	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
+	fieldVals = append(fieldVals, xgb.Sprintf("Place: %d", v.Place))
+	return "CirculateRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewEventFuncs[27] = CirculateRequestEventNew
+}
+
+// Error definition Request (1)
+// Size: 32
+
+const BadRequest = 1
+
+type RequestError struct {
+	Sequence    uint16
+	NiceName    string
+	BadValue    uint32
+	MinorOpcode uint16
+	MajorOpcode byte
+	// padding: 1 bytes
+}
+
+// Error read Request
+func RequestErrorNew(buf []byte) xgb.Error {
+	v := RequestError{}
+	v.NiceName = "Request"
+
+	b := 1 // skip error determinant
+	b += 1 // don't read error number
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BadValue = xgb.Get32(buf[b:])
+	b += 4
+
+	v.MinorOpcode = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MajorOpcode = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+func (err RequestError) ImplementsError() {}
+
+func (err RequestError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err RequestError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err RequestError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[1] = RequestErrorNew
+}
+
+// Error definition Value (2)
+// Size: 32
+
+const BadValue = 2
+
+type ValueError struct {
+	Sequence    uint16
+	NiceName    string
+	BadValue    uint32
+	MinorOpcode uint16
+	MajorOpcode byte
+	// padding: 1 bytes
+}
+
+// Error read Value
+func ValueErrorNew(buf []byte) xgb.Error {
+	v := ValueError{}
+	v.NiceName = "Value"
+
+	b := 1 // skip error determinant
+	b += 1 // don't read error number
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BadValue = xgb.Get32(buf[b:])
+	b += 4
+
+	v.MinorOpcode = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MajorOpcode = buf[b]
+	b += 1
+
+	b += 1 // padding
+
+	return v
+}
+
+func (err ValueError) ImplementsError() {}
+
+func (err ValueError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err ValueError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err ValueError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadValue {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[2] = ValueErrorNew
+}
+
+// ErrorCopy definition Window (3)
+
+const BadWindow = 3
+
+type WindowError ValueError
+
+func WindowErrorNew(buf []byte) xgb.Error {
+	v := WindowError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Window"
+	return v
+}
+
+func (err WindowError) ImplementsError() {}
+
+func (err WindowError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err WindowError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err WindowError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadWindow {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[3] = WindowErrorNew
+}
+
+// ErrorCopy definition Pixmap (4)
+
+const BadPixmap = 4
+
+type PixmapError ValueError
+
+func PixmapErrorNew(buf []byte) xgb.Error {
+	v := PixmapError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Pixmap"
+	return v
+}
+
+func (err PixmapError) ImplementsError() {}
+
+func (err PixmapError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err PixmapError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err PixmapError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadPixmap {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[4] = PixmapErrorNew
+}
+
+// ErrorCopy definition Atom (5)
+
+const BadAtom = 5
+
+type AtomError ValueError
+
+func AtomErrorNew(buf []byte) xgb.Error {
+	v := AtomError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Atom"
+	return v
+}
+
+func (err AtomError) ImplementsError() {}
+
+func (err AtomError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err AtomError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err AtomError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadAtom {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[5] = AtomErrorNew
+}
+
+// ErrorCopy definition Cursor (6)
+
+const BadCursor = 6
+
+type CursorError ValueError
+
+func CursorErrorNew(buf []byte) xgb.Error {
+	v := CursorError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Cursor"
+	return v
+}
+
+func (err CursorError) ImplementsError() {}
+
+func (err CursorError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err CursorError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err CursorError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadCursor {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[6] = CursorErrorNew
+}
+
+// ErrorCopy definition Font (7)
+
+const BadFont = 7
+
+type FontError ValueError
+
+func FontErrorNew(buf []byte) xgb.Error {
+	v := FontError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Font"
+	return v
+}
+
+func (err FontError) ImplementsError() {}
+
+func (err FontError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err FontError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err FontError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadFont {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[7] = FontErrorNew
+}
+
+// ErrorCopy definition Match (8)
+
+const BadMatch = 8
+
+type MatchError RequestError
+
+func MatchErrorNew(buf []byte) xgb.Error {
+	v := MatchError(RequestErrorNew(buf).(RequestError))
+	v.NiceName = "Match"
+	return v
+}
+
+func (err MatchError) ImplementsError() {}
+
+func (err MatchError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err MatchError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err MatchError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadMatch {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[8] = MatchErrorNew
+}
+
+// ErrorCopy definition Drawable (9)
+
+const BadDrawable = 9
+
+type DrawableError ValueError
+
+func DrawableErrorNew(buf []byte) xgb.Error {
+	v := DrawableError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Drawable"
+	return v
+}
+
+func (err DrawableError) ImplementsError() {}
+
+func (err DrawableError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err DrawableError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err DrawableError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadDrawable {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[9] = DrawableErrorNew
+}
+
+// ErrorCopy definition Access (10)
+
+const BadAccess = 10
+
+type AccessError RequestError
+
+func AccessErrorNew(buf []byte) xgb.Error {
+	v := AccessError(RequestErrorNew(buf).(RequestError))
+	v.NiceName = "Access"
+	return v
+}
+
+func (err AccessError) ImplementsError() {}
+
+func (err AccessError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err AccessError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err AccessError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadAccess {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[10] = AccessErrorNew
+}
+
+// ErrorCopy definition Alloc (11)
+
+const BadAlloc = 11
+
+type AllocError RequestError
+
+func AllocErrorNew(buf []byte) xgb.Error {
+	v := AllocError(RequestErrorNew(buf).(RequestError))
+	v.NiceName = "Alloc"
+	return v
+}
+
+func (err AllocError) ImplementsError() {}
+
+func (err AllocError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err AllocError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err AllocError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadAlloc {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[11] = AllocErrorNew
+}
+
+// ErrorCopy definition Colormap (12)
+
+const BadColormap = 12
+
+type ColormapError ValueError
+
+func ColormapErrorNew(buf []byte) xgb.Error {
+	v := ColormapError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "Colormap"
+	return v
+}
+
+func (err ColormapError) ImplementsError() {}
+
+func (err ColormapError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err ColormapError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err ColormapError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadColormap {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[12] = ColormapErrorNew
+}
+
+// ErrorCopy definition GContext (13)
+
+const BadGContext = 13
+
+type GContextError ValueError
+
+func GContextErrorNew(buf []byte) xgb.Error {
+	v := GContextError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "GContext"
+	return v
+}
+
+func (err GContextError) ImplementsError() {}
+
+func (err GContextError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err GContextError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err GContextError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadGContext {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[13] = GContextErrorNew
+}
+
+// ErrorCopy definition IDChoice (14)
+
+const BadIDChoice = 14
+
+type IDChoiceError ValueError
+
+func IDChoiceErrorNew(buf []byte) xgb.Error {
+	v := IDChoiceError(ValueErrorNew(buf).(ValueError))
+	v.NiceName = "IDChoice"
+	return v
+}
+
+func (err IDChoiceError) ImplementsError() {}
+
+func (err IDChoiceError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err IDChoiceError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err IDChoiceError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadIDChoice {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[14] = IDChoiceErrorNew
+}
+
+// ErrorCopy definition Name (15)
+
+const BadName = 15
+
+type NameError RequestError
+
+func NameErrorNew(buf []byte) xgb.Error {
+	v := NameError(RequestErrorNew(buf).(RequestError))
+	v.NiceName = "Name"
+	return v
+}
+
+func (err NameError) ImplementsError() {}
+
+func (err NameError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err NameError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err NameError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadName {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[15] = NameErrorNew
+}
+
+// ErrorCopy definition Length (16)
+
+const BadLength = 16
+
+type LengthError RequestError
+
+func LengthErrorNew(buf []byte) xgb.Error {
+	v := LengthError(RequestErrorNew(buf).(RequestError))
+	v.NiceName = "Length"
+	return v
+}
+
+func (err LengthError) ImplementsError() {}
+
+func (err LengthError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err LengthError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err LengthError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadLength {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[16] = LengthErrorNew
+}
+
+// ErrorCopy definition Implementation (17)
+
+const BadImplementation = 17
+
+type ImplementationError RequestError
+
+func ImplementationErrorNew(buf []byte) xgb.Error {
+	v := ImplementationError(RequestErrorNew(buf).(RequestError))
+	v.NiceName = "Implementation"
+	return v
+}
+
+func (err ImplementationError) ImplementsError() {}
+
+func (err ImplementationError) SequenceId() uint16 {
+	return err.Sequence
+}
+
+func (err ImplementationError) BadId() uint32 {
+	return err.BadValue
+}
+
+func (err ImplementationError) Error() string {
+	fieldVals := make([]string, 0, 4)
+	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
+	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
+	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
+	return "BadImplementation {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+	xgb.NewErrorFuncs[17] = ImplementationErrorNew
+}
+
+// Request CreateWindow
+// size: xgb.Pad((28 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+type CreateWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CreateWindow
+func CreateWindow(c *xgb.Conn, Depth byte, Wid Window, Parent Window, X int16, Y int16, Width uint16, Height uint16, BorderWidth uint16, Class uint16, Visual Visualid, ValueMask uint32, ValueList []uint32) CreateWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(createWindowRequest(c, Depth, Wid, Parent, X, Y, Width, Height, BorderWidth, Class, Visual, ValueMask, ValueList), cookie)
+	return CreateWindowCookie{cookie}
+}
+
+func CreateWindowChecked(c *xgb.Conn, Depth byte, Wid Window, Parent Window, X int16, Y int16, Width uint16, Height uint16, BorderWidth uint16, Class uint16, Visual Visualid, ValueMask uint32, ValueList []uint32) CreateWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(createWindowRequest(c, Depth, Wid, Parent, X, Y, Width, Height, BorderWidth, Class, Visual, ValueMask, ValueList), cookie)
+	return CreateWindowCookie{cookie}
+}
+
+func (cook CreateWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CreateWindow
+func createWindowRequest(c *xgb.Conn, Depth byte, Wid Window, Parent Window, X int16, Y int16, Width uint16, Height uint16, BorderWidth uint16, Class uint16, Visual Visualid, ValueMask uint32, ValueList []uint32) []byte {
+	size := xgb.Pad((28 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 1 // request opcode
+	b += 1
+
+	buf[b] = Depth
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Wid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Parent))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	xgb.Put16(buf[b:], BorderWidth)
+	b += 2
+
+	xgb.Put16(buf[b:], Class)
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Visual))
+	b += 4
+
+	xgb.Put32(buf[b:], ValueMask)
+	b += 4
+	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
+		xgb.Put32(buf[b:], ValueList[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request ChangeWindowAttributes
+// size: xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+type ChangeWindowAttributesCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeWindowAttributes
+func ChangeWindowAttributes(c *xgb.Conn, Window Window, ValueMask uint32, ValueList []uint32) ChangeWindowAttributesCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeWindowAttributesRequest(c, Window, ValueMask, ValueList), cookie)
+	return ChangeWindowAttributesCookie{cookie}
+}
+
+func ChangeWindowAttributesChecked(c *xgb.Conn, Window Window, ValueMask uint32, ValueList []uint32) ChangeWindowAttributesCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeWindowAttributesRequest(c, Window, ValueMask, ValueList), cookie)
+	return ChangeWindowAttributesCookie{cookie}
+}
+
+func (cook ChangeWindowAttributesCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeWindowAttributes
+func changeWindowAttributesRequest(c *xgb.Conn, Window Window, ValueMask uint32, ValueList []uint32) []byte {
+	size := xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 2 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], ValueMask)
+	b += 4
+	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
+		xgb.Put32(buf[b:], ValueList[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request GetWindowAttributes
+// size: 8
+type GetWindowAttributesCookie struct {
+	*xgb.Cookie
+}
+
+func GetWindowAttributes(c *xgb.Conn, Window Window) GetWindowAttributesCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getWindowAttributesRequest(c, Window), cookie)
+	return GetWindowAttributesCookie{cookie}
+}
+
+func GetWindowAttributesUnchecked(c *xgb.Conn, Window Window) GetWindowAttributesCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getWindowAttributesRequest(c, Window), cookie)
+	return GetWindowAttributesCookie{cookie}
+}
+
+// Request reply for GetWindowAttributes
+// size: 44
+type GetWindowAttributesReply struct {
+	Sequence           uint16
+	Length             uint32
+	BackingStore       byte
+	Visual             Visualid
+	Class              uint16
+	BitGravity         byte
+	WinGravity         byte
+	BackingPlanes      uint32
+	BackingPixel       uint32
+	SaveUnder          bool
+	MapIsInstalled     bool
+	MapState           byte
+	OverrideRedirect   bool
+	Colormap           Colormap
+	AllEventMasks      uint32
+	YourEventMask      uint32
+	DoNotPropagateMask uint16
+	// padding: 2 bytes
+}
+
+// Waits and reads reply data from request GetWindowAttributes
+func (cook GetWindowAttributesCookie) Reply() (*GetWindowAttributesReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getWindowAttributesReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetWindowAttributes
+func getWindowAttributesReply(buf []byte) *GetWindowAttributesReply {
+	v := new(GetWindowAttributesReply)
+	b := 1 // skip reply determinant
+
+	v.BackingStore = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Visual = Visualid(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Class = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BitGravity = buf[b]
+	b += 1
+
+	v.WinGravity = buf[b]
+	b += 1
+
+	v.BackingPlanes = xgb.Get32(buf[b:])
+	b += 4
+
+	v.BackingPixel = xgb.Get32(buf[b:])
+	b += 4
+
+	if buf[b] == 1 {
+		v.SaveUnder = true
+	} else {
+		v.SaveUnder = false
+	}
+	b += 1
+
+	if buf[b] == 1 {
+		v.MapIsInstalled = true
+	} else {
+		v.MapIsInstalled = false
+	}
+	b += 1
+
+	v.MapState = buf[b]
+	b += 1
+
+	if buf[b] == 1 {
+		v.OverrideRedirect = true
+	} else {
+		v.OverrideRedirect = false
+	}
+	b += 1
+
+	v.Colormap = Colormap(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.AllEventMasks = xgb.Get32(buf[b:])
+	b += 4
+
+	v.YourEventMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.DoNotPropagateMask = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	return v
+}
+
+// Write request to wire for GetWindowAttributes
+func getWindowAttributesRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 3 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request DestroyWindow
+// size: 8
+type DestroyWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for DestroyWindow
+func DestroyWindow(c *xgb.Conn, Window Window) DestroyWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(destroyWindowRequest(c, Window), cookie)
+	return DestroyWindowCookie{cookie}
+}
+
+func DestroyWindowChecked(c *xgb.Conn, Window Window) DestroyWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(destroyWindowRequest(c, Window), cookie)
+	return DestroyWindowCookie{cookie}
+}
+
+func (cook DestroyWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for DestroyWindow
+func destroyWindowRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 4 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request DestroySubwindows
+// size: 8
+type DestroySubwindowsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for DestroySubwindows
+func DestroySubwindows(c *xgb.Conn, Window Window) DestroySubwindowsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(destroySubwindowsRequest(c, Window), cookie)
+	return DestroySubwindowsCookie{cookie}
+}
+
+func DestroySubwindowsChecked(c *xgb.Conn, Window Window) DestroySubwindowsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(destroySubwindowsRequest(c, Window), cookie)
+	return DestroySubwindowsCookie{cookie}
+}
+
+func (cook DestroySubwindowsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for DestroySubwindows
+func destroySubwindowsRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 5 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request ChangeSaveSet
+// size: 8
+type ChangeSaveSetCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeSaveSet
+func ChangeSaveSet(c *xgb.Conn, Mode byte, Window Window) ChangeSaveSetCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeSaveSetRequest(c, Mode, Window), cookie)
+	return ChangeSaveSetCookie{cookie}
+}
+
+func ChangeSaveSetChecked(c *xgb.Conn, Mode byte, Window Window) ChangeSaveSetCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeSaveSetRequest(c, Mode, Window), cookie)
+	return ChangeSaveSetCookie{cookie}
+}
+
+func (cook ChangeSaveSetCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeSaveSet
+func changeSaveSetRequest(c *xgb.Conn, Mode byte, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 6 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request ReparentWindow
+// size: 16
+type ReparentWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ReparentWindow
+func ReparentWindow(c *xgb.Conn, Window Window, Parent Window, X int16, Y int16) ReparentWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(reparentWindowRequest(c, Window, Parent, X, Y), cookie)
+	return ReparentWindowCookie{cookie}
+}
+
+func ReparentWindowChecked(c *xgb.Conn, Window Window, Parent Window, X int16, Y int16) ReparentWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(reparentWindowRequest(c, Window, Parent, X, Y), cookie)
+	return ReparentWindowCookie{cookie}
+}
+
+func (cook ReparentWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ReparentWindow
+func reparentWindowRequest(c *xgb.Conn, Window Window, Parent Window, X int16, Y int16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 7 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Parent))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	return buf
+}
+
+// Request MapWindow
+// size: 8
+type MapWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for MapWindow
+func MapWindow(c *xgb.Conn, Window Window) MapWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(mapWindowRequest(c, Window), cookie)
+	return MapWindowCookie{cookie}
+}
+
+func MapWindowChecked(c *xgb.Conn, Window Window) MapWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(mapWindowRequest(c, Window), cookie)
+	return MapWindowCookie{cookie}
+}
+
+func (cook MapWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for MapWindow
+func mapWindowRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 8 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request MapSubwindows
+// size: 8
+type MapSubwindowsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for MapSubwindows
+func MapSubwindows(c *xgb.Conn, Window Window) MapSubwindowsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(mapSubwindowsRequest(c, Window), cookie)
+	return MapSubwindowsCookie{cookie}
+}
+
+func MapSubwindowsChecked(c *xgb.Conn, Window Window) MapSubwindowsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(mapSubwindowsRequest(c, Window), cookie)
+	return MapSubwindowsCookie{cookie}
+}
+
+func (cook MapSubwindowsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for MapSubwindows
+func mapSubwindowsRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 9 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request UnmapWindow
+// size: 8
+type UnmapWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UnmapWindow
+func UnmapWindow(c *xgb.Conn, Window Window) UnmapWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(unmapWindowRequest(c, Window), cookie)
+	return UnmapWindowCookie{cookie}
+}
+
+func UnmapWindowChecked(c *xgb.Conn, Window Window) UnmapWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(unmapWindowRequest(c, Window), cookie)
+	return UnmapWindowCookie{cookie}
+}
+
+func (cook UnmapWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UnmapWindow
+func unmapWindowRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 10 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request UnmapSubwindows
+// size: 8
+type UnmapSubwindowsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UnmapSubwindows
+func UnmapSubwindows(c *xgb.Conn, Window Window) UnmapSubwindowsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(unmapSubwindowsRequest(c, Window), cookie)
+	return UnmapSubwindowsCookie{cookie}
+}
+
+func UnmapSubwindowsChecked(c *xgb.Conn, Window Window) UnmapSubwindowsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(unmapSubwindowsRequest(c, Window), cookie)
+	return UnmapSubwindowsCookie{cookie}
+}
+
+func (cook UnmapSubwindowsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UnmapSubwindows
+func unmapSubwindowsRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 11 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request ConfigureWindow
+// size: xgb.Pad((10 + (2 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+type ConfigureWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ConfigureWindow
+func ConfigureWindow(c *xgb.Conn, Window Window, ValueMask uint16, ValueList []uint32) ConfigureWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(configureWindowRequest(c, Window, ValueMask, ValueList), cookie)
+	return ConfigureWindowCookie{cookie}
+}
+
+func ConfigureWindowChecked(c *xgb.Conn, Window Window, ValueMask uint16, ValueList []uint32) ConfigureWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(configureWindowRequest(c, Window, ValueMask, ValueList), cookie)
+	return ConfigureWindowCookie{cookie}
+}
+
+func (cook ConfigureWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ConfigureWindow
+func configureWindowRequest(c *xgb.Conn, Window Window, ValueMask uint16, ValueList []uint32) []byte {
+	size := xgb.Pad((10 + (2 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 12 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put16(buf[b:], ValueMask)
+	b += 2
+
+	b += 2 // padding
+
+	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
+		xgb.Put32(buf[b:], ValueList[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request CirculateWindow
+// size: 8
+type CirculateWindowCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CirculateWindow
+func CirculateWindow(c *xgb.Conn, Direction byte, Window Window) CirculateWindowCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(circulateWindowRequest(c, Direction, Window), cookie)
+	return CirculateWindowCookie{cookie}
+}
+
+func CirculateWindowChecked(c *xgb.Conn, Direction byte, Window Window) CirculateWindowCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(circulateWindowRequest(c, Direction, Window), cookie)
+	return CirculateWindowCookie{cookie}
+}
+
+func (cook CirculateWindowCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CirculateWindow
+func circulateWindowRequest(c *xgb.Conn, Direction byte, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 13 // request opcode
+	b += 1
+
+	buf[b] = Direction
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request GetGeometry
+// size: 8
+type GetGeometryCookie struct {
+	*xgb.Cookie
+}
+
+func GetGeometry(c *xgb.Conn, Drawable Drawable) GetGeometryCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getGeometryRequest(c, Drawable), cookie)
+	return GetGeometryCookie{cookie}
+}
+
+func GetGeometryUnchecked(c *xgb.Conn, Drawable Drawable) GetGeometryCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getGeometryRequest(c, Drawable), cookie)
+	return GetGeometryCookie{cookie}
+}
+
+// Request reply for GetGeometry
+// size: 24
+type GetGeometryReply struct {
+	Sequence    uint16
+	Length      uint32
+	Depth       byte
+	Root        Window
+	X           int16
+	Y           int16
+	Width       uint16
+	Height      uint16
+	BorderWidth uint16
+	// padding: 2 bytes
+}
+
+// Waits and reads reply data from request GetGeometry
+func (cook GetGeometryCookie) Reply() (*GetGeometryReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getGeometryReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetGeometry
+func getGeometryReply(buf []byte) *GetGeometryReply {
+	v := new(GetGeometryReply)
+	b := 1 // skip reply determinant
+
+	v.Depth = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.X = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Y = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BorderWidth = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	return v
+}
+
+// Write request to wire for GetGeometry
+func getGeometryRequest(c *xgb.Conn, Drawable Drawable) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 14 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	return buf
+}
+
+// Request QueryTree
+// size: 8
+type QueryTreeCookie struct {
+	*xgb.Cookie
+}
+
+func QueryTree(c *xgb.Conn, Window Window) QueryTreeCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryTreeRequest(c, Window), cookie)
+	return QueryTreeCookie{cookie}
+}
+
+func QueryTreeUnchecked(c *xgb.Conn, Window Window) QueryTreeCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryTreeRequest(c, Window), cookie)
+	return QueryTreeCookie{cookie}
+}
+
+// Request reply for QueryTree
+// size: (32 + xgb.Pad((int(ChildrenLen) * 4)))
+type QueryTreeReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Root        Window
+	Parent      Window
+	ChildrenLen uint16
+	// padding: 14 bytes
+	Children []Window // size: xgb.Pad((int(ChildrenLen) * 4))
+}
+
+// Waits and reads reply data from request QueryTree
+func (cook QueryTreeCookie) Reply() (*QueryTreeReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryTreeReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryTree
+func queryTreeReply(buf []byte) *QueryTreeReply {
+	v := new(QueryTreeReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Parent = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.ChildrenLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 14 // padding
+
+	v.Children = make([]Window, v.ChildrenLen)
+	for i := 0; i < int(v.ChildrenLen); i++ {
+		v.Children[i] = Window(xgb.Get32(buf[b:]))
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for QueryTree
+func queryTreeRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 15 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request InternAtom
+// size: xgb.Pad((8 + xgb.Pad((int(NameLen) * 1))))
+type InternAtomCookie struct {
+	*xgb.Cookie
+}
+
+func InternAtom(c *xgb.Conn, OnlyIfExists bool, NameLen uint16, Name string) InternAtomCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(internAtomRequest(c, OnlyIfExists, NameLen, Name), cookie)
+	return InternAtomCookie{cookie}
+}
+
+func InternAtomUnchecked(c *xgb.Conn, OnlyIfExists bool, NameLen uint16, Name string) InternAtomCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(internAtomRequest(c, OnlyIfExists, NameLen, Name), cookie)
+	return InternAtomCookie{cookie}
+}
+
+// Request reply for InternAtom
+// size: 12
+type InternAtomReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Atom Atom
+}
+
+// Waits and reads reply data from request InternAtom
+func (cook InternAtomCookie) Reply() (*InternAtomReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return internAtomReply(buf), nil
+}
+
+// Read reply into structure from buffer for InternAtom
+func internAtomReply(buf []byte) *InternAtomReply {
+	v := new(InternAtomReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Atom = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Write request to wire for InternAtom
+func internAtomRequest(c *xgb.Conn, OnlyIfExists bool, NameLen uint16, Name string) []byte {
+	size := xgb.Pad((8 + xgb.Pad((int(NameLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 16 // request opcode
+	b += 1
+
+	if OnlyIfExists {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], NameLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], Name[:NameLen])
+	b += xgb.Pad(int(NameLen))
+
+	return buf
+}
+
+// Request GetAtomName
+// size: 8
+type GetAtomNameCookie struct {
+	*xgb.Cookie
+}
+
+func GetAtomName(c *xgb.Conn, Atom Atom) GetAtomNameCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getAtomNameRequest(c, Atom), cookie)
+	return GetAtomNameCookie{cookie}
+}
+
+func GetAtomNameUnchecked(c *xgb.Conn, Atom Atom) GetAtomNameCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getAtomNameRequest(c, Atom), cookie)
+	return GetAtomNameCookie{cookie}
+}
+
+// Request reply for GetAtomName
+// size: (32 + xgb.Pad((int(NameLen) * 1)))
+type GetAtomNameReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	NameLen uint16
+	// padding: 22 bytes
+	Name string // size: xgb.Pad((int(NameLen) * 1))
+}
+
+// Waits and reads reply data from request GetAtomName
+func (cook GetAtomNameCookie) Reply() (*GetAtomNameReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getAtomNameReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetAtomName
+func getAtomNameReply(buf []byte) *GetAtomNameReply {
+	v := new(GetAtomNameReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.NameLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	{
+		byteString := make([]byte, v.NameLen)
+		copy(byteString[:v.NameLen], buf[b:])
+		v.Name = string(byteString)
+		b += xgb.Pad(int(v.NameLen))
+	}
+
+	return v
+}
+
+// Write request to wire for GetAtomName
+func getAtomNameRequest(c *xgb.Conn, Atom Atom) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 17 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Atom))
+	b += 4
+
+	return buf
+}
+
+// Request ChangeProperty
+// size: xgb.Pad((24 + xgb.Pad((((int(DataLen) * int(Format)) / 8) * 1))))
+type ChangePropertyCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeProperty
+func ChangeProperty(c *xgb.Conn, Mode byte, Window Window, Property Atom, Type Atom, Format byte, DataLen uint32, Data []byte) ChangePropertyCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changePropertyRequest(c, Mode, Window, Property, Type, Format, DataLen, Data), cookie)
+	return ChangePropertyCookie{cookie}
+}
+
+func ChangePropertyChecked(c *xgb.Conn, Mode byte, Window Window, Property Atom, Type Atom, Format byte, DataLen uint32, Data []byte) ChangePropertyCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changePropertyRequest(c, Mode, Window, Property, Type, Format, DataLen, Data), cookie)
+	return ChangePropertyCookie{cookie}
+}
+
+func (cook ChangePropertyCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeProperty
+func changePropertyRequest(c *xgb.Conn, Mode byte, Window Window, Property Atom, Type Atom, Format byte, DataLen uint32, Data []byte) []byte {
+	size := xgb.Pad((24 + xgb.Pad((((int(DataLen) * int(Format)) / 8) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 18 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Property))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Type))
+	b += 4
+
+	buf[b] = Format
+	b += 1
+
+	b += 3 // padding
+
+	xgb.Put32(buf[b:], DataLen)
+	b += 4
+
+	copy(buf[b:], Data[:((int(DataLen)*int(Format))/8)])
+	b += xgb.Pad(int(((int(DataLen) * int(Format)) / 8)))
+
+	return buf
+}
+
+// Request DeleteProperty
+// size: 12
+type DeletePropertyCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for DeleteProperty
+func DeleteProperty(c *xgb.Conn, Window Window, Property Atom) DeletePropertyCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(deletePropertyRequest(c, Window, Property), cookie)
+	return DeletePropertyCookie{cookie}
+}
+
+func DeletePropertyChecked(c *xgb.Conn, Window Window, Property Atom) DeletePropertyCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(deletePropertyRequest(c, Window, Property), cookie)
+	return DeletePropertyCookie{cookie}
+}
+
+func (cook DeletePropertyCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for DeleteProperty
+func deletePropertyRequest(c *xgb.Conn, Window Window, Property Atom) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 19 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Property))
+	b += 4
+
+	return buf
+}
+
+// Request GetProperty
+// size: 24
+type GetPropertyCookie struct {
+	*xgb.Cookie
+}
+
+func GetProperty(c *xgb.Conn, Delete bool, Window Window, Property Atom, Type Atom, LongOffset uint32, LongLength uint32) GetPropertyCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getPropertyRequest(c, Delete, Window, Property, Type, LongOffset, LongLength), cookie)
+	return GetPropertyCookie{cookie}
+}
+
+func GetPropertyUnchecked(c *xgb.Conn, Delete bool, Window Window, Property Atom, Type Atom, LongOffset uint32, LongLength uint32) GetPropertyCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getPropertyRequest(c, Delete, Window, Property, Type, LongOffset, LongLength), cookie)
+	return GetPropertyCookie{cookie}
+}
+
+// Request reply for GetProperty
+// size: (32 + xgb.Pad(((int(ValueLen) * (int(Format) / 8)) * 1)))
+type GetPropertyReply struct {
+	Sequence   uint16
+	Length     uint32
+	Format     byte
+	Type       Atom
+	BytesAfter uint32
+	ValueLen   uint32
+	// padding: 12 bytes
+	Value []byte // size: xgb.Pad(((int(ValueLen) * (int(Format) / 8)) * 1))
+}
+
+// Waits and reads reply data from request GetProperty
+func (cook GetPropertyCookie) Reply() (*GetPropertyReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getPropertyReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetProperty
+func getPropertyReply(buf []byte) *GetPropertyReply {
+	v := new(GetPropertyReply)
+	b := 1 // skip reply determinant
+
+	v.Format = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Type = Atom(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.BytesAfter = xgb.Get32(buf[b:])
+	b += 4
+
+	v.ValueLen = xgb.Get32(buf[b:])
+	b += 4
+
+	b += 12 // padding
+
+	v.Value = make([]byte, (int(v.ValueLen) * (int(v.Format) / 8)))
+	copy(v.Value[:(int(v.ValueLen)*(int(v.Format)/8))], buf[b:])
+	b += xgb.Pad(int((int(v.ValueLen) * (int(v.Format) / 8))))
+
+	return v
+}
+
+// Write request to wire for GetProperty
+func getPropertyRequest(c *xgb.Conn, Delete bool, Window Window, Property Atom, Type Atom, LongOffset uint32, LongLength uint32) []byte {
+	size := 24
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 20 // request opcode
+	b += 1
+
+	if Delete {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Property))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Type))
+	b += 4
+
+	xgb.Put32(buf[b:], LongOffset)
+	b += 4
+
+	xgb.Put32(buf[b:], LongLength)
+	b += 4
+
+	return buf
+}
+
+// Request ListProperties
+// size: 8
+type ListPropertiesCookie struct {
+	*xgb.Cookie
+}
+
+func ListProperties(c *xgb.Conn, Window Window) ListPropertiesCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(listPropertiesRequest(c, Window), cookie)
+	return ListPropertiesCookie{cookie}
+}
+
+func ListPropertiesUnchecked(c *xgb.Conn, Window Window) ListPropertiesCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(listPropertiesRequest(c, Window), cookie)
+	return ListPropertiesCookie{cookie}
+}
+
+// Request reply for ListProperties
+// size: (32 + xgb.Pad((int(AtomsLen) * 4)))
+type ListPropertiesReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	AtomsLen uint16
+	// padding: 22 bytes
+	Atoms []Atom // size: xgb.Pad((int(AtomsLen) * 4))
+}
+
+// Waits and reads reply data from request ListProperties
+func (cook ListPropertiesCookie) Reply() (*ListPropertiesReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return listPropertiesReply(buf), nil
+}
+
+// Read reply into structure from buffer for ListProperties
+func listPropertiesReply(buf []byte) *ListPropertiesReply {
+	v := new(ListPropertiesReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.AtomsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	v.Atoms = make([]Atom, v.AtomsLen)
+	for i := 0; i < int(v.AtomsLen); i++ {
+		v.Atoms[i] = Atom(xgb.Get32(buf[b:]))
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for ListProperties
+func listPropertiesRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 21 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request SetSelectionOwner
+// size: 16
+type SetSelectionOwnerCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetSelectionOwner
+func SetSelectionOwner(c *xgb.Conn, Owner Window, Selection Atom, Time Timestamp) SetSelectionOwnerCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setSelectionOwnerRequest(c, Owner, Selection, Time), cookie)
+	return SetSelectionOwnerCookie{cookie}
+}
+
+func SetSelectionOwnerChecked(c *xgb.Conn, Owner Window, Selection Atom, Time Timestamp) SetSelectionOwnerCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setSelectionOwnerRequest(c, Owner, Selection, Time), cookie)
+	return SetSelectionOwnerCookie{cookie}
+}
+
+func (cook SetSelectionOwnerCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetSelectionOwner
+func setSelectionOwnerRequest(c *xgb.Conn, Owner Window, Selection Atom, Time Timestamp) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 22 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Owner))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Selection))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request GetSelectionOwner
+// size: 8
+type GetSelectionOwnerCookie struct {
+	*xgb.Cookie
+}
+
+func GetSelectionOwner(c *xgb.Conn, Selection Atom) GetSelectionOwnerCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getSelectionOwnerRequest(c, Selection), cookie)
+	return GetSelectionOwnerCookie{cookie}
+}
+
+func GetSelectionOwnerUnchecked(c *xgb.Conn, Selection Atom) GetSelectionOwnerCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getSelectionOwnerRequest(c, Selection), cookie)
+	return GetSelectionOwnerCookie{cookie}
+}
+
+// Request reply for GetSelectionOwner
+// size: 12
+type GetSelectionOwnerReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Owner Window
+}
+
+// Waits and reads reply data from request GetSelectionOwner
+func (cook GetSelectionOwnerCookie) Reply() (*GetSelectionOwnerReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getSelectionOwnerReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetSelectionOwner
+func getSelectionOwnerReply(buf []byte) *GetSelectionOwnerReply {
+	v := new(GetSelectionOwnerReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Owner = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Write request to wire for GetSelectionOwner
+func getSelectionOwnerRequest(c *xgb.Conn, Selection Atom) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 23 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Selection))
+	b += 4
+
+	return buf
+}
+
+// Request ConvertSelection
+// size: 24
+type ConvertSelectionCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ConvertSelection
+func ConvertSelection(c *xgb.Conn, Requestor Window, Selection Atom, Target Atom, Property Atom, Time Timestamp) ConvertSelectionCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(convertSelectionRequest(c, Requestor, Selection, Target, Property, Time), cookie)
+	return ConvertSelectionCookie{cookie}
+}
+
+func ConvertSelectionChecked(c *xgb.Conn, Requestor Window, Selection Atom, Target Atom, Property Atom, Time Timestamp) ConvertSelectionCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(convertSelectionRequest(c, Requestor, Selection, Target, Property, Time), cookie)
+	return ConvertSelectionCookie{cookie}
+}
+
+func (cook ConvertSelectionCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ConvertSelection
+func convertSelectionRequest(c *xgb.Conn, Requestor Window, Selection Atom, Target Atom, Property Atom, Time Timestamp) []byte {
+	size := 24
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 24 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Requestor))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Selection))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Target))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Property))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request SendEvent
+// size: 44
+type SendEventCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SendEvent
+func SendEvent(c *xgb.Conn, Propagate bool, Destination Window, EventMask uint32, Event string) SendEventCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(sendEventRequest(c, Propagate, Destination, EventMask, Event), cookie)
+	return SendEventCookie{cookie}
+}
+
+func SendEventChecked(c *xgb.Conn, Propagate bool, Destination Window, EventMask uint32, Event string) SendEventCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(sendEventRequest(c, Propagate, Destination, EventMask, Event), cookie)
+	return SendEventCookie{cookie}
+}
+
+func (cook SendEventCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SendEvent
+func sendEventRequest(c *xgb.Conn, Propagate bool, Destination Window, EventMask uint32, Event string) []byte {
+	size := 44
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 25 // request opcode
+	b += 1
+
+	if Propagate {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Destination))
+	b += 4
+
+	xgb.Put32(buf[b:], EventMask)
+	b += 4
+
+	copy(buf[b:], Event[:32])
+	b += xgb.Pad(int(32))
+
+	return buf
+}
+
+// Request GrabPointer
+// size: 24
+type GrabPointerCookie struct {
+	*xgb.Cookie
+}
+
+func GrabPointer(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Time Timestamp) GrabPointerCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(grabPointerRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Time), cookie)
+	return GrabPointerCookie{cookie}
+}
+
+func GrabPointerUnchecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Time Timestamp) GrabPointerCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(grabPointerRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Time), cookie)
+	return GrabPointerCookie{cookie}
+}
+
+// Request reply for GrabPointer
+// size: 8
+type GrabPointerReply struct {
+	Sequence uint16
+	Length   uint32
+	Status   byte
+}
+
+// Waits and reads reply data from request GrabPointer
+func (cook GrabPointerCookie) Reply() (*GrabPointerReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return grabPointerReply(buf), nil
+}
+
+// Read reply into structure from buffer for GrabPointer
+func grabPointerReply(buf []byte) *GrabPointerReply {
+	v := new(GrabPointerReply)
+	b := 1 // skip reply determinant
+
+	v.Status = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	return v
+}
+
+// Write request to wire for GrabPointer
+func grabPointerRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Time Timestamp) []byte {
+	size := 24
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 26 // request opcode
+	b += 1
+
+	if OwnerEvents {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(GrabWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], EventMask)
+	b += 2
+
+	buf[b] = PointerMode
+	b += 1
+
+	buf[b] = KeyboardMode
+	b += 1
+
+	xgb.Put32(buf[b:], uint32(ConfineTo))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Cursor))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request UngrabPointer
+// size: 8
+type UngrabPointerCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UngrabPointer
+func UngrabPointer(c *xgb.Conn, Time Timestamp) UngrabPointerCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(ungrabPointerRequest(c, Time), cookie)
+	return UngrabPointerCookie{cookie}
+}
+
+func UngrabPointerChecked(c *xgb.Conn, Time Timestamp) UngrabPointerCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(ungrabPointerRequest(c, Time), cookie)
+	return UngrabPointerCookie{cookie}
+}
+
+func (cook UngrabPointerCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UngrabPointer
+func ungrabPointerRequest(c *xgb.Conn, Time Timestamp) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 27 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request GrabButton
+// size: 24
+type GrabButtonCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for GrabButton
+func GrabButton(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Button byte, Modifiers uint16) GrabButtonCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(grabButtonRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Button, Modifiers), cookie)
+	return GrabButtonCookie{cookie}
+}
+
+func GrabButtonChecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Button byte, Modifiers uint16) GrabButtonCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(grabButtonRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Button, Modifiers), cookie)
+	return GrabButtonCookie{cookie}
+}
+
+func (cook GrabButtonCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for GrabButton
+func grabButtonRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Button byte, Modifiers uint16) []byte {
+	size := 24
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 28 // request opcode
+	b += 1
+
+	if OwnerEvents {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(GrabWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], EventMask)
+	b += 2
+
+	buf[b] = PointerMode
+	b += 1
+
+	buf[b] = KeyboardMode
+	b += 1
+
+	xgb.Put32(buf[b:], uint32(ConfineTo))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Cursor))
+	b += 4
+
+	buf[b] = Button
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], Modifiers)
+	b += 2
+
+	return buf
+}
+
+// Request UngrabButton
+// size: 12
+type UngrabButtonCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UngrabButton
+func UngrabButton(c *xgb.Conn, Button byte, GrabWindow Window, Modifiers uint16) UngrabButtonCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(ungrabButtonRequest(c, Button, GrabWindow, Modifiers), cookie)
+	return UngrabButtonCookie{cookie}
+}
+
+func UngrabButtonChecked(c *xgb.Conn, Button byte, GrabWindow Window, Modifiers uint16) UngrabButtonCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(ungrabButtonRequest(c, Button, GrabWindow, Modifiers), cookie)
+	return UngrabButtonCookie{cookie}
+}
+
+func (cook UngrabButtonCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UngrabButton
+func ungrabButtonRequest(c *xgb.Conn, Button byte, GrabWindow Window, Modifiers uint16) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 29 // request opcode
+	b += 1
+
+	buf[b] = Button
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(GrabWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], Modifiers)
+	b += 2
+
+	b += 2 // padding
+
+	return buf
+}
+
+// Request ChangeActivePointerGrab
+// size: 16
+type ChangeActivePointerGrabCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeActivePointerGrab
+func ChangeActivePointerGrab(c *xgb.Conn, Cursor Cursor, Time Timestamp, EventMask uint16) ChangeActivePointerGrabCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeActivePointerGrabRequest(c, Cursor, Time, EventMask), cookie)
+	return ChangeActivePointerGrabCookie{cookie}
+}
+
+func ChangeActivePointerGrabChecked(c *xgb.Conn, Cursor Cursor, Time Timestamp, EventMask uint16) ChangeActivePointerGrabCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeActivePointerGrabRequest(c, Cursor, Time, EventMask), cookie)
+	return ChangeActivePointerGrabCookie{cookie}
+}
+
+func (cook ChangeActivePointerGrabCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeActivePointerGrab
+func changeActivePointerGrabRequest(c *xgb.Conn, Cursor Cursor, Time Timestamp, EventMask uint16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 30 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cursor))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	xgb.Put16(buf[b:], EventMask)
+	b += 2
+
+	b += 2 // padding
+
+	return buf
+}
+
+// Request GrabKeyboard
+// size: 16
+type GrabKeyboardCookie struct {
+	*xgb.Cookie
+}
+
+func GrabKeyboard(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Time Timestamp, PointerMode byte, KeyboardMode byte) GrabKeyboardCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(grabKeyboardRequest(c, OwnerEvents, GrabWindow, Time, PointerMode, KeyboardMode), cookie)
+	return GrabKeyboardCookie{cookie}
+}
+
+func GrabKeyboardUnchecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Time Timestamp, PointerMode byte, KeyboardMode byte) GrabKeyboardCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(grabKeyboardRequest(c, OwnerEvents, GrabWindow, Time, PointerMode, KeyboardMode), cookie)
+	return GrabKeyboardCookie{cookie}
+}
+
+// Request reply for GrabKeyboard
+// size: 8
+type GrabKeyboardReply struct {
+	Sequence uint16
+	Length   uint32
+	Status   byte
+}
+
+// Waits and reads reply data from request GrabKeyboard
+func (cook GrabKeyboardCookie) Reply() (*GrabKeyboardReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return grabKeyboardReply(buf), nil
+}
+
+// Read reply into structure from buffer for GrabKeyboard
+func grabKeyboardReply(buf []byte) *GrabKeyboardReply {
+	v := new(GrabKeyboardReply)
+	b := 1 // skip reply determinant
+
+	v.Status = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	return v
+}
+
+// Write request to wire for GrabKeyboard
+func grabKeyboardRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Time Timestamp, PointerMode byte, KeyboardMode byte) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 31 // request opcode
+	b += 1
+
+	if OwnerEvents {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(GrabWindow))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	buf[b] = PointerMode
+	b += 1
+
+	buf[b] = KeyboardMode
+	b += 1
+
+	b += 2 // padding
+
+	return buf
+}
+
+// Request UngrabKeyboard
+// size: 8
+type UngrabKeyboardCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UngrabKeyboard
+func UngrabKeyboard(c *xgb.Conn, Time Timestamp) UngrabKeyboardCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(ungrabKeyboardRequest(c, Time), cookie)
+	return UngrabKeyboardCookie{cookie}
+}
+
+func UngrabKeyboardChecked(c *xgb.Conn, Time Timestamp) UngrabKeyboardCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(ungrabKeyboardRequest(c, Time), cookie)
+	return UngrabKeyboardCookie{cookie}
+}
+
+func (cook UngrabKeyboardCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UngrabKeyboard
+func ungrabKeyboardRequest(c *xgb.Conn, Time Timestamp) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 32 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request GrabKey
+// size: 16
+type GrabKeyCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for GrabKey
+func GrabKey(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Modifiers uint16, Key Keycode, PointerMode byte, KeyboardMode byte) GrabKeyCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(grabKeyRequest(c, OwnerEvents, GrabWindow, Modifiers, Key, PointerMode, KeyboardMode), cookie)
+	return GrabKeyCookie{cookie}
+}
+
+func GrabKeyChecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Modifiers uint16, Key Keycode, PointerMode byte, KeyboardMode byte) GrabKeyCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(grabKeyRequest(c, OwnerEvents, GrabWindow, Modifiers, Key, PointerMode, KeyboardMode), cookie)
+	return GrabKeyCookie{cookie}
+}
+
+func (cook GrabKeyCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for GrabKey
+func grabKeyRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Modifiers uint16, Key Keycode, PointerMode byte, KeyboardMode byte) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 33 // request opcode
+	b += 1
+
+	if OwnerEvents {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(GrabWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], Modifiers)
+	b += 2
+
+	buf[b] = byte(Key)
+	b += 1
+
+	buf[b] = PointerMode
+	b += 1
+
+	buf[b] = KeyboardMode
+	b += 1
+
+	b += 3 // padding
+
+	return buf
+}
+
+// Request UngrabKey
+// size: 12
+type UngrabKeyCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UngrabKey
+func UngrabKey(c *xgb.Conn, Key Keycode, GrabWindow Window, Modifiers uint16) UngrabKeyCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(ungrabKeyRequest(c, Key, GrabWindow, Modifiers), cookie)
+	return UngrabKeyCookie{cookie}
+}
+
+func UngrabKeyChecked(c *xgb.Conn, Key Keycode, GrabWindow Window, Modifiers uint16) UngrabKeyCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(ungrabKeyRequest(c, Key, GrabWindow, Modifiers), cookie)
+	return UngrabKeyCookie{cookie}
+}
+
+func (cook UngrabKeyCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UngrabKey
+func ungrabKeyRequest(c *xgb.Conn, Key Keycode, GrabWindow Window, Modifiers uint16) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 34 // request opcode
+	b += 1
+
+	buf[b] = byte(Key)
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(GrabWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], Modifiers)
+	b += 2
+
+	b += 2 // padding
+
+	return buf
+}
+
+// Request AllowEvents
+// size: 8
+type AllowEventsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for AllowEvents
+func AllowEvents(c *xgb.Conn, Mode byte, Time Timestamp) AllowEventsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(allowEventsRequest(c, Mode, Time), cookie)
+	return AllowEventsCookie{cookie}
+}
+
+func AllowEventsChecked(c *xgb.Conn, Mode byte, Time Timestamp) AllowEventsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(allowEventsRequest(c, Mode, Time), cookie)
+	return AllowEventsCookie{cookie}
+}
+
+func (cook AllowEventsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for AllowEvents
+func allowEventsRequest(c *xgb.Conn, Mode byte, Time Timestamp) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 35 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request GrabServer
+// size: 4
+type GrabServerCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for GrabServer
+func GrabServer(c *xgb.Conn) GrabServerCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(grabServerRequest(c), cookie)
+	return GrabServerCookie{cookie}
+}
+
+func GrabServerChecked(c *xgb.Conn) GrabServerCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(grabServerRequest(c), cookie)
+	return GrabServerCookie{cookie}
+}
+
+func (cook GrabServerCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for GrabServer
+func grabServerRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 36 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request UngrabServer
+// size: 4
+type UngrabServerCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UngrabServer
+func UngrabServer(c *xgb.Conn) UngrabServerCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(ungrabServerRequest(c), cookie)
+	return UngrabServerCookie{cookie}
+}
+
+func UngrabServerChecked(c *xgb.Conn) UngrabServerCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(ungrabServerRequest(c), cookie)
+	return UngrabServerCookie{cookie}
+}
+
+func (cook UngrabServerCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UngrabServer
+func ungrabServerRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 37 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request QueryPointer
+// size: 8
+type QueryPointerCookie struct {
+	*xgb.Cookie
+}
+
+func QueryPointer(c *xgb.Conn, Window Window) QueryPointerCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryPointerRequest(c, Window), cookie)
+	return QueryPointerCookie{cookie}
+}
+
+func QueryPointerUnchecked(c *xgb.Conn, Window Window) QueryPointerCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryPointerRequest(c, Window), cookie)
+	return QueryPointerCookie{cookie}
+}
+
+// Request reply for QueryPointer
+// size: 28
+type QueryPointerReply struct {
+	Sequence   uint16
+	Length     uint32
+	SameScreen bool
+	Root       Window
+	Child      Window
+	RootX      int16
+	RootY      int16
+	WinX       int16
+	WinY       int16
+	Mask       uint16
+	// padding: 2 bytes
+}
+
+// Waits and reads reply data from request QueryPointer
+func (cook QueryPointerCookie) Reply() (*QueryPointerReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryPointerReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryPointer
+func queryPointerReply(buf []byte) *QueryPointerReply {
+	v := new(QueryPointerReply)
+	b := 1 // skip reply determinant
+
+	if buf[b] == 1 {
+		v.SameScreen = true
+	} else {
+		v.SameScreen = false
+	}
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Root = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.Child = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.RootX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RootY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.WinX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.WinY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.Mask = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	return v
+}
+
+// Write request to wire for QueryPointer
+func queryPointerRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 38 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request GetMotionEvents
+// size: 16
+type GetMotionEventsCookie struct {
+	*xgb.Cookie
+}
+
+func GetMotionEvents(c *xgb.Conn, Window Window, Start Timestamp, Stop Timestamp) GetMotionEventsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getMotionEventsRequest(c, Window, Start, Stop), cookie)
+	return GetMotionEventsCookie{cookie}
+}
+
+func GetMotionEventsUnchecked(c *xgb.Conn, Window Window, Start Timestamp, Stop Timestamp) GetMotionEventsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getMotionEventsRequest(c, Window, Start, Stop), cookie)
+	return GetMotionEventsCookie{cookie}
+}
+
+// Request reply for GetMotionEvents
+// size: (32 + xgb.Pad((int(EventsLen) * 8)))
+type GetMotionEventsReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	EventsLen uint32
+	// padding: 20 bytes
+	Events []Timecoord // size: xgb.Pad((int(EventsLen) * 8))
+}
+
+// Waits and reads reply data from request GetMotionEvents
+func (cook GetMotionEventsCookie) Reply() (*GetMotionEventsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getMotionEventsReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetMotionEvents
+func getMotionEventsReply(buf []byte) *GetMotionEventsReply {
+	v := new(GetMotionEventsReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.EventsLen = xgb.Get32(buf[b:])
+	b += 4
+
+	b += 20 // padding
+
+	v.Events = make([]Timecoord, v.EventsLen)
+	b += TimecoordReadList(buf[b:], v.Events)
+
+	return v
+}
+
+// Write request to wire for GetMotionEvents
+func getMotionEventsRequest(c *xgb.Conn, Window Window, Start Timestamp, Stop Timestamp) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 39 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Start))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Stop))
+	b += 4
+
+	return buf
+}
+
+// Request TranslateCoordinates
+// size: 16
+type TranslateCoordinatesCookie struct {
+	*xgb.Cookie
+}
+
+func TranslateCoordinates(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16) TranslateCoordinatesCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(translateCoordinatesRequest(c, SrcWindow, DstWindow, SrcX, SrcY), cookie)
+	return TranslateCoordinatesCookie{cookie}
+}
+
+func TranslateCoordinatesUnchecked(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16) TranslateCoordinatesCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(translateCoordinatesRequest(c, SrcWindow, DstWindow, SrcX, SrcY), cookie)
+	return TranslateCoordinatesCookie{cookie}
+}
+
+// Request reply for TranslateCoordinates
+// size: 16
+type TranslateCoordinatesReply struct {
+	Sequence   uint16
+	Length     uint32
+	SameScreen bool
+	Child      Window
+	DstX       int16
+	DstY       int16
+}
+
+// Waits and reads reply data from request TranslateCoordinates
+func (cook TranslateCoordinatesCookie) Reply() (*TranslateCoordinatesReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return translateCoordinatesReply(buf), nil
+}
+
+// Read reply into structure from buffer for TranslateCoordinates
+func translateCoordinatesReply(buf []byte) *TranslateCoordinatesReply {
+	v := new(TranslateCoordinatesReply)
+	b := 1 // skip reply determinant
+
+	if buf[b] == 1 {
+		v.SameScreen = true
+	} else {
+		v.SameScreen = false
+	}
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Child = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.DstX = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.DstY = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	return v
+}
+
+// Write request to wire for TranslateCoordinates
+func translateCoordinatesRequest(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 40 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(SrcWindow))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(DstWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(SrcX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(SrcY))
+	b += 2
+
+	return buf
+}
+
+// Request WarpPointer
+// size: 24
+type WarpPointerCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for WarpPointer
+func WarpPointer(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) WarpPointerCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(warpPointerRequest(c, SrcWindow, DstWindow, SrcX, SrcY, SrcWidth, SrcHeight, DstX, DstY), cookie)
+	return WarpPointerCookie{cookie}
+}
+
+func WarpPointerChecked(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) WarpPointerCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(warpPointerRequest(c, SrcWindow, DstWindow, SrcX, SrcY, SrcWidth, SrcHeight, DstX, DstY), cookie)
+	return WarpPointerCookie{cookie}
+}
+
+func (cook WarpPointerCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for WarpPointer
+func warpPointerRequest(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) []byte {
+	size := 24
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 41 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(SrcWindow))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(DstWindow))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(SrcX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(SrcY))
+	b += 2
+
+	xgb.Put16(buf[b:], SrcWidth)
+	b += 2
+
+	xgb.Put16(buf[b:], SrcHeight)
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstY))
+	b += 2
+
+	return buf
+}
+
+// Request SetInputFocus
+// size: 12
+type SetInputFocusCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetInputFocus
+func SetInputFocus(c *xgb.Conn, RevertTo byte, Focus Window, Time Timestamp) SetInputFocusCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setInputFocusRequest(c, RevertTo, Focus, Time), cookie)
+	return SetInputFocusCookie{cookie}
+}
+
+func SetInputFocusChecked(c *xgb.Conn, RevertTo byte, Focus Window, Time Timestamp) SetInputFocusCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setInputFocusRequest(c, RevertTo, Focus, Time), cookie)
+	return SetInputFocusCookie{cookie}
+}
+
+func (cook SetInputFocusCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetInputFocus
+func setInputFocusRequest(c *xgb.Conn, RevertTo byte, Focus Window, Time Timestamp) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 42 // request opcode
+	b += 1
+
+	buf[b] = RevertTo
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Focus))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Time))
+	b += 4
+
+	return buf
+}
+
+// Request GetInputFocus
+// size: 4
+type GetInputFocusCookie struct {
+	*xgb.Cookie
+}
+
+func GetInputFocus(c *xgb.Conn) GetInputFocusCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getInputFocusRequest(c), cookie)
+	return GetInputFocusCookie{cookie}
+}
+
+func GetInputFocusUnchecked(c *xgb.Conn) GetInputFocusCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getInputFocusRequest(c), cookie)
+	return GetInputFocusCookie{cookie}
+}
+
+// Request reply for GetInputFocus
+// size: 12
+type GetInputFocusReply struct {
+	Sequence uint16
+	Length   uint32
+	RevertTo byte
+	Focus    Window
+}
+
+// Waits and reads reply data from request GetInputFocus
+func (cook GetInputFocusCookie) Reply() (*GetInputFocusReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getInputFocusReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetInputFocus
+func getInputFocusReply(buf []byte) *GetInputFocusReply {
+	v := new(GetInputFocusReply)
+	b := 1 // skip reply determinant
+
+	v.RevertTo = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Focus = Window(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Write request to wire for GetInputFocus
+func getInputFocusRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 43 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request QueryKeymap
+// size: 4
+type QueryKeymapCookie struct {
+	*xgb.Cookie
+}
+
+func QueryKeymap(c *xgb.Conn) QueryKeymapCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryKeymapRequest(c), cookie)
+	return QueryKeymapCookie{cookie}
+}
+
+func QueryKeymapUnchecked(c *xgb.Conn) QueryKeymapCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryKeymapRequest(c), cookie)
+	return QueryKeymapCookie{cookie}
+}
+
+// Request reply for QueryKeymap
+// size: 40
+type QueryKeymapReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Keys []byte // size: 32
+}
+
+// Waits and reads reply data from request QueryKeymap
+func (cook QueryKeymapCookie) Reply() (*QueryKeymapReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryKeymapReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryKeymap
+func queryKeymapReply(buf []byte) *QueryKeymapReply {
+	v := new(QueryKeymapReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Keys = make([]byte, 32)
+	copy(v.Keys[:32], buf[b:])
+	b += xgb.Pad(int(32))
+
+	return v
+}
+
+// Write request to wire for QueryKeymap
+func queryKeymapRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 44 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request OpenFont
+// size: xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
+type OpenFontCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for OpenFont
+func OpenFont(c *xgb.Conn, Fid Font, NameLen uint16, Name string) OpenFontCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(openFontRequest(c, Fid, NameLen, Name), cookie)
+	return OpenFontCookie{cookie}
+}
+
+func OpenFontChecked(c *xgb.Conn, Fid Font, NameLen uint16, Name string) OpenFontCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(openFontRequest(c, Fid, NameLen, Name), cookie)
+	return OpenFontCookie{cookie}
+}
+
+func (cook OpenFontCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for OpenFont
+func openFontRequest(c *xgb.Conn, Fid Font, NameLen uint16, Name string) []byte {
+	size := xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 45 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Fid))
+	b += 4
+
+	xgb.Put16(buf[b:], NameLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], Name[:NameLen])
+	b += xgb.Pad(int(NameLen))
+
+	return buf
+}
+
+// Request CloseFont
+// size: 8
+type CloseFontCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CloseFont
+func CloseFont(c *xgb.Conn, Font Font) CloseFontCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(closeFontRequest(c, Font), cookie)
+	return CloseFontCookie{cookie}
+}
+
+func CloseFontChecked(c *xgb.Conn, Font Font) CloseFontCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(closeFontRequest(c, Font), cookie)
+	return CloseFontCookie{cookie}
+}
+
+func (cook CloseFontCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CloseFont
+func closeFontRequest(c *xgb.Conn, Font Font) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 46 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Font))
+	b += 4
+
+	return buf
+}
+
+// Request QueryFont
+// size: 8
+type QueryFontCookie struct {
+	*xgb.Cookie
+}
+
+func QueryFont(c *xgb.Conn, Font Fontable) QueryFontCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryFontRequest(c, Font), cookie)
+	return QueryFontCookie{cookie}
+}
+
+func QueryFontUnchecked(c *xgb.Conn, Font Fontable) QueryFontCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryFontRequest(c, Font), cookie)
+	return QueryFontCookie{cookie}
+}
+
+// Request reply for QueryFont
+// size: ((60 + xgb.Pad((int(PropertiesLen) * 8))) + xgb.Pad((int(CharInfosLen) * 12)))
+type QueryFontReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	MinBounds Charinfo
+	// padding: 4 bytes
+	MaxBounds Charinfo
+	// padding: 4 bytes
+	MinCharOrByte2 uint16
+	MaxCharOrByte2 uint16
+	DefaultChar    uint16
+	PropertiesLen  uint16
+	DrawDirection  byte
+	MinByte1       byte
+	MaxByte1       byte
+	AllCharsExist  bool
+	FontAscent     int16
+	FontDescent    int16
+	CharInfosLen   uint32
+	Properties     []Fontprop // size: xgb.Pad((int(PropertiesLen) * 8))
+	CharInfos      []Charinfo // size: xgb.Pad((int(CharInfosLen) * 12))
+}
+
+// Waits and reads reply data from request QueryFont
+func (cook QueryFontCookie) Reply() (*QueryFontReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryFontReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryFont
+func queryFontReply(buf []byte) *QueryFontReply {
+	v := new(QueryFontReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.MinBounds = Charinfo{}
+	b += CharinfoRead(buf[b:], &v.MinBounds)
+
+	b += 4 // padding
+
+	v.MaxBounds = Charinfo{}
+	b += CharinfoRead(buf[b:], &v.MaxBounds)
+
+	b += 4 // padding
+
+	v.MinCharOrByte2 = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MaxCharOrByte2 = xgb.Get16(buf[b:])
+	b += 2
+
+	v.DefaultChar = xgb.Get16(buf[b:])
+	b += 2
+
+	v.PropertiesLen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.DrawDirection = buf[b]
+	b += 1
+
+	v.MinByte1 = buf[b]
+	b += 1
+
+	v.MaxByte1 = buf[b]
+	b += 1
+
+	if buf[b] == 1 {
+		v.AllCharsExist = true
+	} else {
+		v.AllCharsExist = false
+	}
+	b += 1
+
+	v.FontAscent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.FontDescent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.CharInfosLen = xgb.Get32(buf[b:])
+	b += 4
+
+	v.Properties = make([]Fontprop, v.PropertiesLen)
+	b += FontpropReadList(buf[b:], v.Properties)
+
+	v.CharInfos = make([]Charinfo, v.CharInfosLen)
+	b += CharinfoReadList(buf[b:], v.CharInfos)
+
+	return v
+}
+
+// Write request to wire for QueryFont
+func queryFontRequest(c *xgb.Conn, Font Fontable) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 47 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Font))
+	b += 4
+
+	return buf
+}
+
+// Request QueryTextExtents
+// size: xgb.Pad((8 + xgb.Pad((len(String) * 2))))
+type QueryTextExtentsCookie struct {
+	*xgb.Cookie
+}
+
+func QueryTextExtents(c *xgb.Conn, Font Fontable, String []Char2b, StringLen uint16) QueryTextExtentsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryTextExtentsRequest(c, Font, String, StringLen), cookie)
+	return QueryTextExtentsCookie{cookie}
+}
+
+func QueryTextExtentsUnchecked(c *xgb.Conn, Font Fontable, String []Char2b, StringLen uint16) QueryTextExtentsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryTextExtentsRequest(c, Font, String, StringLen), cookie)
+	return QueryTextExtentsCookie{cookie}
+}
+
+// Request reply for QueryTextExtents
+// size: 28
+type QueryTextExtentsReply struct {
+	Sequence       uint16
+	Length         uint32
+	DrawDirection  byte
+	FontAscent     int16
+	FontDescent    int16
+	OverallAscent  int16
+	OverallDescent int16
+	OverallWidth   int32
+	OverallLeft    int32
+	OverallRight   int32
+}
+
+// Waits and reads reply data from request QueryTextExtents
+func (cook QueryTextExtentsCookie) Reply() (*QueryTextExtentsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryTextExtentsReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryTextExtents
+func queryTextExtentsReply(buf []byte) *QueryTextExtentsReply {
+	v := new(QueryTextExtentsReply)
+	b := 1 // skip reply determinant
+
+	v.DrawDirection = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.FontAscent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.FontDescent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.OverallAscent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.OverallDescent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.OverallWidth = int32(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.OverallLeft = int32(xgb.Get32(buf[b:]))
+	b += 4
+
+	v.OverallRight = int32(xgb.Get32(buf[b:]))
+	b += 4
+
+	return v
+}
+
+// Write request to wire for QueryTextExtents
+func queryTextExtentsRequest(c *xgb.Conn, Font Fontable, String []Char2b, StringLen uint16) []byte {
+	size := xgb.Pad((8 + xgb.Pad((len(String) * 2))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 48 // request opcode
+	b += 1
+
+	buf[b] = byte((int(StringLen) & 1))
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Font))
+	b += 4
+
+	b += Char2bListBytes(buf[b:], String)
+
+	// skip writing local field: StringLen (2) :: uint16
+
+	return buf
+}
+
+// Request ListFonts
+// size: xgb.Pad((8 + xgb.Pad((int(PatternLen) * 1))))
+type ListFontsCookie struct {
+	*xgb.Cookie
+}
+
+func ListFonts(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(listFontsRequest(c, MaxNames, PatternLen, Pattern), cookie)
+	return ListFontsCookie{cookie}
+}
+
+func ListFontsUnchecked(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(listFontsRequest(c, MaxNames, PatternLen, Pattern), cookie)
+	return ListFontsCookie{cookie}
+}
+
+// Request reply for ListFonts
+// size: (32 + StrListSize(Names))
+type ListFontsReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	NamesLen uint16
+	// padding: 22 bytes
+	Names []Str // size: StrListSize(Names)
+}
+
+// Waits and reads reply data from request ListFonts
+func (cook ListFontsCookie) Reply() (*ListFontsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return listFontsReply(buf), nil
+}
+
+// Read reply into structure from buffer for ListFonts
+func listFontsReply(buf []byte) *ListFontsReply {
+	v := new(ListFontsReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.NamesLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	v.Names = make([]Str, v.NamesLen)
+	b += StrReadList(buf[b:], v.Names)
+
+	return v
+}
+
+// Write request to wire for ListFonts
+func listFontsRequest(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) []byte {
+	size := xgb.Pad((8 + xgb.Pad((int(PatternLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 49 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], MaxNames)
+	b += 2
+
+	xgb.Put16(buf[b:], PatternLen)
+	b += 2
+
+	copy(buf[b:], Pattern[:PatternLen])
+	b += xgb.Pad(int(PatternLen))
+
+	return buf
+}
+
+// Request ListFontsWithInfo
+// size: xgb.Pad((8 + xgb.Pad((int(PatternLen) * 1))))
+type ListFontsWithInfoCookie struct {
+	*xgb.Cookie
+}
+
+func ListFontsWithInfo(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsWithInfoCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(listFontsWithInfoRequest(c, MaxNames, PatternLen, Pattern), cookie)
+	return ListFontsWithInfoCookie{cookie}
+}
+
+func ListFontsWithInfoUnchecked(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsWithInfoCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(listFontsWithInfoRequest(c, MaxNames, PatternLen, Pattern), cookie)
+	return ListFontsWithInfoCookie{cookie}
+}
+
+// Request reply for ListFontsWithInfo
+// size: ((60 + xgb.Pad((int(PropertiesLen) * 8))) + xgb.Pad((int(NameLen) * 1)))
+type ListFontsWithInfoReply struct {
+	Sequence  uint16
+	Length    uint32
+	NameLen   byte
+	MinBounds Charinfo
+	// padding: 4 bytes
+	MaxBounds Charinfo
+	// padding: 4 bytes
+	MinCharOrByte2 uint16
+	MaxCharOrByte2 uint16
+	DefaultChar    uint16
+	PropertiesLen  uint16
+	DrawDirection  byte
+	MinByte1       byte
+	MaxByte1       byte
+	AllCharsExist  bool
+	FontAscent     int16
+	FontDescent    int16
+	RepliesHint    uint32
+	Properties     []Fontprop // size: xgb.Pad((int(PropertiesLen) * 8))
+	Name           string     // size: xgb.Pad((int(NameLen) * 1))
+}
+
+// Waits and reads reply data from request ListFontsWithInfo
+func (cook ListFontsWithInfoCookie) Reply() (*ListFontsWithInfoReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return listFontsWithInfoReply(buf), nil
+}
+
+// Read reply into structure from buffer for ListFontsWithInfo
+func listFontsWithInfoReply(buf []byte) *ListFontsWithInfoReply {
+	v := new(ListFontsWithInfoReply)
+	b := 1 // skip reply determinant
+
+	v.NameLen = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.MinBounds = Charinfo{}
+	b += CharinfoRead(buf[b:], &v.MinBounds)
+
+	b += 4 // padding
+
+	v.MaxBounds = Charinfo{}
+	b += CharinfoRead(buf[b:], &v.MaxBounds)
+
+	b += 4 // padding
+
+	v.MinCharOrByte2 = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MaxCharOrByte2 = xgb.Get16(buf[b:])
+	b += 2
+
+	v.DefaultChar = xgb.Get16(buf[b:])
+	b += 2
+
+	v.PropertiesLen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.DrawDirection = buf[b]
+	b += 1
+
+	v.MinByte1 = buf[b]
+	b += 1
+
+	v.MaxByte1 = buf[b]
+	b += 1
+
+	if buf[b] == 1 {
+		v.AllCharsExist = true
+	} else {
+		v.AllCharsExist = false
+	}
+	b += 1
+
+	v.FontAscent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.FontDescent = int16(xgb.Get16(buf[b:]))
+	b += 2
+
+	v.RepliesHint = xgb.Get32(buf[b:])
+	b += 4
+
+	v.Properties = make([]Fontprop, v.PropertiesLen)
+	b += FontpropReadList(buf[b:], v.Properties)
+
+	{
+		byteString := make([]byte, v.NameLen)
+		copy(byteString[:v.NameLen], buf[b:])
+		v.Name = string(byteString)
+		b += xgb.Pad(int(v.NameLen))
+	}
+
+	return v
+}
+
+// Write request to wire for ListFontsWithInfo
+func listFontsWithInfoRequest(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) []byte {
+	size := xgb.Pad((8 + xgb.Pad((int(PatternLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 50 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], MaxNames)
+	b += 2
+
+	xgb.Put16(buf[b:], PatternLen)
+	b += 2
+
+	copy(buf[b:], Pattern[:PatternLen])
+	b += xgb.Pad(int(PatternLen))
+
+	return buf
+}
+
+// Request SetFontPath
+// size: xgb.Pad((8 + StrListSize(Font)))
+type SetFontPathCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetFontPath
+func SetFontPath(c *xgb.Conn, FontQty uint16, Font []Str) SetFontPathCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setFontPathRequest(c, FontQty, Font), cookie)
+	return SetFontPathCookie{cookie}
+}
+
+func SetFontPathChecked(c *xgb.Conn, FontQty uint16, Font []Str) SetFontPathCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setFontPathRequest(c, FontQty, Font), cookie)
+	return SetFontPathCookie{cookie}
+}
+
+func (cook SetFontPathCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetFontPath
+func setFontPathRequest(c *xgb.Conn, FontQty uint16, Font []Str) []byte {
+	size := xgb.Pad((8 + StrListSize(Font)))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 51 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], FontQty)
+	b += 2
+
+	b += 2 // padding
+
+	b += StrListBytes(buf[b:], Font)
+
+	return buf
+}
+
+// Request GetFontPath
+// size: 4
+type GetFontPathCookie struct {
+	*xgb.Cookie
+}
+
+func GetFontPath(c *xgb.Conn) GetFontPathCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getFontPathRequest(c), cookie)
+	return GetFontPathCookie{cookie}
+}
+
+func GetFontPathUnchecked(c *xgb.Conn) GetFontPathCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getFontPathRequest(c), cookie)
+	return GetFontPathCookie{cookie}
+}
+
+// Request reply for GetFontPath
+// size: (32 + StrListSize(Path))
+type GetFontPathReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	PathLen uint16
+	// padding: 22 bytes
+	Path []Str // size: StrListSize(Path)
+}
+
+// Waits and reads reply data from request GetFontPath
+func (cook GetFontPathCookie) Reply() (*GetFontPathReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getFontPathReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetFontPath
+func getFontPathReply(buf []byte) *GetFontPathReply {
+	v := new(GetFontPathReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.PathLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	v.Path = make([]Str, v.PathLen)
+	b += StrReadList(buf[b:], v.Path)
+
+	return v
+}
+
+// Write request to wire for GetFontPath
+func getFontPathRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 52 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request CreatePixmap
+// size: 16
+type CreatePixmapCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CreatePixmap
+func CreatePixmap(c *xgb.Conn, Depth byte, Pid Pixmap, Drawable Drawable, Width uint16, Height uint16) CreatePixmapCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(createPixmapRequest(c, Depth, Pid, Drawable, Width, Height), cookie)
+	return CreatePixmapCookie{cookie}
+}
+
+func CreatePixmapChecked(c *xgb.Conn, Depth byte, Pid Pixmap, Drawable Drawable, Width uint16, Height uint16) CreatePixmapCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(createPixmapRequest(c, Depth, Pid, Drawable, Width, Height), cookie)
+	return CreatePixmapCookie{cookie}
+}
+
+func (cook CreatePixmapCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CreatePixmap
+func createPixmapRequest(c *xgb.Conn, Depth byte, Pid Pixmap, Drawable Drawable, Width uint16, Height uint16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 53 // request opcode
+	b += 1
+
+	buf[b] = Depth
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Pid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	return buf
+}
+
+// Request FreePixmap
+// size: 8
+type FreePixmapCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for FreePixmap
+func FreePixmap(c *xgb.Conn, Pixmap Pixmap) FreePixmapCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(freePixmapRequest(c, Pixmap), cookie)
+	return FreePixmapCookie{cookie}
+}
+
+func FreePixmapChecked(c *xgb.Conn, Pixmap Pixmap) FreePixmapCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(freePixmapRequest(c, Pixmap), cookie)
+	return FreePixmapCookie{cookie}
+}
+
+func (cook FreePixmapCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for FreePixmap
+func freePixmapRequest(c *xgb.Conn, Pixmap Pixmap) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 54 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Pixmap))
+	b += 4
+
+	return buf
+}
+
+// Request CreateGC
+// size: xgb.Pad((12 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+type CreateGCCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CreateGC
+func CreateGC(c *xgb.Conn, Cid Gcontext, Drawable Drawable, ValueMask uint32, ValueList []uint32) CreateGCCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(createGCRequest(c, Cid, Drawable, ValueMask, ValueList), cookie)
+	return CreateGCCookie{cookie}
+}
+
+func CreateGCChecked(c *xgb.Conn, Cid Gcontext, Drawable Drawable, ValueMask uint32, ValueList []uint32) CreateGCCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(createGCRequest(c, Cid, Drawable, ValueMask, ValueList), cookie)
+	return CreateGCCookie{cookie}
+}
+
+func (cook CreateGCCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CreateGC
+func createGCRequest(c *xgb.Conn, Cid Gcontext, Drawable Drawable, ValueMask uint32, ValueList []uint32) []byte {
+	size := xgb.Pad((12 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 55 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], ValueMask)
+	b += 4
+	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
+		xgb.Put32(buf[b:], ValueList[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request ChangeGC
+// size: xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+type ChangeGCCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeGC
+func ChangeGC(c *xgb.Conn, Gc Gcontext, ValueMask uint32, ValueList []uint32) ChangeGCCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeGCRequest(c, Gc, ValueMask, ValueList), cookie)
+	return ChangeGCCookie{cookie}
+}
+
+func ChangeGCChecked(c *xgb.Conn, Gc Gcontext, ValueMask uint32, ValueList []uint32) ChangeGCCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeGCRequest(c, Gc, ValueMask, ValueList), cookie)
+	return ChangeGCCookie{cookie}
+}
+
+func (cook ChangeGCCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeGC
+func changeGCRequest(c *xgb.Conn, Gc Gcontext, ValueMask uint32, ValueList []uint32) []byte {
+	size := xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 56 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put32(buf[b:], ValueMask)
+	b += 4
+	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
+		xgb.Put32(buf[b:], ValueList[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request CopyGC
+// size: 16
+type CopyGCCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CopyGC
+func CopyGC(c *xgb.Conn, SrcGc Gcontext, DstGc Gcontext, ValueMask uint32) CopyGCCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(copyGCRequest(c, SrcGc, DstGc, ValueMask), cookie)
+	return CopyGCCookie{cookie}
+}
+
+func CopyGCChecked(c *xgb.Conn, SrcGc Gcontext, DstGc Gcontext, ValueMask uint32) CopyGCCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(copyGCRequest(c, SrcGc, DstGc, ValueMask), cookie)
+	return CopyGCCookie{cookie}
+}
+
+func (cook CopyGCCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CopyGC
+func copyGCRequest(c *xgb.Conn, SrcGc Gcontext, DstGc Gcontext, ValueMask uint32) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 57 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(SrcGc))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(DstGc))
+	b += 4
+
+	xgb.Put32(buf[b:], ValueMask)
+	b += 4
+
+	return buf
+}
+
+// Request SetDashes
+// size: xgb.Pad((12 + xgb.Pad((int(DashesLen) * 1))))
+type SetDashesCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetDashes
+func SetDashes(c *xgb.Conn, Gc Gcontext, DashOffset uint16, DashesLen uint16, Dashes []byte) SetDashesCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setDashesRequest(c, Gc, DashOffset, DashesLen, Dashes), cookie)
+	return SetDashesCookie{cookie}
+}
+
+func SetDashesChecked(c *xgb.Conn, Gc Gcontext, DashOffset uint16, DashesLen uint16, Dashes []byte) SetDashesCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setDashesRequest(c, Gc, DashOffset, DashesLen, Dashes), cookie)
+	return SetDashesCookie{cookie}
+}
+
+func (cook SetDashesCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetDashes
+func setDashesRequest(c *xgb.Conn, Gc Gcontext, DashOffset uint16, DashesLen uint16, Dashes []byte) []byte {
+	size := xgb.Pad((12 + xgb.Pad((int(DashesLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 58 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], DashOffset)
+	b += 2
+
+	xgb.Put16(buf[b:], DashesLen)
+	b += 2
+
+	copy(buf[b:], Dashes[:DashesLen])
+	b += xgb.Pad(int(DashesLen))
+
+	return buf
+}
+
+// Request SetClipRectangles
+// size: xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
+type SetClipRectanglesCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetClipRectangles
+func SetClipRectangles(c *xgb.Conn, Ordering byte, Gc Gcontext, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) SetClipRectanglesCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setClipRectanglesRequest(c, Ordering, Gc, ClipXOrigin, ClipYOrigin, Rectangles), cookie)
+	return SetClipRectanglesCookie{cookie}
+}
+
+func SetClipRectanglesChecked(c *xgb.Conn, Ordering byte, Gc Gcontext, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) SetClipRectanglesCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setClipRectanglesRequest(c, Ordering, Gc, ClipXOrigin, ClipYOrigin, Rectangles), cookie)
+	return SetClipRectanglesCookie{cookie}
+}
+
+func (cook SetClipRectanglesCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetClipRectangles
+func setClipRectanglesRequest(c *xgb.Conn, Ordering byte, Gc Gcontext, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 59 // request opcode
+	b += 1
+
+	buf[b] = Ordering
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(ClipXOrigin))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(ClipYOrigin))
+	b += 2
+
+	b += RectangleListBytes(buf[b:], Rectangles)
+
+	return buf
+}
+
+// Request FreeGC
+// size: 8
+type FreeGCCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for FreeGC
+func FreeGC(c *xgb.Conn, Gc Gcontext) FreeGCCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(freeGCRequest(c, Gc), cookie)
+	return FreeGCCookie{cookie}
+}
+
+func FreeGCChecked(c *xgb.Conn, Gc Gcontext) FreeGCCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(freeGCRequest(c, Gc), cookie)
+	return FreeGCCookie{cookie}
+}
+
+func (cook FreeGCCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for FreeGC
+func freeGCRequest(c *xgb.Conn, Gc Gcontext) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 60 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	return buf
+}
+
+// Request ClearArea
+// size: 16
+type ClearAreaCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ClearArea
+func ClearArea(c *xgb.Conn, Exposures bool, Window Window, X int16, Y int16, Width uint16, Height uint16) ClearAreaCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(clearAreaRequest(c, Exposures, Window, X, Y, Width, Height), cookie)
+	return ClearAreaCookie{cookie}
+}
+
+func ClearAreaChecked(c *xgb.Conn, Exposures bool, Window Window, X int16, Y int16, Width uint16, Height uint16) ClearAreaCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(clearAreaRequest(c, Exposures, Window, X, Y, Width, Height), cookie)
+	return ClearAreaCookie{cookie}
+}
+
+func (cook ClearAreaCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ClearArea
+func clearAreaRequest(c *xgb.Conn, Exposures bool, Window Window, X int16, Y int16, Width uint16, Height uint16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 61 // request opcode
+	b += 1
+
+	if Exposures {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	return buf
+}
+
+// Request CopyArea
+// size: 28
+type CopyAreaCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CopyArea
+func CopyArea(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) CopyAreaCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(copyAreaRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height), cookie)
+	return CopyAreaCookie{cookie}
+}
+
+func CopyAreaChecked(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) CopyAreaCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(copyAreaRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height), cookie)
+	return CopyAreaCookie{cookie}
+}
+
+func (cook CopyAreaCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CopyArea
+func copyAreaRequest(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) []byte {
+	size := 28
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 62 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(SrcDrawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(DstDrawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(SrcX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(SrcY))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstY))
+	b += 2
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	return buf
+}
+
+// Request CopyPlane
+// size: 32
+type CopyPlaneCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CopyPlane
+func CopyPlane(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16, BitPlane uint32) CopyPlaneCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(copyPlaneRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height, BitPlane), cookie)
+	return CopyPlaneCookie{cookie}
+}
+
+func CopyPlaneChecked(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16, BitPlane uint32) CopyPlaneCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(copyPlaneRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height, BitPlane), cookie)
+	return CopyPlaneCookie{cookie}
+}
+
+func (cook CopyPlaneCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CopyPlane
+func copyPlaneRequest(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16, BitPlane uint32) []byte {
+	size := 32
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 63 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(SrcDrawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(DstDrawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(SrcX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(SrcY))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstY))
+	b += 2
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	xgb.Put32(buf[b:], BitPlane)
+	b += 4
+
+	return buf
+}
+
+// Request PolyPoint
+// size: xgb.Pad((12 + xgb.Pad((len(Points) * 4))))
+type PolyPointCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyPoint
+func PolyPoint(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyPointCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyPointRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
+	return PolyPointCookie{cookie}
+}
+
+func PolyPointChecked(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyPointCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyPointRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
+	return PolyPointCookie{cookie}
+}
+
+func (cook PolyPointCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyPoint
+func polyPointRequest(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Points) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 64 // request opcode
+	b += 1
+
+	buf[b] = CoordinateMode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += PointListBytes(buf[b:], Points)
+
+	return buf
+}
+
+// Request PolyLine
+// size: xgb.Pad((12 + xgb.Pad((len(Points) * 4))))
+type PolyLineCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyLine
+func PolyLine(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyLineCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyLineRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
+	return PolyLineCookie{cookie}
+}
+
+func PolyLineChecked(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyLineCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyLineRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
+	return PolyLineCookie{cookie}
+}
+
+func (cook PolyLineCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyLine
+func polyLineRequest(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Points) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 65 // request opcode
+	b += 1
+
+	buf[b] = CoordinateMode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += PointListBytes(buf[b:], Points)
+
+	return buf
+}
+
+// Request PolySegment
+// size: xgb.Pad((12 + xgb.Pad((len(Segments) * 8))))
+type PolySegmentCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolySegment
+func PolySegment(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Segments []Segment) PolySegmentCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polySegmentRequest(c, Drawable, Gc, Segments), cookie)
+	return PolySegmentCookie{cookie}
+}
+
+func PolySegmentChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Segments []Segment) PolySegmentCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polySegmentRequest(c, Drawable, Gc, Segments), cookie)
+	return PolySegmentCookie{cookie}
+}
+
+func (cook PolySegmentCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolySegment
+func polySegmentRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Segments []Segment) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Segments) * 8))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 66 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += SegmentListBytes(buf[b:], Segments)
+
+	return buf
+}
+
+// Request PolyRectangle
+// size: xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
+type PolyRectangleCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyRectangle
+func PolyRectangle(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyRectangleCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
+	return PolyRectangleCookie{cookie}
+}
+
+func PolyRectangleChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyRectangleCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
+	return PolyRectangleCookie{cookie}
+}
+
+func (cook PolyRectangleCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyRectangle
+func polyRectangleRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 67 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += RectangleListBytes(buf[b:], Rectangles)
+
+	return buf
+}
+
+// Request PolyArc
+// size: xgb.Pad((12 + xgb.Pad((len(Arcs) * 12))))
+type PolyArcCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyArc
+func PolyArc(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyArcCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyArcRequest(c, Drawable, Gc, Arcs), cookie)
+	return PolyArcCookie{cookie}
+}
+
+func PolyArcChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyArcCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyArcRequest(c, Drawable, Gc, Arcs), cookie)
+	return PolyArcCookie{cookie}
+}
+
+func (cook PolyArcCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyArc
+func polyArcRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Arcs) * 12))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 68 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += ArcListBytes(buf[b:], Arcs)
+
+	return buf
+}
+
+// Request FillPoly
+// size: xgb.Pad((16 + xgb.Pad((len(Points) * 4))))
+type FillPolyCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for FillPoly
+func FillPoly(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Shape byte, CoordinateMode byte, Points []Point) FillPolyCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(fillPolyRequest(c, Drawable, Gc, Shape, CoordinateMode, Points), cookie)
+	return FillPolyCookie{cookie}
+}
+
+func FillPolyChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Shape byte, CoordinateMode byte, Points []Point) FillPolyCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(fillPolyRequest(c, Drawable, Gc, Shape, CoordinateMode, Points), cookie)
+	return FillPolyCookie{cookie}
+}
+
+func (cook FillPolyCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for FillPoly
+func fillPolyRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Shape byte, CoordinateMode byte, Points []Point) []byte {
+	size := xgb.Pad((16 + xgb.Pad((len(Points) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 69 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	buf[b] = Shape
+	b += 1
+
+	buf[b] = CoordinateMode
+	b += 1
+
+	b += 2 // padding
+
+	b += PointListBytes(buf[b:], Points)
+
+	return buf
+}
+
+// Request PolyFillRectangle
+// size: xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
+type PolyFillRectangleCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyFillRectangle
+func PolyFillRectangle(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyFillRectangleCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyFillRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
+	return PolyFillRectangleCookie{cookie}
+}
+
+func PolyFillRectangleChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyFillRectangleCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyFillRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
+	return PolyFillRectangleCookie{cookie}
+}
+
+func (cook PolyFillRectangleCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyFillRectangle
+func polyFillRectangleRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 70 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += RectangleListBytes(buf[b:], Rectangles)
+
+	return buf
+}
+
+// Request PolyFillArc
+// size: xgb.Pad((12 + xgb.Pad((len(Arcs) * 12))))
+type PolyFillArcCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyFillArc
+func PolyFillArc(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyFillArcCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyFillArcRequest(c, Drawable, Gc, Arcs), cookie)
+	return PolyFillArcCookie{cookie}
+}
+
+func PolyFillArcChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyFillArcCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyFillArcRequest(c, Drawable, Gc, Arcs), cookie)
+	return PolyFillArcCookie{cookie}
+}
+
+func (cook PolyFillArcCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyFillArc
+func polyFillArcRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Arcs) * 12))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 71 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	b += ArcListBytes(buf[b:], Arcs)
+
+	return buf
+}
+
+// Request PutImage
+// size: xgb.Pad((24 + xgb.Pad((len(Data) * 1))))
+type PutImageCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PutImage
+func PutImage(c *xgb.Conn, Format byte, Drawable Drawable, Gc Gcontext, Width uint16, Height uint16, DstX int16, DstY int16, LeftPad byte, Depth byte, Data []byte) PutImageCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(putImageRequest(c, Format, Drawable, Gc, Width, Height, DstX, DstY, LeftPad, Depth, Data), cookie)
+	return PutImageCookie{cookie}
+}
+
+func PutImageChecked(c *xgb.Conn, Format byte, Drawable Drawable, Gc Gcontext, Width uint16, Height uint16, DstX int16, DstY int16, LeftPad byte, Depth byte, Data []byte) PutImageCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(putImageRequest(c, Format, Drawable, Gc, Width, Height, DstX, DstY, LeftPad, Depth, Data), cookie)
+	return PutImageCookie{cookie}
+}
+
+func (cook PutImageCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PutImage
+func putImageRequest(c *xgb.Conn, Format byte, Drawable Drawable, Gc Gcontext, Width uint16, Height uint16, DstX int16, DstY int16, LeftPad byte, Depth byte, Data []byte) []byte {
+	size := xgb.Pad((24 + xgb.Pad((len(Data) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 72 // request opcode
+	b += 1
+
+	buf[b] = Format
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstX))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(DstY))
+	b += 2
+
+	buf[b] = LeftPad
+	b += 1
+
+	buf[b] = Depth
+	b += 1
+
+	b += 2 // padding
+
+	copy(buf[b:], Data[:len(Data)])
+	b += xgb.Pad(int(len(Data)))
+
+	return buf
+}
+
+// Request GetImage
+// size: 20
+type GetImageCookie struct {
+	*xgb.Cookie
+}
+
+func GetImage(c *xgb.Conn, Format byte, Drawable Drawable, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) GetImageCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getImageRequest(c, Format, Drawable, X, Y, Width, Height, PlaneMask), cookie)
+	return GetImageCookie{cookie}
+}
+
+func GetImageUnchecked(c *xgb.Conn, Format byte, Drawable Drawable, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) GetImageCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getImageRequest(c, Format, Drawable, X, Y, Width, Height, PlaneMask), cookie)
+	return GetImageCookie{cookie}
+}
+
+// Request reply for GetImage
+// size: (32 + xgb.Pad(((int(Length) * 4) * 1)))
+type GetImageReply struct {
+	Sequence uint16
+	Length   uint32
+	Depth    byte
+	Visual   Visualid
+	// padding: 20 bytes
+	Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
+}
+
+// Waits and reads reply data from request GetImage
+func (cook GetImageCookie) Reply() (*GetImageReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getImageReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetImage
+func getImageReply(buf []byte) *GetImageReply {
+	v := new(GetImageReply)
+	b := 1 // skip reply determinant
+
+	v.Depth = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Visual = Visualid(xgb.Get32(buf[b:]))
+	b += 4
+
+	b += 20 // padding
+
+	v.Data = make([]byte, (int(v.Length) * 4))
+	copy(v.Data[:(int(v.Length)*4)], buf[b:])
+	b += xgb.Pad(int((int(v.Length) * 4)))
+
+	return v
+}
+
+// Write request to wire for GetImage
+func getImageRequest(c *xgb.Conn, Format byte, Drawable Drawable, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) []byte {
+	size := 20
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 73 // request opcode
+	b += 1
+
+	buf[b] = Format
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	xgb.Put32(buf[b:], PlaneMask)
+	b += 4
+
+	return buf
+}
+
+// Request PolyText8
+// size: xgb.Pad((16 + xgb.Pad((len(Items) * 1))))
+type PolyText8Cookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyText8
+func PolyText8(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText8Cookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyText8Request(c, Drawable, Gc, X, Y, Items), cookie)
+	return PolyText8Cookie{cookie}
+}
+
+func PolyText8Checked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText8Cookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyText8Request(c, Drawable, Gc, X, Y, Items), cookie)
+	return PolyText8Cookie{cookie}
+}
+
+func (cook PolyText8Cookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyText8
+func polyText8Request(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) []byte {
+	size := xgb.Pad((16 + xgb.Pad((len(Items) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 74 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	copy(buf[b:], Items[:len(Items)])
+	b += xgb.Pad(int(len(Items)))
+
+	return buf
+}
+
+// Request PolyText16
+// size: xgb.Pad((16 + xgb.Pad((len(Items) * 1))))
+type PolyText16Cookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for PolyText16
+func PolyText16(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText16Cookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(polyText16Request(c, Drawable, Gc, X, Y, Items), cookie)
+	return PolyText16Cookie{cookie}
+}
+
+func PolyText16Checked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText16Cookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(polyText16Request(c, Drawable, Gc, X, Y, Items), cookie)
+	return PolyText16Cookie{cookie}
+}
+
+func (cook PolyText16Cookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for PolyText16
+func polyText16Request(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) []byte {
+	size := xgb.Pad((16 + xgb.Pad((len(Items) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 75 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	copy(buf[b:], Items[:len(Items)])
+	b += xgb.Pad(int(len(Items)))
+
+	return buf
+}
+
+// Request ImageText8
+// size: xgb.Pad((16 + xgb.Pad((int(StringLen) * 1))))
+type ImageText8Cookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ImageText8
+func ImageText8(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String string) ImageText8Cookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(imageText8Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
+	return ImageText8Cookie{cookie}
+}
+
+func ImageText8Checked(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String string) ImageText8Cookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(imageText8Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
+	return ImageText8Cookie{cookie}
+}
+
+func (cook ImageText8Cookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ImageText8
+func imageText8Request(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String string) []byte {
+	size := xgb.Pad((16 + xgb.Pad((int(StringLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 76 // request opcode
+	b += 1
+
+	buf[b] = StringLen
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	copy(buf[b:], String[:StringLen])
+	b += xgb.Pad(int(StringLen))
+
+	return buf
+}
+
+// Request ImageText16
+// size: xgb.Pad((16 + xgb.Pad((int(StringLen) * 2))))
+type ImageText16Cookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ImageText16
+func ImageText16(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String []Char2b) ImageText16Cookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(imageText16Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
+	return ImageText16Cookie{cookie}
+}
+
+func ImageText16Checked(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String []Char2b) ImageText16Cookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(imageText16Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
+	return ImageText16Cookie{cookie}
+}
+
+func (cook ImageText16Cookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ImageText16
+func imageText16Request(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String []Char2b) []byte {
+	size := xgb.Pad((16 + xgb.Pad((int(StringLen) * 2))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 77 // request opcode
+	b += 1
+
+	buf[b] = StringLen
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Gc))
+	b += 4
+
+	xgb.Put16(buf[b:], uint16(X))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Y))
+	b += 2
+
+	b += Char2bListBytes(buf[b:], String)
+
+	return buf
+}
+
+// Request CreateColormap
+// size: 16
+type CreateColormapCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CreateColormap
+func CreateColormap(c *xgb.Conn, Alloc byte, Mid Colormap, Window Window, Visual Visualid) CreateColormapCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(createColormapRequest(c, Alloc, Mid, Window, Visual), cookie)
+	return CreateColormapCookie{cookie}
+}
+
+func CreateColormapChecked(c *xgb.Conn, Alloc byte, Mid Colormap, Window Window, Visual Visualid) CreateColormapCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(createColormapRequest(c, Alloc, Mid, Window, Visual), cookie)
+	return CreateColormapCookie{cookie}
+}
+
+func (cook CreateColormapCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CreateColormap
+func createColormapRequest(c *xgb.Conn, Alloc byte, Mid Colormap, Window Window, Visual Visualid) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 78 // request opcode
+	b += 1
+
+	buf[b] = Alloc
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Mid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Visual))
+	b += 4
+
+	return buf
+}
+
+// Request FreeColormap
+// size: 8
+type FreeColormapCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for FreeColormap
+func FreeColormap(c *xgb.Conn, Cmap Colormap) FreeColormapCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(freeColormapRequest(c, Cmap), cookie)
+	return FreeColormapCookie{cookie}
+}
+
+func FreeColormapChecked(c *xgb.Conn, Cmap Colormap) FreeColormapCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(freeColormapRequest(c, Cmap), cookie)
+	return FreeColormapCookie{cookie}
+}
+
+func (cook FreeColormapCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for FreeColormap
+func freeColormapRequest(c *xgb.Conn, Cmap Colormap) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 79 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	return buf
+}
+
+// Request CopyColormapAndFree
+// size: 12
+type CopyColormapAndFreeCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CopyColormapAndFree
+func CopyColormapAndFree(c *xgb.Conn, Mid Colormap, SrcCmap Colormap) CopyColormapAndFreeCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(copyColormapAndFreeRequest(c, Mid, SrcCmap), cookie)
+	return CopyColormapAndFreeCookie{cookie}
+}
+
+func CopyColormapAndFreeChecked(c *xgb.Conn, Mid Colormap, SrcCmap Colormap) CopyColormapAndFreeCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(copyColormapAndFreeRequest(c, Mid, SrcCmap), cookie)
+	return CopyColormapAndFreeCookie{cookie}
+}
+
+func (cook CopyColormapAndFreeCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CopyColormapAndFree
+func copyColormapAndFreeRequest(c *xgb.Conn, Mid Colormap, SrcCmap Colormap) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 80 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Mid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(SrcCmap))
+	b += 4
+
+	return buf
+}
+
+// Request InstallColormap
+// size: 8
+type InstallColormapCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for InstallColormap
+func InstallColormap(c *xgb.Conn, Cmap Colormap) InstallColormapCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(installColormapRequest(c, Cmap), cookie)
+	return InstallColormapCookie{cookie}
+}
+
+func InstallColormapChecked(c *xgb.Conn, Cmap Colormap) InstallColormapCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(installColormapRequest(c, Cmap), cookie)
+	return InstallColormapCookie{cookie}
+}
+
+func (cook InstallColormapCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for InstallColormap
+func installColormapRequest(c *xgb.Conn, Cmap Colormap) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 81 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	return buf
+}
+
+// Request UninstallColormap
+// size: 8
+type UninstallColormapCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for UninstallColormap
+func UninstallColormap(c *xgb.Conn, Cmap Colormap) UninstallColormapCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(uninstallColormapRequest(c, Cmap), cookie)
+	return UninstallColormapCookie{cookie}
+}
+
+func UninstallColormapChecked(c *xgb.Conn, Cmap Colormap) UninstallColormapCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(uninstallColormapRequest(c, Cmap), cookie)
+	return UninstallColormapCookie{cookie}
+}
+
+func (cook UninstallColormapCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for UninstallColormap
+func uninstallColormapRequest(c *xgb.Conn, Cmap Colormap) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 82 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	return buf
+}
+
+// Request ListInstalledColormaps
+// size: 8
+type ListInstalledColormapsCookie struct {
+	*xgb.Cookie
+}
+
+func ListInstalledColormaps(c *xgb.Conn, Window Window) ListInstalledColormapsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(listInstalledColormapsRequest(c, Window), cookie)
+	return ListInstalledColormapsCookie{cookie}
+}
+
+func ListInstalledColormapsUnchecked(c *xgb.Conn, Window Window) ListInstalledColormapsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(listInstalledColormapsRequest(c, Window), cookie)
+	return ListInstalledColormapsCookie{cookie}
+}
+
+// Request reply for ListInstalledColormaps
+// size: (32 + xgb.Pad((int(CmapsLen) * 4)))
+type ListInstalledColormapsReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	CmapsLen uint16
+	// padding: 22 bytes
+	Cmaps []Colormap // size: xgb.Pad((int(CmapsLen) * 4))
+}
+
+// Waits and reads reply data from request ListInstalledColormaps
+func (cook ListInstalledColormapsCookie) Reply() (*ListInstalledColormapsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return listInstalledColormapsReply(buf), nil
+}
+
+// Read reply into structure from buffer for ListInstalledColormaps
+func listInstalledColormapsReply(buf []byte) *ListInstalledColormapsReply {
+	v := new(ListInstalledColormapsReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.CmapsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	v.Cmaps = make([]Colormap, v.CmapsLen)
+	for i := 0; i < int(v.CmapsLen); i++ {
+		v.Cmaps[i] = Colormap(xgb.Get32(buf[b:]))
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for ListInstalledColormaps
+func listInstalledColormapsRequest(c *xgb.Conn, Window Window) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 83 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	return buf
+}
+
+// Request AllocColor
+// size: 16
+type AllocColorCookie struct {
+	*xgb.Cookie
+}
+
+func AllocColor(c *xgb.Conn, Cmap Colormap, Red uint16, Green uint16, Blue uint16) AllocColorCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(allocColorRequest(c, Cmap, Red, Green, Blue), cookie)
+	return AllocColorCookie{cookie}
+}
+
+func AllocColorUnchecked(c *xgb.Conn, Cmap Colormap, Red uint16, Green uint16, Blue uint16) AllocColorCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(allocColorRequest(c, Cmap, Red, Green, Blue), cookie)
+	return AllocColorCookie{cookie}
+}
+
+// Request reply for AllocColor
+// size: 20
+type AllocColorReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Red   uint16
+	Green uint16
+	Blue  uint16
+	// padding: 2 bytes
+	Pixel uint32
+}
+
+// Waits and reads reply data from request AllocColor
+func (cook AllocColorCookie) Reply() (*AllocColorReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return allocColorReply(buf), nil
+}
+
+// Read reply into structure from buffer for AllocColor
+func allocColorReply(buf []byte) *AllocColorReply {
+	v := new(AllocColorReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Red = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Green = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Blue = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	v.Pixel = xgb.Get32(buf[b:])
+	b += 4
+
+	return v
+}
+
+// Write request to wire for AllocColor
+func allocColorRequest(c *xgb.Conn, Cmap Colormap, Red uint16, Green uint16, Blue uint16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 84 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put16(buf[b:], Red)
+	b += 2
+
+	xgb.Put16(buf[b:], Green)
+	b += 2
+
+	xgb.Put16(buf[b:], Blue)
+	b += 2
+
+	b += 2 // padding
+
+	return buf
+}
+
+// Request AllocNamedColor
+// size: xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
+type AllocNamedColorCookie struct {
+	*xgb.Cookie
+}
+
+func AllocNamedColor(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) AllocNamedColorCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(allocNamedColorRequest(c, Cmap, NameLen, Name), cookie)
+	return AllocNamedColorCookie{cookie}
+}
+
+func AllocNamedColorUnchecked(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) AllocNamedColorCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(allocNamedColorRequest(c, Cmap, NameLen, Name), cookie)
+	return AllocNamedColorCookie{cookie}
+}
+
+// Request reply for AllocNamedColor
+// size: 24
+type AllocNamedColorReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Pixel       uint32
+	ExactRed    uint16
+	ExactGreen  uint16
+	ExactBlue   uint16
+	VisualRed   uint16
+	VisualGreen uint16
+	VisualBlue  uint16
+}
+
+// Waits and reads reply data from request AllocNamedColor
+func (cook AllocNamedColorCookie) Reply() (*AllocNamedColorReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return allocNamedColorReply(buf), nil
+}
+
+// Read reply into structure from buffer for AllocNamedColor
+func allocNamedColorReply(buf []byte) *AllocNamedColorReply {
+	v := new(AllocNamedColorReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Pixel = xgb.Get32(buf[b:])
+	b += 4
+
+	v.ExactRed = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ExactGreen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ExactBlue = xgb.Get16(buf[b:])
+	b += 2
+
+	v.VisualRed = xgb.Get16(buf[b:])
+	b += 2
+
+	v.VisualGreen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.VisualBlue = xgb.Get16(buf[b:])
+	b += 2
+
+	return v
+}
+
+// Write request to wire for AllocNamedColor
+func allocNamedColorRequest(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) []byte {
+	size := xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 85 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put16(buf[b:], NameLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], Name[:NameLen])
+	b += xgb.Pad(int(NameLen))
+
+	return buf
+}
+
+// Request AllocColorCells
+// size: 12
+type AllocColorCellsCookie struct {
+	*xgb.Cookie
+}
+
+func AllocColorCells(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Planes uint16) AllocColorCellsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(allocColorCellsRequest(c, Contiguous, Cmap, Colors, Planes), cookie)
+	return AllocColorCellsCookie{cookie}
+}
+
+func AllocColorCellsUnchecked(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Planes uint16) AllocColorCellsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(allocColorCellsRequest(c, Contiguous, Cmap, Colors, Planes), cookie)
+	return AllocColorCellsCookie{cookie}
+}
+
+// Request reply for AllocColorCells
+// size: ((32 + xgb.Pad((int(PixelsLen) * 4))) + xgb.Pad((int(MasksLen) * 4)))
+type AllocColorCellsReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	PixelsLen uint16
+	MasksLen  uint16
+	// padding: 20 bytes
+	Pixels []uint32 // size: xgb.Pad((int(PixelsLen) * 4))
+	Masks  []uint32 // size: xgb.Pad((int(MasksLen) * 4))
+}
+
+// Waits and reads reply data from request AllocColorCells
+func (cook AllocColorCellsCookie) Reply() (*AllocColorCellsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return allocColorCellsReply(buf), nil
+}
+
+// Read reply into structure from buffer for AllocColorCells
+func allocColorCellsReply(buf []byte) *AllocColorCellsReply {
+	v := new(AllocColorCellsReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.PixelsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.MasksLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 20 // padding
+
+	v.Pixels = make([]uint32, v.PixelsLen)
+	for i := 0; i < int(v.PixelsLen); i++ {
+		v.Pixels[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	v.Masks = make([]uint32, v.MasksLen)
+	for i := 0; i < int(v.MasksLen); i++ {
+		v.Masks[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for AllocColorCells
+func allocColorCellsRequest(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Planes uint16) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 86 // request opcode
+	b += 1
+
+	if Contiguous {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put16(buf[b:], Colors)
+	b += 2
+
+	xgb.Put16(buf[b:], Planes)
+	b += 2
+
+	return buf
+}
+
+// Request AllocColorPlanes
+// size: 16
+type AllocColorPlanesCookie struct {
+	*xgb.Cookie
+}
+
+func AllocColorPlanes(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Reds uint16, Greens uint16, Blues uint16) AllocColorPlanesCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(allocColorPlanesRequest(c, Contiguous, Cmap, Colors, Reds, Greens, Blues), cookie)
+	return AllocColorPlanesCookie{cookie}
+}
+
+func AllocColorPlanesUnchecked(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Reds uint16, Greens uint16, Blues uint16) AllocColorPlanesCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(allocColorPlanesRequest(c, Contiguous, Cmap, Colors, Reds, Greens, Blues), cookie)
+	return AllocColorPlanesCookie{cookie}
+}
+
+// Request reply for AllocColorPlanes
+// size: (32 + xgb.Pad((int(PixelsLen) * 4)))
+type AllocColorPlanesReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	PixelsLen uint16
+	// padding: 2 bytes
+	RedMask   uint32
+	GreenMask uint32
+	BlueMask  uint32
+	// padding: 8 bytes
+	Pixels []uint32 // size: xgb.Pad((int(PixelsLen) * 4))
+}
+
+// Waits and reads reply data from request AllocColorPlanes
+func (cook AllocColorPlanesCookie) Reply() (*AllocColorPlanesReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return allocColorPlanesReply(buf), nil
+}
+
+// Read reply into structure from buffer for AllocColorPlanes
+func allocColorPlanesReply(buf []byte) *AllocColorPlanesReply {
+	v := new(AllocColorPlanesReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.PixelsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	v.RedMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.GreenMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.BlueMask = xgb.Get32(buf[b:])
+	b += 4
+
+	b += 8 // padding
+
+	v.Pixels = make([]uint32, v.PixelsLen)
+	for i := 0; i < int(v.PixelsLen); i++ {
+		v.Pixels[i] = xgb.Get32(buf[b:])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for AllocColorPlanes
+func allocColorPlanesRequest(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Reds uint16, Greens uint16, Blues uint16) []byte {
+	size := 16
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 87 // request opcode
+	b += 1
+
+	if Contiguous {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put16(buf[b:], Colors)
+	b += 2
+
+	xgb.Put16(buf[b:], Reds)
+	b += 2
+
+	xgb.Put16(buf[b:], Greens)
+	b += 2
+
+	xgb.Put16(buf[b:], Blues)
+	b += 2
+
+	return buf
+}
+
+// Request FreeColors
+// size: xgb.Pad((12 + xgb.Pad((len(Pixels) * 4))))
+type FreeColorsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for FreeColors
+func FreeColors(c *xgb.Conn, Cmap Colormap, PlaneMask uint32, Pixels []uint32) FreeColorsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(freeColorsRequest(c, Cmap, PlaneMask, Pixels), cookie)
+	return FreeColorsCookie{cookie}
+}
+
+func FreeColorsChecked(c *xgb.Conn, Cmap Colormap, PlaneMask uint32, Pixels []uint32) FreeColorsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(freeColorsRequest(c, Cmap, PlaneMask, Pixels), cookie)
+	return FreeColorsCookie{cookie}
+}
+
+func (cook FreeColorsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for FreeColors
+func freeColorsRequest(c *xgb.Conn, Cmap Colormap, PlaneMask uint32, Pixels []uint32) []byte {
+	size := xgb.Pad((12 + xgb.Pad((len(Pixels) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 88 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put32(buf[b:], PlaneMask)
+	b += 4
+
+	for i := 0; i < int(len(Pixels)); i++ {
+		xgb.Put32(buf[b:], Pixels[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request StoreColors
+// size: xgb.Pad((8 + xgb.Pad((len(Items) * 12))))
+type StoreColorsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for StoreColors
+func StoreColors(c *xgb.Conn, Cmap Colormap, Items []Coloritem) StoreColorsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(storeColorsRequest(c, Cmap, Items), cookie)
+	return StoreColorsCookie{cookie}
+}
+
+func StoreColorsChecked(c *xgb.Conn, Cmap Colormap, Items []Coloritem) StoreColorsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(storeColorsRequest(c, Cmap, Items), cookie)
+	return StoreColorsCookie{cookie}
+}
+
+func (cook StoreColorsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for StoreColors
+func storeColorsRequest(c *xgb.Conn, Cmap Colormap, Items []Coloritem) []byte {
+	size := xgb.Pad((8 + xgb.Pad((len(Items) * 12))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 89 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	b += ColoritemListBytes(buf[b:], Items)
+
+	return buf
+}
+
+// Request StoreNamedColor
+// size: xgb.Pad((16 + xgb.Pad((int(NameLen) * 1))))
+type StoreNamedColorCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for StoreNamedColor
+func StoreNamedColor(c *xgb.Conn, Flags byte, Cmap Colormap, Pixel uint32, NameLen uint16, Name string) StoreNamedColorCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(storeNamedColorRequest(c, Flags, Cmap, Pixel, NameLen, Name), cookie)
+	return StoreNamedColorCookie{cookie}
+}
+
+func StoreNamedColorChecked(c *xgb.Conn, Flags byte, Cmap Colormap, Pixel uint32, NameLen uint16, Name string) StoreNamedColorCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(storeNamedColorRequest(c, Flags, Cmap, Pixel, NameLen, Name), cookie)
+	return StoreNamedColorCookie{cookie}
+}
+
+func (cook StoreNamedColorCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for StoreNamedColor
+func storeNamedColorRequest(c *xgb.Conn, Flags byte, Cmap Colormap, Pixel uint32, NameLen uint16, Name string) []byte {
+	size := xgb.Pad((16 + xgb.Pad((int(NameLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 90 // request opcode
+	b += 1
+
+	buf[b] = Flags
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put32(buf[b:], Pixel)
+	b += 4
+
+	xgb.Put16(buf[b:], NameLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], Name[:NameLen])
+	b += xgb.Pad(int(NameLen))
+
+	return buf
+}
+
+// Request QueryColors
+// size: xgb.Pad((8 + xgb.Pad((len(Pixels) * 4))))
+type QueryColorsCookie struct {
+	*xgb.Cookie
+}
+
+func QueryColors(c *xgb.Conn, Cmap Colormap, Pixels []uint32) QueryColorsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryColorsRequest(c, Cmap, Pixels), cookie)
+	return QueryColorsCookie{cookie}
+}
+
+func QueryColorsUnchecked(c *xgb.Conn, Cmap Colormap, Pixels []uint32) QueryColorsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryColorsRequest(c, Cmap, Pixels), cookie)
+	return QueryColorsCookie{cookie}
+}
+
+// Request reply for QueryColors
+// size: (32 + xgb.Pad((int(ColorsLen) * 8)))
+type QueryColorsReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	ColorsLen uint16
+	// padding: 22 bytes
+	Colors []Rgb // size: xgb.Pad((int(ColorsLen) * 8))
+}
+
+// Waits and reads reply data from request QueryColors
+func (cook QueryColorsCookie) Reply() (*QueryColorsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryColorsReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryColors
+func queryColorsReply(buf []byte) *QueryColorsReply {
+	v := new(QueryColorsReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.ColorsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	v.Colors = make([]Rgb, v.ColorsLen)
+	b += RgbReadList(buf[b:], v.Colors)
+
+	return v
+}
+
+// Write request to wire for QueryColors
+func queryColorsRequest(c *xgb.Conn, Cmap Colormap, Pixels []uint32) []byte {
+	size := xgb.Pad((8 + xgb.Pad((len(Pixels) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 91 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	for i := 0; i < int(len(Pixels)); i++ {
+		xgb.Put32(buf[b:], Pixels[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request LookupColor
+// size: xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
+type LookupColorCookie struct {
+	*xgb.Cookie
+}
+
+func LookupColor(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) LookupColorCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(lookupColorRequest(c, Cmap, NameLen, Name), cookie)
+	return LookupColorCookie{cookie}
+}
+
+func LookupColorUnchecked(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) LookupColorCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(lookupColorRequest(c, Cmap, NameLen, Name), cookie)
+	return LookupColorCookie{cookie}
+}
+
+// Request reply for LookupColor
+// size: 20
+type LookupColorReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	ExactRed    uint16
+	ExactGreen  uint16
+	ExactBlue   uint16
+	VisualRed   uint16
+	VisualGreen uint16
+	VisualBlue  uint16
+}
+
+// Waits and reads reply data from request LookupColor
+func (cook LookupColorCookie) Reply() (*LookupColorReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return lookupColorReply(buf), nil
+}
+
+// Read reply into structure from buffer for LookupColor
+func lookupColorReply(buf []byte) *LookupColorReply {
+	v := new(LookupColorReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.ExactRed = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ExactGreen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.ExactBlue = xgb.Get16(buf[b:])
+	b += 2
+
+	v.VisualRed = xgb.Get16(buf[b:])
+	b += 2
+
+	v.VisualGreen = xgb.Get16(buf[b:])
+	b += 2
+
+	v.VisualBlue = xgb.Get16(buf[b:])
+	b += 2
+
+	return v
+}
+
+// Write request to wire for LookupColor
+func lookupColorRequest(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) []byte {
+	size := xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 92 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cmap))
+	b += 4
+
+	xgb.Put16(buf[b:], NameLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], Name[:NameLen])
+	b += xgb.Pad(int(NameLen))
+
+	return buf
+}
+
+// Request CreateCursor
+// size: 32
+type CreateCursorCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CreateCursor
+func CreateCursor(c *xgb.Conn, Cid Cursor, Source Pixmap, Mask Pixmap, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16, X uint16, Y uint16) CreateCursorCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(createCursorRequest(c, Cid, Source, Mask, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue, X, Y), cookie)
+	return CreateCursorCookie{cookie}
+}
+
+func CreateCursorChecked(c *xgb.Conn, Cid Cursor, Source Pixmap, Mask Pixmap, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16, X uint16, Y uint16) CreateCursorCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(createCursorRequest(c, Cid, Source, Mask, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue, X, Y), cookie)
+	return CreateCursorCookie{cookie}
+}
+
+func (cook CreateCursorCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CreateCursor
+func createCursorRequest(c *xgb.Conn, Cid Cursor, Source Pixmap, Mask Pixmap, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16, X uint16, Y uint16) []byte {
+	size := 32
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 93 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Source))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(Mask))
+	b += 4
+
+	xgb.Put16(buf[b:], ForeRed)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeGreen)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeBlue)
+	b += 2
+
+	xgb.Put16(buf[b:], BackRed)
+	b += 2
+
+	xgb.Put16(buf[b:], BackGreen)
+	b += 2
+
+	xgb.Put16(buf[b:], BackBlue)
+	b += 2
+
+	xgb.Put16(buf[b:], X)
+	b += 2
+
+	xgb.Put16(buf[b:], Y)
+	b += 2
+
+	return buf
+}
+
+// Request CreateGlyphCursor
+// size: 32
+type CreateGlyphCursorCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for CreateGlyphCursor
+func CreateGlyphCursor(c *xgb.Conn, Cid Cursor, SourceFont Font, MaskFont Font, SourceChar uint16, MaskChar uint16, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) CreateGlyphCursorCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(createGlyphCursorRequest(c, Cid, SourceFont, MaskFont, SourceChar, MaskChar, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
+	return CreateGlyphCursorCookie{cookie}
+}
+
+func CreateGlyphCursorChecked(c *xgb.Conn, Cid Cursor, SourceFont Font, MaskFont Font, SourceChar uint16, MaskChar uint16, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) CreateGlyphCursorCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(createGlyphCursorRequest(c, Cid, SourceFont, MaskFont, SourceChar, MaskChar, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
+	return CreateGlyphCursorCookie{cookie}
+}
+
+func (cook CreateGlyphCursorCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for CreateGlyphCursor
+func createGlyphCursorRequest(c *xgb.Conn, Cid Cursor, SourceFont Font, MaskFont Font, SourceChar uint16, MaskChar uint16, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) []byte {
+	size := 32
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 94 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cid))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(SourceFont))
+	b += 4
+
+	xgb.Put32(buf[b:], uint32(MaskFont))
+	b += 4
+
+	xgb.Put16(buf[b:], SourceChar)
+	b += 2
+
+	xgb.Put16(buf[b:], MaskChar)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeRed)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeGreen)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeBlue)
+	b += 2
+
+	xgb.Put16(buf[b:], BackRed)
+	b += 2
+
+	xgb.Put16(buf[b:], BackGreen)
+	b += 2
+
+	xgb.Put16(buf[b:], BackBlue)
+	b += 2
+
+	return buf
+}
+
+// Request FreeCursor
+// size: 8
+type FreeCursorCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for FreeCursor
+func FreeCursor(c *xgb.Conn, Cursor Cursor) FreeCursorCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(freeCursorRequest(c, Cursor), cookie)
+	return FreeCursorCookie{cookie}
+}
+
+func FreeCursorChecked(c *xgb.Conn, Cursor Cursor) FreeCursorCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(freeCursorRequest(c, Cursor), cookie)
+	return FreeCursorCookie{cookie}
+}
+
+func (cook FreeCursorCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for FreeCursor
+func freeCursorRequest(c *xgb.Conn, Cursor Cursor) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 95 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cursor))
+	b += 4
+
+	return buf
+}
+
+// Request RecolorCursor
+// size: 20
+type RecolorCursorCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for RecolorCursor
+func RecolorCursor(c *xgb.Conn, Cursor Cursor, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) RecolorCursorCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(recolorCursorRequest(c, Cursor, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
+	return RecolorCursorCookie{cookie}
+}
+
+func RecolorCursorChecked(c *xgb.Conn, Cursor Cursor, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) RecolorCursorCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(recolorCursorRequest(c, Cursor, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
+	return RecolorCursorCookie{cookie}
+}
+
+func (cook RecolorCursorCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for RecolorCursor
+func recolorCursorRequest(c *xgb.Conn, Cursor Cursor, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) []byte {
+	size := 20
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 96 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Cursor))
+	b += 4
+
+	xgb.Put16(buf[b:], ForeRed)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeGreen)
+	b += 2
+
+	xgb.Put16(buf[b:], ForeBlue)
+	b += 2
+
+	xgb.Put16(buf[b:], BackRed)
+	b += 2
+
+	xgb.Put16(buf[b:], BackGreen)
+	b += 2
+
+	xgb.Put16(buf[b:], BackBlue)
+	b += 2
+
+	return buf
+}
+
+// Request QueryBestSize
+// size: 12
+type QueryBestSizeCookie struct {
+	*xgb.Cookie
+}
+
+func QueryBestSize(c *xgb.Conn, Class byte, Drawable Drawable, Width uint16, Height uint16) QueryBestSizeCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryBestSizeRequest(c, Class, Drawable, Width, Height), cookie)
+	return QueryBestSizeCookie{cookie}
+}
+
+func QueryBestSizeUnchecked(c *xgb.Conn, Class byte, Drawable Drawable, Width uint16, Height uint16) QueryBestSizeCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryBestSizeRequest(c, Class, Drawable, Width, Height), cookie)
+	return QueryBestSizeCookie{cookie}
+}
+
+// Request reply for QueryBestSize
+// size: 12
+type QueryBestSizeReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Width  uint16
+	Height uint16
+}
+
+// Waits and reads reply data from request QueryBestSize
+func (cook QueryBestSizeCookie) Reply() (*QueryBestSizeReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryBestSizeReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryBestSize
+func queryBestSizeReply(buf []byte) *QueryBestSizeReply {
+	v := new(QueryBestSizeReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Width = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Height = xgb.Get16(buf[b:])
+	b += 2
+
+	return v
+}
+
+// Write request to wire for QueryBestSize
+func queryBestSizeRequest(c *xgb.Conn, Class byte, Drawable Drawable, Width uint16, Height uint16) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 97 // request opcode
+	b += 1
+
+	buf[b] = Class
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Drawable))
+	b += 4
+
+	xgb.Put16(buf[b:], Width)
+	b += 2
+
+	xgb.Put16(buf[b:], Height)
+	b += 2
+
+	return buf
+}
+
+// Request QueryExtension
+// size: xgb.Pad((8 + xgb.Pad((int(NameLen) * 1))))
+type QueryExtensionCookie struct {
+	*xgb.Cookie
+}
+
+func QueryExtension(c *xgb.Conn, NameLen uint16, Name string) QueryExtensionCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(queryExtensionRequest(c, NameLen, Name), cookie)
+	return QueryExtensionCookie{cookie}
+}
+
+func QueryExtensionUnchecked(c *xgb.Conn, NameLen uint16, Name string) QueryExtensionCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(queryExtensionRequest(c, NameLen, Name), cookie)
+	return QueryExtensionCookie{cookie}
+}
+
+// Request reply for QueryExtension
+// size: 12
+type QueryExtensionReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Present     bool
+	MajorOpcode byte
+	FirstEvent  byte
+	FirstError  byte
+}
+
+// Waits and reads reply data from request QueryExtension
+func (cook QueryExtensionCookie) Reply() (*QueryExtensionReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return queryExtensionReply(buf), nil
+}
+
+// Read reply into structure from buffer for QueryExtension
+func queryExtensionReply(buf []byte) *QueryExtensionReply {
+	v := new(QueryExtensionReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	if buf[b] == 1 {
+		v.Present = true
+	} else {
+		v.Present = false
+	}
+	b += 1
+
+	v.MajorOpcode = buf[b]
+	b += 1
+
+	v.FirstEvent = buf[b]
+	b += 1
+
+	v.FirstError = buf[b]
+	b += 1
+
+	return v
+}
+
+// Write request to wire for QueryExtension
+func queryExtensionRequest(c *xgb.Conn, NameLen uint16, Name string) []byte {
+	size := xgb.Pad((8 + xgb.Pad((int(NameLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 98 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], NameLen)
+	b += 2
+
+	b += 2 // padding
+
+	copy(buf[b:], Name[:NameLen])
+	b += xgb.Pad(int(NameLen))
+
+	return buf
+}
+
+// Request ListExtensions
+// size: 4
+type ListExtensionsCookie struct {
+	*xgb.Cookie
+}
+
+func ListExtensions(c *xgb.Conn) ListExtensionsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(listExtensionsRequest(c), cookie)
+	return ListExtensionsCookie{cookie}
+}
+
+func ListExtensionsUnchecked(c *xgb.Conn) ListExtensionsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(listExtensionsRequest(c), cookie)
+	return ListExtensionsCookie{cookie}
+}
+
+// Request reply for ListExtensions
+// size: (32 + StrListSize(Names))
+type ListExtensionsReply struct {
+	Sequence uint16
+	Length   uint32
+	NamesLen byte
+	// padding: 24 bytes
+	Names []Str // size: StrListSize(Names)
+}
+
+// Waits and reads reply data from request ListExtensions
+func (cook ListExtensionsCookie) Reply() (*ListExtensionsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return listExtensionsReply(buf), nil
+}
+
+// Read reply into structure from buffer for ListExtensions
+func listExtensionsReply(buf []byte) *ListExtensionsReply {
+	v := new(ListExtensionsReply)
+	b := 1 // skip reply determinant
+
+	v.NamesLen = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	b += 24 // padding
+
+	v.Names = make([]Str, v.NamesLen)
+	b += StrReadList(buf[b:], v.Names)
+
+	return v
+}
+
+// Write request to wire for ListExtensions
+func listExtensionsRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 99 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request ChangeKeyboardMapping
+// size: xgb.Pad((8 + xgb.Pad(((int(KeycodeCount) * int(KeysymsPerKeycode)) * 4))))
+type ChangeKeyboardMappingCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeKeyboardMapping
+func ChangeKeyboardMapping(c *xgb.Conn, KeycodeCount byte, FirstKeycode Keycode, KeysymsPerKeycode byte, Keysyms []Keysym) ChangeKeyboardMappingCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeKeyboardMappingRequest(c, KeycodeCount, FirstKeycode, KeysymsPerKeycode, Keysyms), cookie)
+	return ChangeKeyboardMappingCookie{cookie}
+}
+
+func ChangeKeyboardMappingChecked(c *xgb.Conn, KeycodeCount byte, FirstKeycode Keycode, KeysymsPerKeycode byte, Keysyms []Keysym) ChangeKeyboardMappingCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeKeyboardMappingRequest(c, KeycodeCount, FirstKeycode, KeysymsPerKeycode, Keysyms), cookie)
+	return ChangeKeyboardMappingCookie{cookie}
+}
+
+func (cook ChangeKeyboardMappingCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeKeyboardMapping
+func changeKeyboardMappingRequest(c *xgb.Conn, KeycodeCount byte, FirstKeycode Keycode, KeysymsPerKeycode byte, Keysyms []Keysym) []byte {
+	size := xgb.Pad((8 + xgb.Pad(((int(KeycodeCount) * int(KeysymsPerKeycode)) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 100 // request opcode
+	b += 1
+
+	buf[b] = KeycodeCount
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	buf[b] = byte(FirstKeycode)
+	b += 1
+
+	buf[b] = KeysymsPerKeycode
+	b += 1
+
+	b += 2 // padding
+
+	for i := 0; i < int((int(KeycodeCount) * int(KeysymsPerKeycode))); i++ {
+		xgb.Put32(buf[b:], uint32(Keysyms[i]))
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request GetKeyboardMapping
+// size: 8
+type GetKeyboardMappingCookie struct {
+	*xgb.Cookie
+}
+
+func GetKeyboardMapping(c *xgb.Conn, FirstKeycode Keycode, Count byte) GetKeyboardMappingCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getKeyboardMappingRequest(c, FirstKeycode, Count), cookie)
+	return GetKeyboardMappingCookie{cookie}
+}
+
+func GetKeyboardMappingUnchecked(c *xgb.Conn, FirstKeycode Keycode, Count byte) GetKeyboardMappingCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getKeyboardMappingRequest(c, FirstKeycode, Count), cookie)
+	return GetKeyboardMappingCookie{cookie}
+}
+
+// Request reply for GetKeyboardMapping
+// size: (32 + xgb.Pad((int(Length) * 4)))
+type GetKeyboardMappingReply struct {
+	Sequence          uint16
+	Length            uint32
+	KeysymsPerKeycode byte
+	// padding: 24 bytes
+	Keysyms []Keysym // size: xgb.Pad((int(Length) * 4))
+}
+
+// Waits and reads reply data from request GetKeyboardMapping
+func (cook GetKeyboardMappingCookie) Reply() (*GetKeyboardMappingReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getKeyboardMappingReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetKeyboardMapping
+func getKeyboardMappingReply(buf []byte) *GetKeyboardMappingReply {
+	v := new(GetKeyboardMappingReply)
+	b := 1 // skip reply determinant
+
+	v.KeysymsPerKeycode = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	b += 24 // padding
+
+	v.Keysyms = make([]Keysym, v.Length)
+	for i := 0; i < int(v.Length); i++ {
+		v.Keysyms[i] = Keysym(xgb.Get32(buf[b:]))
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for GetKeyboardMapping
+func getKeyboardMappingRequest(c *xgb.Conn, FirstKeycode Keycode, Count byte) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 101 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	buf[b] = byte(FirstKeycode)
+	b += 1
+
+	buf[b] = Count
+	b += 1
+
+	return buf
+}
+
+// Request ChangeKeyboardControl
+// size: xgb.Pad((4 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+type ChangeKeyboardControlCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeKeyboardControl
+func ChangeKeyboardControl(c *xgb.Conn, ValueMask uint32, ValueList []uint32) ChangeKeyboardControlCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeKeyboardControlRequest(c, ValueMask, ValueList), cookie)
+	return ChangeKeyboardControlCookie{cookie}
+}
+
+func ChangeKeyboardControlChecked(c *xgb.Conn, ValueMask uint32, ValueList []uint32) ChangeKeyboardControlCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeKeyboardControlRequest(c, ValueMask, ValueList), cookie)
+	return ChangeKeyboardControlCookie{cookie}
+}
+
+func (cook ChangeKeyboardControlCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeKeyboardControl
+func changeKeyboardControlRequest(c *xgb.Conn, ValueMask uint32, ValueList []uint32) []byte {
+	size := xgb.Pad((4 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 102 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], ValueMask)
+	b += 4
+	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
+		xgb.Put32(buf[b:], ValueList[i])
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request GetKeyboardControl
+// size: 4
+type GetKeyboardControlCookie struct {
+	*xgb.Cookie
+}
+
+func GetKeyboardControl(c *xgb.Conn) GetKeyboardControlCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getKeyboardControlRequest(c), cookie)
+	return GetKeyboardControlCookie{cookie}
+}
+
+func GetKeyboardControlUnchecked(c *xgb.Conn) GetKeyboardControlCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getKeyboardControlRequest(c), cookie)
+	return GetKeyboardControlCookie{cookie}
+}
+
+// Request reply for GetKeyboardControl
+// size: 52
+type GetKeyboardControlReply struct {
+	Sequence         uint16
+	Length           uint32
+	GlobalAutoRepeat byte
+	LedMask          uint32
+	KeyClickPercent  byte
+	BellPercent      byte
+	BellPitch        uint16
+	BellDuration     uint16
+	// padding: 2 bytes
+	AutoRepeats []byte // size: 32
+}
+
+// Waits and reads reply data from request GetKeyboardControl
+func (cook GetKeyboardControlCookie) Reply() (*GetKeyboardControlReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getKeyboardControlReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetKeyboardControl
+func getKeyboardControlReply(buf []byte) *GetKeyboardControlReply {
+	v := new(GetKeyboardControlReply)
+	b := 1 // skip reply determinant
+
+	v.GlobalAutoRepeat = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.LedMask = xgb.Get32(buf[b:])
+	b += 4
+
+	v.KeyClickPercent = buf[b]
+	b += 1
+
+	v.BellPercent = buf[b]
+	b += 1
+
+	v.BellPitch = xgb.Get16(buf[b:])
+	b += 2
+
+	v.BellDuration = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 2 // padding
+
+	v.AutoRepeats = make([]byte, 32)
+	copy(v.AutoRepeats[:32], buf[b:])
+	b += xgb.Pad(int(32))
+
+	return v
+}
+
+// Write request to wire for GetKeyboardControl
+func getKeyboardControlRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 103 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request Bell
+// size: 4
+type BellCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for Bell
+func Bell(c *xgb.Conn, Percent int8) BellCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(bellRequest(c, Percent), cookie)
+	return BellCookie{cookie}
+}
+
+func BellChecked(c *xgb.Conn, Percent int8) BellCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(bellRequest(c, Percent), cookie)
+	return BellCookie{cookie}
+}
+
+func (cook BellCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for Bell
+func bellRequest(c *xgb.Conn, Percent int8) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 104 // request opcode
+	b += 1
+
+	buf[b] = byte(Percent)
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request ChangePointerControl
+// size: 12
+type ChangePointerControlCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangePointerControl
+func ChangePointerControl(c *xgb.Conn, AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration bool, DoThreshold bool) ChangePointerControlCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changePointerControlRequest(c, AccelerationNumerator, AccelerationDenominator, Threshold, DoAcceleration, DoThreshold), cookie)
+	return ChangePointerControlCookie{cookie}
+}
+
+func ChangePointerControlChecked(c *xgb.Conn, AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration bool, DoThreshold bool) ChangePointerControlCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changePointerControlRequest(c, AccelerationNumerator, AccelerationDenominator, Threshold, DoAcceleration, DoThreshold), cookie)
+	return ChangePointerControlCookie{cookie}
+}
+
+func (cook ChangePointerControlCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangePointerControl
+func changePointerControlRequest(c *xgb.Conn, AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration bool, DoThreshold bool) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 105 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(AccelerationNumerator))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(AccelerationDenominator))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Threshold))
+	b += 2
+
+	if DoAcceleration {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	if DoThreshold {
+		buf[b] = 1
+	} else {
+		buf[b] = 0
+	}
+	b += 1
+
+	return buf
+}
+
+// Request GetPointerControl
+// size: 4
+type GetPointerControlCookie struct {
+	*xgb.Cookie
+}
+
+func GetPointerControl(c *xgb.Conn) GetPointerControlCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getPointerControlRequest(c), cookie)
+	return GetPointerControlCookie{cookie}
+}
+
+func GetPointerControlUnchecked(c *xgb.Conn) GetPointerControlCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getPointerControlRequest(c), cookie)
+	return GetPointerControlCookie{cookie}
+}
+
+// Request reply for GetPointerControl
+// size: 32
+type GetPointerControlReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	AccelerationNumerator   uint16
+	AccelerationDenominator uint16
+	Threshold               uint16
+	// padding: 18 bytes
+}
+
+// Waits and reads reply data from request GetPointerControl
+func (cook GetPointerControlCookie) Reply() (*GetPointerControlReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getPointerControlReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetPointerControl
+func getPointerControlReply(buf []byte) *GetPointerControlReply {
+	v := new(GetPointerControlReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.AccelerationNumerator = xgb.Get16(buf[b:])
+	b += 2
+
+	v.AccelerationDenominator = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Threshold = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 18 // padding
+
+	return v
+}
+
+// Write request to wire for GetPointerControl
+func getPointerControlRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 106 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request SetScreenSaver
+// size: 12
+type SetScreenSaverCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetScreenSaver
+func SetScreenSaver(c *xgb.Conn, Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) SetScreenSaverCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setScreenSaverRequest(c, Timeout, Interval, PreferBlanking, AllowExposures), cookie)
+	return SetScreenSaverCookie{cookie}
+}
+
+func SetScreenSaverChecked(c *xgb.Conn, Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) SetScreenSaverCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setScreenSaverRequest(c, Timeout, Interval, PreferBlanking, AllowExposures), cookie)
+	return SetScreenSaverCookie{cookie}
+}
+
+func (cook SetScreenSaverCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetScreenSaver
+func setScreenSaverRequest(c *xgb.Conn, Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) []byte {
+	size := 12
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 107 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Timeout))
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Interval))
+	b += 2
+
+	buf[b] = PreferBlanking
+	b += 1
+
+	buf[b] = AllowExposures
+	b += 1
+
+	return buf
+}
+
+// Request GetScreenSaver
+// size: 4
+type GetScreenSaverCookie struct {
+	*xgb.Cookie
+}
+
+func GetScreenSaver(c *xgb.Conn) GetScreenSaverCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getScreenSaverRequest(c), cookie)
+	return GetScreenSaverCookie{cookie}
+}
+
+func GetScreenSaverUnchecked(c *xgb.Conn) GetScreenSaverCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getScreenSaverRequest(c), cookie)
+	return GetScreenSaverCookie{cookie}
+}
+
+// Request reply for GetScreenSaver
+// size: 32
+type GetScreenSaverReply struct {
+	Sequence uint16
+	Length   uint32
+	// padding: 1 bytes
+	Timeout        uint16
+	Interval       uint16
+	PreferBlanking byte
+	AllowExposures byte
+	// padding: 18 bytes
+}
+
+// Waits and reads reply data from request GetScreenSaver
+func (cook GetScreenSaverCookie) Reply() (*GetScreenSaverReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getScreenSaverReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetScreenSaver
+func getScreenSaverReply(buf []byte) *GetScreenSaverReply {
+	v := new(GetScreenSaverReply)
+	b := 1 // skip reply determinant
+
+	b += 1 // padding
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.Timeout = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Interval = xgb.Get16(buf[b:])
+	b += 2
+
+	v.PreferBlanking = buf[b]
+	b += 1
+
+	v.AllowExposures = buf[b]
+	b += 1
+
+	b += 18 // padding
+
+	return v
+}
+
+// Write request to wire for GetScreenSaver
+func getScreenSaverRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 108 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request ChangeHosts
+// size: xgb.Pad((8 + xgb.Pad((int(AddressLen) * 1))))
+type ChangeHostsCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ChangeHosts
+func ChangeHosts(c *xgb.Conn, Mode byte, Family byte, AddressLen uint16, Address []byte) ChangeHostsCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(changeHostsRequest(c, Mode, Family, AddressLen, Address), cookie)
+	return ChangeHostsCookie{cookie}
+}
+
+func ChangeHostsChecked(c *xgb.Conn, Mode byte, Family byte, AddressLen uint16, Address []byte) ChangeHostsCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(changeHostsRequest(c, Mode, Family, AddressLen, Address), cookie)
+	return ChangeHostsCookie{cookie}
+}
+
+func (cook ChangeHostsCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeHosts
+func changeHostsRequest(c *xgb.Conn, Mode byte, Family byte, AddressLen uint16, Address []byte) []byte {
+	size := xgb.Pad((8 + xgb.Pad((int(AddressLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 109 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	buf[b] = Family
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], AddressLen)
+	b += 2
+
+	copy(buf[b:], Address[:AddressLen])
+	b += xgb.Pad(int(AddressLen))
+
+	return buf
+}
+
+// Request ListHosts
+// size: 4
+type ListHostsCookie struct {
+	*xgb.Cookie
+}
+
+func ListHosts(c *xgb.Conn) ListHostsCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(listHostsRequest(c), cookie)
+	return ListHostsCookie{cookie}
+}
+
+func ListHostsUnchecked(c *xgb.Conn) ListHostsCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(listHostsRequest(c), cookie)
+	return ListHostsCookie{cookie}
+}
+
+// Request reply for ListHosts
+// size: (32 + HostListSize(Hosts))
+type ListHostsReply struct {
+	Sequence uint16
+	Length   uint32
+	Mode     byte
+	HostsLen uint16
+	// padding: 22 bytes
+	Hosts []Host // size: HostListSize(Hosts)
+}
+
+// Waits and reads reply data from request ListHosts
+func (cook ListHostsCookie) Reply() (*ListHostsReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return listHostsReply(buf), nil
+}
+
+// Read reply into structure from buffer for ListHosts
+func listHostsReply(buf []byte) *ListHostsReply {
+	v := new(ListHostsReply)
+	b := 1 // skip reply determinant
+
+	v.Mode = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	v.HostsLen = xgb.Get16(buf[b:])
+	b += 2
+
+	b += 22 // padding
+
+	v.Hosts = make([]Host, v.HostsLen)
+	b += HostReadList(buf[b:], v.Hosts)
+
+	return v
+}
+
+// Write request to wire for ListHosts
+func listHostsRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 110 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request SetAccessControl
+// size: 4
+type SetAccessControlCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetAccessControl
+func SetAccessControl(c *xgb.Conn, Mode byte) SetAccessControlCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setAccessControlRequest(c, Mode), cookie)
+	return SetAccessControlCookie{cookie}
+}
+
+func SetAccessControlChecked(c *xgb.Conn, Mode byte) SetAccessControlCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setAccessControlRequest(c, Mode), cookie)
+	return SetAccessControlCookie{cookie}
+}
+
+func (cook SetAccessControlCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetAccessControl
+func setAccessControlRequest(c *xgb.Conn, Mode byte) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 111 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request SetCloseDownMode
+// size: 4
+type SetCloseDownModeCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for SetCloseDownMode
+func SetCloseDownMode(c *xgb.Conn, Mode byte) SetCloseDownModeCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(setCloseDownModeRequest(c, Mode), cookie)
+	return SetCloseDownModeCookie{cookie}
+}
+
+func SetCloseDownModeChecked(c *xgb.Conn, Mode byte) SetCloseDownModeCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(setCloseDownModeRequest(c, Mode), cookie)
+	return SetCloseDownModeCookie{cookie}
+}
+
+func (cook SetCloseDownModeCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for SetCloseDownMode
+func setCloseDownModeRequest(c *xgb.Conn, Mode byte) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 112 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request KillClient
+// size: 8
+type KillClientCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for KillClient
+func KillClient(c *xgb.Conn, Resource uint32) KillClientCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(killClientRequest(c, Resource), cookie)
+	return KillClientCookie{cookie}
+}
+
+func KillClientChecked(c *xgb.Conn, Resource uint32) KillClientCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(killClientRequest(c, Resource), cookie)
+	return KillClientCookie{cookie}
+}
+
+func (cook KillClientCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for KillClient
+func killClientRequest(c *xgb.Conn, Resource uint32) []byte {
+	size := 8
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 113 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], Resource)
+	b += 4
+
+	return buf
+}
+
+// Request RotateProperties
+// size: xgb.Pad((12 + xgb.Pad((int(AtomsLen) * 4))))
+type RotatePropertiesCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for RotateProperties
+func RotateProperties(c *xgb.Conn, Window Window, AtomsLen uint16, Delta int16, Atoms []Atom) RotatePropertiesCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(rotatePropertiesRequest(c, Window, AtomsLen, Delta, Atoms), cookie)
+	return RotatePropertiesCookie{cookie}
+}
+
+func RotatePropertiesChecked(c *xgb.Conn, Window Window, AtomsLen uint16, Delta int16, Atoms []Atom) RotatePropertiesCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(rotatePropertiesRequest(c, Window, AtomsLen, Delta, Atoms), cookie)
+	return RotatePropertiesCookie{cookie}
+}
+
+func (cook RotatePropertiesCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for RotateProperties
+func rotatePropertiesRequest(c *xgb.Conn, Window Window, AtomsLen uint16, Delta int16, Atoms []Atom) []byte {
+	size := xgb.Pad((12 + xgb.Pad((int(AtomsLen) * 4))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 114 // request opcode
+	b += 1
+
+	b += 1 // padding
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	xgb.Put32(buf[b:], uint32(Window))
+	b += 4
+
+	xgb.Put16(buf[b:], AtomsLen)
+	b += 2
+
+	xgb.Put16(buf[b:], uint16(Delta))
+	b += 2
+
+	for i := 0; i < int(AtomsLen); i++ {
+		xgb.Put32(buf[b:], uint32(Atoms[i]))
+		b += 4
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request ForceScreenSaver
+// size: 4
+type ForceScreenSaverCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for ForceScreenSaver
+func ForceScreenSaver(c *xgb.Conn, Mode byte) ForceScreenSaverCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(forceScreenSaverRequest(c, Mode), cookie)
+	return ForceScreenSaverCookie{cookie}
+}
+
+func ForceScreenSaverChecked(c *xgb.Conn, Mode byte) ForceScreenSaverCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(forceScreenSaverRequest(c, Mode), cookie)
+	return ForceScreenSaverCookie{cookie}
+}
+
+func (cook ForceScreenSaverCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for ForceScreenSaver
+func forceScreenSaverRequest(c *xgb.Conn, Mode byte) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 115 // request opcode
+	b += 1
+
+	buf[b] = Mode
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request SetPointerMapping
+// size: xgb.Pad((4 + xgb.Pad((int(MapLen) * 1))))
+type SetPointerMappingCookie struct {
+	*xgb.Cookie
+}
+
+func SetPointerMapping(c *xgb.Conn, MapLen byte, Map []byte) SetPointerMappingCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(setPointerMappingRequest(c, MapLen, Map), cookie)
+	return SetPointerMappingCookie{cookie}
+}
+
+func SetPointerMappingUnchecked(c *xgb.Conn, MapLen byte, Map []byte) SetPointerMappingCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(setPointerMappingRequest(c, MapLen, Map), cookie)
+	return SetPointerMappingCookie{cookie}
+}
+
+// Request reply for SetPointerMapping
+// size: 8
+type SetPointerMappingReply struct {
+	Sequence uint16
+	Length   uint32
+	Status   byte
+}
+
+// Waits and reads reply data from request SetPointerMapping
+func (cook SetPointerMappingCookie) Reply() (*SetPointerMappingReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return setPointerMappingReply(buf), nil
+}
+
+// Read reply into structure from buffer for SetPointerMapping
+func setPointerMappingReply(buf []byte) *SetPointerMappingReply {
+	v := new(SetPointerMappingReply)
+	b := 1 // skip reply determinant
+
+	v.Status = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	return v
+}
+
+// Write request to wire for SetPointerMapping
+func setPointerMappingRequest(c *xgb.Conn, MapLen byte, Map []byte) []byte {
+	size := xgb.Pad((4 + xgb.Pad((int(MapLen) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 116 // request opcode
+	b += 1
+
+	buf[b] = MapLen
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	copy(buf[b:], Map[:MapLen])
+	b += xgb.Pad(int(MapLen))
+
+	return buf
+}
+
+// Request GetPointerMapping
+// size: 4
+type GetPointerMappingCookie struct {
+	*xgb.Cookie
+}
+
+func GetPointerMapping(c *xgb.Conn) GetPointerMappingCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getPointerMappingRequest(c), cookie)
+	return GetPointerMappingCookie{cookie}
+}
+
+func GetPointerMappingUnchecked(c *xgb.Conn) GetPointerMappingCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getPointerMappingRequest(c), cookie)
+	return GetPointerMappingCookie{cookie}
+}
+
+// Request reply for GetPointerMapping
+// size: (32 + xgb.Pad((int(MapLen) * 1)))
+type GetPointerMappingReply struct {
+	Sequence uint16
+	Length   uint32
+	MapLen   byte
+	// padding: 24 bytes
+	Map []byte // size: xgb.Pad((int(MapLen) * 1))
+}
+
+// Waits and reads reply data from request GetPointerMapping
+func (cook GetPointerMappingCookie) Reply() (*GetPointerMappingReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getPointerMappingReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetPointerMapping
+func getPointerMappingReply(buf []byte) *GetPointerMappingReply {
+	v := new(GetPointerMappingReply)
+	b := 1 // skip reply determinant
+
+	v.MapLen = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	b += 24 // padding
+
+	v.Map = make([]byte, v.MapLen)
+	copy(v.Map[:v.MapLen], buf[b:])
+	b += xgb.Pad(int(v.MapLen))
+
+	return v
+}
+
+// Write request to wire for GetPointerMapping
+func getPointerMappingRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 117 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request SetModifierMapping
+// size: xgb.Pad((4 + xgb.Pad(((int(KeycodesPerModifier) * 8) * 1))))
+type SetModifierMappingCookie struct {
+	*xgb.Cookie
+}
+
+func SetModifierMapping(c *xgb.Conn, KeycodesPerModifier byte, Keycodes []Keycode) SetModifierMappingCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(setModifierMappingRequest(c, KeycodesPerModifier, Keycodes), cookie)
+	return SetModifierMappingCookie{cookie}
+}
+
+func SetModifierMappingUnchecked(c *xgb.Conn, KeycodesPerModifier byte, Keycodes []Keycode) SetModifierMappingCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(setModifierMappingRequest(c, KeycodesPerModifier, Keycodes), cookie)
+	return SetModifierMappingCookie{cookie}
+}
+
+// Request reply for SetModifierMapping
+// size: 8
+type SetModifierMappingReply struct {
+	Sequence uint16
+	Length   uint32
+	Status   byte
+}
+
+// Waits and reads reply data from request SetModifierMapping
+func (cook SetModifierMappingCookie) Reply() (*SetModifierMappingReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return setModifierMappingReply(buf), nil
+}
+
+// Read reply into structure from buffer for SetModifierMapping
+func setModifierMappingReply(buf []byte) *SetModifierMappingReply {
+	v := new(SetModifierMappingReply)
+	b := 1 // skip reply determinant
+
+	v.Status = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	return v
+}
+
+// Write request to wire for SetModifierMapping
+func setModifierMappingRequest(c *xgb.Conn, KeycodesPerModifier byte, Keycodes []Keycode) []byte {
+	size := xgb.Pad((4 + xgb.Pad(((int(KeycodesPerModifier) * 8) * 1))))
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 118 // request opcode
+	b += 1
+
+	buf[b] = KeycodesPerModifier
+	b += 1
+
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	for i := 0; i < int((int(KeycodesPerModifier) * 8)); i++ {
+		buf[b] = byte(Keycodes[i])
+		b += 1
+	}
+	b = xgb.Pad(b)
+
+	return buf
+}
+
+// Request GetModifierMapping
+// size: 4
+type GetModifierMappingCookie struct {
+	*xgb.Cookie
+}
+
+func GetModifierMapping(c *xgb.Conn) GetModifierMappingCookie {
+	cookie := c.NewCookie(true, true)
+	c.NewRequest(getModifierMappingRequest(c), cookie)
+	return GetModifierMappingCookie{cookie}
+}
+
+func GetModifierMappingUnchecked(c *xgb.Conn) GetModifierMappingCookie {
+	cookie := c.NewCookie(false, true)
+	c.NewRequest(getModifierMappingRequest(c), cookie)
+	return GetModifierMappingCookie{cookie}
+}
+
+// Request reply for GetModifierMapping
+// size: (32 + xgb.Pad(((int(KeycodesPerModifier) * 8) * 1)))
+type GetModifierMappingReply struct {
+	Sequence            uint16
+	Length              uint32
+	KeycodesPerModifier byte
+	// padding: 24 bytes
+	Keycodes []Keycode // size: xgb.Pad(((int(KeycodesPerModifier) * 8) * 1))
+}
+
+// Waits and reads reply data from request GetModifierMapping
+func (cook GetModifierMappingCookie) Reply() (*GetModifierMappingReply, error) {
+	buf, err := cook.Cookie.Reply()
+	if err != nil {
+		return nil, err
+	}
+	if buf == nil {
+		return nil, nil
+	}
+	return getModifierMappingReply(buf), nil
+}
+
+// Read reply into structure from buffer for GetModifierMapping
+func getModifierMappingReply(buf []byte) *GetModifierMappingReply {
+	v := new(GetModifierMappingReply)
+	b := 1 // skip reply determinant
+
+	v.KeycodesPerModifier = buf[b]
+	b += 1
+
+	v.Sequence = xgb.Get16(buf[b:])
+	b += 2
+
+	v.Length = xgb.Get32(buf[b:]) // 4-byte units
+	b += 4
+
+	b += 24 // padding
+
+	v.Keycodes = make([]Keycode, (int(v.KeycodesPerModifier) * 8))
+	for i := 0; i < int((int(v.KeycodesPerModifier) * 8)); i++ {
+		v.Keycodes[i] = Keycode(buf[b])
+		b += 1
+	}
+	b = xgb.Pad(b)
+
+	return v
+}
+
+// Write request to wire for GetModifierMapping
+func getModifierMappingRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 119 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
+
+// Request NoOperation
+// size: 4
+type NoOperationCookie struct {
+	*xgb.Cookie
+}
+
+// Write request to wire for NoOperation
+func NoOperation(c *xgb.Conn) NoOperationCookie {
+	cookie := c.NewCookie(false, false)
+	c.NewRequest(noOperationRequest(c), cookie)
+	return NoOperationCookie{cookie}
+}
+
+func NoOperationChecked(c *xgb.Conn) NoOperationCookie {
+	cookie := c.NewCookie(true, false)
+	c.NewRequest(noOperationRequest(c), cookie)
+	return NoOperationCookie{cookie}
+}
+
+func (cook NoOperationCookie) Check() error {
+	return cook.Cookie.Check()
+}
+
+// Write request to wire for NoOperation
+func noOperationRequest(c *xgb.Conn) []byte {
+	size := 4
+	b := 0
+	buf := make([]byte, size)
+
+	buf[b] = 127 // request opcode
+	b += 1
+
+	b += 1                             // padding
+	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+	b += 2
+
+	return buf
+}
diff --git a/nexgb/xproto/xproto_test.go b/nexgb/xproto/xproto_test.go
new file mode 100644
index 0000000..f061198
--- /dev/null
+++ b/nexgb/xproto/xproto_test.go
@@ -0,0 +1,365 @@
+package xproto
+
+/*
+	Tests for XGB.
+
+	These tests only test the core X protocol at the moment. It isn't even
+	close to complete coverage (and probably never will be), but it does test
+	a number of different corners: requests with no replies, requests without
+	replies, checked (i.e., synchronous) errors, unchecked (i.e., asynchronous)
+	errors, and sequence number wrapping.
+
+	There are also a couple of benchmarks that show the difference between
+	correctly issuing lots of requests and gathering replies and
+	incorrectly doing the same. (This particular difference is one of the
+	claimed advantages of the XCB, and therefore XGB, family.
+*/
+
+import (
+	"fmt"
+	"log"
+	"math/rand"
+	"testing"
+	"time"
+
+	"github.com/BurntSushi/xgb"
+)
+
+// The X connection used throughout testing.
+var X *xgb.Conn
+
+// init initializes the X connection, seeds the RNG and starts waiting
+// for events.
+func init() {
+	var err error
+
+	X, err = xgb.NewConn()
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	rand.Seed(time.Now().UnixNano())
+
+	go grabEvents()
+}
+
+/******************************************************************************/
+// Tests
+/******************************************************************************/
+
+// TestSynchronousError purposefully causes a BadWindow error in a
+// MapWindow request, and checks it synchronously.
+func TestSynchronousError(t *testing.T) {
+	err := MapWindowChecked(X, 0).Check() // resource 0 is always invalid
+	if err == nil {
+		t.Fatalf("MapWindow: A MapWindow request that should return an " +
+			"error has returned a nil error.")
+	}
+	verifyMapWindowError(t, err)
+}
+
+// TestAsynchronousError does the same thing as TestSynchronousError, but
+// grabs the error asynchronously instead.
+func TestAsynchronousError(t *testing.T) {
+	MapWindow(X, 0) // resource id 0 is always invalid
+
+	evOrErr := waitForEvent(t, 5)
+	if evOrErr.ev != nil {
+		t.Fatalf("After issuing an erroneous MapWindow request, we have "+
+			"received an event rather than an error: %s", evOrErr.ev)
+	}
+	verifyMapWindowError(t, evOrErr.err)
+}
+
+// TestCookieBuffer issues (2^16) + n requets *without* replies to guarantee
+// that the sequence number wraps and that the cookie buffer will have to
+// flush itself (since there are no replies coming in to flush it).
+// And just like TestSequenceWrap, we issue another request with a reply
+// at the end to make sure XGB is still working properly.
+func TestCookieBuffer(t *testing.T) {
+	n := (1 << 16) + 10
+	for i := 0; i < n; i++ {
+		NoOperation(X)
+	}
+	TestProperty(t)
+}
+
+// TestSequenceWrap issues (2^16) + n requests w/ replies to guarantee that the 
+// sequence number (which is a 16 bit integer) will wrap. It then issues one 
+// final request to ensure things still work properly.
+func TestSequenceWrap(t *testing.T) {
+	n := (1 << 16) + 10
+	for i := 0; i < n; i++ {
+		_, err := InternAtom(X, false, 5, "RANDO").Reply()
+		if err != nil {
+			t.Fatalf("InternAtom: %s", err)
+		}
+	}
+	TestProperty(t)
+}
+
+// TestProperty tests whether a random value can be set and read.
+func TestProperty(t *testing.T) {
+	propName := randString(20) // whatevs
+	writeVal := randString(20)
+	readVal, err := changeAndGetProp(propName, writeVal)
+	if err != nil {
+		t.Error(err)
+	}
+
+	if readVal != writeVal {
+		t.Errorf("The value written, '%s', is not the same as the "+
+			"value read '%s'.", writeVal, readVal)
+	}
+}
+
+// TestWindowEvents creates a window, maps it, listens for configure notify
+// events, issues a configure request, and checks for the appropriate
+// configure notify event.
+// This probably violates the notion of "test one thing and test it well,"
+// but testing X stuff is unique since it involves so much state.
+// Each request is checked to make sure there are no errors returned. If there
+// is an error, the test is failed.
+// You may see a window appear quickly and then disappear. Do not be alarmed :P
+// It's possible that this test will yield a false negative because we cannot
+// control our environment. That is, the window manager could override the
+// placement set. However, we set override redirect on the window, so the
+// window manager *shouldn't* touch our window if it is well-behaved.
+func TestWindowEvents(t *testing.T) {
+	// The geometry to set the window.
+	gx, gy, gw, gh := 200, 400, 1000, 300
+
+	wid, err := NewWindowId(X)
+	if err != nil {
+		t.Fatalf("NewId: %s", err)
+	}
+
+	screen := Setup(X).DefaultScreen(X) // alias
+	err = CreateWindowChecked(X, screen.RootDepth, wid, screen.Root,
+		0, 0, 500, 500, 0,
+		WindowClassInputOutput, screen.RootVisual,
+		CwBackPixel|CwOverrideRedirect, []uint32{0xffffffff, 1}).Check()
+	if err != nil {
+		t.Fatalf("CreateWindow: %s", err)
+	}
+
+	err = MapWindowChecked(X, wid).Check()
+	if err != nil {
+		t.Fatalf("MapWindow: %s", err)
+	}
+
+	// We don't listen in the CreateWindow request so that we don't get
+	// a MapNotify event.
+	err = ChangeWindowAttributesChecked(X, wid,
+		CwEventMask, []uint32{EventMaskStructureNotify}).Check()
+	if err != nil {
+		t.Fatalf("ChangeWindowAttributes: %s", err)
+	}
+
+	err = ConfigureWindowChecked(X, wid,
+		ConfigWindowX|ConfigWindowY|
+			ConfigWindowWidth|ConfigWindowHeight,
+		[]uint32{uint32(gx), uint32(gy), uint32(gw), uint32(gh)}).Check()
+	if err != nil {
+		t.Fatalf("ConfigureWindow: %s", err)
+	}
+
+	TestProperty(t)
+
+	evOrErr := waitForEvent(t, 5)
+	switch event := evOrErr.ev.(type) {
+	case ConfigureNotifyEvent:
+		if event.X != int16(gx) {
+			t.Fatalf("x was set to %d but ConfigureNotify reports %d",
+				gx, event.X)
+		}
+		if event.Y != int16(gy) {
+			t.Fatalf("y was set to %d but ConfigureNotify reports %d",
+				gy, event.Y)
+		}
+		if event.Width != uint16(gw) {
+			t.Fatalf("width was set to %d but ConfigureNotify reports %d",
+				gw, event.Width)
+		}
+		if event.Height != uint16(gh) {
+			t.Fatalf("height was set to %d but ConfigureNotify reports %d",
+				gh, event.Height)
+		}
+	default:
+		t.Fatalf("Expected a ConfigureNotifyEvent but got %T instead.", event)
+	}
+
+	// Okay, clean up!
+	err = ChangeWindowAttributesChecked(X, wid,
+		CwEventMask, []uint32{0}).Check()
+	if err != nil {
+		t.Fatalf("ChangeWindowAttributes: %s", err)
+	}
+
+	err = DestroyWindowChecked(X, wid).Check()
+	if err != nil {
+		t.Fatalf("DestroyWindow: %s", err)
+	}
+}
+
+/******************************************************************************/
+// Benchmarks
+/******************************************************************************/
+
+// BenchmarkInternAtomsGood shows how many requests with replies
+// *should* be sent and gathered from the server. Namely, send as many
+// requests as you can at once, then go back and gather up all the replies.
+// More importantly, this approach can exploit parallelism when
+// GOMAXPROCS > 1.
+// Run with `go test -run 'nomatch' -bench '.*' -cpu 1,2,6` if you have
+// multiple cores to see the improvement that parallelism brings.
+func BenchmarkInternAtomsGood(b *testing.B) {
+	b.StopTimer()
+	names := seqNames(b.N)
+
+	b.StartTimer()
+	cookies := make([]InternAtomCookie, b.N)
+	for i := 0; i < b.N; i++ {
+		cookies[i] = InternAtom(X, false, uint16(len(names[i])), names[i])
+	}
+	for _, cookie := range cookies {
+		cookie.Reply()
+	}
+}
+
+// BenchmarkInternAtomsBad shows how *not* to issue a lot of requests with
+// replies. Namely, each subsequent request isn't issued *until* the last
+// reply is made. This implies a round trip to the X server for every
+// iteration.
+func BenchmarkInternAtomsPoor(b *testing.B) {
+	b.StopTimer()
+	names := seqNames(b.N)
+
+	b.StartTimer()
+	for i := 0; i < b.N; i++ {
+		InternAtom(X, false, uint16(len(names[i])), names[i]).Reply()
+	}
+}
+
+/******************************************************************************/
+// Helper functions
+/******************************************************************************/
+
+// changeAndGetProp sets property 'prop' with value 'val'.
+// It then gets the value of that property and returns it.
+// (It's used to check that the 'val' going in is the same 'val' going out.)
+// It tests both requests with and without replies (GetProperty and
+// ChangeProperty respectively.)
+func changeAndGetProp(prop, val string) (string, error) {
+	setup := Setup(X)
+	root := setup.DefaultScreen(X).Root
+
+	propAtom, err := InternAtom(X, false, uint16(len(prop)), prop).Reply()
+	if err != nil {
+		return "", fmt.Errorf("InternAtom: %s", err)
+	}
+
+	typName := "UTF8_STRING"
+	typAtom, err := InternAtom(X, false, uint16(len(typName)), typName).Reply()
+	if err != nil {
+		return "", fmt.Errorf("InternAtom: %s", err)
+	}
+
+	err = ChangePropertyChecked(X, PropModeReplace, root, propAtom.Atom,
+		typAtom.Atom, 8, uint32(len(val)), []byte(val)).Check()
+	if err != nil {
+		return "", fmt.Errorf("ChangeProperty: %s", err)
+	}
+
+	reply, err := GetProperty(X, false, root, propAtom.Atom,
+		GetPropertyTypeAny, 0, (1<<32)-1).Reply()
+	if err != nil {
+		return "", fmt.Errorf("GetProperty: %s", err)
+	}
+	if reply.Format != 8 {
+		return "", fmt.Errorf("Property reply format is %d but it should be 8.",
+			reply.Format)
+	}
+
+	return string(reply.Value), nil
+}
+
+// verifyMapWindowError takes an error that is returned with an invalid
+// MapWindow request with a window Id of 0 and makes sure the error is the
+// right type and contains the correct values.
+func verifyMapWindowError(t *testing.T, err error) {
+	switch e := err.(type) {
+	case WindowError:
+		if e.BadValue != 0 {
+			t.Fatalf("WindowError should report a bad value of 0 but "+
+				"it reports %d instead.", e.BadValue)
+		}
+		if e.MajorOpcode != 8 {
+			t.Fatalf("WindowError should report a major opcode of 8 "+
+				"(which is a MapWindow request), but it reports %d instead.",
+				e.MajorOpcode)
+		}
+	default:
+		t.Fatalf("Expected a WindowError but got %T instead.", e)
+	}
+}
+
+// randString generates a random string of length n.
+func randString(n int) string {
+	byts := make([]byte, n)
+	for i := 0; i < n; i++ {
+		rando := rand.Intn(53)
+		switch {
+		case rando <= 25:
+			byts[i] = byte(65 + rando)
+		case rando <= 51:
+			byts[i] = byte(97 + rando - 26)
+		default:
+			byts[i] = ' '
+		}
+	}
+	return string(byts)
+}
+
+// seqNames creates a slice of NAME0, NAME1, ..., NAMEN.
+func seqNames(n int) []string {
+	names := make([]string, n)
+	for i := range names {
+		names[i] = fmt.Sprintf("NAME%d", i)
+	}
+	return names
+}
+
+// evErr represents a value that is either an event or an error.
+type evErr struct {
+	ev  xgb.Event
+	err xgb.Error
+}
+
+// channel used to pass evErrs.
+var evOrErrChan = make(chan evErr, 0)
+
+// grabEvents is a goroutine that reads events off the wire.
+// We used this instead of WaitForEvent directly in our tests so that
+// we can timeout and fail a test.
+func grabEvents() {
+	for {
+		ev, err := X.WaitForEvent()
+		evOrErrChan <- evErr{ev, err}
+	}
+}
+
+// waitForEvent asks the evOrErrChan channel for an event.
+// If it doesn't get an event in 'n' seconds, the current test is failed.
+func waitForEvent(t *testing.T, n int) evErr {
+	var evOrErr evErr
+
+	select {
+	case evOrErr = <-evOrErrChan:
+	case <-time.After(time.Second * 5):
+		t.Fatalf("After waiting 5 seconds for an event or an error, " +
+			"we have timed out.")
+	}
+
+	return evOrErr
+}
-- 
cgit v1.2.3-70-g09d2