github.com/BurntSushi/xgb@v0.0.0-20210121224620-deaf085860bc/xproto/xproto.go (about)

     1  // Package xproto is the X client API for the  extension.
     2  package xproto
     3  
     4  // This file is automatically generated from xproto.xml. Edit at your peril!
     5  
     6  import (
     7  	"github.com/BurntSushi/xgb"
     8  )
     9  
    10  // Setup parses the setup bytes retrieved when
    11  // connecting into a SetupInfo struct.
    12  func Setup(c *xgb.Conn) *SetupInfo {
    13  	setup := new(SetupInfo)
    14  	SetupInfoRead(c.SetupBytes, setup)
    15  	return setup
    16  }
    17  
    18  // DefaultScreen gets the default screen info from SetupInfo.
    19  func (s *SetupInfo) DefaultScreen(c *xgb.Conn) *ScreenInfo {
    20  	return &s.Roots[c.DefaultScreen]
    21  }
    22  
    23  // BadAccess is the error number for a BadAccess.
    24  const BadAccess = 10
    25  
    26  type AccessError RequestError
    27  
    28  // AccessErrorNew constructs a AccessError value that implements xgb.Error from a byte slice.
    29  func AccessErrorNew(buf []byte) xgb.Error {
    30  	v := AccessError(RequestErrorNew(buf).(RequestError))
    31  	v.NiceName = "Access"
    32  	return v
    33  }
    34  
    35  // SequenceId returns the sequence id attached to the BadAccess error.
    36  // This is mostly used internally.
    37  func (err AccessError) SequenceId() uint16 {
    38  	return err.Sequence
    39  }
    40  
    41  // BadId returns the 'BadValue' number if one exists for the BadAccess error. If no bad value exists, 0 is returned.
    42  func (err AccessError) BadId() uint32 {
    43  	return err.BadValue
    44  }
    45  
    46  // Error returns a rudimentary string representation of the BadAccess error.
    47  func (err AccessError) Error() string {
    48  	fieldVals := make([]string, 0, 4)
    49  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
    50  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
    51  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
    52  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
    53  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
    54  	return "BadAccess {" + xgb.StringsJoin(fieldVals, ", ") + "}"
    55  }
    56  
    57  func init() {
    58  	xgb.NewErrorFuncs[10] = AccessErrorNew
    59  }
    60  
    61  const (
    62  	AccessControlDisable = 0
    63  	AccessControlEnable  = 1
    64  )
    65  
    66  // BadAlloc is the error number for a BadAlloc.
    67  const BadAlloc = 11
    68  
    69  type AllocError RequestError
    70  
    71  // AllocErrorNew constructs a AllocError value that implements xgb.Error from a byte slice.
    72  func AllocErrorNew(buf []byte) xgb.Error {
    73  	v := AllocError(RequestErrorNew(buf).(RequestError))
    74  	v.NiceName = "Alloc"
    75  	return v
    76  }
    77  
    78  // SequenceId returns the sequence id attached to the BadAlloc error.
    79  // This is mostly used internally.
    80  func (err AllocError) SequenceId() uint16 {
    81  	return err.Sequence
    82  }
    83  
    84  // BadId returns the 'BadValue' number if one exists for the BadAlloc error. If no bad value exists, 0 is returned.
    85  func (err AllocError) BadId() uint32 {
    86  	return err.BadValue
    87  }
    88  
    89  // Error returns a rudimentary string representation of the BadAlloc error.
    90  func (err AllocError) Error() string {
    91  	fieldVals := make([]string, 0, 4)
    92  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
    93  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
    94  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
    95  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
    96  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
    97  	return "BadAlloc {" + xgb.StringsJoin(fieldVals, ", ") + "}"
    98  }
    99  
   100  func init() {
   101  	xgb.NewErrorFuncs[11] = AllocErrorNew
   102  }
   103  
   104  const (
   105  	AllowAsyncPointer   = 0
   106  	AllowSyncPointer    = 1
   107  	AllowReplayPointer  = 2
   108  	AllowAsyncKeyboard  = 3
   109  	AllowSyncKeyboard   = 4
   110  	AllowReplayKeyboard = 5
   111  	AllowAsyncBoth      = 6
   112  	AllowSyncBoth       = 7
   113  )
   114  
   115  type Arc struct {
   116  	X      int16
   117  	Y      int16
   118  	Width  uint16
   119  	Height uint16
   120  	Angle1 int16
   121  	Angle2 int16
   122  }
   123  
   124  // ArcRead reads a byte slice into a Arc value.
   125  func ArcRead(buf []byte, v *Arc) int {
   126  	b := 0
   127  
   128  	v.X = int16(xgb.Get16(buf[b:]))
   129  	b += 2
   130  
   131  	v.Y = int16(xgb.Get16(buf[b:]))
   132  	b += 2
   133  
   134  	v.Width = xgb.Get16(buf[b:])
   135  	b += 2
   136  
   137  	v.Height = xgb.Get16(buf[b:])
   138  	b += 2
   139  
   140  	v.Angle1 = int16(xgb.Get16(buf[b:]))
   141  	b += 2
   142  
   143  	v.Angle2 = int16(xgb.Get16(buf[b:]))
   144  	b += 2
   145  
   146  	return b
   147  }
   148  
   149  // ArcReadList reads a byte slice into a list of Arc values.
   150  func ArcReadList(buf []byte, dest []Arc) int {
   151  	b := 0
   152  	for i := 0; i < len(dest); i++ {
   153  		dest[i] = Arc{}
   154  		b += ArcRead(buf[b:], &dest[i])
   155  	}
   156  	return xgb.Pad(b)
   157  }
   158  
   159  // Bytes writes a Arc value to a byte slice.
   160  func (v Arc) Bytes() []byte {
   161  	buf := make([]byte, 12)
   162  	b := 0
   163  
   164  	xgb.Put16(buf[b:], uint16(v.X))
   165  	b += 2
   166  
   167  	xgb.Put16(buf[b:], uint16(v.Y))
   168  	b += 2
   169  
   170  	xgb.Put16(buf[b:], v.Width)
   171  	b += 2
   172  
   173  	xgb.Put16(buf[b:], v.Height)
   174  	b += 2
   175  
   176  	xgb.Put16(buf[b:], uint16(v.Angle1))
   177  	b += 2
   178  
   179  	xgb.Put16(buf[b:], uint16(v.Angle2))
   180  	b += 2
   181  
   182  	return buf[:b]
   183  }
   184  
   185  // ArcListBytes writes a list of Arc values to a byte slice.
   186  func ArcListBytes(buf []byte, list []Arc) int {
   187  	b := 0
   188  	var structBytes []byte
   189  	for _, item := range list {
   190  		structBytes = item.Bytes()
   191  		copy(buf[b:], structBytes)
   192  		b += len(structBytes)
   193  	}
   194  	return xgb.Pad(b)
   195  }
   196  
   197  const (
   198  	ArcModeChord    = 0
   199  	ArcModePieSlice = 1
   200  )
   201  
   202  type Atom uint32
   203  
   204  func NewAtomId(c *xgb.Conn) (Atom, error) {
   205  	id, err := c.NewId()
   206  	if err != nil {
   207  		return 0, err
   208  	}
   209  	return Atom(id), nil
   210  }
   211  
   212  const (
   213  	AtomNone               = 0
   214  	AtomAny                = 0
   215  	AtomPrimary            = 1
   216  	AtomSecondary          = 2
   217  	AtomArc                = 3
   218  	AtomAtom               = 4
   219  	AtomBitmap             = 5
   220  	AtomCardinal           = 6
   221  	AtomColormap           = 7
   222  	AtomCursor             = 8
   223  	AtomCutBuffer0         = 9
   224  	AtomCutBuffer1         = 10
   225  	AtomCutBuffer2         = 11
   226  	AtomCutBuffer3         = 12
   227  	AtomCutBuffer4         = 13
   228  	AtomCutBuffer5         = 14
   229  	AtomCutBuffer6         = 15
   230  	AtomCutBuffer7         = 16
   231  	AtomDrawable           = 17
   232  	AtomFont               = 18
   233  	AtomInteger            = 19
   234  	AtomPixmap             = 20
   235  	AtomPoint              = 21
   236  	AtomRectangle          = 22
   237  	AtomResourceManager    = 23
   238  	AtomRgbColorMap        = 24
   239  	AtomRgbBestMap         = 25
   240  	AtomRgbBlueMap         = 26
   241  	AtomRgbDefaultMap      = 27
   242  	AtomRgbGrayMap         = 28
   243  	AtomRgbGreenMap        = 29
   244  	AtomRgbRedMap          = 30
   245  	AtomString             = 31
   246  	AtomVisualid           = 32
   247  	AtomWindow             = 33
   248  	AtomWmCommand          = 34
   249  	AtomWmHints            = 35
   250  	AtomWmClientMachine    = 36
   251  	AtomWmIconName         = 37
   252  	AtomWmIconSize         = 38
   253  	AtomWmName             = 39
   254  	AtomWmNormalHints      = 40
   255  	AtomWmSizeHints        = 41
   256  	AtomWmZoomHints        = 42
   257  	AtomMinSpace           = 43
   258  	AtomNormSpace          = 44
   259  	AtomMaxSpace           = 45
   260  	AtomEndSpace           = 46
   261  	AtomSuperscriptX       = 47
   262  	AtomSuperscriptY       = 48
   263  	AtomSubscriptX         = 49
   264  	AtomSubscriptY         = 50
   265  	AtomUnderlinePosition  = 51
   266  	AtomUnderlineThickness = 52
   267  	AtomStrikeoutAscent    = 53
   268  	AtomStrikeoutDescent   = 54
   269  	AtomItalicAngle        = 55
   270  	AtomXHeight            = 56
   271  	AtomQuadWidth          = 57
   272  	AtomWeight             = 58
   273  	AtomPointSize          = 59
   274  	AtomResolution         = 60
   275  	AtomCopyright          = 61
   276  	AtomNotice             = 62
   277  	AtomFontName           = 63
   278  	AtomFamilyName         = 64
   279  	AtomFullName           = 65
   280  	AtomCapHeight          = 66
   281  	AtomWmClass            = 67
   282  	AtomWmTransientFor     = 68
   283  )
   284  
   285  // BadAtom is the error number for a BadAtom.
   286  const BadAtom = 5
   287  
   288  type AtomError ValueError
   289  
   290  // AtomErrorNew constructs a AtomError value that implements xgb.Error from a byte slice.
   291  func AtomErrorNew(buf []byte) xgb.Error {
   292  	v := AtomError(ValueErrorNew(buf).(ValueError))
   293  	v.NiceName = "Atom"
   294  	return v
   295  }
   296  
   297  // SequenceId returns the sequence id attached to the BadAtom error.
   298  // This is mostly used internally.
   299  func (err AtomError) SequenceId() uint16 {
   300  	return err.Sequence
   301  }
   302  
   303  // BadId returns the 'BadValue' number if one exists for the BadAtom error. If no bad value exists, 0 is returned.
   304  func (err AtomError) BadId() uint32 {
   305  	return err.BadValue
   306  }
   307  
   308  // Error returns a rudimentary string representation of the BadAtom error.
   309  func (err AtomError) Error() string {
   310  	fieldVals := make([]string, 0, 4)
   311  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
   312  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
   313  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
   314  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
   315  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
   316  	return "BadAtom {" + xgb.StringsJoin(fieldVals, ", ") + "}"
   317  }
   318  
   319  func init() {
   320  	xgb.NewErrorFuncs[5] = AtomErrorNew
   321  }
   322  
   323  const (
   324  	AutoRepeatModeOff     = 0
   325  	AutoRepeatModeOn      = 1
   326  	AutoRepeatModeDefault = 2
   327  )
   328  
   329  const (
   330  	BackPixmapNone           = 0
   331  	BackPixmapParentRelative = 1
   332  )
   333  
   334  const (
   335  	BackingStoreNotUseful  = 0
   336  	BackingStoreWhenMapped = 1
   337  	BackingStoreAlways     = 2
   338  )
   339  
   340  const (
   341  	BlankingNotPreferred = 0
   342  	BlankingPreferred    = 1
   343  	BlankingDefault      = 2
   344  )
   345  
   346  type Button byte
   347  
   348  const (
   349  	ButtonIndexAny = 0
   350  	ButtonIndex1   = 1
   351  	ButtonIndex2   = 2
   352  	ButtonIndex3   = 3
   353  	ButtonIndex4   = 4
   354  	ButtonIndex5   = 5
   355  )
   356  
   357  const (
   358  	ButtonMask1   = 256
   359  	ButtonMask2   = 512
   360  	ButtonMask3   = 1024
   361  	ButtonMask4   = 2048
   362  	ButtonMask5   = 4096
   363  	ButtonMaskAny = 32768
   364  )
   365  
   366  // ButtonPress is the event number for a ButtonPressEvent.
   367  const ButtonPress = 4
   368  
   369  type ButtonPressEvent struct {
   370  	Sequence   uint16
   371  	Detail     Button
   372  	Time       Timestamp
   373  	Root       Window
   374  	Event      Window
   375  	Child      Window
   376  	RootX      int16
   377  	RootY      int16
   378  	EventX     int16
   379  	EventY     int16
   380  	State      uint16
   381  	SameScreen bool
   382  	// padding: 1 bytes
   383  }
   384  
   385  // ButtonPressEventNew constructs a ButtonPressEvent value that implements xgb.Event from a byte slice.
   386  func ButtonPressEventNew(buf []byte) xgb.Event {
   387  	v := ButtonPressEvent{}
   388  	b := 1 // don't read event number
   389  
   390  	v.Detail = Button(buf[b])
   391  	b += 1
   392  
   393  	v.Sequence = xgb.Get16(buf[b:])
   394  	b += 2
   395  
   396  	v.Time = Timestamp(xgb.Get32(buf[b:]))
   397  	b += 4
   398  
   399  	v.Root = Window(xgb.Get32(buf[b:]))
   400  	b += 4
   401  
   402  	v.Event = Window(xgb.Get32(buf[b:]))
   403  	b += 4
   404  
   405  	v.Child = Window(xgb.Get32(buf[b:]))
   406  	b += 4
   407  
   408  	v.RootX = int16(xgb.Get16(buf[b:]))
   409  	b += 2
   410  
   411  	v.RootY = int16(xgb.Get16(buf[b:]))
   412  	b += 2
   413  
   414  	v.EventX = int16(xgb.Get16(buf[b:]))
   415  	b += 2
   416  
   417  	v.EventY = int16(xgb.Get16(buf[b:]))
   418  	b += 2
   419  
   420  	v.State = xgb.Get16(buf[b:])
   421  	b += 2
   422  
   423  	if buf[b] == 1 {
   424  		v.SameScreen = true
   425  	} else {
   426  		v.SameScreen = false
   427  	}
   428  	b += 1
   429  
   430  	b += 1 // padding
   431  
   432  	return v
   433  }
   434  
   435  // Bytes writes a ButtonPressEvent value to a byte slice.
   436  func (v ButtonPressEvent) Bytes() []byte {
   437  	buf := make([]byte, 32)
   438  	b := 0
   439  
   440  	// write event number
   441  	buf[b] = 4
   442  	b += 1
   443  
   444  	buf[b] = byte(v.Detail)
   445  	b += 1
   446  
   447  	b += 2 // skip sequence number
   448  
   449  	xgb.Put32(buf[b:], uint32(v.Time))
   450  	b += 4
   451  
   452  	xgb.Put32(buf[b:], uint32(v.Root))
   453  	b += 4
   454  
   455  	xgb.Put32(buf[b:], uint32(v.Event))
   456  	b += 4
   457  
   458  	xgb.Put32(buf[b:], uint32(v.Child))
   459  	b += 4
   460  
   461  	xgb.Put16(buf[b:], uint16(v.RootX))
   462  	b += 2
   463  
   464  	xgb.Put16(buf[b:], uint16(v.RootY))
   465  	b += 2
   466  
   467  	xgb.Put16(buf[b:], uint16(v.EventX))
   468  	b += 2
   469  
   470  	xgb.Put16(buf[b:], uint16(v.EventY))
   471  	b += 2
   472  
   473  	xgb.Put16(buf[b:], v.State)
   474  	b += 2
   475  
   476  	if v.SameScreen {
   477  		buf[b] = 1
   478  	} else {
   479  		buf[b] = 0
   480  	}
   481  	b += 1
   482  
   483  	b += 1 // padding
   484  
   485  	return buf
   486  }
   487  
   488  // SequenceId returns the sequence id attached to the ButtonPress event.
   489  // Events without a sequence number (KeymapNotify) return 0.
   490  // This is mostly used internally.
   491  func (v ButtonPressEvent) SequenceId() uint16 {
   492  	return v.Sequence
   493  }
   494  
   495  // String is a rudimentary string representation of ButtonPressEvent.
   496  func (v ButtonPressEvent) String() string {
   497  	fieldVals := make([]string, 0, 12)
   498  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
   499  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
   500  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
   501  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
   502  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
   503  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
   504  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
   505  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
   506  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
   507  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
   508  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
   509  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
   510  	return "ButtonPress {" + xgb.StringsJoin(fieldVals, ", ") + "}"
   511  }
   512  
   513  func init() {
   514  	xgb.NewEventFuncs[4] = ButtonPressEventNew
   515  }
   516  
   517  // ButtonRelease is the event number for a ButtonReleaseEvent.
   518  const ButtonRelease = 5
   519  
   520  type ButtonReleaseEvent ButtonPressEvent
   521  
   522  // ButtonReleaseEventNew constructs a ButtonReleaseEvent value that implements xgb.Event from a byte slice.
   523  func ButtonReleaseEventNew(buf []byte) xgb.Event {
   524  	return ButtonReleaseEvent(ButtonPressEventNew(buf).(ButtonPressEvent))
   525  }
   526  
   527  // Bytes writes a ButtonReleaseEvent value to a byte slice.
   528  func (v ButtonReleaseEvent) Bytes() []byte {
   529  	return ButtonPressEvent(v).Bytes()
   530  }
   531  
   532  // SequenceId returns the sequence id attached to the ButtonRelease event.
   533  // Events without a sequence number (KeymapNotify) return 0.
   534  // This is mostly used internally.
   535  func (v ButtonReleaseEvent) SequenceId() uint16 {
   536  	return v.Sequence
   537  }
   538  
   539  func (v ButtonReleaseEvent) String() string {
   540  	fieldVals := make([]string, 0, 12)
   541  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
   542  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
   543  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
   544  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
   545  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
   546  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
   547  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
   548  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
   549  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
   550  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
   551  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
   552  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
   553  	return "ButtonRelease {" + xgb.StringsJoin(fieldVals, ", ") + "}"
   554  }
   555  
   556  func init() {
   557  	xgb.NewEventFuncs[5] = ButtonReleaseEventNew
   558  }
   559  
   560  const (
   561  	CapStyleNotLast    = 0
   562  	CapStyleButt       = 1
   563  	CapStyleRound      = 2
   564  	CapStyleProjecting = 3
   565  )
   566  
   567  type Char2b struct {
   568  	Byte1 byte
   569  	Byte2 byte
   570  }
   571  
   572  // Char2bRead reads a byte slice into a Char2b value.
   573  func Char2bRead(buf []byte, v *Char2b) int {
   574  	b := 0
   575  
   576  	v.Byte1 = buf[b]
   577  	b += 1
   578  
   579  	v.Byte2 = buf[b]
   580  	b += 1
   581  
   582  	return b
   583  }
   584  
   585  // Char2bReadList reads a byte slice into a list of Char2b values.
   586  func Char2bReadList(buf []byte, dest []Char2b) int {
   587  	b := 0
   588  	for i := 0; i < len(dest); i++ {
   589  		dest[i] = Char2b{}
   590  		b += Char2bRead(buf[b:], &dest[i])
   591  	}
   592  	return xgb.Pad(b)
   593  }
   594  
   595  // Bytes writes a Char2b value to a byte slice.
   596  func (v Char2b) Bytes() []byte {
   597  	buf := make([]byte, 2)
   598  	b := 0
   599  
   600  	buf[b] = v.Byte1
   601  	b += 1
   602  
   603  	buf[b] = v.Byte2
   604  	b += 1
   605  
   606  	return buf[:b]
   607  }
   608  
   609  // Char2bListBytes writes a list of Char2b values to a byte slice.
   610  func Char2bListBytes(buf []byte, list []Char2b) int {
   611  	b := 0
   612  	var structBytes []byte
   613  	for _, item := range list {
   614  		structBytes = item.Bytes()
   615  		copy(buf[b:], structBytes)
   616  		b += len(structBytes)
   617  	}
   618  	return xgb.Pad(b)
   619  }
   620  
   621  type Charinfo struct {
   622  	LeftSideBearing  int16
   623  	RightSideBearing int16
   624  	CharacterWidth   int16
   625  	Ascent           int16
   626  	Descent          int16
   627  	Attributes       uint16
   628  }
   629  
   630  // CharinfoRead reads a byte slice into a Charinfo value.
   631  func CharinfoRead(buf []byte, v *Charinfo) int {
   632  	b := 0
   633  
   634  	v.LeftSideBearing = int16(xgb.Get16(buf[b:]))
   635  	b += 2
   636  
   637  	v.RightSideBearing = int16(xgb.Get16(buf[b:]))
   638  	b += 2
   639  
   640  	v.CharacterWidth = int16(xgb.Get16(buf[b:]))
   641  	b += 2
   642  
   643  	v.Ascent = int16(xgb.Get16(buf[b:]))
   644  	b += 2
   645  
   646  	v.Descent = int16(xgb.Get16(buf[b:]))
   647  	b += 2
   648  
   649  	v.Attributes = xgb.Get16(buf[b:])
   650  	b += 2
   651  
   652  	return b
   653  }
   654  
   655  // CharinfoReadList reads a byte slice into a list of Charinfo values.
   656  func CharinfoReadList(buf []byte, dest []Charinfo) int {
   657  	b := 0
   658  	for i := 0; i < len(dest); i++ {
   659  		dest[i] = Charinfo{}
   660  		b += CharinfoRead(buf[b:], &dest[i])
   661  	}
   662  	return xgb.Pad(b)
   663  }
   664  
   665  // Bytes writes a Charinfo value to a byte slice.
   666  func (v Charinfo) Bytes() []byte {
   667  	buf := make([]byte, 12)
   668  	b := 0
   669  
   670  	xgb.Put16(buf[b:], uint16(v.LeftSideBearing))
   671  	b += 2
   672  
   673  	xgb.Put16(buf[b:], uint16(v.RightSideBearing))
   674  	b += 2
   675  
   676  	xgb.Put16(buf[b:], uint16(v.CharacterWidth))
   677  	b += 2
   678  
   679  	xgb.Put16(buf[b:], uint16(v.Ascent))
   680  	b += 2
   681  
   682  	xgb.Put16(buf[b:], uint16(v.Descent))
   683  	b += 2
   684  
   685  	xgb.Put16(buf[b:], v.Attributes)
   686  	b += 2
   687  
   688  	return buf[:b]
   689  }
   690  
   691  // CharinfoListBytes writes a list of Charinfo values to a byte slice.
   692  func CharinfoListBytes(buf []byte, list []Charinfo) int {
   693  	b := 0
   694  	var structBytes []byte
   695  	for _, item := range list {
   696  		structBytes = item.Bytes()
   697  		copy(buf[b:], structBytes)
   698  		b += len(structBytes)
   699  	}
   700  	return xgb.Pad(b)
   701  }
   702  
   703  const (
   704  	CirculateRaiseLowest  = 0
   705  	CirculateLowerHighest = 1
   706  )
   707  
   708  // CirculateNotify is the event number for a CirculateNotifyEvent.
   709  const CirculateNotify = 26
   710  
   711  type CirculateNotifyEvent struct {
   712  	Sequence uint16
   713  	// padding: 1 bytes
   714  	Event  Window
   715  	Window Window
   716  	// padding: 4 bytes
   717  	Place byte
   718  	// padding: 3 bytes
   719  }
   720  
   721  // CirculateNotifyEventNew constructs a CirculateNotifyEvent value that implements xgb.Event from a byte slice.
   722  func CirculateNotifyEventNew(buf []byte) xgb.Event {
   723  	v := CirculateNotifyEvent{}
   724  	b := 1 // don't read event number
   725  
   726  	b += 1 // padding
   727  
   728  	v.Sequence = xgb.Get16(buf[b:])
   729  	b += 2
   730  
   731  	v.Event = Window(xgb.Get32(buf[b:]))
   732  	b += 4
   733  
   734  	v.Window = Window(xgb.Get32(buf[b:]))
   735  	b += 4
   736  
   737  	b += 4 // padding
   738  
   739  	v.Place = buf[b]
   740  	b += 1
   741  
   742  	b += 3 // padding
   743  
   744  	return v
   745  }
   746  
   747  // Bytes writes a CirculateNotifyEvent value to a byte slice.
   748  func (v CirculateNotifyEvent) Bytes() []byte {
   749  	buf := make([]byte, 32)
   750  	b := 0
   751  
   752  	// write event number
   753  	buf[b] = 26
   754  	b += 1
   755  
   756  	b += 1 // padding
   757  
   758  	b += 2 // skip sequence number
   759  
   760  	xgb.Put32(buf[b:], uint32(v.Event))
   761  	b += 4
   762  
   763  	xgb.Put32(buf[b:], uint32(v.Window))
   764  	b += 4
   765  
   766  	b += 4 // padding
   767  
   768  	buf[b] = v.Place
   769  	b += 1
   770  
   771  	b += 3 // padding
   772  
   773  	return buf
   774  }
   775  
   776  // SequenceId returns the sequence id attached to the CirculateNotify event.
   777  // Events without a sequence number (KeymapNotify) return 0.
   778  // This is mostly used internally.
   779  func (v CirculateNotifyEvent) SequenceId() uint16 {
   780  	return v.Sequence
   781  }
   782  
   783  // String is a rudimentary string representation of CirculateNotifyEvent.
   784  func (v CirculateNotifyEvent) String() string {
   785  	fieldVals := make([]string, 0, 6)
   786  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
   787  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
   788  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
   789  	fieldVals = append(fieldVals, xgb.Sprintf("Place: %d", v.Place))
   790  	return "CirculateNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
   791  }
   792  
   793  func init() {
   794  	xgb.NewEventFuncs[26] = CirculateNotifyEventNew
   795  }
   796  
   797  // CirculateRequest is the event number for a CirculateRequestEvent.
   798  const CirculateRequest = 27
   799  
   800  type CirculateRequestEvent CirculateNotifyEvent
   801  
   802  // CirculateRequestEventNew constructs a CirculateRequestEvent value that implements xgb.Event from a byte slice.
   803  func CirculateRequestEventNew(buf []byte) xgb.Event {
   804  	return CirculateRequestEvent(CirculateNotifyEventNew(buf).(CirculateNotifyEvent))
   805  }
   806  
   807  // Bytes writes a CirculateRequestEvent value to a byte slice.
   808  func (v CirculateRequestEvent) Bytes() []byte {
   809  	return CirculateNotifyEvent(v).Bytes()
   810  }
   811  
   812  // SequenceId returns the sequence id attached to the CirculateRequest event.
   813  // Events without a sequence number (KeymapNotify) return 0.
   814  // This is mostly used internally.
   815  func (v CirculateRequestEvent) SequenceId() uint16 {
   816  	return v.Sequence
   817  }
   818  
   819  func (v CirculateRequestEvent) String() string {
   820  	fieldVals := make([]string, 0, 6)
   821  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
   822  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
   823  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
   824  	fieldVals = append(fieldVals, xgb.Sprintf("Place: %d", v.Place))
   825  	return "CirculateRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
   826  }
   827  
   828  func init() {
   829  	xgb.NewEventFuncs[27] = CirculateRequestEventNew
   830  }
   831  
   832  // ClientMessage is the event number for a ClientMessageEvent.
   833  const ClientMessage = 33
   834  
   835  type ClientMessageEvent struct {
   836  	Sequence uint16
   837  	Format   byte
   838  	Window   Window
   839  	Type     Atom
   840  	Data     ClientMessageDataUnion
   841  }
   842  
   843  // ClientMessageEventNew constructs a ClientMessageEvent value that implements xgb.Event from a byte slice.
   844  func ClientMessageEventNew(buf []byte) xgb.Event {
   845  	v := ClientMessageEvent{}
   846  	b := 1 // don't read event number
   847  
   848  	v.Format = buf[b]
   849  	b += 1
   850  
   851  	v.Sequence = xgb.Get16(buf[b:])
   852  	b += 2
   853  
   854  	v.Window = Window(xgb.Get32(buf[b:]))
   855  	b += 4
   856  
   857  	v.Type = Atom(xgb.Get32(buf[b:]))
   858  	b += 4
   859  
   860  	v.Data = ClientMessageDataUnion{}
   861  	b += ClientMessageDataUnionRead(buf[b:], &v.Data)
   862  
   863  	return v
   864  }
   865  
   866  // Bytes writes a ClientMessageEvent value to a byte slice.
   867  func (v ClientMessageEvent) Bytes() []byte {
   868  	buf := make([]byte, 32)
   869  	b := 0
   870  
   871  	// write event number
   872  	buf[b] = 33
   873  	b += 1
   874  
   875  	buf[b] = v.Format
   876  	b += 1
   877  
   878  	b += 2 // skip sequence number
   879  
   880  	xgb.Put32(buf[b:], uint32(v.Window))
   881  	b += 4
   882  
   883  	xgb.Put32(buf[b:], uint32(v.Type))
   884  	b += 4
   885  
   886  	{
   887  		unionBytes := v.Data.Bytes()
   888  		copy(buf[b:], unionBytes)
   889  		b += len(unionBytes)
   890  	}
   891  
   892  	return buf
   893  }
   894  
   895  // SequenceId returns the sequence id attached to the ClientMessage event.
   896  // Events without a sequence number (KeymapNotify) return 0.
   897  // This is mostly used internally.
   898  func (v ClientMessageEvent) SequenceId() uint16 {
   899  	return v.Sequence
   900  }
   901  
   902  // String is a rudimentary string representation of ClientMessageEvent.
   903  func (v ClientMessageEvent) String() string {
   904  	fieldVals := make([]string, 0, 4)
   905  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
   906  	fieldVals = append(fieldVals, xgb.Sprintf("Format: %d", v.Format))
   907  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
   908  	fieldVals = append(fieldVals, xgb.Sprintf("Type: %d", v.Type))
   909  	return "ClientMessage {" + xgb.StringsJoin(fieldVals, ", ") + "}"
   910  }
   911  
   912  func init() {
   913  	xgb.NewEventFuncs[33] = ClientMessageEventNew
   914  }
   915  
   916  // ClientMessageDataUnion is a represention of the ClientMessageDataUnion union type.
   917  // Note that to *create* a Union, you should *never* create
   918  // this struct directly (unless you know what you're doing).
   919  // Instead use one of the following constructors for 'ClientMessageDataUnion':
   920  //     ClientMessageDataUnionData8New(Data8 []byte) ClientMessageDataUnion
   921  //     ClientMessageDataUnionData16New(Data16 []uint16) ClientMessageDataUnion
   922  //     ClientMessageDataUnionData32New(Data32 []uint32) ClientMessageDataUnion
   923  type ClientMessageDataUnion struct {
   924  	Data8  []byte   // size: 20
   925  	Data16 []uint16 // size: 20
   926  	Data32 []uint32 // size: 20
   927  }
   928  
   929  // ClientMessageDataUnionData8New constructs a new ClientMessageDataUnion union type with the Data8 field.
   930  func ClientMessageDataUnionData8New(Data8 []byte) ClientMessageDataUnion {
   931  	var b int
   932  	buf := make([]byte, 20)
   933  
   934  	copy(buf[b:], Data8[:20])
   935  	b += int(20)
   936  
   937  	// Create the Union type
   938  	v := ClientMessageDataUnion{}
   939  
   940  	// Now copy buf into all fields
   941  
   942  	b = 0 // always read the same bytes
   943  	v.Data8 = make([]byte, 20)
   944  	copy(v.Data8[:20], buf[b:])
   945  	b += int(20)
   946  
   947  	b = 0 // always read the same bytes
   948  	v.Data16 = make([]uint16, 10)
   949  	for i := 0; i < int(10); i++ {
   950  		v.Data16[i] = xgb.Get16(buf[b:])
   951  		b += 2
   952  	}
   953  
   954  	b = 0 // always read the same bytes
   955  	v.Data32 = make([]uint32, 5)
   956  	for i := 0; i < int(5); i++ {
   957  		v.Data32[i] = xgb.Get32(buf[b:])
   958  		b += 4
   959  	}
   960  
   961  	return v
   962  }
   963  
   964  // ClientMessageDataUnionData16New constructs a new ClientMessageDataUnion union type with the Data16 field.
   965  func ClientMessageDataUnionData16New(Data16 []uint16) ClientMessageDataUnion {
   966  	var b int
   967  	buf := make([]byte, 20)
   968  
   969  	for i := 0; i < int(10); i++ {
   970  		xgb.Put16(buf[b:], Data16[i])
   971  		b += 2
   972  	}
   973  
   974  	// Create the Union type
   975  	v := ClientMessageDataUnion{}
   976  
   977  	// Now copy buf into all fields
   978  
   979  	b = 0 // always read the same bytes
   980  	v.Data8 = make([]byte, 20)
   981  	copy(v.Data8[:20], buf[b:])
   982  	b += int(20)
   983  
   984  	b = 0 // always read the same bytes
   985  	v.Data16 = make([]uint16, 10)
   986  	for i := 0; i < int(10); i++ {
   987  		v.Data16[i] = xgb.Get16(buf[b:])
   988  		b += 2
   989  	}
   990  
   991  	b = 0 // always read the same bytes
   992  	v.Data32 = make([]uint32, 5)
   993  	for i := 0; i < int(5); i++ {
   994  		v.Data32[i] = xgb.Get32(buf[b:])
   995  		b += 4
   996  	}
   997  
   998  	return v
   999  }
  1000  
  1001  // ClientMessageDataUnionData32New constructs a new ClientMessageDataUnion union type with the Data32 field.
  1002  func ClientMessageDataUnionData32New(Data32 []uint32) ClientMessageDataUnion {
  1003  	var b int
  1004  	buf := make([]byte, 20)
  1005  
  1006  	for i := 0; i < int(5); i++ {
  1007  		xgb.Put32(buf[b:], Data32[i])
  1008  		b += 4
  1009  	}
  1010  
  1011  	// Create the Union type
  1012  	v := ClientMessageDataUnion{}
  1013  
  1014  	// Now copy buf into all fields
  1015  
  1016  	b = 0 // always read the same bytes
  1017  	v.Data8 = make([]byte, 20)
  1018  	copy(v.Data8[:20], buf[b:])
  1019  	b += int(20)
  1020  
  1021  	b = 0 // always read the same bytes
  1022  	v.Data16 = make([]uint16, 10)
  1023  	for i := 0; i < int(10); i++ {
  1024  		v.Data16[i] = xgb.Get16(buf[b:])
  1025  		b += 2
  1026  	}
  1027  
  1028  	b = 0 // always read the same bytes
  1029  	v.Data32 = make([]uint32, 5)
  1030  	for i := 0; i < int(5); i++ {
  1031  		v.Data32[i] = xgb.Get32(buf[b:])
  1032  		b += 4
  1033  	}
  1034  
  1035  	return v
  1036  }
  1037  
  1038  // ClientMessageDataUnionRead reads a byte slice into a ClientMessageDataUnion value.
  1039  func ClientMessageDataUnionRead(buf []byte, v *ClientMessageDataUnion) int {
  1040  	var b int
  1041  
  1042  	b = 0 // re-read the same bytes
  1043  	v.Data8 = make([]byte, 20)
  1044  	copy(v.Data8[:20], buf[b:])
  1045  	b += int(20)
  1046  
  1047  	b = 0 // re-read the same bytes
  1048  	v.Data16 = make([]uint16, 10)
  1049  	for i := 0; i < int(10); i++ {
  1050  		v.Data16[i] = xgb.Get16(buf[b:])
  1051  		b += 2
  1052  	}
  1053  
  1054  	b = 0 // re-read the same bytes
  1055  	v.Data32 = make([]uint32, 5)
  1056  	for i := 0; i < int(5); i++ {
  1057  		v.Data32[i] = xgb.Get32(buf[b:])
  1058  		b += 4
  1059  	}
  1060  
  1061  	return 20
  1062  }
  1063  
  1064  // ClientMessageDataUnionReadList reads a byte slice into a list of ClientMessageDataUnion values.
  1065  func ClientMessageDataUnionReadList(buf []byte, dest []ClientMessageDataUnion) int {
  1066  	b := 0
  1067  	for i := 0; i < len(dest); i++ {
  1068  		dest[i] = ClientMessageDataUnion{}
  1069  		b += ClientMessageDataUnionRead(buf[b:], &dest[i])
  1070  	}
  1071  	return xgb.Pad(b)
  1072  }
  1073  
  1074  // Bytes writes a ClientMessageDataUnion value to a byte slice.
  1075  // Each field in a union must contain the same data.
  1076  // So simply pick the first field and write that to the wire.
  1077  func (v ClientMessageDataUnion) Bytes() []byte {
  1078  	buf := make([]byte, 20)
  1079  	b := 0
  1080  
  1081  	copy(buf[b:], v.Data8[:20])
  1082  	b += int(20)
  1083  	return buf
  1084  }
  1085  
  1086  // ClientMessageDataUnionListBytes writes a list of ClientMessageDataUnion values to a byte slice.
  1087  func ClientMessageDataUnionListBytes(buf []byte, list []ClientMessageDataUnion) int {
  1088  	b := 0
  1089  	var unionBytes []byte
  1090  	for _, item := range list {
  1091  		unionBytes = item.Bytes()
  1092  		copy(buf[b:], unionBytes)
  1093  		b += xgb.Pad(len(unionBytes))
  1094  	}
  1095  	return b
  1096  }
  1097  
  1098  const (
  1099  	ClipOrderingUnsorted = 0
  1100  	ClipOrderingYSorted  = 1
  1101  	ClipOrderingYXSorted = 2
  1102  	ClipOrderingYXBanded = 3
  1103  )
  1104  
  1105  const (
  1106  	CloseDownDestroyAll      = 0
  1107  	CloseDownRetainPermanent = 1
  1108  	CloseDownRetainTemporary = 2
  1109  )
  1110  
  1111  const (
  1112  	ColorFlagRed   = 1
  1113  	ColorFlagGreen = 2
  1114  	ColorFlagBlue  = 4
  1115  )
  1116  
  1117  type Coloritem struct {
  1118  	Pixel uint32
  1119  	Red   uint16
  1120  	Green uint16
  1121  	Blue  uint16
  1122  	Flags byte
  1123  	// padding: 1 bytes
  1124  }
  1125  
  1126  // ColoritemRead reads a byte slice into a Coloritem value.
  1127  func ColoritemRead(buf []byte, v *Coloritem) int {
  1128  	b := 0
  1129  
  1130  	v.Pixel = xgb.Get32(buf[b:])
  1131  	b += 4
  1132  
  1133  	v.Red = xgb.Get16(buf[b:])
  1134  	b += 2
  1135  
  1136  	v.Green = xgb.Get16(buf[b:])
  1137  	b += 2
  1138  
  1139  	v.Blue = xgb.Get16(buf[b:])
  1140  	b += 2
  1141  
  1142  	v.Flags = buf[b]
  1143  	b += 1
  1144  
  1145  	b += 1 // padding
  1146  
  1147  	return b
  1148  }
  1149  
  1150  // ColoritemReadList reads a byte slice into a list of Coloritem values.
  1151  func ColoritemReadList(buf []byte, dest []Coloritem) int {
  1152  	b := 0
  1153  	for i := 0; i < len(dest); i++ {
  1154  		dest[i] = Coloritem{}
  1155  		b += ColoritemRead(buf[b:], &dest[i])
  1156  	}
  1157  	return xgb.Pad(b)
  1158  }
  1159  
  1160  // Bytes writes a Coloritem value to a byte slice.
  1161  func (v Coloritem) Bytes() []byte {
  1162  	buf := make([]byte, 12)
  1163  	b := 0
  1164  
  1165  	xgb.Put32(buf[b:], v.Pixel)
  1166  	b += 4
  1167  
  1168  	xgb.Put16(buf[b:], v.Red)
  1169  	b += 2
  1170  
  1171  	xgb.Put16(buf[b:], v.Green)
  1172  	b += 2
  1173  
  1174  	xgb.Put16(buf[b:], v.Blue)
  1175  	b += 2
  1176  
  1177  	buf[b] = v.Flags
  1178  	b += 1
  1179  
  1180  	b += 1 // padding
  1181  
  1182  	return buf[:b]
  1183  }
  1184  
  1185  // ColoritemListBytes writes a list of Coloritem values to a byte slice.
  1186  func ColoritemListBytes(buf []byte, list []Coloritem) int {
  1187  	b := 0
  1188  	var structBytes []byte
  1189  	for _, item := range list {
  1190  		structBytes = item.Bytes()
  1191  		copy(buf[b:], structBytes)
  1192  		b += len(structBytes)
  1193  	}
  1194  	return xgb.Pad(b)
  1195  }
  1196  
  1197  type Colormap uint32
  1198  
  1199  func NewColormapId(c *xgb.Conn) (Colormap, error) {
  1200  	id, err := c.NewId()
  1201  	if err != nil {
  1202  		return 0, err
  1203  	}
  1204  	return Colormap(id), nil
  1205  }
  1206  
  1207  // BadColormap is the error number for a BadColormap.
  1208  const BadColormap = 12
  1209  
  1210  type ColormapError ValueError
  1211  
  1212  // ColormapErrorNew constructs a ColormapError value that implements xgb.Error from a byte slice.
  1213  func ColormapErrorNew(buf []byte) xgb.Error {
  1214  	v := ColormapError(ValueErrorNew(buf).(ValueError))
  1215  	v.NiceName = "Colormap"
  1216  	return v
  1217  }
  1218  
  1219  // SequenceId returns the sequence id attached to the BadColormap error.
  1220  // This is mostly used internally.
  1221  func (err ColormapError) SequenceId() uint16 {
  1222  	return err.Sequence
  1223  }
  1224  
  1225  // BadId returns the 'BadValue' number if one exists for the BadColormap error. If no bad value exists, 0 is returned.
  1226  func (err ColormapError) BadId() uint32 {
  1227  	return err.BadValue
  1228  }
  1229  
  1230  // Error returns a rudimentary string representation of the BadColormap error.
  1231  func (err ColormapError) Error() string {
  1232  	fieldVals := make([]string, 0, 4)
  1233  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  1234  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  1235  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  1236  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  1237  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  1238  	return "BadColormap {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1239  }
  1240  
  1241  func init() {
  1242  	xgb.NewErrorFuncs[12] = ColormapErrorNew
  1243  }
  1244  
  1245  const (
  1246  	ColormapNone = 0
  1247  )
  1248  
  1249  const (
  1250  	ColormapAllocNone = 0
  1251  	ColormapAllocAll  = 1
  1252  )
  1253  
  1254  // ColormapNotify is the event number for a ColormapNotifyEvent.
  1255  const ColormapNotify = 32
  1256  
  1257  type ColormapNotifyEvent struct {
  1258  	Sequence uint16
  1259  	// padding: 1 bytes
  1260  	Window   Window
  1261  	Colormap Colormap
  1262  	New      bool
  1263  	State    byte
  1264  	// padding: 2 bytes
  1265  }
  1266  
  1267  // ColormapNotifyEventNew constructs a ColormapNotifyEvent value that implements xgb.Event from a byte slice.
  1268  func ColormapNotifyEventNew(buf []byte) xgb.Event {
  1269  	v := ColormapNotifyEvent{}
  1270  	b := 1 // don't read event number
  1271  
  1272  	b += 1 // padding
  1273  
  1274  	v.Sequence = xgb.Get16(buf[b:])
  1275  	b += 2
  1276  
  1277  	v.Window = Window(xgb.Get32(buf[b:]))
  1278  	b += 4
  1279  
  1280  	v.Colormap = Colormap(xgb.Get32(buf[b:]))
  1281  	b += 4
  1282  
  1283  	if buf[b] == 1 {
  1284  		v.New = true
  1285  	} else {
  1286  		v.New = false
  1287  	}
  1288  	b += 1
  1289  
  1290  	v.State = buf[b]
  1291  	b += 1
  1292  
  1293  	b += 2 // padding
  1294  
  1295  	return v
  1296  }
  1297  
  1298  // Bytes writes a ColormapNotifyEvent value to a byte slice.
  1299  func (v ColormapNotifyEvent) Bytes() []byte {
  1300  	buf := make([]byte, 32)
  1301  	b := 0
  1302  
  1303  	// write event number
  1304  	buf[b] = 32
  1305  	b += 1
  1306  
  1307  	b += 1 // padding
  1308  
  1309  	b += 2 // skip sequence number
  1310  
  1311  	xgb.Put32(buf[b:], uint32(v.Window))
  1312  	b += 4
  1313  
  1314  	xgb.Put32(buf[b:], uint32(v.Colormap))
  1315  	b += 4
  1316  
  1317  	if v.New {
  1318  		buf[b] = 1
  1319  	} else {
  1320  		buf[b] = 0
  1321  	}
  1322  	b += 1
  1323  
  1324  	buf[b] = v.State
  1325  	b += 1
  1326  
  1327  	b += 2 // padding
  1328  
  1329  	return buf
  1330  }
  1331  
  1332  // SequenceId returns the sequence id attached to the ColormapNotify event.
  1333  // Events without a sequence number (KeymapNotify) return 0.
  1334  // This is mostly used internally.
  1335  func (v ColormapNotifyEvent) SequenceId() uint16 {
  1336  	return v.Sequence
  1337  }
  1338  
  1339  // String is a rudimentary string representation of ColormapNotifyEvent.
  1340  func (v ColormapNotifyEvent) String() string {
  1341  	fieldVals := make([]string, 0, 6)
  1342  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  1343  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  1344  	fieldVals = append(fieldVals, xgb.Sprintf("Colormap: %d", v.Colormap))
  1345  	fieldVals = append(fieldVals, xgb.Sprintf("New: %t", v.New))
  1346  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  1347  	return "ColormapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1348  }
  1349  
  1350  func init() {
  1351  	xgb.NewEventFuncs[32] = ColormapNotifyEventNew
  1352  }
  1353  
  1354  const (
  1355  	ColormapStateUninstalled = 0
  1356  	ColormapStateInstalled   = 1
  1357  )
  1358  
  1359  const (
  1360  	ConfigWindowX           = 1
  1361  	ConfigWindowY           = 2
  1362  	ConfigWindowWidth       = 4
  1363  	ConfigWindowHeight      = 8
  1364  	ConfigWindowBorderWidth = 16
  1365  	ConfigWindowSibling     = 32
  1366  	ConfigWindowStackMode   = 64
  1367  )
  1368  
  1369  // ConfigureNotify is the event number for a ConfigureNotifyEvent.
  1370  const ConfigureNotify = 22
  1371  
  1372  type ConfigureNotifyEvent struct {
  1373  	Sequence uint16
  1374  	// padding: 1 bytes
  1375  	Event            Window
  1376  	Window           Window
  1377  	AboveSibling     Window
  1378  	X                int16
  1379  	Y                int16
  1380  	Width            uint16
  1381  	Height           uint16
  1382  	BorderWidth      uint16
  1383  	OverrideRedirect bool
  1384  	// padding: 1 bytes
  1385  }
  1386  
  1387  // ConfigureNotifyEventNew constructs a ConfigureNotifyEvent value that implements xgb.Event from a byte slice.
  1388  func ConfigureNotifyEventNew(buf []byte) xgb.Event {
  1389  	v := ConfigureNotifyEvent{}
  1390  	b := 1 // don't read event number
  1391  
  1392  	b += 1 // padding
  1393  
  1394  	v.Sequence = xgb.Get16(buf[b:])
  1395  	b += 2
  1396  
  1397  	v.Event = Window(xgb.Get32(buf[b:]))
  1398  	b += 4
  1399  
  1400  	v.Window = Window(xgb.Get32(buf[b:]))
  1401  	b += 4
  1402  
  1403  	v.AboveSibling = Window(xgb.Get32(buf[b:]))
  1404  	b += 4
  1405  
  1406  	v.X = int16(xgb.Get16(buf[b:]))
  1407  	b += 2
  1408  
  1409  	v.Y = int16(xgb.Get16(buf[b:]))
  1410  	b += 2
  1411  
  1412  	v.Width = xgb.Get16(buf[b:])
  1413  	b += 2
  1414  
  1415  	v.Height = xgb.Get16(buf[b:])
  1416  	b += 2
  1417  
  1418  	v.BorderWidth = xgb.Get16(buf[b:])
  1419  	b += 2
  1420  
  1421  	if buf[b] == 1 {
  1422  		v.OverrideRedirect = true
  1423  	} else {
  1424  		v.OverrideRedirect = false
  1425  	}
  1426  	b += 1
  1427  
  1428  	b += 1 // padding
  1429  
  1430  	return v
  1431  }
  1432  
  1433  // Bytes writes a ConfigureNotifyEvent value to a byte slice.
  1434  func (v ConfigureNotifyEvent) Bytes() []byte {
  1435  	buf := make([]byte, 32)
  1436  	b := 0
  1437  
  1438  	// write event number
  1439  	buf[b] = 22
  1440  	b += 1
  1441  
  1442  	b += 1 // padding
  1443  
  1444  	b += 2 // skip sequence number
  1445  
  1446  	xgb.Put32(buf[b:], uint32(v.Event))
  1447  	b += 4
  1448  
  1449  	xgb.Put32(buf[b:], uint32(v.Window))
  1450  	b += 4
  1451  
  1452  	xgb.Put32(buf[b:], uint32(v.AboveSibling))
  1453  	b += 4
  1454  
  1455  	xgb.Put16(buf[b:], uint16(v.X))
  1456  	b += 2
  1457  
  1458  	xgb.Put16(buf[b:], uint16(v.Y))
  1459  	b += 2
  1460  
  1461  	xgb.Put16(buf[b:], v.Width)
  1462  	b += 2
  1463  
  1464  	xgb.Put16(buf[b:], v.Height)
  1465  	b += 2
  1466  
  1467  	xgb.Put16(buf[b:], v.BorderWidth)
  1468  	b += 2
  1469  
  1470  	if v.OverrideRedirect {
  1471  		buf[b] = 1
  1472  	} else {
  1473  		buf[b] = 0
  1474  	}
  1475  	b += 1
  1476  
  1477  	b += 1 // padding
  1478  
  1479  	return buf
  1480  }
  1481  
  1482  // SequenceId returns the sequence id attached to the ConfigureNotify event.
  1483  // Events without a sequence number (KeymapNotify) return 0.
  1484  // This is mostly used internally.
  1485  func (v ConfigureNotifyEvent) SequenceId() uint16 {
  1486  	return v.Sequence
  1487  }
  1488  
  1489  // String is a rudimentary string representation of ConfigureNotifyEvent.
  1490  func (v ConfigureNotifyEvent) String() string {
  1491  	fieldVals := make([]string, 0, 11)
  1492  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  1493  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  1494  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  1495  	fieldVals = append(fieldVals, xgb.Sprintf("AboveSibling: %d", v.AboveSibling))
  1496  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  1497  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  1498  	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
  1499  	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
  1500  	fieldVals = append(fieldVals, xgb.Sprintf("BorderWidth: %d", v.BorderWidth))
  1501  	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
  1502  	return "ConfigureNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1503  }
  1504  
  1505  func init() {
  1506  	xgb.NewEventFuncs[22] = ConfigureNotifyEventNew
  1507  }
  1508  
  1509  // ConfigureRequest is the event number for a ConfigureRequestEvent.
  1510  const ConfigureRequest = 23
  1511  
  1512  type ConfigureRequestEvent struct {
  1513  	Sequence    uint16
  1514  	StackMode   byte
  1515  	Parent      Window
  1516  	Window      Window
  1517  	Sibling     Window
  1518  	X           int16
  1519  	Y           int16
  1520  	Width       uint16
  1521  	Height      uint16
  1522  	BorderWidth uint16
  1523  	ValueMask   uint16
  1524  }
  1525  
  1526  // ConfigureRequestEventNew constructs a ConfigureRequestEvent value that implements xgb.Event from a byte slice.
  1527  func ConfigureRequestEventNew(buf []byte) xgb.Event {
  1528  	v := ConfigureRequestEvent{}
  1529  	b := 1 // don't read event number
  1530  
  1531  	v.StackMode = buf[b]
  1532  	b += 1
  1533  
  1534  	v.Sequence = xgb.Get16(buf[b:])
  1535  	b += 2
  1536  
  1537  	v.Parent = Window(xgb.Get32(buf[b:]))
  1538  	b += 4
  1539  
  1540  	v.Window = Window(xgb.Get32(buf[b:]))
  1541  	b += 4
  1542  
  1543  	v.Sibling = Window(xgb.Get32(buf[b:]))
  1544  	b += 4
  1545  
  1546  	v.X = int16(xgb.Get16(buf[b:]))
  1547  	b += 2
  1548  
  1549  	v.Y = int16(xgb.Get16(buf[b:]))
  1550  	b += 2
  1551  
  1552  	v.Width = xgb.Get16(buf[b:])
  1553  	b += 2
  1554  
  1555  	v.Height = xgb.Get16(buf[b:])
  1556  	b += 2
  1557  
  1558  	v.BorderWidth = xgb.Get16(buf[b:])
  1559  	b += 2
  1560  
  1561  	v.ValueMask = xgb.Get16(buf[b:])
  1562  	b += 2
  1563  
  1564  	return v
  1565  }
  1566  
  1567  // Bytes writes a ConfigureRequestEvent value to a byte slice.
  1568  func (v ConfigureRequestEvent) Bytes() []byte {
  1569  	buf := make([]byte, 32)
  1570  	b := 0
  1571  
  1572  	// write event number
  1573  	buf[b] = 23
  1574  	b += 1
  1575  
  1576  	buf[b] = v.StackMode
  1577  	b += 1
  1578  
  1579  	b += 2 // skip sequence number
  1580  
  1581  	xgb.Put32(buf[b:], uint32(v.Parent))
  1582  	b += 4
  1583  
  1584  	xgb.Put32(buf[b:], uint32(v.Window))
  1585  	b += 4
  1586  
  1587  	xgb.Put32(buf[b:], uint32(v.Sibling))
  1588  	b += 4
  1589  
  1590  	xgb.Put16(buf[b:], uint16(v.X))
  1591  	b += 2
  1592  
  1593  	xgb.Put16(buf[b:], uint16(v.Y))
  1594  	b += 2
  1595  
  1596  	xgb.Put16(buf[b:], v.Width)
  1597  	b += 2
  1598  
  1599  	xgb.Put16(buf[b:], v.Height)
  1600  	b += 2
  1601  
  1602  	xgb.Put16(buf[b:], v.BorderWidth)
  1603  	b += 2
  1604  
  1605  	xgb.Put16(buf[b:], v.ValueMask)
  1606  	b += 2
  1607  
  1608  	return buf
  1609  }
  1610  
  1611  // SequenceId returns the sequence id attached to the ConfigureRequest event.
  1612  // Events without a sequence number (KeymapNotify) return 0.
  1613  // This is mostly used internally.
  1614  func (v ConfigureRequestEvent) SequenceId() uint16 {
  1615  	return v.Sequence
  1616  }
  1617  
  1618  // String is a rudimentary string representation of ConfigureRequestEvent.
  1619  func (v ConfigureRequestEvent) String() string {
  1620  	fieldVals := make([]string, 0, 10)
  1621  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  1622  	fieldVals = append(fieldVals, xgb.Sprintf("StackMode: %d", v.StackMode))
  1623  	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
  1624  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  1625  	fieldVals = append(fieldVals, xgb.Sprintf("Sibling: %d", v.Sibling))
  1626  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  1627  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  1628  	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
  1629  	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
  1630  	fieldVals = append(fieldVals, xgb.Sprintf("BorderWidth: %d", v.BorderWidth))
  1631  	fieldVals = append(fieldVals, xgb.Sprintf("ValueMask: %d", v.ValueMask))
  1632  	return "ConfigureRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1633  }
  1634  
  1635  func init() {
  1636  	xgb.NewEventFuncs[23] = ConfigureRequestEventNew
  1637  }
  1638  
  1639  const (
  1640  	CoordModeOrigin   = 0
  1641  	CoordModePrevious = 1
  1642  )
  1643  
  1644  // CreateNotify is the event number for a CreateNotifyEvent.
  1645  const CreateNotify = 16
  1646  
  1647  type CreateNotifyEvent struct {
  1648  	Sequence uint16
  1649  	// padding: 1 bytes
  1650  	Parent           Window
  1651  	Window           Window
  1652  	X                int16
  1653  	Y                int16
  1654  	Width            uint16
  1655  	Height           uint16
  1656  	BorderWidth      uint16
  1657  	OverrideRedirect bool
  1658  	// padding: 1 bytes
  1659  }
  1660  
  1661  // CreateNotifyEventNew constructs a CreateNotifyEvent value that implements xgb.Event from a byte slice.
  1662  func CreateNotifyEventNew(buf []byte) xgb.Event {
  1663  	v := CreateNotifyEvent{}
  1664  	b := 1 // don't read event number
  1665  
  1666  	b += 1 // padding
  1667  
  1668  	v.Sequence = xgb.Get16(buf[b:])
  1669  	b += 2
  1670  
  1671  	v.Parent = Window(xgb.Get32(buf[b:]))
  1672  	b += 4
  1673  
  1674  	v.Window = Window(xgb.Get32(buf[b:]))
  1675  	b += 4
  1676  
  1677  	v.X = int16(xgb.Get16(buf[b:]))
  1678  	b += 2
  1679  
  1680  	v.Y = int16(xgb.Get16(buf[b:]))
  1681  	b += 2
  1682  
  1683  	v.Width = xgb.Get16(buf[b:])
  1684  	b += 2
  1685  
  1686  	v.Height = xgb.Get16(buf[b:])
  1687  	b += 2
  1688  
  1689  	v.BorderWidth = xgb.Get16(buf[b:])
  1690  	b += 2
  1691  
  1692  	if buf[b] == 1 {
  1693  		v.OverrideRedirect = true
  1694  	} else {
  1695  		v.OverrideRedirect = false
  1696  	}
  1697  	b += 1
  1698  
  1699  	b += 1 // padding
  1700  
  1701  	return v
  1702  }
  1703  
  1704  // Bytes writes a CreateNotifyEvent value to a byte slice.
  1705  func (v CreateNotifyEvent) Bytes() []byte {
  1706  	buf := make([]byte, 32)
  1707  	b := 0
  1708  
  1709  	// write event number
  1710  	buf[b] = 16
  1711  	b += 1
  1712  
  1713  	b += 1 // padding
  1714  
  1715  	b += 2 // skip sequence number
  1716  
  1717  	xgb.Put32(buf[b:], uint32(v.Parent))
  1718  	b += 4
  1719  
  1720  	xgb.Put32(buf[b:], uint32(v.Window))
  1721  	b += 4
  1722  
  1723  	xgb.Put16(buf[b:], uint16(v.X))
  1724  	b += 2
  1725  
  1726  	xgb.Put16(buf[b:], uint16(v.Y))
  1727  	b += 2
  1728  
  1729  	xgb.Put16(buf[b:], v.Width)
  1730  	b += 2
  1731  
  1732  	xgb.Put16(buf[b:], v.Height)
  1733  	b += 2
  1734  
  1735  	xgb.Put16(buf[b:], v.BorderWidth)
  1736  	b += 2
  1737  
  1738  	if v.OverrideRedirect {
  1739  		buf[b] = 1
  1740  	} else {
  1741  		buf[b] = 0
  1742  	}
  1743  	b += 1
  1744  
  1745  	b += 1 // padding
  1746  
  1747  	return buf
  1748  }
  1749  
  1750  // SequenceId returns the sequence id attached to the CreateNotify event.
  1751  // Events without a sequence number (KeymapNotify) return 0.
  1752  // This is mostly used internally.
  1753  func (v CreateNotifyEvent) SequenceId() uint16 {
  1754  	return v.Sequence
  1755  }
  1756  
  1757  // String is a rudimentary string representation of CreateNotifyEvent.
  1758  func (v CreateNotifyEvent) String() string {
  1759  	fieldVals := make([]string, 0, 10)
  1760  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  1761  	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
  1762  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  1763  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  1764  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  1765  	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
  1766  	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
  1767  	fieldVals = append(fieldVals, xgb.Sprintf("BorderWidth: %d", v.BorderWidth))
  1768  	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
  1769  	return "CreateNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1770  }
  1771  
  1772  func init() {
  1773  	xgb.NewEventFuncs[16] = CreateNotifyEventNew
  1774  }
  1775  
  1776  type Cursor uint32
  1777  
  1778  func NewCursorId(c *xgb.Conn) (Cursor, error) {
  1779  	id, err := c.NewId()
  1780  	if err != nil {
  1781  		return 0, err
  1782  	}
  1783  	return Cursor(id), nil
  1784  }
  1785  
  1786  // BadCursor is the error number for a BadCursor.
  1787  const BadCursor = 6
  1788  
  1789  type CursorError ValueError
  1790  
  1791  // CursorErrorNew constructs a CursorError value that implements xgb.Error from a byte slice.
  1792  func CursorErrorNew(buf []byte) xgb.Error {
  1793  	v := CursorError(ValueErrorNew(buf).(ValueError))
  1794  	v.NiceName = "Cursor"
  1795  	return v
  1796  }
  1797  
  1798  // SequenceId returns the sequence id attached to the BadCursor error.
  1799  // This is mostly used internally.
  1800  func (err CursorError) SequenceId() uint16 {
  1801  	return err.Sequence
  1802  }
  1803  
  1804  // BadId returns the 'BadValue' number if one exists for the BadCursor error. If no bad value exists, 0 is returned.
  1805  func (err CursorError) BadId() uint32 {
  1806  	return err.BadValue
  1807  }
  1808  
  1809  // Error returns a rudimentary string representation of the BadCursor error.
  1810  func (err CursorError) Error() string {
  1811  	fieldVals := make([]string, 0, 4)
  1812  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  1813  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  1814  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  1815  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  1816  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  1817  	return "BadCursor {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1818  }
  1819  
  1820  func init() {
  1821  	xgb.NewErrorFuncs[6] = CursorErrorNew
  1822  }
  1823  
  1824  const (
  1825  	CursorNone = 0
  1826  )
  1827  
  1828  const (
  1829  	CwBackPixmap       = 1
  1830  	CwBackPixel        = 2
  1831  	CwBorderPixmap     = 4
  1832  	CwBorderPixel      = 8
  1833  	CwBitGravity       = 16
  1834  	CwWinGravity       = 32
  1835  	CwBackingStore     = 64
  1836  	CwBackingPlanes    = 128
  1837  	CwBackingPixel     = 256
  1838  	CwOverrideRedirect = 512
  1839  	CwSaveUnder        = 1024
  1840  	CwEventMask        = 2048
  1841  	CwDontPropagate    = 4096
  1842  	CwColormap         = 8192
  1843  	CwCursor           = 16384
  1844  )
  1845  
  1846  type DepthInfo struct {
  1847  	Depth byte
  1848  	// padding: 1 bytes
  1849  	VisualsLen uint16
  1850  	// padding: 4 bytes
  1851  	Visuals []VisualInfo // size: xgb.Pad((int(VisualsLen) * 24))
  1852  }
  1853  
  1854  // DepthInfoRead reads a byte slice into a DepthInfo value.
  1855  func DepthInfoRead(buf []byte, v *DepthInfo) int {
  1856  	b := 0
  1857  
  1858  	v.Depth = buf[b]
  1859  	b += 1
  1860  
  1861  	b += 1 // padding
  1862  
  1863  	v.VisualsLen = xgb.Get16(buf[b:])
  1864  	b += 2
  1865  
  1866  	b += 4 // padding
  1867  
  1868  	v.Visuals = make([]VisualInfo, v.VisualsLen)
  1869  	b += VisualInfoReadList(buf[b:], v.Visuals)
  1870  
  1871  	return b
  1872  }
  1873  
  1874  // DepthInfoReadList reads a byte slice into a list of DepthInfo values.
  1875  func DepthInfoReadList(buf []byte, dest []DepthInfo) int {
  1876  	b := 0
  1877  	for i := 0; i < len(dest); i++ {
  1878  		dest[i] = DepthInfo{}
  1879  		b += DepthInfoRead(buf[b:], &dest[i])
  1880  	}
  1881  	return xgb.Pad(b)
  1882  }
  1883  
  1884  // Bytes writes a DepthInfo value to a byte slice.
  1885  func (v DepthInfo) Bytes() []byte {
  1886  	buf := make([]byte, (8 + xgb.Pad((int(v.VisualsLen) * 24))))
  1887  	b := 0
  1888  
  1889  	buf[b] = v.Depth
  1890  	b += 1
  1891  
  1892  	b += 1 // padding
  1893  
  1894  	xgb.Put16(buf[b:], v.VisualsLen)
  1895  	b += 2
  1896  
  1897  	b += 4 // padding
  1898  
  1899  	b += VisualInfoListBytes(buf[b:], v.Visuals)
  1900  
  1901  	return buf[:b]
  1902  }
  1903  
  1904  // DepthInfoListBytes writes a list of DepthInfo values to a byte slice.
  1905  func DepthInfoListBytes(buf []byte, list []DepthInfo) int {
  1906  	b := 0
  1907  	var structBytes []byte
  1908  	for _, item := range list {
  1909  		structBytes = item.Bytes()
  1910  		copy(buf[b:], structBytes)
  1911  		b += len(structBytes)
  1912  	}
  1913  	return xgb.Pad(b)
  1914  }
  1915  
  1916  // DepthInfoListSize computes the size (bytes) of a list of DepthInfo values.
  1917  func DepthInfoListSize(list []DepthInfo) int {
  1918  	size := 0
  1919  	for _, item := range list {
  1920  		size += (8 + xgb.Pad((int(item.VisualsLen) * 24)))
  1921  	}
  1922  	return size
  1923  }
  1924  
  1925  // DestroyNotify is the event number for a DestroyNotifyEvent.
  1926  const DestroyNotify = 17
  1927  
  1928  type DestroyNotifyEvent struct {
  1929  	Sequence uint16
  1930  	// padding: 1 bytes
  1931  	Event  Window
  1932  	Window Window
  1933  }
  1934  
  1935  // DestroyNotifyEventNew constructs a DestroyNotifyEvent value that implements xgb.Event from a byte slice.
  1936  func DestroyNotifyEventNew(buf []byte) xgb.Event {
  1937  	v := DestroyNotifyEvent{}
  1938  	b := 1 // don't read event number
  1939  
  1940  	b += 1 // padding
  1941  
  1942  	v.Sequence = xgb.Get16(buf[b:])
  1943  	b += 2
  1944  
  1945  	v.Event = Window(xgb.Get32(buf[b:]))
  1946  	b += 4
  1947  
  1948  	v.Window = Window(xgb.Get32(buf[b:]))
  1949  	b += 4
  1950  
  1951  	return v
  1952  }
  1953  
  1954  // Bytes writes a DestroyNotifyEvent value to a byte slice.
  1955  func (v DestroyNotifyEvent) Bytes() []byte {
  1956  	buf := make([]byte, 32)
  1957  	b := 0
  1958  
  1959  	// write event number
  1960  	buf[b] = 17
  1961  	b += 1
  1962  
  1963  	b += 1 // padding
  1964  
  1965  	b += 2 // skip sequence number
  1966  
  1967  	xgb.Put32(buf[b:], uint32(v.Event))
  1968  	b += 4
  1969  
  1970  	xgb.Put32(buf[b:], uint32(v.Window))
  1971  	b += 4
  1972  
  1973  	return buf
  1974  }
  1975  
  1976  // SequenceId returns the sequence id attached to the DestroyNotify event.
  1977  // Events without a sequence number (KeymapNotify) return 0.
  1978  // This is mostly used internally.
  1979  func (v DestroyNotifyEvent) SequenceId() uint16 {
  1980  	return v.Sequence
  1981  }
  1982  
  1983  // String is a rudimentary string representation of DestroyNotifyEvent.
  1984  func (v DestroyNotifyEvent) String() string {
  1985  	fieldVals := make([]string, 0, 3)
  1986  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  1987  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  1988  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  1989  	return "DestroyNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  1990  }
  1991  
  1992  func init() {
  1993  	xgb.NewEventFuncs[17] = DestroyNotifyEventNew
  1994  }
  1995  
  1996  type Drawable uint32
  1997  
  1998  func NewDrawableId(c *xgb.Conn) (Drawable, error) {
  1999  	id, err := c.NewId()
  2000  	if err != nil {
  2001  		return 0, err
  2002  	}
  2003  	return Drawable(id), nil
  2004  }
  2005  
  2006  // BadDrawable is the error number for a BadDrawable.
  2007  const BadDrawable = 9
  2008  
  2009  type DrawableError ValueError
  2010  
  2011  // DrawableErrorNew constructs a DrawableError value that implements xgb.Error from a byte slice.
  2012  func DrawableErrorNew(buf []byte) xgb.Error {
  2013  	v := DrawableError(ValueErrorNew(buf).(ValueError))
  2014  	v.NiceName = "Drawable"
  2015  	return v
  2016  }
  2017  
  2018  // SequenceId returns the sequence id attached to the BadDrawable error.
  2019  // This is mostly used internally.
  2020  func (err DrawableError) SequenceId() uint16 {
  2021  	return err.Sequence
  2022  }
  2023  
  2024  // BadId returns the 'BadValue' number if one exists for the BadDrawable error. If no bad value exists, 0 is returned.
  2025  func (err DrawableError) BadId() uint32 {
  2026  	return err.BadValue
  2027  }
  2028  
  2029  // Error returns a rudimentary string representation of the BadDrawable error.
  2030  func (err DrawableError) Error() string {
  2031  	fieldVals := make([]string, 0, 4)
  2032  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  2033  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  2034  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  2035  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  2036  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  2037  	return "BadDrawable {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2038  }
  2039  
  2040  func init() {
  2041  	xgb.NewErrorFuncs[9] = DrawableErrorNew
  2042  }
  2043  
  2044  // EnterNotify is the event number for a EnterNotifyEvent.
  2045  const EnterNotify = 7
  2046  
  2047  type EnterNotifyEvent struct {
  2048  	Sequence        uint16
  2049  	Detail          byte
  2050  	Time            Timestamp
  2051  	Root            Window
  2052  	Event           Window
  2053  	Child           Window
  2054  	RootX           int16
  2055  	RootY           int16
  2056  	EventX          int16
  2057  	EventY          int16
  2058  	State           uint16
  2059  	Mode            byte
  2060  	SameScreenFocus byte
  2061  }
  2062  
  2063  // EnterNotifyEventNew constructs a EnterNotifyEvent value that implements xgb.Event from a byte slice.
  2064  func EnterNotifyEventNew(buf []byte) xgb.Event {
  2065  	v := EnterNotifyEvent{}
  2066  	b := 1 // don't read event number
  2067  
  2068  	v.Detail = buf[b]
  2069  	b += 1
  2070  
  2071  	v.Sequence = xgb.Get16(buf[b:])
  2072  	b += 2
  2073  
  2074  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  2075  	b += 4
  2076  
  2077  	v.Root = Window(xgb.Get32(buf[b:]))
  2078  	b += 4
  2079  
  2080  	v.Event = Window(xgb.Get32(buf[b:]))
  2081  	b += 4
  2082  
  2083  	v.Child = Window(xgb.Get32(buf[b:]))
  2084  	b += 4
  2085  
  2086  	v.RootX = int16(xgb.Get16(buf[b:]))
  2087  	b += 2
  2088  
  2089  	v.RootY = int16(xgb.Get16(buf[b:]))
  2090  	b += 2
  2091  
  2092  	v.EventX = int16(xgb.Get16(buf[b:]))
  2093  	b += 2
  2094  
  2095  	v.EventY = int16(xgb.Get16(buf[b:]))
  2096  	b += 2
  2097  
  2098  	v.State = xgb.Get16(buf[b:])
  2099  	b += 2
  2100  
  2101  	v.Mode = buf[b]
  2102  	b += 1
  2103  
  2104  	v.SameScreenFocus = buf[b]
  2105  	b += 1
  2106  
  2107  	return v
  2108  }
  2109  
  2110  // Bytes writes a EnterNotifyEvent value to a byte slice.
  2111  func (v EnterNotifyEvent) Bytes() []byte {
  2112  	buf := make([]byte, 32)
  2113  	b := 0
  2114  
  2115  	// write event number
  2116  	buf[b] = 7
  2117  	b += 1
  2118  
  2119  	buf[b] = v.Detail
  2120  	b += 1
  2121  
  2122  	b += 2 // skip sequence number
  2123  
  2124  	xgb.Put32(buf[b:], uint32(v.Time))
  2125  	b += 4
  2126  
  2127  	xgb.Put32(buf[b:], uint32(v.Root))
  2128  	b += 4
  2129  
  2130  	xgb.Put32(buf[b:], uint32(v.Event))
  2131  	b += 4
  2132  
  2133  	xgb.Put32(buf[b:], uint32(v.Child))
  2134  	b += 4
  2135  
  2136  	xgb.Put16(buf[b:], uint16(v.RootX))
  2137  	b += 2
  2138  
  2139  	xgb.Put16(buf[b:], uint16(v.RootY))
  2140  	b += 2
  2141  
  2142  	xgb.Put16(buf[b:], uint16(v.EventX))
  2143  	b += 2
  2144  
  2145  	xgb.Put16(buf[b:], uint16(v.EventY))
  2146  	b += 2
  2147  
  2148  	xgb.Put16(buf[b:], v.State)
  2149  	b += 2
  2150  
  2151  	buf[b] = v.Mode
  2152  	b += 1
  2153  
  2154  	buf[b] = v.SameScreenFocus
  2155  	b += 1
  2156  
  2157  	return buf
  2158  }
  2159  
  2160  // SequenceId returns the sequence id attached to the EnterNotify event.
  2161  // Events without a sequence number (KeymapNotify) return 0.
  2162  // This is mostly used internally.
  2163  func (v EnterNotifyEvent) SequenceId() uint16 {
  2164  	return v.Sequence
  2165  }
  2166  
  2167  // String is a rudimentary string representation of EnterNotifyEvent.
  2168  func (v EnterNotifyEvent) String() string {
  2169  	fieldVals := make([]string, 0, 12)
  2170  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  2171  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  2172  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  2173  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
  2174  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  2175  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
  2176  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
  2177  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
  2178  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
  2179  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
  2180  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  2181  	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
  2182  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreenFocus: %d", v.SameScreenFocus))
  2183  	return "EnterNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2184  }
  2185  
  2186  func init() {
  2187  	xgb.NewEventFuncs[7] = EnterNotifyEventNew
  2188  }
  2189  
  2190  const (
  2191  	EventMaskNoEvent              = 0
  2192  	EventMaskKeyPress             = 1
  2193  	EventMaskKeyRelease           = 2
  2194  	EventMaskButtonPress          = 4
  2195  	EventMaskButtonRelease        = 8
  2196  	EventMaskEnterWindow          = 16
  2197  	EventMaskLeaveWindow          = 32
  2198  	EventMaskPointerMotion        = 64
  2199  	EventMaskPointerMotionHint    = 128
  2200  	EventMaskButton1Motion        = 256
  2201  	EventMaskButton2Motion        = 512
  2202  	EventMaskButton3Motion        = 1024
  2203  	EventMaskButton4Motion        = 2048
  2204  	EventMaskButton5Motion        = 4096
  2205  	EventMaskButtonMotion         = 8192
  2206  	EventMaskKeymapState          = 16384
  2207  	EventMaskExposure             = 32768
  2208  	EventMaskVisibilityChange     = 65536
  2209  	EventMaskStructureNotify      = 131072
  2210  	EventMaskResizeRedirect       = 262144
  2211  	EventMaskSubstructureNotify   = 524288
  2212  	EventMaskSubstructureRedirect = 1048576
  2213  	EventMaskFocusChange          = 2097152
  2214  	EventMaskPropertyChange       = 4194304
  2215  	EventMaskColorMapChange       = 8388608
  2216  	EventMaskOwnerGrabButton      = 16777216
  2217  )
  2218  
  2219  // Expose is the event number for a ExposeEvent.
  2220  const Expose = 12
  2221  
  2222  type ExposeEvent struct {
  2223  	Sequence uint16
  2224  	// padding: 1 bytes
  2225  	Window Window
  2226  	X      uint16
  2227  	Y      uint16
  2228  	Width  uint16
  2229  	Height uint16
  2230  	Count  uint16
  2231  	// padding: 2 bytes
  2232  }
  2233  
  2234  // ExposeEventNew constructs a ExposeEvent value that implements xgb.Event from a byte slice.
  2235  func ExposeEventNew(buf []byte) xgb.Event {
  2236  	v := ExposeEvent{}
  2237  	b := 1 // don't read event number
  2238  
  2239  	b += 1 // padding
  2240  
  2241  	v.Sequence = xgb.Get16(buf[b:])
  2242  	b += 2
  2243  
  2244  	v.Window = Window(xgb.Get32(buf[b:]))
  2245  	b += 4
  2246  
  2247  	v.X = xgb.Get16(buf[b:])
  2248  	b += 2
  2249  
  2250  	v.Y = xgb.Get16(buf[b:])
  2251  	b += 2
  2252  
  2253  	v.Width = xgb.Get16(buf[b:])
  2254  	b += 2
  2255  
  2256  	v.Height = xgb.Get16(buf[b:])
  2257  	b += 2
  2258  
  2259  	v.Count = xgb.Get16(buf[b:])
  2260  	b += 2
  2261  
  2262  	b += 2 // padding
  2263  
  2264  	return v
  2265  }
  2266  
  2267  // Bytes writes a ExposeEvent value to a byte slice.
  2268  func (v ExposeEvent) Bytes() []byte {
  2269  	buf := make([]byte, 32)
  2270  	b := 0
  2271  
  2272  	// write event number
  2273  	buf[b] = 12
  2274  	b += 1
  2275  
  2276  	b += 1 // padding
  2277  
  2278  	b += 2 // skip sequence number
  2279  
  2280  	xgb.Put32(buf[b:], uint32(v.Window))
  2281  	b += 4
  2282  
  2283  	xgb.Put16(buf[b:], v.X)
  2284  	b += 2
  2285  
  2286  	xgb.Put16(buf[b:], v.Y)
  2287  	b += 2
  2288  
  2289  	xgb.Put16(buf[b:], v.Width)
  2290  	b += 2
  2291  
  2292  	xgb.Put16(buf[b:], v.Height)
  2293  	b += 2
  2294  
  2295  	xgb.Put16(buf[b:], v.Count)
  2296  	b += 2
  2297  
  2298  	b += 2 // padding
  2299  
  2300  	return buf
  2301  }
  2302  
  2303  // SequenceId returns the sequence id attached to the Expose event.
  2304  // Events without a sequence number (KeymapNotify) return 0.
  2305  // This is mostly used internally.
  2306  func (v ExposeEvent) SequenceId() uint16 {
  2307  	return v.Sequence
  2308  }
  2309  
  2310  // String is a rudimentary string representation of ExposeEvent.
  2311  func (v ExposeEvent) String() string {
  2312  	fieldVals := make([]string, 0, 8)
  2313  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  2314  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  2315  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  2316  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  2317  	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
  2318  	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
  2319  	fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
  2320  	return "Expose {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2321  }
  2322  
  2323  func init() {
  2324  	xgb.NewEventFuncs[12] = ExposeEventNew
  2325  }
  2326  
  2327  const (
  2328  	ExposuresNotAllowed = 0
  2329  	ExposuresAllowed    = 1
  2330  	ExposuresDefault    = 2
  2331  )
  2332  
  2333  const (
  2334  	FamilyInternet          = 0
  2335  	FamilyDECnet            = 1
  2336  	FamilyChaos             = 2
  2337  	FamilyServerInterpreted = 5
  2338  	FamilyInternet6         = 6
  2339  )
  2340  
  2341  const (
  2342  	FillRuleEvenOdd = 0
  2343  	FillRuleWinding = 1
  2344  )
  2345  
  2346  const (
  2347  	FillStyleSolid          = 0
  2348  	FillStyleTiled          = 1
  2349  	FillStyleStippled       = 2
  2350  	FillStyleOpaqueStippled = 3
  2351  )
  2352  
  2353  // FocusIn is the event number for a FocusInEvent.
  2354  const FocusIn = 9
  2355  
  2356  type FocusInEvent struct {
  2357  	Sequence uint16
  2358  	Detail   byte
  2359  	Event    Window
  2360  	Mode     byte
  2361  	// padding: 3 bytes
  2362  }
  2363  
  2364  // FocusInEventNew constructs a FocusInEvent value that implements xgb.Event from a byte slice.
  2365  func FocusInEventNew(buf []byte) xgb.Event {
  2366  	v := FocusInEvent{}
  2367  	b := 1 // don't read event number
  2368  
  2369  	v.Detail = buf[b]
  2370  	b += 1
  2371  
  2372  	v.Sequence = xgb.Get16(buf[b:])
  2373  	b += 2
  2374  
  2375  	v.Event = Window(xgb.Get32(buf[b:]))
  2376  	b += 4
  2377  
  2378  	v.Mode = buf[b]
  2379  	b += 1
  2380  
  2381  	b += 3 // padding
  2382  
  2383  	return v
  2384  }
  2385  
  2386  // Bytes writes a FocusInEvent value to a byte slice.
  2387  func (v FocusInEvent) Bytes() []byte {
  2388  	buf := make([]byte, 32)
  2389  	b := 0
  2390  
  2391  	// write event number
  2392  	buf[b] = 9
  2393  	b += 1
  2394  
  2395  	buf[b] = v.Detail
  2396  	b += 1
  2397  
  2398  	b += 2 // skip sequence number
  2399  
  2400  	xgb.Put32(buf[b:], uint32(v.Event))
  2401  	b += 4
  2402  
  2403  	buf[b] = v.Mode
  2404  	b += 1
  2405  
  2406  	b += 3 // padding
  2407  
  2408  	return buf
  2409  }
  2410  
  2411  // SequenceId returns the sequence id attached to the FocusIn event.
  2412  // Events without a sequence number (KeymapNotify) return 0.
  2413  // This is mostly used internally.
  2414  func (v FocusInEvent) SequenceId() uint16 {
  2415  	return v.Sequence
  2416  }
  2417  
  2418  // String is a rudimentary string representation of FocusInEvent.
  2419  func (v FocusInEvent) String() string {
  2420  	fieldVals := make([]string, 0, 4)
  2421  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  2422  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  2423  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  2424  	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
  2425  	return "FocusIn {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2426  }
  2427  
  2428  func init() {
  2429  	xgb.NewEventFuncs[9] = FocusInEventNew
  2430  }
  2431  
  2432  // FocusOut is the event number for a FocusOutEvent.
  2433  const FocusOut = 10
  2434  
  2435  type FocusOutEvent FocusInEvent
  2436  
  2437  // FocusOutEventNew constructs a FocusOutEvent value that implements xgb.Event from a byte slice.
  2438  func FocusOutEventNew(buf []byte) xgb.Event {
  2439  	return FocusOutEvent(FocusInEventNew(buf).(FocusInEvent))
  2440  }
  2441  
  2442  // Bytes writes a FocusOutEvent value to a byte slice.
  2443  func (v FocusOutEvent) Bytes() []byte {
  2444  	return FocusInEvent(v).Bytes()
  2445  }
  2446  
  2447  // SequenceId returns the sequence id attached to the FocusOut event.
  2448  // Events without a sequence number (KeymapNotify) return 0.
  2449  // This is mostly used internally.
  2450  func (v FocusOutEvent) SequenceId() uint16 {
  2451  	return v.Sequence
  2452  }
  2453  
  2454  func (v FocusOutEvent) String() string {
  2455  	fieldVals := make([]string, 0, 4)
  2456  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  2457  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  2458  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  2459  	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
  2460  	return "FocusOut {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2461  }
  2462  
  2463  func init() {
  2464  	xgb.NewEventFuncs[10] = FocusOutEventNew
  2465  }
  2466  
  2467  type Font uint32
  2468  
  2469  func NewFontId(c *xgb.Conn) (Font, error) {
  2470  	id, err := c.NewId()
  2471  	if err != nil {
  2472  		return 0, err
  2473  	}
  2474  	return Font(id), nil
  2475  }
  2476  
  2477  // BadFont is the error number for a BadFont.
  2478  const BadFont = 7
  2479  
  2480  type FontError ValueError
  2481  
  2482  // FontErrorNew constructs a FontError value that implements xgb.Error from a byte slice.
  2483  func FontErrorNew(buf []byte) xgb.Error {
  2484  	v := FontError(ValueErrorNew(buf).(ValueError))
  2485  	v.NiceName = "Font"
  2486  	return v
  2487  }
  2488  
  2489  // SequenceId returns the sequence id attached to the BadFont error.
  2490  // This is mostly used internally.
  2491  func (err FontError) SequenceId() uint16 {
  2492  	return err.Sequence
  2493  }
  2494  
  2495  // BadId returns the 'BadValue' number if one exists for the BadFont error. If no bad value exists, 0 is returned.
  2496  func (err FontError) BadId() uint32 {
  2497  	return err.BadValue
  2498  }
  2499  
  2500  // Error returns a rudimentary string representation of the BadFont error.
  2501  func (err FontError) Error() string {
  2502  	fieldVals := make([]string, 0, 4)
  2503  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  2504  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  2505  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  2506  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  2507  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  2508  	return "BadFont {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2509  }
  2510  
  2511  func init() {
  2512  	xgb.NewErrorFuncs[7] = FontErrorNew
  2513  }
  2514  
  2515  const (
  2516  	FontNone = 0
  2517  )
  2518  
  2519  const (
  2520  	FontDrawLeftToRight = 0
  2521  	FontDrawRightToLeft = 1
  2522  )
  2523  
  2524  type Fontable uint32
  2525  
  2526  func NewFontableId(c *xgb.Conn) (Fontable, error) {
  2527  	id, err := c.NewId()
  2528  	if err != nil {
  2529  		return 0, err
  2530  	}
  2531  	return Fontable(id), nil
  2532  }
  2533  
  2534  type Fontprop struct {
  2535  	Name  Atom
  2536  	Value uint32
  2537  }
  2538  
  2539  // FontpropRead reads a byte slice into a Fontprop value.
  2540  func FontpropRead(buf []byte, v *Fontprop) int {
  2541  	b := 0
  2542  
  2543  	v.Name = Atom(xgb.Get32(buf[b:]))
  2544  	b += 4
  2545  
  2546  	v.Value = xgb.Get32(buf[b:])
  2547  	b += 4
  2548  
  2549  	return b
  2550  }
  2551  
  2552  // FontpropReadList reads a byte slice into a list of Fontprop values.
  2553  func FontpropReadList(buf []byte, dest []Fontprop) int {
  2554  	b := 0
  2555  	for i := 0; i < len(dest); i++ {
  2556  		dest[i] = Fontprop{}
  2557  		b += FontpropRead(buf[b:], &dest[i])
  2558  	}
  2559  	return xgb.Pad(b)
  2560  }
  2561  
  2562  // Bytes writes a Fontprop value to a byte slice.
  2563  func (v Fontprop) Bytes() []byte {
  2564  	buf := make([]byte, 8)
  2565  	b := 0
  2566  
  2567  	xgb.Put32(buf[b:], uint32(v.Name))
  2568  	b += 4
  2569  
  2570  	xgb.Put32(buf[b:], v.Value)
  2571  	b += 4
  2572  
  2573  	return buf[:b]
  2574  }
  2575  
  2576  // FontpropListBytes writes a list of Fontprop values to a byte slice.
  2577  func FontpropListBytes(buf []byte, list []Fontprop) int {
  2578  	b := 0
  2579  	var structBytes []byte
  2580  	for _, item := range list {
  2581  		structBytes = item.Bytes()
  2582  		copy(buf[b:], structBytes)
  2583  		b += len(structBytes)
  2584  	}
  2585  	return xgb.Pad(b)
  2586  }
  2587  
  2588  type Format struct {
  2589  	Depth        byte
  2590  	BitsPerPixel byte
  2591  	ScanlinePad  byte
  2592  	// padding: 5 bytes
  2593  }
  2594  
  2595  // FormatRead reads a byte slice into a Format value.
  2596  func FormatRead(buf []byte, v *Format) int {
  2597  	b := 0
  2598  
  2599  	v.Depth = buf[b]
  2600  	b += 1
  2601  
  2602  	v.BitsPerPixel = buf[b]
  2603  	b += 1
  2604  
  2605  	v.ScanlinePad = buf[b]
  2606  	b += 1
  2607  
  2608  	b += 5 // padding
  2609  
  2610  	return b
  2611  }
  2612  
  2613  // FormatReadList reads a byte slice into a list of Format values.
  2614  func FormatReadList(buf []byte, dest []Format) int {
  2615  	b := 0
  2616  	for i := 0; i < len(dest); i++ {
  2617  		dest[i] = Format{}
  2618  		b += FormatRead(buf[b:], &dest[i])
  2619  	}
  2620  	return xgb.Pad(b)
  2621  }
  2622  
  2623  // Bytes writes a Format value to a byte slice.
  2624  func (v Format) Bytes() []byte {
  2625  	buf := make([]byte, 8)
  2626  	b := 0
  2627  
  2628  	buf[b] = v.Depth
  2629  	b += 1
  2630  
  2631  	buf[b] = v.BitsPerPixel
  2632  	b += 1
  2633  
  2634  	buf[b] = v.ScanlinePad
  2635  	b += 1
  2636  
  2637  	b += 5 // padding
  2638  
  2639  	return buf[:b]
  2640  }
  2641  
  2642  // FormatListBytes writes a list of Format values to a byte slice.
  2643  func FormatListBytes(buf []byte, list []Format) int {
  2644  	b := 0
  2645  	var structBytes []byte
  2646  	for _, item := range list {
  2647  		structBytes = item.Bytes()
  2648  		copy(buf[b:], structBytes)
  2649  		b += len(structBytes)
  2650  	}
  2651  	return xgb.Pad(b)
  2652  }
  2653  
  2654  // BadGContext is the error number for a BadGContext.
  2655  const BadGContext = 13
  2656  
  2657  type GContextError ValueError
  2658  
  2659  // GContextErrorNew constructs a GContextError value that implements xgb.Error from a byte slice.
  2660  func GContextErrorNew(buf []byte) xgb.Error {
  2661  	v := GContextError(ValueErrorNew(buf).(ValueError))
  2662  	v.NiceName = "GContext"
  2663  	return v
  2664  }
  2665  
  2666  // SequenceId returns the sequence id attached to the BadGContext error.
  2667  // This is mostly used internally.
  2668  func (err GContextError) SequenceId() uint16 {
  2669  	return err.Sequence
  2670  }
  2671  
  2672  // BadId returns the 'BadValue' number if one exists for the BadGContext error. If no bad value exists, 0 is returned.
  2673  func (err GContextError) BadId() uint32 {
  2674  	return err.BadValue
  2675  }
  2676  
  2677  // Error returns a rudimentary string representation of the BadGContext error.
  2678  func (err GContextError) Error() string {
  2679  	fieldVals := make([]string, 0, 4)
  2680  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  2681  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  2682  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  2683  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  2684  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  2685  	return "BadGContext {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2686  }
  2687  
  2688  func init() {
  2689  	xgb.NewErrorFuncs[13] = GContextErrorNew
  2690  }
  2691  
  2692  const (
  2693  	GcFunction           = 1
  2694  	GcPlaneMask          = 2
  2695  	GcForeground         = 4
  2696  	GcBackground         = 8
  2697  	GcLineWidth          = 16
  2698  	GcLineStyle          = 32
  2699  	GcCapStyle           = 64
  2700  	GcJoinStyle          = 128
  2701  	GcFillStyle          = 256
  2702  	GcFillRule           = 512
  2703  	GcTile               = 1024
  2704  	GcStipple            = 2048
  2705  	GcTileStippleOriginX = 4096
  2706  	GcTileStippleOriginY = 8192
  2707  	GcFont               = 16384
  2708  	GcSubwindowMode      = 32768
  2709  	GcGraphicsExposures  = 65536
  2710  	GcClipOriginX        = 131072
  2711  	GcClipOriginY        = 262144
  2712  	GcClipMask           = 524288
  2713  	GcDashOffset         = 1048576
  2714  	GcDashList           = 2097152
  2715  	GcArcMode            = 4194304
  2716  )
  2717  
  2718  type Gcontext uint32
  2719  
  2720  func NewGcontextId(c *xgb.Conn) (Gcontext, error) {
  2721  	id, err := c.NewId()
  2722  	if err != nil {
  2723  		return 0, err
  2724  	}
  2725  	return Gcontext(id), nil
  2726  }
  2727  
  2728  // GeGeneric is the event number for a GeGenericEvent.
  2729  const GeGeneric = 35
  2730  
  2731  type GeGenericEvent struct {
  2732  	Sequence uint16
  2733  	// padding: 22 bytes
  2734  }
  2735  
  2736  // GeGenericEventNew constructs a GeGenericEvent value that implements xgb.Event from a byte slice.
  2737  func GeGenericEventNew(buf []byte) xgb.Event {
  2738  	v := GeGenericEvent{}
  2739  	b := 1 // don't read event number
  2740  
  2741  	b += 22 // padding
  2742  
  2743  	return v
  2744  }
  2745  
  2746  // Bytes writes a GeGenericEvent value to a byte slice.
  2747  func (v GeGenericEvent) Bytes() []byte {
  2748  	buf := make([]byte, 32)
  2749  	b := 0
  2750  
  2751  	// write event number
  2752  	buf[b] = 35
  2753  	b += 1
  2754  
  2755  	b += 22 // padding
  2756  
  2757  	return buf
  2758  }
  2759  
  2760  // SequenceId returns the sequence id attached to the GeGeneric event.
  2761  // Events without a sequence number (KeymapNotify) return 0.
  2762  // This is mostly used internally.
  2763  func (v GeGenericEvent) SequenceId() uint16 {
  2764  	return v.Sequence
  2765  }
  2766  
  2767  // String is a rudimentary string representation of GeGenericEvent.
  2768  func (v GeGenericEvent) String() string {
  2769  	fieldVals := make([]string, 0, 1)
  2770  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  2771  	return "GeGeneric {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2772  }
  2773  
  2774  func init() {
  2775  	xgb.NewEventFuncs[35] = GeGenericEventNew
  2776  }
  2777  
  2778  const (
  2779  	GetPropertyTypeAny = 0
  2780  )
  2781  
  2782  const (
  2783  	GrabAny = 0
  2784  )
  2785  
  2786  const (
  2787  	GrabModeSync  = 0
  2788  	GrabModeAsync = 1
  2789  )
  2790  
  2791  const (
  2792  	GrabStatusSuccess        = 0
  2793  	GrabStatusAlreadyGrabbed = 1
  2794  	GrabStatusInvalidTime    = 2
  2795  	GrabStatusNotViewable    = 3
  2796  	GrabStatusFrozen         = 4
  2797  )
  2798  
  2799  // GraphicsExposure is the event number for a GraphicsExposureEvent.
  2800  const GraphicsExposure = 13
  2801  
  2802  type GraphicsExposureEvent struct {
  2803  	Sequence uint16
  2804  	// padding: 1 bytes
  2805  	Drawable    Drawable
  2806  	X           uint16
  2807  	Y           uint16
  2808  	Width       uint16
  2809  	Height      uint16
  2810  	MinorOpcode uint16
  2811  	Count       uint16
  2812  	MajorOpcode byte
  2813  	// padding: 3 bytes
  2814  }
  2815  
  2816  // GraphicsExposureEventNew constructs a GraphicsExposureEvent value that implements xgb.Event from a byte slice.
  2817  func GraphicsExposureEventNew(buf []byte) xgb.Event {
  2818  	v := GraphicsExposureEvent{}
  2819  	b := 1 // don't read event number
  2820  
  2821  	b += 1 // padding
  2822  
  2823  	v.Sequence = xgb.Get16(buf[b:])
  2824  	b += 2
  2825  
  2826  	v.Drawable = Drawable(xgb.Get32(buf[b:]))
  2827  	b += 4
  2828  
  2829  	v.X = xgb.Get16(buf[b:])
  2830  	b += 2
  2831  
  2832  	v.Y = xgb.Get16(buf[b:])
  2833  	b += 2
  2834  
  2835  	v.Width = xgb.Get16(buf[b:])
  2836  	b += 2
  2837  
  2838  	v.Height = xgb.Get16(buf[b:])
  2839  	b += 2
  2840  
  2841  	v.MinorOpcode = xgb.Get16(buf[b:])
  2842  	b += 2
  2843  
  2844  	v.Count = xgb.Get16(buf[b:])
  2845  	b += 2
  2846  
  2847  	v.MajorOpcode = buf[b]
  2848  	b += 1
  2849  
  2850  	b += 3 // padding
  2851  
  2852  	return v
  2853  }
  2854  
  2855  // Bytes writes a GraphicsExposureEvent value to a byte slice.
  2856  func (v GraphicsExposureEvent) Bytes() []byte {
  2857  	buf := make([]byte, 32)
  2858  	b := 0
  2859  
  2860  	// write event number
  2861  	buf[b] = 13
  2862  	b += 1
  2863  
  2864  	b += 1 // padding
  2865  
  2866  	b += 2 // skip sequence number
  2867  
  2868  	xgb.Put32(buf[b:], uint32(v.Drawable))
  2869  	b += 4
  2870  
  2871  	xgb.Put16(buf[b:], v.X)
  2872  	b += 2
  2873  
  2874  	xgb.Put16(buf[b:], v.Y)
  2875  	b += 2
  2876  
  2877  	xgb.Put16(buf[b:], v.Width)
  2878  	b += 2
  2879  
  2880  	xgb.Put16(buf[b:], v.Height)
  2881  	b += 2
  2882  
  2883  	xgb.Put16(buf[b:], v.MinorOpcode)
  2884  	b += 2
  2885  
  2886  	xgb.Put16(buf[b:], v.Count)
  2887  	b += 2
  2888  
  2889  	buf[b] = v.MajorOpcode
  2890  	b += 1
  2891  
  2892  	b += 3 // padding
  2893  
  2894  	return buf
  2895  }
  2896  
  2897  // SequenceId returns the sequence id attached to the GraphicsExposure event.
  2898  // Events without a sequence number (KeymapNotify) return 0.
  2899  // This is mostly used internally.
  2900  func (v GraphicsExposureEvent) SequenceId() uint16 {
  2901  	return v.Sequence
  2902  }
  2903  
  2904  // String is a rudimentary string representation of GraphicsExposureEvent.
  2905  func (v GraphicsExposureEvent) String() string {
  2906  	fieldVals := make([]string, 0, 10)
  2907  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  2908  	fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
  2909  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  2910  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  2911  	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
  2912  	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
  2913  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", v.MinorOpcode))
  2914  	fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
  2915  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", v.MajorOpcode))
  2916  	return "GraphicsExposure {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  2917  }
  2918  
  2919  func init() {
  2920  	xgb.NewEventFuncs[13] = GraphicsExposureEventNew
  2921  }
  2922  
  2923  const (
  2924  	GravityBitForget = 0
  2925  	GravityWinUnmap  = 0
  2926  	GravityNorthWest = 1
  2927  	GravityNorth     = 2
  2928  	GravityNorthEast = 3
  2929  	GravityWest      = 4
  2930  	GravityCenter    = 5
  2931  	GravityEast      = 6
  2932  	GravitySouthWest = 7
  2933  	GravitySouth     = 8
  2934  	GravitySouthEast = 9
  2935  	GravityStatic    = 10
  2936  )
  2937  
  2938  // GravityNotify is the event number for a GravityNotifyEvent.
  2939  const GravityNotify = 24
  2940  
  2941  type GravityNotifyEvent struct {
  2942  	Sequence uint16
  2943  	// padding: 1 bytes
  2944  	Event  Window
  2945  	Window Window
  2946  	X      int16
  2947  	Y      int16
  2948  }
  2949  
  2950  // GravityNotifyEventNew constructs a GravityNotifyEvent value that implements xgb.Event from a byte slice.
  2951  func GravityNotifyEventNew(buf []byte) xgb.Event {
  2952  	v := GravityNotifyEvent{}
  2953  	b := 1 // don't read event number
  2954  
  2955  	b += 1 // padding
  2956  
  2957  	v.Sequence = xgb.Get16(buf[b:])
  2958  	b += 2
  2959  
  2960  	v.Event = Window(xgb.Get32(buf[b:]))
  2961  	b += 4
  2962  
  2963  	v.Window = Window(xgb.Get32(buf[b:]))
  2964  	b += 4
  2965  
  2966  	v.X = int16(xgb.Get16(buf[b:]))
  2967  	b += 2
  2968  
  2969  	v.Y = int16(xgb.Get16(buf[b:]))
  2970  	b += 2
  2971  
  2972  	return v
  2973  }
  2974  
  2975  // Bytes writes a GravityNotifyEvent value to a byte slice.
  2976  func (v GravityNotifyEvent) Bytes() []byte {
  2977  	buf := make([]byte, 32)
  2978  	b := 0
  2979  
  2980  	// write event number
  2981  	buf[b] = 24
  2982  	b += 1
  2983  
  2984  	b += 1 // padding
  2985  
  2986  	b += 2 // skip sequence number
  2987  
  2988  	xgb.Put32(buf[b:], uint32(v.Event))
  2989  	b += 4
  2990  
  2991  	xgb.Put32(buf[b:], uint32(v.Window))
  2992  	b += 4
  2993  
  2994  	xgb.Put16(buf[b:], uint16(v.X))
  2995  	b += 2
  2996  
  2997  	xgb.Put16(buf[b:], uint16(v.Y))
  2998  	b += 2
  2999  
  3000  	return buf
  3001  }
  3002  
  3003  // SequenceId returns the sequence id attached to the GravityNotify event.
  3004  // Events without a sequence number (KeymapNotify) return 0.
  3005  // This is mostly used internally.
  3006  func (v GravityNotifyEvent) SequenceId() uint16 {
  3007  	return v.Sequence
  3008  }
  3009  
  3010  // String is a rudimentary string representation of GravityNotifyEvent.
  3011  func (v GravityNotifyEvent) String() string {
  3012  	fieldVals := make([]string, 0, 5)
  3013  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3014  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  3015  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  3016  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  3017  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  3018  	return "GravityNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3019  }
  3020  
  3021  func init() {
  3022  	xgb.NewEventFuncs[24] = GravityNotifyEventNew
  3023  }
  3024  
  3025  const (
  3026  	GxClear        = 0
  3027  	GxAnd          = 1
  3028  	GxAndReverse   = 2
  3029  	GxCopy         = 3
  3030  	GxAndInverted  = 4
  3031  	GxNoop         = 5
  3032  	GxXor          = 6
  3033  	GxOr           = 7
  3034  	GxNor          = 8
  3035  	GxEquiv        = 9
  3036  	GxInvert       = 10
  3037  	GxOrReverse    = 11
  3038  	GxCopyInverted = 12
  3039  	GxOrInverted   = 13
  3040  	GxNand         = 14
  3041  	GxSet          = 15
  3042  )
  3043  
  3044  type Host struct {
  3045  	Family byte
  3046  	// padding: 1 bytes
  3047  	AddressLen uint16
  3048  	Address    []byte // size: xgb.Pad((int(AddressLen) * 1))
  3049  }
  3050  
  3051  // HostRead reads a byte slice into a Host value.
  3052  func HostRead(buf []byte, v *Host) int {
  3053  	b := 0
  3054  
  3055  	v.Family = buf[b]
  3056  	b += 1
  3057  
  3058  	b += 1 // padding
  3059  
  3060  	v.AddressLen = xgb.Get16(buf[b:])
  3061  	b += 2
  3062  
  3063  	v.Address = make([]byte, v.AddressLen)
  3064  	copy(v.Address[:v.AddressLen], buf[b:])
  3065  	b += int(v.AddressLen)
  3066  
  3067  	return b
  3068  }
  3069  
  3070  // HostReadList reads a byte slice into a list of Host values.
  3071  func HostReadList(buf []byte, dest []Host) int {
  3072  	b := 0
  3073  	for i := 0; i < len(dest); i++ {
  3074  		dest[i] = Host{}
  3075  		b += HostRead(buf[b:], &dest[i])
  3076  	}
  3077  	return xgb.Pad(b)
  3078  }
  3079  
  3080  // Bytes writes a Host value to a byte slice.
  3081  func (v Host) Bytes() []byte {
  3082  	buf := make([]byte, (4 + xgb.Pad((int(v.AddressLen) * 1))))
  3083  	b := 0
  3084  
  3085  	buf[b] = v.Family
  3086  	b += 1
  3087  
  3088  	b += 1 // padding
  3089  
  3090  	xgb.Put16(buf[b:], v.AddressLen)
  3091  	b += 2
  3092  
  3093  	copy(buf[b:], v.Address[:v.AddressLen])
  3094  	b += int(v.AddressLen)
  3095  
  3096  	return buf[:b]
  3097  }
  3098  
  3099  // HostListBytes writes a list of Host values to a byte slice.
  3100  func HostListBytes(buf []byte, list []Host) int {
  3101  	b := 0
  3102  	var structBytes []byte
  3103  	for _, item := range list {
  3104  		structBytes = item.Bytes()
  3105  		copy(buf[b:], structBytes)
  3106  		b += len(structBytes)
  3107  	}
  3108  	return xgb.Pad(b)
  3109  }
  3110  
  3111  // HostListSize computes the size (bytes) of a list of Host values.
  3112  func HostListSize(list []Host) int {
  3113  	size := 0
  3114  	for _, item := range list {
  3115  		size += (4 + xgb.Pad((int(item.AddressLen) * 1)))
  3116  	}
  3117  	return size
  3118  }
  3119  
  3120  const (
  3121  	HostModeInsert = 0
  3122  	HostModeDelete = 1
  3123  )
  3124  
  3125  // BadIDChoice is the error number for a BadIDChoice.
  3126  const BadIDChoice = 14
  3127  
  3128  type IDChoiceError ValueError
  3129  
  3130  // IDChoiceErrorNew constructs a IDChoiceError value that implements xgb.Error from a byte slice.
  3131  func IDChoiceErrorNew(buf []byte) xgb.Error {
  3132  	v := IDChoiceError(ValueErrorNew(buf).(ValueError))
  3133  	v.NiceName = "IDChoice"
  3134  	return v
  3135  }
  3136  
  3137  // SequenceId returns the sequence id attached to the BadIDChoice error.
  3138  // This is mostly used internally.
  3139  func (err IDChoiceError) SequenceId() uint16 {
  3140  	return err.Sequence
  3141  }
  3142  
  3143  // BadId returns the 'BadValue' number if one exists for the BadIDChoice error. If no bad value exists, 0 is returned.
  3144  func (err IDChoiceError) BadId() uint32 {
  3145  	return err.BadValue
  3146  }
  3147  
  3148  // Error returns a rudimentary string representation of the BadIDChoice error.
  3149  func (err IDChoiceError) Error() string {
  3150  	fieldVals := make([]string, 0, 4)
  3151  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  3152  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  3153  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  3154  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  3155  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  3156  	return "BadIDChoice {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3157  }
  3158  
  3159  func init() {
  3160  	xgb.NewErrorFuncs[14] = IDChoiceErrorNew
  3161  }
  3162  
  3163  const (
  3164  	ImageFormatXYBitmap = 0
  3165  	ImageFormatXYPixmap = 1
  3166  	ImageFormatZPixmap  = 2
  3167  )
  3168  
  3169  const (
  3170  	ImageOrderLSBFirst = 0
  3171  	ImageOrderMSBFirst = 1
  3172  )
  3173  
  3174  // BadImplementation is the error number for a BadImplementation.
  3175  const BadImplementation = 17
  3176  
  3177  type ImplementationError RequestError
  3178  
  3179  // ImplementationErrorNew constructs a ImplementationError value that implements xgb.Error from a byte slice.
  3180  func ImplementationErrorNew(buf []byte) xgb.Error {
  3181  	v := ImplementationError(RequestErrorNew(buf).(RequestError))
  3182  	v.NiceName = "Implementation"
  3183  	return v
  3184  }
  3185  
  3186  // SequenceId returns the sequence id attached to the BadImplementation error.
  3187  // This is mostly used internally.
  3188  func (err ImplementationError) SequenceId() uint16 {
  3189  	return err.Sequence
  3190  }
  3191  
  3192  // BadId returns the 'BadValue' number if one exists for the BadImplementation error. If no bad value exists, 0 is returned.
  3193  func (err ImplementationError) BadId() uint32 {
  3194  	return err.BadValue
  3195  }
  3196  
  3197  // Error returns a rudimentary string representation of the BadImplementation error.
  3198  func (err ImplementationError) Error() string {
  3199  	fieldVals := make([]string, 0, 4)
  3200  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  3201  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  3202  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  3203  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  3204  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  3205  	return "BadImplementation {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3206  }
  3207  
  3208  func init() {
  3209  	xgb.NewErrorFuncs[17] = ImplementationErrorNew
  3210  }
  3211  
  3212  const (
  3213  	InputFocusNone           = 0
  3214  	InputFocusPointerRoot    = 1
  3215  	InputFocusParent         = 2
  3216  	InputFocusFollowKeyboard = 3
  3217  )
  3218  
  3219  const (
  3220  	JoinStyleMiter = 0
  3221  	JoinStyleRound = 1
  3222  	JoinStyleBevel = 2
  3223  )
  3224  
  3225  const (
  3226  	KbKeyClickPercent = 1
  3227  	KbBellPercent     = 2
  3228  	KbBellPitch       = 4
  3229  	KbBellDuration    = 8
  3230  	KbLed             = 16
  3231  	KbLedMode         = 32
  3232  	KbKey             = 64
  3233  	KbAutoRepeatMode  = 128
  3234  )
  3235  
  3236  const (
  3237  	KeyButMaskShift   = 1
  3238  	KeyButMaskLock    = 2
  3239  	KeyButMaskControl = 4
  3240  	KeyButMaskMod1    = 8
  3241  	KeyButMaskMod2    = 16
  3242  	KeyButMaskMod3    = 32
  3243  	KeyButMaskMod4    = 64
  3244  	KeyButMaskMod5    = 128
  3245  	KeyButMaskButton1 = 256
  3246  	KeyButMaskButton2 = 512
  3247  	KeyButMaskButton3 = 1024
  3248  	KeyButMaskButton4 = 2048
  3249  	KeyButMaskButton5 = 4096
  3250  )
  3251  
  3252  // KeyPress is the event number for a KeyPressEvent.
  3253  const KeyPress = 2
  3254  
  3255  type KeyPressEvent struct {
  3256  	Sequence   uint16
  3257  	Detail     Keycode
  3258  	Time       Timestamp
  3259  	Root       Window
  3260  	Event      Window
  3261  	Child      Window
  3262  	RootX      int16
  3263  	RootY      int16
  3264  	EventX     int16
  3265  	EventY     int16
  3266  	State      uint16
  3267  	SameScreen bool
  3268  	// padding: 1 bytes
  3269  }
  3270  
  3271  // KeyPressEventNew constructs a KeyPressEvent value that implements xgb.Event from a byte slice.
  3272  func KeyPressEventNew(buf []byte) xgb.Event {
  3273  	v := KeyPressEvent{}
  3274  	b := 1 // don't read event number
  3275  
  3276  	v.Detail = Keycode(buf[b])
  3277  	b += 1
  3278  
  3279  	v.Sequence = xgb.Get16(buf[b:])
  3280  	b += 2
  3281  
  3282  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  3283  	b += 4
  3284  
  3285  	v.Root = Window(xgb.Get32(buf[b:]))
  3286  	b += 4
  3287  
  3288  	v.Event = Window(xgb.Get32(buf[b:]))
  3289  	b += 4
  3290  
  3291  	v.Child = Window(xgb.Get32(buf[b:]))
  3292  	b += 4
  3293  
  3294  	v.RootX = int16(xgb.Get16(buf[b:]))
  3295  	b += 2
  3296  
  3297  	v.RootY = int16(xgb.Get16(buf[b:]))
  3298  	b += 2
  3299  
  3300  	v.EventX = int16(xgb.Get16(buf[b:]))
  3301  	b += 2
  3302  
  3303  	v.EventY = int16(xgb.Get16(buf[b:]))
  3304  	b += 2
  3305  
  3306  	v.State = xgb.Get16(buf[b:])
  3307  	b += 2
  3308  
  3309  	if buf[b] == 1 {
  3310  		v.SameScreen = true
  3311  	} else {
  3312  		v.SameScreen = false
  3313  	}
  3314  	b += 1
  3315  
  3316  	b += 1 // padding
  3317  
  3318  	return v
  3319  }
  3320  
  3321  // Bytes writes a KeyPressEvent value to a byte slice.
  3322  func (v KeyPressEvent) Bytes() []byte {
  3323  	buf := make([]byte, 32)
  3324  	b := 0
  3325  
  3326  	// write event number
  3327  	buf[b] = 2
  3328  	b += 1
  3329  
  3330  	buf[b] = byte(v.Detail)
  3331  	b += 1
  3332  
  3333  	b += 2 // skip sequence number
  3334  
  3335  	xgb.Put32(buf[b:], uint32(v.Time))
  3336  	b += 4
  3337  
  3338  	xgb.Put32(buf[b:], uint32(v.Root))
  3339  	b += 4
  3340  
  3341  	xgb.Put32(buf[b:], uint32(v.Event))
  3342  	b += 4
  3343  
  3344  	xgb.Put32(buf[b:], uint32(v.Child))
  3345  	b += 4
  3346  
  3347  	xgb.Put16(buf[b:], uint16(v.RootX))
  3348  	b += 2
  3349  
  3350  	xgb.Put16(buf[b:], uint16(v.RootY))
  3351  	b += 2
  3352  
  3353  	xgb.Put16(buf[b:], uint16(v.EventX))
  3354  	b += 2
  3355  
  3356  	xgb.Put16(buf[b:], uint16(v.EventY))
  3357  	b += 2
  3358  
  3359  	xgb.Put16(buf[b:], v.State)
  3360  	b += 2
  3361  
  3362  	if v.SameScreen {
  3363  		buf[b] = 1
  3364  	} else {
  3365  		buf[b] = 0
  3366  	}
  3367  	b += 1
  3368  
  3369  	b += 1 // padding
  3370  
  3371  	return buf
  3372  }
  3373  
  3374  // SequenceId returns the sequence id attached to the KeyPress event.
  3375  // Events without a sequence number (KeymapNotify) return 0.
  3376  // This is mostly used internally.
  3377  func (v KeyPressEvent) SequenceId() uint16 {
  3378  	return v.Sequence
  3379  }
  3380  
  3381  // String is a rudimentary string representation of KeyPressEvent.
  3382  func (v KeyPressEvent) String() string {
  3383  	fieldVals := make([]string, 0, 12)
  3384  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3385  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  3386  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  3387  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
  3388  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  3389  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
  3390  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
  3391  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
  3392  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
  3393  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
  3394  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  3395  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
  3396  	return "KeyPress {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3397  }
  3398  
  3399  func init() {
  3400  	xgb.NewEventFuncs[2] = KeyPressEventNew
  3401  }
  3402  
  3403  // KeyRelease is the event number for a KeyReleaseEvent.
  3404  const KeyRelease = 3
  3405  
  3406  type KeyReleaseEvent KeyPressEvent
  3407  
  3408  // KeyReleaseEventNew constructs a KeyReleaseEvent value that implements xgb.Event from a byte slice.
  3409  func KeyReleaseEventNew(buf []byte) xgb.Event {
  3410  	return KeyReleaseEvent(KeyPressEventNew(buf).(KeyPressEvent))
  3411  }
  3412  
  3413  // Bytes writes a KeyReleaseEvent value to a byte slice.
  3414  func (v KeyReleaseEvent) Bytes() []byte {
  3415  	return KeyPressEvent(v).Bytes()
  3416  }
  3417  
  3418  // SequenceId returns the sequence id attached to the KeyRelease event.
  3419  // Events without a sequence number (KeymapNotify) return 0.
  3420  // This is mostly used internally.
  3421  func (v KeyReleaseEvent) SequenceId() uint16 {
  3422  	return v.Sequence
  3423  }
  3424  
  3425  func (v KeyReleaseEvent) String() string {
  3426  	fieldVals := make([]string, 0, 12)
  3427  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3428  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  3429  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  3430  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
  3431  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  3432  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
  3433  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
  3434  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
  3435  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
  3436  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
  3437  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  3438  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
  3439  	return "KeyRelease {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3440  }
  3441  
  3442  func init() {
  3443  	xgb.NewEventFuncs[3] = KeyReleaseEventNew
  3444  }
  3445  
  3446  type Keycode byte
  3447  
  3448  // KeymapNotify is the event number for a KeymapNotifyEvent.
  3449  const KeymapNotify = 11
  3450  
  3451  type KeymapNotifyEvent struct {
  3452  	Keys []byte // size: 32
  3453  }
  3454  
  3455  // KeymapNotifyEventNew constructs a KeymapNotifyEvent value that implements xgb.Event from a byte slice.
  3456  func KeymapNotifyEventNew(buf []byte) xgb.Event {
  3457  	v := KeymapNotifyEvent{}
  3458  	b := 1 // don't read event number
  3459  
  3460  	v.Keys = make([]byte, 31)
  3461  	copy(v.Keys[:31], buf[b:])
  3462  	b += int(31)
  3463  
  3464  	return v
  3465  }
  3466  
  3467  // Bytes writes a KeymapNotifyEvent value to a byte slice.
  3468  func (v KeymapNotifyEvent) Bytes() []byte {
  3469  	buf := make([]byte, 32)
  3470  	b := 0
  3471  
  3472  	// write event number
  3473  	buf[b] = 11
  3474  	b += 1
  3475  
  3476  	copy(buf[b:], v.Keys[:31])
  3477  	b += int(31)
  3478  
  3479  	return buf
  3480  }
  3481  
  3482  // SequenceId returns the sequence id attached to the KeymapNotify event.
  3483  // Events without a sequence number (KeymapNotify) return 0.
  3484  // This is mostly used internally.
  3485  func (v KeymapNotifyEvent) SequenceId() uint16 {
  3486  	return uint16(0)
  3487  }
  3488  
  3489  // String is a rudimentary string representation of KeymapNotifyEvent.
  3490  func (v KeymapNotifyEvent) String() string {
  3491  	fieldVals := make([]string, 0, 1)
  3492  	return "KeymapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3493  }
  3494  
  3495  func init() {
  3496  	xgb.NewEventFuncs[11] = KeymapNotifyEventNew
  3497  }
  3498  
  3499  type Keysym uint32
  3500  
  3501  const (
  3502  	KillAllTemporary = 0
  3503  )
  3504  
  3505  // LeaveNotify is the event number for a LeaveNotifyEvent.
  3506  const LeaveNotify = 8
  3507  
  3508  type LeaveNotifyEvent EnterNotifyEvent
  3509  
  3510  // LeaveNotifyEventNew constructs a LeaveNotifyEvent value that implements xgb.Event from a byte slice.
  3511  func LeaveNotifyEventNew(buf []byte) xgb.Event {
  3512  	return LeaveNotifyEvent(EnterNotifyEventNew(buf).(EnterNotifyEvent))
  3513  }
  3514  
  3515  // Bytes writes a LeaveNotifyEvent value to a byte slice.
  3516  func (v LeaveNotifyEvent) Bytes() []byte {
  3517  	return EnterNotifyEvent(v).Bytes()
  3518  }
  3519  
  3520  // SequenceId returns the sequence id attached to the LeaveNotify event.
  3521  // Events without a sequence number (KeymapNotify) return 0.
  3522  // This is mostly used internally.
  3523  func (v LeaveNotifyEvent) SequenceId() uint16 {
  3524  	return v.Sequence
  3525  }
  3526  
  3527  func (v LeaveNotifyEvent) String() string {
  3528  	fieldVals := make([]string, 0, 12)
  3529  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3530  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  3531  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  3532  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
  3533  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  3534  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
  3535  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
  3536  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
  3537  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
  3538  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
  3539  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  3540  	fieldVals = append(fieldVals, xgb.Sprintf("Mode: %d", v.Mode))
  3541  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreenFocus: %d", v.SameScreenFocus))
  3542  	return "LeaveNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3543  }
  3544  
  3545  func init() {
  3546  	xgb.NewEventFuncs[8] = LeaveNotifyEventNew
  3547  }
  3548  
  3549  const (
  3550  	LedModeOff = 0
  3551  	LedModeOn  = 1
  3552  )
  3553  
  3554  // BadLength is the error number for a BadLength.
  3555  const BadLength = 16
  3556  
  3557  type LengthError RequestError
  3558  
  3559  // LengthErrorNew constructs a LengthError value that implements xgb.Error from a byte slice.
  3560  func LengthErrorNew(buf []byte) xgb.Error {
  3561  	v := LengthError(RequestErrorNew(buf).(RequestError))
  3562  	v.NiceName = "Length"
  3563  	return v
  3564  }
  3565  
  3566  // SequenceId returns the sequence id attached to the BadLength error.
  3567  // This is mostly used internally.
  3568  func (err LengthError) SequenceId() uint16 {
  3569  	return err.Sequence
  3570  }
  3571  
  3572  // BadId returns the 'BadValue' number if one exists for the BadLength error. If no bad value exists, 0 is returned.
  3573  func (err LengthError) BadId() uint32 {
  3574  	return err.BadValue
  3575  }
  3576  
  3577  // Error returns a rudimentary string representation of the BadLength error.
  3578  func (err LengthError) Error() string {
  3579  	fieldVals := make([]string, 0, 4)
  3580  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  3581  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  3582  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  3583  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  3584  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  3585  	return "BadLength {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3586  }
  3587  
  3588  func init() {
  3589  	xgb.NewErrorFuncs[16] = LengthErrorNew
  3590  }
  3591  
  3592  const (
  3593  	LineStyleSolid      = 0
  3594  	LineStyleOnOffDash  = 1
  3595  	LineStyleDoubleDash = 2
  3596  )
  3597  
  3598  const (
  3599  	MapIndexShift   = 0
  3600  	MapIndexLock    = 1
  3601  	MapIndexControl = 2
  3602  	MapIndex1       = 3
  3603  	MapIndex2       = 4
  3604  	MapIndex3       = 5
  3605  	MapIndex4       = 6
  3606  	MapIndex5       = 7
  3607  )
  3608  
  3609  // MapNotify is the event number for a MapNotifyEvent.
  3610  const MapNotify = 19
  3611  
  3612  type MapNotifyEvent struct {
  3613  	Sequence uint16
  3614  	// padding: 1 bytes
  3615  	Event            Window
  3616  	Window           Window
  3617  	OverrideRedirect bool
  3618  	// padding: 3 bytes
  3619  }
  3620  
  3621  // MapNotifyEventNew constructs a MapNotifyEvent value that implements xgb.Event from a byte slice.
  3622  func MapNotifyEventNew(buf []byte) xgb.Event {
  3623  	v := MapNotifyEvent{}
  3624  	b := 1 // don't read event number
  3625  
  3626  	b += 1 // padding
  3627  
  3628  	v.Sequence = xgb.Get16(buf[b:])
  3629  	b += 2
  3630  
  3631  	v.Event = Window(xgb.Get32(buf[b:]))
  3632  	b += 4
  3633  
  3634  	v.Window = Window(xgb.Get32(buf[b:]))
  3635  	b += 4
  3636  
  3637  	if buf[b] == 1 {
  3638  		v.OverrideRedirect = true
  3639  	} else {
  3640  		v.OverrideRedirect = false
  3641  	}
  3642  	b += 1
  3643  
  3644  	b += 3 // padding
  3645  
  3646  	return v
  3647  }
  3648  
  3649  // Bytes writes a MapNotifyEvent value to a byte slice.
  3650  func (v MapNotifyEvent) Bytes() []byte {
  3651  	buf := make([]byte, 32)
  3652  	b := 0
  3653  
  3654  	// write event number
  3655  	buf[b] = 19
  3656  	b += 1
  3657  
  3658  	b += 1 // padding
  3659  
  3660  	b += 2 // skip sequence number
  3661  
  3662  	xgb.Put32(buf[b:], uint32(v.Event))
  3663  	b += 4
  3664  
  3665  	xgb.Put32(buf[b:], uint32(v.Window))
  3666  	b += 4
  3667  
  3668  	if v.OverrideRedirect {
  3669  		buf[b] = 1
  3670  	} else {
  3671  		buf[b] = 0
  3672  	}
  3673  	b += 1
  3674  
  3675  	b += 3 // padding
  3676  
  3677  	return buf
  3678  }
  3679  
  3680  // SequenceId returns the sequence id attached to the MapNotify event.
  3681  // Events without a sequence number (KeymapNotify) return 0.
  3682  // This is mostly used internally.
  3683  func (v MapNotifyEvent) SequenceId() uint16 {
  3684  	return v.Sequence
  3685  }
  3686  
  3687  // String is a rudimentary string representation of MapNotifyEvent.
  3688  func (v MapNotifyEvent) String() string {
  3689  	fieldVals := make([]string, 0, 5)
  3690  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3691  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  3692  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  3693  	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
  3694  	return "MapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3695  }
  3696  
  3697  func init() {
  3698  	xgb.NewEventFuncs[19] = MapNotifyEventNew
  3699  }
  3700  
  3701  // MapRequest is the event number for a MapRequestEvent.
  3702  const MapRequest = 20
  3703  
  3704  type MapRequestEvent struct {
  3705  	Sequence uint16
  3706  	// padding: 1 bytes
  3707  	Parent Window
  3708  	Window Window
  3709  }
  3710  
  3711  // MapRequestEventNew constructs a MapRequestEvent value that implements xgb.Event from a byte slice.
  3712  func MapRequestEventNew(buf []byte) xgb.Event {
  3713  	v := MapRequestEvent{}
  3714  	b := 1 // don't read event number
  3715  
  3716  	b += 1 // padding
  3717  
  3718  	v.Sequence = xgb.Get16(buf[b:])
  3719  	b += 2
  3720  
  3721  	v.Parent = Window(xgb.Get32(buf[b:]))
  3722  	b += 4
  3723  
  3724  	v.Window = Window(xgb.Get32(buf[b:]))
  3725  	b += 4
  3726  
  3727  	return v
  3728  }
  3729  
  3730  // Bytes writes a MapRequestEvent value to a byte slice.
  3731  func (v MapRequestEvent) Bytes() []byte {
  3732  	buf := make([]byte, 32)
  3733  	b := 0
  3734  
  3735  	// write event number
  3736  	buf[b] = 20
  3737  	b += 1
  3738  
  3739  	b += 1 // padding
  3740  
  3741  	b += 2 // skip sequence number
  3742  
  3743  	xgb.Put32(buf[b:], uint32(v.Parent))
  3744  	b += 4
  3745  
  3746  	xgb.Put32(buf[b:], uint32(v.Window))
  3747  	b += 4
  3748  
  3749  	return buf
  3750  }
  3751  
  3752  // SequenceId returns the sequence id attached to the MapRequest event.
  3753  // Events without a sequence number (KeymapNotify) return 0.
  3754  // This is mostly used internally.
  3755  func (v MapRequestEvent) SequenceId() uint16 {
  3756  	return v.Sequence
  3757  }
  3758  
  3759  // String is a rudimentary string representation of MapRequestEvent.
  3760  func (v MapRequestEvent) String() string {
  3761  	fieldVals := make([]string, 0, 3)
  3762  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3763  	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
  3764  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  3765  	return "MapRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3766  }
  3767  
  3768  func init() {
  3769  	xgb.NewEventFuncs[20] = MapRequestEventNew
  3770  }
  3771  
  3772  const (
  3773  	MapStateUnmapped   = 0
  3774  	MapStateUnviewable = 1
  3775  	MapStateViewable   = 2
  3776  )
  3777  
  3778  const (
  3779  	MappingModifier = 0
  3780  	MappingKeyboard = 1
  3781  	MappingPointer  = 2
  3782  )
  3783  
  3784  // MappingNotify is the event number for a MappingNotifyEvent.
  3785  const MappingNotify = 34
  3786  
  3787  type MappingNotifyEvent struct {
  3788  	Sequence uint16
  3789  	// padding: 1 bytes
  3790  	Request      byte
  3791  	FirstKeycode Keycode
  3792  	Count        byte
  3793  	// padding: 1 bytes
  3794  }
  3795  
  3796  // MappingNotifyEventNew constructs a MappingNotifyEvent value that implements xgb.Event from a byte slice.
  3797  func MappingNotifyEventNew(buf []byte) xgb.Event {
  3798  	v := MappingNotifyEvent{}
  3799  	b := 1 // don't read event number
  3800  
  3801  	b += 1 // padding
  3802  
  3803  	v.Sequence = xgb.Get16(buf[b:])
  3804  	b += 2
  3805  
  3806  	v.Request = buf[b]
  3807  	b += 1
  3808  
  3809  	v.FirstKeycode = Keycode(buf[b])
  3810  	b += 1
  3811  
  3812  	v.Count = buf[b]
  3813  	b += 1
  3814  
  3815  	b += 1 // padding
  3816  
  3817  	return v
  3818  }
  3819  
  3820  // Bytes writes a MappingNotifyEvent value to a byte slice.
  3821  func (v MappingNotifyEvent) Bytes() []byte {
  3822  	buf := make([]byte, 32)
  3823  	b := 0
  3824  
  3825  	// write event number
  3826  	buf[b] = 34
  3827  	b += 1
  3828  
  3829  	b += 1 // padding
  3830  
  3831  	b += 2 // skip sequence number
  3832  
  3833  	buf[b] = v.Request
  3834  	b += 1
  3835  
  3836  	buf[b] = byte(v.FirstKeycode)
  3837  	b += 1
  3838  
  3839  	buf[b] = v.Count
  3840  	b += 1
  3841  
  3842  	b += 1 // padding
  3843  
  3844  	return buf
  3845  }
  3846  
  3847  // SequenceId returns the sequence id attached to the MappingNotify event.
  3848  // Events without a sequence number (KeymapNotify) return 0.
  3849  // This is mostly used internally.
  3850  func (v MappingNotifyEvent) SequenceId() uint16 {
  3851  	return v.Sequence
  3852  }
  3853  
  3854  // String is a rudimentary string representation of MappingNotifyEvent.
  3855  func (v MappingNotifyEvent) String() string {
  3856  	fieldVals := make([]string, 0, 5)
  3857  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  3858  	fieldVals = append(fieldVals, xgb.Sprintf("Request: %d", v.Request))
  3859  	fieldVals = append(fieldVals, xgb.Sprintf("FirstKeycode: %d", v.FirstKeycode))
  3860  	fieldVals = append(fieldVals, xgb.Sprintf("Count: %d", v.Count))
  3861  	return "MappingNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3862  }
  3863  
  3864  func init() {
  3865  	xgb.NewEventFuncs[34] = MappingNotifyEventNew
  3866  }
  3867  
  3868  const (
  3869  	MappingStatusSuccess = 0
  3870  	MappingStatusBusy    = 1
  3871  	MappingStatusFailure = 2
  3872  )
  3873  
  3874  // BadMatch is the error number for a BadMatch.
  3875  const BadMatch = 8
  3876  
  3877  type MatchError RequestError
  3878  
  3879  // MatchErrorNew constructs a MatchError value that implements xgb.Error from a byte slice.
  3880  func MatchErrorNew(buf []byte) xgb.Error {
  3881  	v := MatchError(RequestErrorNew(buf).(RequestError))
  3882  	v.NiceName = "Match"
  3883  	return v
  3884  }
  3885  
  3886  // SequenceId returns the sequence id attached to the BadMatch error.
  3887  // This is mostly used internally.
  3888  func (err MatchError) SequenceId() uint16 {
  3889  	return err.Sequence
  3890  }
  3891  
  3892  // BadId returns the 'BadValue' number if one exists for the BadMatch error. If no bad value exists, 0 is returned.
  3893  func (err MatchError) BadId() uint32 {
  3894  	return err.BadValue
  3895  }
  3896  
  3897  // Error returns a rudimentary string representation of the BadMatch error.
  3898  func (err MatchError) Error() string {
  3899  	fieldVals := make([]string, 0, 4)
  3900  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  3901  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  3902  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  3903  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  3904  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  3905  	return "BadMatch {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  3906  }
  3907  
  3908  func init() {
  3909  	xgb.NewErrorFuncs[8] = MatchErrorNew
  3910  }
  3911  
  3912  const (
  3913  	ModMaskShift   = 1
  3914  	ModMaskLock    = 2
  3915  	ModMaskControl = 4
  3916  	ModMask1       = 8
  3917  	ModMask2       = 16
  3918  	ModMask3       = 32
  3919  	ModMask4       = 64
  3920  	ModMask5       = 128
  3921  	ModMaskAny     = 32768
  3922  )
  3923  
  3924  const (
  3925  	MotionNormal = 0
  3926  	MotionHint   = 1
  3927  )
  3928  
  3929  // MotionNotify is the event number for a MotionNotifyEvent.
  3930  const MotionNotify = 6
  3931  
  3932  type MotionNotifyEvent struct {
  3933  	Sequence   uint16
  3934  	Detail     byte
  3935  	Time       Timestamp
  3936  	Root       Window
  3937  	Event      Window
  3938  	Child      Window
  3939  	RootX      int16
  3940  	RootY      int16
  3941  	EventX     int16
  3942  	EventY     int16
  3943  	State      uint16
  3944  	SameScreen bool
  3945  	// padding: 1 bytes
  3946  }
  3947  
  3948  // MotionNotifyEventNew constructs a MotionNotifyEvent value that implements xgb.Event from a byte slice.
  3949  func MotionNotifyEventNew(buf []byte) xgb.Event {
  3950  	v := MotionNotifyEvent{}
  3951  	b := 1 // don't read event number
  3952  
  3953  	v.Detail = buf[b]
  3954  	b += 1
  3955  
  3956  	v.Sequence = xgb.Get16(buf[b:])
  3957  	b += 2
  3958  
  3959  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  3960  	b += 4
  3961  
  3962  	v.Root = Window(xgb.Get32(buf[b:]))
  3963  	b += 4
  3964  
  3965  	v.Event = Window(xgb.Get32(buf[b:]))
  3966  	b += 4
  3967  
  3968  	v.Child = Window(xgb.Get32(buf[b:]))
  3969  	b += 4
  3970  
  3971  	v.RootX = int16(xgb.Get16(buf[b:]))
  3972  	b += 2
  3973  
  3974  	v.RootY = int16(xgb.Get16(buf[b:]))
  3975  	b += 2
  3976  
  3977  	v.EventX = int16(xgb.Get16(buf[b:]))
  3978  	b += 2
  3979  
  3980  	v.EventY = int16(xgb.Get16(buf[b:]))
  3981  	b += 2
  3982  
  3983  	v.State = xgb.Get16(buf[b:])
  3984  	b += 2
  3985  
  3986  	if buf[b] == 1 {
  3987  		v.SameScreen = true
  3988  	} else {
  3989  		v.SameScreen = false
  3990  	}
  3991  	b += 1
  3992  
  3993  	b += 1 // padding
  3994  
  3995  	return v
  3996  }
  3997  
  3998  // Bytes writes a MotionNotifyEvent value to a byte slice.
  3999  func (v MotionNotifyEvent) Bytes() []byte {
  4000  	buf := make([]byte, 32)
  4001  	b := 0
  4002  
  4003  	// write event number
  4004  	buf[b] = 6
  4005  	b += 1
  4006  
  4007  	buf[b] = v.Detail
  4008  	b += 1
  4009  
  4010  	b += 2 // skip sequence number
  4011  
  4012  	xgb.Put32(buf[b:], uint32(v.Time))
  4013  	b += 4
  4014  
  4015  	xgb.Put32(buf[b:], uint32(v.Root))
  4016  	b += 4
  4017  
  4018  	xgb.Put32(buf[b:], uint32(v.Event))
  4019  	b += 4
  4020  
  4021  	xgb.Put32(buf[b:], uint32(v.Child))
  4022  	b += 4
  4023  
  4024  	xgb.Put16(buf[b:], uint16(v.RootX))
  4025  	b += 2
  4026  
  4027  	xgb.Put16(buf[b:], uint16(v.RootY))
  4028  	b += 2
  4029  
  4030  	xgb.Put16(buf[b:], uint16(v.EventX))
  4031  	b += 2
  4032  
  4033  	xgb.Put16(buf[b:], uint16(v.EventY))
  4034  	b += 2
  4035  
  4036  	xgb.Put16(buf[b:], v.State)
  4037  	b += 2
  4038  
  4039  	if v.SameScreen {
  4040  		buf[b] = 1
  4041  	} else {
  4042  		buf[b] = 0
  4043  	}
  4044  	b += 1
  4045  
  4046  	b += 1 // padding
  4047  
  4048  	return buf
  4049  }
  4050  
  4051  // SequenceId returns the sequence id attached to the MotionNotify event.
  4052  // Events without a sequence number (KeymapNotify) return 0.
  4053  // This is mostly used internally.
  4054  func (v MotionNotifyEvent) SequenceId() uint16 {
  4055  	return v.Sequence
  4056  }
  4057  
  4058  // String is a rudimentary string representation of MotionNotifyEvent.
  4059  func (v MotionNotifyEvent) String() string {
  4060  	fieldVals := make([]string, 0, 12)
  4061  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  4062  	fieldVals = append(fieldVals, xgb.Sprintf("Detail: %d", v.Detail))
  4063  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  4064  	fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
  4065  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  4066  	fieldVals = append(fieldVals, xgb.Sprintf("Child: %d", v.Child))
  4067  	fieldVals = append(fieldVals, xgb.Sprintf("RootX: %d", v.RootX))
  4068  	fieldVals = append(fieldVals, xgb.Sprintf("RootY: %d", v.RootY))
  4069  	fieldVals = append(fieldVals, xgb.Sprintf("EventX: %d", v.EventX))
  4070  	fieldVals = append(fieldVals, xgb.Sprintf("EventY: %d", v.EventY))
  4071  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  4072  	fieldVals = append(fieldVals, xgb.Sprintf("SameScreen: %t", v.SameScreen))
  4073  	return "MotionNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4074  }
  4075  
  4076  func init() {
  4077  	xgb.NewEventFuncs[6] = MotionNotifyEventNew
  4078  }
  4079  
  4080  // BadName is the error number for a BadName.
  4081  const BadName = 15
  4082  
  4083  type NameError RequestError
  4084  
  4085  // NameErrorNew constructs a NameError value that implements xgb.Error from a byte slice.
  4086  func NameErrorNew(buf []byte) xgb.Error {
  4087  	v := NameError(RequestErrorNew(buf).(RequestError))
  4088  	v.NiceName = "Name"
  4089  	return v
  4090  }
  4091  
  4092  // SequenceId returns the sequence id attached to the BadName error.
  4093  // This is mostly used internally.
  4094  func (err NameError) SequenceId() uint16 {
  4095  	return err.Sequence
  4096  }
  4097  
  4098  // BadId returns the 'BadValue' number if one exists for the BadName error. If no bad value exists, 0 is returned.
  4099  func (err NameError) BadId() uint32 {
  4100  	return err.BadValue
  4101  }
  4102  
  4103  // Error returns a rudimentary string representation of the BadName error.
  4104  func (err NameError) Error() string {
  4105  	fieldVals := make([]string, 0, 4)
  4106  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  4107  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  4108  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  4109  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  4110  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  4111  	return "BadName {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4112  }
  4113  
  4114  func init() {
  4115  	xgb.NewErrorFuncs[15] = NameErrorNew
  4116  }
  4117  
  4118  // NoExposure is the event number for a NoExposureEvent.
  4119  const NoExposure = 14
  4120  
  4121  type NoExposureEvent struct {
  4122  	Sequence uint16
  4123  	// padding: 1 bytes
  4124  	Drawable    Drawable
  4125  	MinorOpcode uint16
  4126  	MajorOpcode byte
  4127  	// padding: 1 bytes
  4128  }
  4129  
  4130  // NoExposureEventNew constructs a NoExposureEvent value that implements xgb.Event from a byte slice.
  4131  func NoExposureEventNew(buf []byte) xgb.Event {
  4132  	v := NoExposureEvent{}
  4133  	b := 1 // don't read event number
  4134  
  4135  	b += 1 // padding
  4136  
  4137  	v.Sequence = xgb.Get16(buf[b:])
  4138  	b += 2
  4139  
  4140  	v.Drawable = Drawable(xgb.Get32(buf[b:]))
  4141  	b += 4
  4142  
  4143  	v.MinorOpcode = xgb.Get16(buf[b:])
  4144  	b += 2
  4145  
  4146  	v.MajorOpcode = buf[b]
  4147  	b += 1
  4148  
  4149  	b += 1 // padding
  4150  
  4151  	return v
  4152  }
  4153  
  4154  // Bytes writes a NoExposureEvent value to a byte slice.
  4155  func (v NoExposureEvent) Bytes() []byte {
  4156  	buf := make([]byte, 32)
  4157  	b := 0
  4158  
  4159  	// write event number
  4160  	buf[b] = 14
  4161  	b += 1
  4162  
  4163  	b += 1 // padding
  4164  
  4165  	b += 2 // skip sequence number
  4166  
  4167  	xgb.Put32(buf[b:], uint32(v.Drawable))
  4168  	b += 4
  4169  
  4170  	xgb.Put16(buf[b:], v.MinorOpcode)
  4171  	b += 2
  4172  
  4173  	buf[b] = v.MajorOpcode
  4174  	b += 1
  4175  
  4176  	b += 1 // padding
  4177  
  4178  	return buf
  4179  }
  4180  
  4181  // SequenceId returns the sequence id attached to the NoExposure event.
  4182  // Events without a sequence number (KeymapNotify) return 0.
  4183  // This is mostly used internally.
  4184  func (v NoExposureEvent) SequenceId() uint16 {
  4185  	return v.Sequence
  4186  }
  4187  
  4188  // String is a rudimentary string representation of NoExposureEvent.
  4189  func (v NoExposureEvent) String() string {
  4190  	fieldVals := make([]string, 0, 5)
  4191  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  4192  	fieldVals = append(fieldVals, xgb.Sprintf("Drawable: %d", v.Drawable))
  4193  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", v.MinorOpcode))
  4194  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", v.MajorOpcode))
  4195  	return "NoExposure {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4196  }
  4197  
  4198  func init() {
  4199  	xgb.NewEventFuncs[14] = NoExposureEventNew
  4200  }
  4201  
  4202  const (
  4203  	NotifyDetailAncestor         = 0
  4204  	NotifyDetailVirtual          = 1
  4205  	NotifyDetailInferior         = 2
  4206  	NotifyDetailNonlinear        = 3
  4207  	NotifyDetailNonlinearVirtual = 4
  4208  	NotifyDetailPointer          = 5
  4209  	NotifyDetailPointerRoot      = 6
  4210  	NotifyDetailNone             = 7
  4211  )
  4212  
  4213  const (
  4214  	NotifyModeNormal       = 0
  4215  	NotifyModeGrab         = 1
  4216  	NotifyModeUngrab       = 2
  4217  	NotifyModeWhileGrabbed = 3
  4218  )
  4219  
  4220  type Pixmap uint32
  4221  
  4222  func NewPixmapId(c *xgb.Conn) (Pixmap, error) {
  4223  	id, err := c.NewId()
  4224  	if err != nil {
  4225  		return 0, err
  4226  	}
  4227  	return Pixmap(id), nil
  4228  }
  4229  
  4230  const (
  4231  	PixmapNone = 0
  4232  )
  4233  
  4234  // BadPixmap is the error number for a BadPixmap.
  4235  const BadPixmap = 4
  4236  
  4237  type PixmapError ValueError
  4238  
  4239  // PixmapErrorNew constructs a PixmapError value that implements xgb.Error from a byte slice.
  4240  func PixmapErrorNew(buf []byte) xgb.Error {
  4241  	v := PixmapError(ValueErrorNew(buf).(ValueError))
  4242  	v.NiceName = "Pixmap"
  4243  	return v
  4244  }
  4245  
  4246  // SequenceId returns the sequence id attached to the BadPixmap error.
  4247  // This is mostly used internally.
  4248  func (err PixmapError) SequenceId() uint16 {
  4249  	return err.Sequence
  4250  }
  4251  
  4252  // BadId returns the 'BadValue' number if one exists for the BadPixmap error. If no bad value exists, 0 is returned.
  4253  func (err PixmapError) BadId() uint32 {
  4254  	return err.BadValue
  4255  }
  4256  
  4257  // Error returns a rudimentary string representation of the BadPixmap error.
  4258  func (err PixmapError) Error() string {
  4259  	fieldVals := make([]string, 0, 4)
  4260  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  4261  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  4262  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  4263  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  4264  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  4265  	return "BadPixmap {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4266  }
  4267  
  4268  func init() {
  4269  	xgb.NewErrorFuncs[4] = PixmapErrorNew
  4270  }
  4271  
  4272  const (
  4273  	PlaceOnTop    = 0
  4274  	PlaceOnBottom = 1
  4275  )
  4276  
  4277  type Point struct {
  4278  	X int16
  4279  	Y int16
  4280  }
  4281  
  4282  // PointRead reads a byte slice into a Point value.
  4283  func PointRead(buf []byte, v *Point) int {
  4284  	b := 0
  4285  
  4286  	v.X = int16(xgb.Get16(buf[b:]))
  4287  	b += 2
  4288  
  4289  	v.Y = int16(xgb.Get16(buf[b:]))
  4290  	b += 2
  4291  
  4292  	return b
  4293  }
  4294  
  4295  // PointReadList reads a byte slice into a list of Point values.
  4296  func PointReadList(buf []byte, dest []Point) int {
  4297  	b := 0
  4298  	for i := 0; i < len(dest); i++ {
  4299  		dest[i] = Point{}
  4300  		b += PointRead(buf[b:], &dest[i])
  4301  	}
  4302  	return xgb.Pad(b)
  4303  }
  4304  
  4305  // Bytes writes a Point value to a byte slice.
  4306  func (v Point) Bytes() []byte {
  4307  	buf := make([]byte, 4)
  4308  	b := 0
  4309  
  4310  	xgb.Put16(buf[b:], uint16(v.X))
  4311  	b += 2
  4312  
  4313  	xgb.Put16(buf[b:], uint16(v.Y))
  4314  	b += 2
  4315  
  4316  	return buf[:b]
  4317  }
  4318  
  4319  // PointListBytes writes a list of Point values to a byte slice.
  4320  func PointListBytes(buf []byte, list []Point) int {
  4321  	b := 0
  4322  	var structBytes []byte
  4323  	for _, item := range list {
  4324  		structBytes = item.Bytes()
  4325  		copy(buf[b:], structBytes)
  4326  		b += len(structBytes)
  4327  	}
  4328  	return xgb.Pad(b)
  4329  }
  4330  
  4331  const (
  4332  	PolyShapeComplex   = 0
  4333  	PolyShapeNonconvex = 1
  4334  	PolyShapeConvex    = 2
  4335  )
  4336  
  4337  const (
  4338  	PropModeReplace = 0
  4339  	PropModePrepend = 1
  4340  	PropModeAppend  = 2
  4341  )
  4342  
  4343  const (
  4344  	PropertyNewValue = 0
  4345  	PropertyDelete   = 1
  4346  )
  4347  
  4348  // PropertyNotify is the event number for a PropertyNotifyEvent.
  4349  const PropertyNotify = 28
  4350  
  4351  type PropertyNotifyEvent struct {
  4352  	Sequence uint16
  4353  	// padding: 1 bytes
  4354  	Window Window
  4355  	Atom   Atom
  4356  	Time   Timestamp
  4357  	State  byte
  4358  	// padding: 3 bytes
  4359  }
  4360  
  4361  // PropertyNotifyEventNew constructs a PropertyNotifyEvent value that implements xgb.Event from a byte slice.
  4362  func PropertyNotifyEventNew(buf []byte) xgb.Event {
  4363  	v := PropertyNotifyEvent{}
  4364  	b := 1 // don't read event number
  4365  
  4366  	b += 1 // padding
  4367  
  4368  	v.Sequence = xgb.Get16(buf[b:])
  4369  	b += 2
  4370  
  4371  	v.Window = Window(xgb.Get32(buf[b:]))
  4372  	b += 4
  4373  
  4374  	v.Atom = Atom(xgb.Get32(buf[b:]))
  4375  	b += 4
  4376  
  4377  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  4378  	b += 4
  4379  
  4380  	v.State = buf[b]
  4381  	b += 1
  4382  
  4383  	b += 3 // padding
  4384  
  4385  	return v
  4386  }
  4387  
  4388  // Bytes writes a PropertyNotifyEvent value to a byte slice.
  4389  func (v PropertyNotifyEvent) Bytes() []byte {
  4390  	buf := make([]byte, 32)
  4391  	b := 0
  4392  
  4393  	// write event number
  4394  	buf[b] = 28
  4395  	b += 1
  4396  
  4397  	b += 1 // padding
  4398  
  4399  	b += 2 // skip sequence number
  4400  
  4401  	xgb.Put32(buf[b:], uint32(v.Window))
  4402  	b += 4
  4403  
  4404  	xgb.Put32(buf[b:], uint32(v.Atom))
  4405  	b += 4
  4406  
  4407  	xgb.Put32(buf[b:], uint32(v.Time))
  4408  	b += 4
  4409  
  4410  	buf[b] = v.State
  4411  	b += 1
  4412  
  4413  	b += 3 // padding
  4414  
  4415  	return buf
  4416  }
  4417  
  4418  // SequenceId returns the sequence id attached to the PropertyNotify event.
  4419  // Events without a sequence number (KeymapNotify) return 0.
  4420  // This is mostly used internally.
  4421  func (v PropertyNotifyEvent) SequenceId() uint16 {
  4422  	return v.Sequence
  4423  }
  4424  
  4425  // String is a rudimentary string representation of PropertyNotifyEvent.
  4426  func (v PropertyNotifyEvent) String() string {
  4427  	fieldVals := make([]string, 0, 6)
  4428  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  4429  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  4430  	fieldVals = append(fieldVals, xgb.Sprintf("Atom: %d", v.Atom))
  4431  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  4432  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  4433  	return "PropertyNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4434  }
  4435  
  4436  func init() {
  4437  	xgb.NewEventFuncs[28] = PropertyNotifyEventNew
  4438  }
  4439  
  4440  const (
  4441  	QueryShapeOfLargestCursor  = 0
  4442  	QueryShapeOfFastestTile    = 1
  4443  	QueryShapeOfFastestStipple = 2
  4444  )
  4445  
  4446  type Rectangle struct {
  4447  	X      int16
  4448  	Y      int16
  4449  	Width  uint16
  4450  	Height uint16
  4451  }
  4452  
  4453  // RectangleRead reads a byte slice into a Rectangle value.
  4454  func RectangleRead(buf []byte, v *Rectangle) int {
  4455  	b := 0
  4456  
  4457  	v.X = int16(xgb.Get16(buf[b:]))
  4458  	b += 2
  4459  
  4460  	v.Y = int16(xgb.Get16(buf[b:]))
  4461  	b += 2
  4462  
  4463  	v.Width = xgb.Get16(buf[b:])
  4464  	b += 2
  4465  
  4466  	v.Height = xgb.Get16(buf[b:])
  4467  	b += 2
  4468  
  4469  	return b
  4470  }
  4471  
  4472  // RectangleReadList reads a byte slice into a list of Rectangle values.
  4473  func RectangleReadList(buf []byte, dest []Rectangle) int {
  4474  	b := 0
  4475  	for i := 0; i < len(dest); i++ {
  4476  		dest[i] = Rectangle{}
  4477  		b += RectangleRead(buf[b:], &dest[i])
  4478  	}
  4479  	return xgb.Pad(b)
  4480  }
  4481  
  4482  // Bytes writes a Rectangle value to a byte slice.
  4483  func (v Rectangle) Bytes() []byte {
  4484  	buf := make([]byte, 8)
  4485  	b := 0
  4486  
  4487  	xgb.Put16(buf[b:], uint16(v.X))
  4488  	b += 2
  4489  
  4490  	xgb.Put16(buf[b:], uint16(v.Y))
  4491  	b += 2
  4492  
  4493  	xgb.Put16(buf[b:], v.Width)
  4494  	b += 2
  4495  
  4496  	xgb.Put16(buf[b:], v.Height)
  4497  	b += 2
  4498  
  4499  	return buf[:b]
  4500  }
  4501  
  4502  // RectangleListBytes writes a list of Rectangle values to a byte slice.
  4503  func RectangleListBytes(buf []byte, list []Rectangle) int {
  4504  	b := 0
  4505  	var structBytes []byte
  4506  	for _, item := range list {
  4507  		structBytes = item.Bytes()
  4508  		copy(buf[b:], structBytes)
  4509  		b += len(structBytes)
  4510  	}
  4511  	return xgb.Pad(b)
  4512  }
  4513  
  4514  // ReparentNotify is the event number for a ReparentNotifyEvent.
  4515  const ReparentNotify = 21
  4516  
  4517  type ReparentNotifyEvent struct {
  4518  	Sequence uint16
  4519  	// padding: 1 bytes
  4520  	Event            Window
  4521  	Window           Window
  4522  	Parent           Window
  4523  	X                int16
  4524  	Y                int16
  4525  	OverrideRedirect bool
  4526  	// padding: 3 bytes
  4527  }
  4528  
  4529  // ReparentNotifyEventNew constructs a ReparentNotifyEvent value that implements xgb.Event from a byte slice.
  4530  func ReparentNotifyEventNew(buf []byte) xgb.Event {
  4531  	v := ReparentNotifyEvent{}
  4532  	b := 1 // don't read event number
  4533  
  4534  	b += 1 // padding
  4535  
  4536  	v.Sequence = xgb.Get16(buf[b:])
  4537  	b += 2
  4538  
  4539  	v.Event = Window(xgb.Get32(buf[b:]))
  4540  	b += 4
  4541  
  4542  	v.Window = Window(xgb.Get32(buf[b:]))
  4543  	b += 4
  4544  
  4545  	v.Parent = Window(xgb.Get32(buf[b:]))
  4546  	b += 4
  4547  
  4548  	v.X = int16(xgb.Get16(buf[b:]))
  4549  	b += 2
  4550  
  4551  	v.Y = int16(xgb.Get16(buf[b:]))
  4552  	b += 2
  4553  
  4554  	if buf[b] == 1 {
  4555  		v.OverrideRedirect = true
  4556  	} else {
  4557  		v.OverrideRedirect = false
  4558  	}
  4559  	b += 1
  4560  
  4561  	b += 3 // padding
  4562  
  4563  	return v
  4564  }
  4565  
  4566  // Bytes writes a ReparentNotifyEvent value to a byte slice.
  4567  func (v ReparentNotifyEvent) Bytes() []byte {
  4568  	buf := make([]byte, 32)
  4569  	b := 0
  4570  
  4571  	// write event number
  4572  	buf[b] = 21
  4573  	b += 1
  4574  
  4575  	b += 1 // padding
  4576  
  4577  	b += 2 // skip sequence number
  4578  
  4579  	xgb.Put32(buf[b:], uint32(v.Event))
  4580  	b += 4
  4581  
  4582  	xgb.Put32(buf[b:], uint32(v.Window))
  4583  	b += 4
  4584  
  4585  	xgb.Put32(buf[b:], uint32(v.Parent))
  4586  	b += 4
  4587  
  4588  	xgb.Put16(buf[b:], uint16(v.X))
  4589  	b += 2
  4590  
  4591  	xgb.Put16(buf[b:], uint16(v.Y))
  4592  	b += 2
  4593  
  4594  	if v.OverrideRedirect {
  4595  		buf[b] = 1
  4596  	} else {
  4597  		buf[b] = 0
  4598  	}
  4599  	b += 1
  4600  
  4601  	b += 3 // padding
  4602  
  4603  	return buf
  4604  }
  4605  
  4606  // SequenceId returns the sequence id attached to the ReparentNotify event.
  4607  // Events without a sequence number (KeymapNotify) return 0.
  4608  // This is mostly used internally.
  4609  func (v ReparentNotifyEvent) SequenceId() uint16 {
  4610  	return v.Sequence
  4611  }
  4612  
  4613  // String is a rudimentary string representation of ReparentNotifyEvent.
  4614  func (v ReparentNotifyEvent) String() string {
  4615  	fieldVals := make([]string, 0, 8)
  4616  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  4617  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  4618  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  4619  	fieldVals = append(fieldVals, xgb.Sprintf("Parent: %d", v.Parent))
  4620  	fieldVals = append(fieldVals, xgb.Sprintf("X: %d", v.X))
  4621  	fieldVals = append(fieldVals, xgb.Sprintf("Y: %d", v.Y))
  4622  	fieldVals = append(fieldVals, xgb.Sprintf("OverrideRedirect: %t", v.OverrideRedirect))
  4623  	return "ReparentNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4624  }
  4625  
  4626  func init() {
  4627  	xgb.NewEventFuncs[21] = ReparentNotifyEventNew
  4628  }
  4629  
  4630  // BadRequest is the error number for a BadRequest.
  4631  const BadRequest = 1
  4632  
  4633  type RequestError struct {
  4634  	Sequence    uint16
  4635  	NiceName    string
  4636  	BadValue    uint32
  4637  	MinorOpcode uint16
  4638  	MajorOpcode byte
  4639  	// padding: 1 bytes
  4640  }
  4641  
  4642  // RequestErrorNew constructs a RequestError value that implements xgb.Error from a byte slice.
  4643  func RequestErrorNew(buf []byte) xgb.Error {
  4644  	v := RequestError{}
  4645  	v.NiceName = "Request"
  4646  
  4647  	b := 1 // skip error determinant
  4648  	b += 1 // don't read error number
  4649  
  4650  	v.Sequence = xgb.Get16(buf[b:])
  4651  	b += 2
  4652  
  4653  	v.BadValue = xgb.Get32(buf[b:])
  4654  	b += 4
  4655  
  4656  	v.MinorOpcode = xgb.Get16(buf[b:])
  4657  	b += 2
  4658  
  4659  	v.MajorOpcode = buf[b]
  4660  	b += 1
  4661  
  4662  	b += 1 // padding
  4663  
  4664  	return v
  4665  }
  4666  
  4667  // SequenceId returns the sequence id attached to the BadRequest error.
  4668  // This is mostly used internally.
  4669  func (err RequestError) SequenceId() uint16 {
  4670  	return err.Sequence
  4671  }
  4672  
  4673  // BadId returns the 'BadValue' number if one exists for the BadRequest error. If no bad value exists, 0 is returned.
  4674  func (err RequestError) BadId() uint32 {
  4675  	return err.BadValue
  4676  }
  4677  
  4678  // Error returns a rudimentary string representation of the BadRequest error.
  4679  
  4680  func (err RequestError) Error() string {
  4681  	fieldVals := make([]string, 0, 4)
  4682  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  4683  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  4684  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  4685  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  4686  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  4687  	return "BadRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4688  }
  4689  
  4690  func init() {
  4691  	xgb.NewErrorFuncs[1] = RequestErrorNew
  4692  }
  4693  
  4694  // ResizeRequest is the event number for a ResizeRequestEvent.
  4695  const ResizeRequest = 25
  4696  
  4697  type ResizeRequestEvent struct {
  4698  	Sequence uint16
  4699  	// padding: 1 bytes
  4700  	Window Window
  4701  	Width  uint16
  4702  	Height uint16
  4703  }
  4704  
  4705  // ResizeRequestEventNew constructs a ResizeRequestEvent value that implements xgb.Event from a byte slice.
  4706  func ResizeRequestEventNew(buf []byte) xgb.Event {
  4707  	v := ResizeRequestEvent{}
  4708  	b := 1 // don't read event number
  4709  
  4710  	b += 1 // padding
  4711  
  4712  	v.Sequence = xgb.Get16(buf[b:])
  4713  	b += 2
  4714  
  4715  	v.Window = Window(xgb.Get32(buf[b:]))
  4716  	b += 4
  4717  
  4718  	v.Width = xgb.Get16(buf[b:])
  4719  	b += 2
  4720  
  4721  	v.Height = xgb.Get16(buf[b:])
  4722  	b += 2
  4723  
  4724  	return v
  4725  }
  4726  
  4727  // Bytes writes a ResizeRequestEvent value to a byte slice.
  4728  func (v ResizeRequestEvent) Bytes() []byte {
  4729  	buf := make([]byte, 32)
  4730  	b := 0
  4731  
  4732  	// write event number
  4733  	buf[b] = 25
  4734  	b += 1
  4735  
  4736  	b += 1 // padding
  4737  
  4738  	b += 2 // skip sequence number
  4739  
  4740  	xgb.Put32(buf[b:], uint32(v.Window))
  4741  	b += 4
  4742  
  4743  	xgb.Put16(buf[b:], v.Width)
  4744  	b += 2
  4745  
  4746  	xgb.Put16(buf[b:], v.Height)
  4747  	b += 2
  4748  
  4749  	return buf
  4750  }
  4751  
  4752  // SequenceId returns the sequence id attached to the ResizeRequest event.
  4753  // Events without a sequence number (KeymapNotify) return 0.
  4754  // This is mostly used internally.
  4755  func (v ResizeRequestEvent) SequenceId() uint16 {
  4756  	return v.Sequence
  4757  }
  4758  
  4759  // String is a rudimentary string representation of ResizeRequestEvent.
  4760  func (v ResizeRequestEvent) String() string {
  4761  	fieldVals := make([]string, 0, 4)
  4762  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  4763  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  4764  	fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
  4765  	fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
  4766  	return "ResizeRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  4767  }
  4768  
  4769  func init() {
  4770  	xgb.NewEventFuncs[25] = ResizeRequestEventNew
  4771  }
  4772  
  4773  type Rgb struct {
  4774  	Red   uint16
  4775  	Green uint16
  4776  	Blue  uint16
  4777  	// padding: 2 bytes
  4778  }
  4779  
  4780  // RgbRead reads a byte slice into a Rgb value.
  4781  func RgbRead(buf []byte, v *Rgb) int {
  4782  	b := 0
  4783  
  4784  	v.Red = xgb.Get16(buf[b:])
  4785  	b += 2
  4786  
  4787  	v.Green = xgb.Get16(buf[b:])
  4788  	b += 2
  4789  
  4790  	v.Blue = xgb.Get16(buf[b:])
  4791  	b += 2
  4792  
  4793  	b += 2 // padding
  4794  
  4795  	return b
  4796  }
  4797  
  4798  // RgbReadList reads a byte slice into a list of Rgb values.
  4799  func RgbReadList(buf []byte, dest []Rgb) int {
  4800  	b := 0
  4801  	for i := 0; i < len(dest); i++ {
  4802  		dest[i] = Rgb{}
  4803  		b += RgbRead(buf[b:], &dest[i])
  4804  	}
  4805  	return xgb.Pad(b)
  4806  }
  4807  
  4808  // Bytes writes a Rgb value to a byte slice.
  4809  func (v Rgb) Bytes() []byte {
  4810  	buf := make([]byte, 8)
  4811  	b := 0
  4812  
  4813  	xgb.Put16(buf[b:], v.Red)
  4814  	b += 2
  4815  
  4816  	xgb.Put16(buf[b:], v.Green)
  4817  	b += 2
  4818  
  4819  	xgb.Put16(buf[b:], v.Blue)
  4820  	b += 2
  4821  
  4822  	b += 2 // padding
  4823  
  4824  	return buf[:b]
  4825  }
  4826  
  4827  // RgbListBytes writes a list of Rgb values to a byte slice.
  4828  func RgbListBytes(buf []byte, list []Rgb) int {
  4829  	b := 0
  4830  	var structBytes []byte
  4831  	for _, item := range list {
  4832  		structBytes = item.Bytes()
  4833  		copy(buf[b:], structBytes)
  4834  		b += len(structBytes)
  4835  	}
  4836  	return xgb.Pad(b)
  4837  }
  4838  
  4839  type ScreenInfo struct {
  4840  	Root                Window
  4841  	DefaultColormap     Colormap
  4842  	WhitePixel          uint32
  4843  	BlackPixel          uint32
  4844  	CurrentInputMasks   uint32
  4845  	WidthInPixels       uint16
  4846  	HeightInPixels      uint16
  4847  	WidthInMillimeters  uint16
  4848  	HeightInMillimeters uint16
  4849  	MinInstalledMaps    uint16
  4850  	MaxInstalledMaps    uint16
  4851  	RootVisual          Visualid
  4852  	BackingStores       byte
  4853  	SaveUnders          bool
  4854  	RootDepth           byte
  4855  	AllowedDepthsLen    byte
  4856  	AllowedDepths       []DepthInfo // size: DepthInfoListSize(AllowedDepths)
  4857  }
  4858  
  4859  // ScreenInfoRead reads a byte slice into a ScreenInfo value.
  4860  func ScreenInfoRead(buf []byte, v *ScreenInfo) int {
  4861  	b := 0
  4862  
  4863  	v.Root = Window(xgb.Get32(buf[b:]))
  4864  	b += 4
  4865  
  4866  	v.DefaultColormap = Colormap(xgb.Get32(buf[b:]))
  4867  	b += 4
  4868  
  4869  	v.WhitePixel = xgb.Get32(buf[b:])
  4870  	b += 4
  4871  
  4872  	v.BlackPixel = xgb.Get32(buf[b:])
  4873  	b += 4
  4874  
  4875  	v.CurrentInputMasks = xgb.Get32(buf[b:])
  4876  	b += 4
  4877  
  4878  	v.WidthInPixels = xgb.Get16(buf[b:])
  4879  	b += 2
  4880  
  4881  	v.HeightInPixels = xgb.Get16(buf[b:])
  4882  	b += 2
  4883  
  4884  	v.WidthInMillimeters = xgb.Get16(buf[b:])
  4885  	b += 2
  4886  
  4887  	v.HeightInMillimeters = xgb.Get16(buf[b:])
  4888  	b += 2
  4889  
  4890  	v.MinInstalledMaps = xgb.Get16(buf[b:])
  4891  	b += 2
  4892  
  4893  	v.MaxInstalledMaps = xgb.Get16(buf[b:])
  4894  	b += 2
  4895  
  4896  	v.RootVisual = Visualid(xgb.Get32(buf[b:]))
  4897  	b += 4
  4898  
  4899  	v.BackingStores = buf[b]
  4900  	b += 1
  4901  
  4902  	if buf[b] == 1 {
  4903  		v.SaveUnders = true
  4904  	} else {
  4905  		v.SaveUnders = false
  4906  	}
  4907  	b += 1
  4908  
  4909  	v.RootDepth = buf[b]
  4910  	b += 1
  4911  
  4912  	v.AllowedDepthsLen = buf[b]
  4913  	b += 1
  4914  
  4915  	v.AllowedDepths = make([]DepthInfo, v.AllowedDepthsLen)
  4916  	b += DepthInfoReadList(buf[b:], v.AllowedDepths)
  4917  
  4918  	return b
  4919  }
  4920  
  4921  // ScreenInfoReadList reads a byte slice into a list of ScreenInfo values.
  4922  func ScreenInfoReadList(buf []byte, dest []ScreenInfo) int {
  4923  	b := 0
  4924  	for i := 0; i < len(dest); i++ {
  4925  		dest[i] = ScreenInfo{}
  4926  		b += ScreenInfoRead(buf[b:], &dest[i])
  4927  	}
  4928  	return xgb.Pad(b)
  4929  }
  4930  
  4931  // Bytes writes a ScreenInfo value to a byte slice.
  4932  func (v ScreenInfo) Bytes() []byte {
  4933  	buf := make([]byte, (40 + DepthInfoListSize(v.AllowedDepths)))
  4934  	b := 0
  4935  
  4936  	xgb.Put32(buf[b:], uint32(v.Root))
  4937  	b += 4
  4938  
  4939  	xgb.Put32(buf[b:], uint32(v.DefaultColormap))
  4940  	b += 4
  4941  
  4942  	xgb.Put32(buf[b:], v.WhitePixel)
  4943  	b += 4
  4944  
  4945  	xgb.Put32(buf[b:], v.BlackPixel)
  4946  	b += 4
  4947  
  4948  	xgb.Put32(buf[b:], v.CurrentInputMasks)
  4949  	b += 4
  4950  
  4951  	xgb.Put16(buf[b:], v.WidthInPixels)
  4952  	b += 2
  4953  
  4954  	xgb.Put16(buf[b:], v.HeightInPixels)
  4955  	b += 2
  4956  
  4957  	xgb.Put16(buf[b:], v.WidthInMillimeters)
  4958  	b += 2
  4959  
  4960  	xgb.Put16(buf[b:], v.HeightInMillimeters)
  4961  	b += 2
  4962  
  4963  	xgb.Put16(buf[b:], v.MinInstalledMaps)
  4964  	b += 2
  4965  
  4966  	xgb.Put16(buf[b:], v.MaxInstalledMaps)
  4967  	b += 2
  4968  
  4969  	xgb.Put32(buf[b:], uint32(v.RootVisual))
  4970  	b += 4
  4971  
  4972  	buf[b] = v.BackingStores
  4973  	b += 1
  4974  
  4975  	if v.SaveUnders {
  4976  		buf[b] = 1
  4977  	} else {
  4978  		buf[b] = 0
  4979  	}
  4980  	b += 1
  4981  
  4982  	buf[b] = v.RootDepth
  4983  	b += 1
  4984  
  4985  	buf[b] = v.AllowedDepthsLen
  4986  	b += 1
  4987  
  4988  	b += DepthInfoListBytes(buf[b:], v.AllowedDepths)
  4989  
  4990  	return buf[:b]
  4991  }
  4992  
  4993  // ScreenInfoListBytes writes a list of ScreenInfo values to a byte slice.
  4994  func ScreenInfoListBytes(buf []byte, list []ScreenInfo) int {
  4995  	b := 0
  4996  	var structBytes []byte
  4997  	for _, item := range list {
  4998  		structBytes = item.Bytes()
  4999  		copy(buf[b:], structBytes)
  5000  		b += len(structBytes)
  5001  	}
  5002  	return xgb.Pad(b)
  5003  }
  5004  
  5005  // ScreenInfoListSize computes the size (bytes) of a list of ScreenInfo values.
  5006  func ScreenInfoListSize(list []ScreenInfo) int {
  5007  	size := 0
  5008  	for _, item := range list {
  5009  		size += (40 + DepthInfoListSize(item.AllowedDepths))
  5010  	}
  5011  	return size
  5012  }
  5013  
  5014  const (
  5015  	ScreenSaverReset  = 0
  5016  	ScreenSaverActive = 1
  5017  )
  5018  
  5019  type Segment struct {
  5020  	X1 int16
  5021  	Y1 int16
  5022  	X2 int16
  5023  	Y2 int16
  5024  }
  5025  
  5026  // SegmentRead reads a byte slice into a Segment value.
  5027  func SegmentRead(buf []byte, v *Segment) int {
  5028  	b := 0
  5029  
  5030  	v.X1 = int16(xgb.Get16(buf[b:]))
  5031  	b += 2
  5032  
  5033  	v.Y1 = int16(xgb.Get16(buf[b:]))
  5034  	b += 2
  5035  
  5036  	v.X2 = int16(xgb.Get16(buf[b:]))
  5037  	b += 2
  5038  
  5039  	v.Y2 = int16(xgb.Get16(buf[b:]))
  5040  	b += 2
  5041  
  5042  	return b
  5043  }
  5044  
  5045  // SegmentReadList reads a byte slice into a list of Segment values.
  5046  func SegmentReadList(buf []byte, dest []Segment) int {
  5047  	b := 0
  5048  	for i := 0; i < len(dest); i++ {
  5049  		dest[i] = Segment{}
  5050  		b += SegmentRead(buf[b:], &dest[i])
  5051  	}
  5052  	return xgb.Pad(b)
  5053  }
  5054  
  5055  // Bytes writes a Segment value to a byte slice.
  5056  func (v Segment) Bytes() []byte {
  5057  	buf := make([]byte, 8)
  5058  	b := 0
  5059  
  5060  	xgb.Put16(buf[b:], uint16(v.X1))
  5061  	b += 2
  5062  
  5063  	xgb.Put16(buf[b:], uint16(v.Y1))
  5064  	b += 2
  5065  
  5066  	xgb.Put16(buf[b:], uint16(v.X2))
  5067  	b += 2
  5068  
  5069  	xgb.Put16(buf[b:], uint16(v.Y2))
  5070  	b += 2
  5071  
  5072  	return buf[:b]
  5073  }
  5074  
  5075  // SegmentListBytes writes a list of Segment values to a byte slice.
  5076  func SegmentListBytes(buf []byte, list []Segment) int {
  5077  	b := 0
  5078  	var structBytes []byte
  5079  	for _, item := range list {
  5080  		structBytes = item.Bytes()
  5081  		copy(buf[b:], structBytes)
  5082  		b += len(structBytes)
  5083  	}
  5084  	return xgb.Pad(b)
  5085  }
  5086  
  5087  // SelectionClear is the event number for a SelectionClearEvent.
  5088  const SelectionClear = 29
  5089  
  5090  type SelectionClearEvent struct {
  5091  	Sequence uint16
  5092  	// padding: 1 bytes
  5093  	Time      Timestamp
  5094  	Owner     Window
  5095  	Selection Atom
  5096  }
  5097  
  5098  // SelectionClearEventNew constructs a SelectionClearEvent value that implements xgb.Event from a byte slice.
  5099  func SelectionClearEventNew(buf []byte) xgb.Event {
  5100  	v := SelectionClearEvent{}
  5101  	b := 1 // don't read event number
  5102  
  5103  	b += 1 // padding
  5104  
  5105  	v.Sequence = xgb.Get16(buf[b:])
  5106  	b += 2
  5107  
  5108  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  5109  	b += 4
  5110  
  5111  	v.Owner = Window(xgb.Get32(buf[b:]))
  5112  	b += 4
  5113  
  5114  	v.Selection = Atom(xgb.Get32(buf[b:]))
  5115  	b += 4
  5116  
  5117  	return v
  5118  }
  5119  
  5120  // Bytes writes a SelectionClearEvent value to a byte slice.
  5121  func (v SelectionClearEvent) Bytes() []byte {
  5122  	buf := make([]byte, 32)
  5123  	b := 0
  5124  
  5125  	// write event number
  5126  	buf[b] = 29
  5127  	b += 1
  5128  
  5129  	b += 1 // padding
  5130  
  5131  	b += 2 // skip sequence number
  5132  
  5133  	xgb.Put32(buf[b:], uint32(v.Time))
  5134  	b += 4
  5135  
  5136  	xgb.Put32(buf[b:], uint32(v.Owner))
  5137  	b += 4
  5138  
  5139  	xgb.Put32(buf[b:], uint32(v.Selection))
  5140  	b += 4
  5141  
  5142  	return buf
  5143  }
  5144  
  5145  // SequenceId returns the sequence id attached to the SelectionClear event.
  5146  // Events without a sequence number (KeymapNotify) return 0.
  5147  // This is mostly used internally.
  5148  func (v SelectionClearEvent) SequenceId() uint16 {
  5149  	return v.Sequence
  5150  }
  5151  
  5152  // String is a rudimentary string representation of SelectionClearEvent.
  5153  func (v SelectionClearEvent) String() string {
  5154  	fieldVals := make([]string, 0, 4)
  5155  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  5156  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  5157  	fieldVals = append(fieldVals, xgb.Sprintf("Owner: %d", v.Owner))
  5158  	fieldVals = append(fieldVals, xgb.Sprintf("Selection: %d", v.Selection))
  5159  	return "SelectionClear {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  5160  }
  5161  
  5162  func init() {
  5163  	xgb.NewEventFuncs[29] = SelectionClearEventNew
  5164  }
  5165  
  5166  // SelectionNotify is the event number for a SelectionNotifyEvent.
  5167  const SelectionNotify = 31
  5168  
  5169  type SelectionNotifyEvent struct {
  5170  	Sequence uint16
  5171  	// padding: 1 bytes
  5172  	Time      Timestamp
  5173  	Requestor Window
  5174  	Selection Atom
  5175  	Target    Atom
  5176  	Property  Atom
  5177  }
  5178  
  5179  // SelectionNotifyEventNew constructs a SelectionNotifyEvent value that implements xgb.Event from a byte slice.
  5180  func SelectionNotifyEventNew(buf []byte) xgb.Event {
  5181  	v := SelectionNotifyEvent{}
  5182  	b := 1 // don't read event number
  5183  
  5184  	b += 1 // padding
  5185  
  5186  	v.Sequence = xgb.Get16(buf[b:])
  5187  	b += 2
  5188  
  5189  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  5190  	b += 4
  5191  
  5192  	v.Requestor = Window(xgb.Get32(buf[b:]))
  5193  	b += 4
  5194  
  5195  	v.Selection = Atom(xgb.Get32(buf[b:]))
  5196  	b += 4
  5197  
  5198  	v.Target = Atom(xgb.Get32(buf[b:]))
  5199  	b += 4
  5200  
  5201  	v.Property = Atom(xgb.Get32(buf[b:]))
  5202  	b += 4
  5203  
  5204  	return v
  5205  }
  5206  
  5207  // Bytes writes a SelectionNotifyEvent value to a byte slice.
  5208  func (v SelectionNotifyEvent) Bytes() []byte {
  5209  	buf := make([]byte, 32)
  5210  	b := 0
  5211  
  5212  	// write event number
  5213  	buf[b] = 31
  5214  	b += 1
  5215  
  5216  	b += 1 // padding
  5217  
  5218  	b += 2 // skip sequence number
  5219  
  5220  	xgb.Put32(buf[b:], uint32(v.Time))
  5221  	b += 4
  5222  
  5223  	xgb.Put32(buf[b:], uint32(v.Requestor))
  5224  	b += 4
  5225  
  5226  	xgb.Put32(buf[b:], uint32(v.Selection))
  5227  	b += 4
  5228  
  5229  	xgb.Put32(buf[b:], uint32(v.Target))
  5230  	b += 4
  5231  
  5232  	xgb.Put32(buf[b:], uint32(v.Property))
  5233  	b += 4
  5234  
  5235  	return buf
  5236  }
  5237  
  5238  // SequenceId returns the sequence id attached to the SelectionNotify event.
  5239  // Events without a sequence number (KeymapNotify) return 0.
  5240  // This is mostly used internally.
  5241  func (v SelectionNotifyEvent) SequenceId() uint16 {
  5242  	return v.Sequence
  5243  }
  5244  
  5245  // String is a rudimentary string representation of SelectionNotifyEvent.
  5246  func (v SelectionNotifyEvent) String() string {
  5247  	fieldVals := make([]string, 0, 6)
  5248  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  5249  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  5250  	fieldVals = append(fieldVals, xgb.Sprintf("Requestor: %d", v.Requestor))
  5251  	fieldVals = append(fieldVals, xgb.Sprintf("Selection: %d", v.Selection))
  5252  	fieldVals = append(fieldVals, xgb.Sprintf("Target: %d", v.Target))
  5253  	fieldVals = append(fieldVals, xgb.Sprintf("Property: %d", v.Property))
  5254  	return "SelectionNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  5255  }
  5256  
  5257  func init() {
  5258  	xgb.NewEventFuncs[31] = SelectionNotifyEventNew
  5259  }
  5260  
  5261  // SelectionRequest is the event number for a SelectionRequestEvent.
  5262  const SelectionRequest = 30
  5263  
  5264  type SelectionRequestEvent struct {
  5265  	Sequence uint16
  5266  	// padding: 1 bytes
  5267  	Time      Timestamp
  5268  	Owner     Window
  5269  	Requestor Window
  5270  	Selection Atom
  5271  	Target    Atom
  5272  	Property  Atom
  5273  }
  5274  
  5275  // SelectionRequestEventNew constructs a SelectionRequestEvent value that implements xgb.Event from a byte slice.
  5276  func SelectionRequestEventNew(buf []byte) xgb.Event {
  5277  	v := SelectionRequestEvent{}
  5278  	b := 1 // don't read event number
  5279  
  5280  	b += 1 // padding
  5281  
  5282  	v.Sequence = xgb.Get16(buf[b:])
  5283  	b += 2
  5284  
  5285  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  5286  	b += 4
  5287  
  5288  	v.Owner = Window(xgb.Get32(buf[b:]))
  5289  	b += 4
  5290  
  5291  	v.Requestor = Window(xgb.Get32(buf[b:]))
  5292  	b += 4
  5293  
  5294  	v.Selection = Atom(xgb.Get32(buf[b:]))
  5295  	b += 4
  5296  
  5297  	v.Target = Atom(xgb.Get32(buf[b:]))
  5298  	b += 4
  5299  
  5300  	v.Property = Atom(xgb.Get32(buf[b:]))
  5301  	b += 4
  5302  
  5303  	return v
  5304  }
  5305  
  5306  // Bytes writes a SelectionRequestEvent value to a byte slice.
  5307  func (v SelectionRequestEvent) Bytes() []byte {
  5308  	buf := make([]byte, 32)
  5309  	b := 0
  5310  
  5311  	// write event number
  5312  	buf[b] = 30
  5313  	b += 1
  5314  
  5315  	b += 1 // padding
  5316  
  5317  	b += 2 // skip sequence number
  5318  
  5319  	xgb.Put32(buf[b:], uint32(v.Time))
  5320  	b += 4
  5321  
  5322  	xgb.Put32(buf[b:], uint32(v.Owner))
  5323  	b += 4
  5324  
  5325  	xgb.Put32(buf[b:], uint32(v.Requestor))
  5326  	b += 4
  5327  
  5328  	xgb.Put32(buf[b:], uint32(v.Selection))
  5329  	b += 4
  5330  
  5331  	xgb.Put32(buf[b:], uint32(v.Target))
  5332  	b += 4
  5333  
  5334  	xgb.Put32(buf[b:], uint32(v.Property))
  5335  	b += 4
  5336  
  5337  	return buf
  5338  }
  5339  
  5340  // SequenceId returns the sequence id attached to the SelectionRequest event.
  5341  // Events without a sequence number (KeymapNotify) return 0.
  5342  // This is mostly used internally.
  5343  func (v SelectionRequestEvent) SequenceId() uint16 {
  5344  	return v.Sequence
  5345  }
  5346  
  5347  // String is a rudimentary string representation of SelectionRequestEvent.
  5348  func (v SelectionRequestEvent) String() string {
  5349  	fieldVals := make([]string, 0, 7)
  5350  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  5351  	fieldVals = append(fieldVals, xgb.Sprintf("Time: %d", v.Time))
  5352  	fieldVals = append(fieldVals, xgb.Sprintf("Owner: %d", v.Owner))
  5353  	fieldVals = append(fieldVals, xgb.Sprintf("Requestor: %d", v.Requestor))
  5354  	fieldVals = append(fieldVals, xgb.Sprintf("Selection: %d", v.Selection))
  5355  	fieldVals = append(fieldVals, xgb.Sprintf("Target: %d", v.Target))
  5356  	fieldVals = append(fieldVals, xgb.Sprintf("Property: %d", v.Property))
  5357  	return "SelectionRequest {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  5358  }
  5359  
  5360  func init() {
  5361  	xgb.NewEventFuncs[30] = SelectionRequestEventNew
  5362  }
  5363  
  5364  const (
  5365  	SendEventDestPointerWindow = 0
  5366  	SendEventDestItemFocus     = 1
  5367  )
  5368  
  5369  const (
  5370  	SetModeInsert = 0
  5371  	SetModeDelete = 1
  5372  )
  5373  
  5374  type SetupAuthenticate struct {
  5375  	Status byte
  5376  	// padding: 5 bytes
  5377  	Length uint16
  5378  	Reason string // size: xgb.Pad(((int(Length) * 4) * 1))
  5379  }
  5380  
  5381  // SetupAuthenticateRead reads a byte slice into a SetupAuthenticate value.
  5382  func SetupAuthenticateRead(buf []byte, v *SetupAuthenticate) int {
  5383  	b := 0
  5384  
  5385  	v.Status = buf[b]
  5386  	b += 1
  5387  
  5388  	b += 5 // padding
  5389  
  5390  	v.Length = xgb.Get16(buf[b:])
  5391  	b += 2
  5392  
  5393  	{
  5394  		byteString := make([]byte, (int(v.Length) * 4))
  5395  		copy(byteString[:(int(v.Length)*4)], buf[b:])
  5396  		v.Reason = string(byteString)
  5397  		b += int((int(v.Length) * 4))
  5398  	}
  5399  
  5400  	return b
  5401  }
  5402  
  5403  // SetupAuthenticateReadList reads a byte slice into a list of SetupAuthenticate values.
  5404  func SetupAuthenticateReadList(buf []byte, dest []SetupAuthenticate) int {
  5405  	b := 0
  5406  	for i := 0; i < len(dest); i++ {
  5407  		dest[i] = SetupAuthenticate{}
  5408  		b += SetupAuthenticateRead(buf[b:], &dest[i])
  5409  	}
  5410  	return xgb.Pad(b)
  5411  }
  5412  
  5413  // Bytes writes a SetupAuthenticate value to a byte slice.
  5414  func (v SetupAuthenticate) Bytes() []byte {
  5415  	buf := make([]byte, (8 + xgb.Pad(((int(v.Length) * 4) * 1))))
  5416  	b := 0
  5417  
  5418  	buf[b] = v.Status
  5419  	b += 1
  5420  
  5421  	b += 5 // padding
  5422  
  5423  	xgb.Put16(buf[b:], v.Length)
  5424  	b += 2
  5425  
  5426  	copy(buf[b:], v.Reason[:(int(v.Length)*4)])
  5427  	b += int((int(v.Length) * 4))
  5428  
  5429  	return buf[:b]
  5430  }
  5431  
  5432  // SetupAuthenticateListBytes writes a list of SetupAuthenticate values to a byte slice.
  5433  func SetupAuthenticateListBytes(buf []byte, list []SetupAuthenticate) int {
  5434  	b := 0
  5435  	var structBytes []byte
  5436  	for _, item := range list {
  5437  		structBytes = item.Bytes()
  5438  		copy(buf[b:], structBytes)
  5439  		b += len(structBytes)
  5440  	}
  5441  	return xgb.Pad(b)
  5442  }
  5443  
  5444  // SetupAuthenticateListSize computes the size (bytes) of a list of SetupAuthenticate values.
  5445  func SetupAuthenticateListSize(list []SetupAuthenticate) int {
  5446  	size := 0
  5447  	for _, item := range list {
  5448  		size += (8 + xgb.Pad(((int(item.Length) * 4) * 1)))
  5449  	}
  5450  	return size
  5451  }
  5452  
  5453  type SetupFailed struct {
  5454  	Status               byte
  5455  	ReasonLen            byte
  5456  	ProtocolMajorVersion uint16
  5457  	ProtocolMinorVersion uint16
  5458  	Length               uint16
  5459  	Reason               string // size: xgb.Pad((int(ReasonLen) * 1))
  5460  }
  5461  
  5462  // SetupFailedRead reads a byte slice into a SetupFailed value.
  5463  func SetupFailedRead(buf []byte, v *SetupFailed) int {
  5464  	b := 0
  5465  
  5466  	v.Status = buf[b]
  5467  	b += 1
  5468  
  5469  	v.ReasonLen = buf[b]
  5470  	b += 1
  5471  
  5472  	v.ProtocolMajorVersion = xgb.Get16(buf[b:])
  5473  	b += 2
  5474  
  5475  	v.ProtocolMinorVersion = xgb.Get16(buf[b:])
  5476  	b += 2
  5477  
  5478  	v.Length = xgb.Get16(buf[b:])
  5479  	b += 2
  5480  
  5481  	{
  5482  		byteString := make([]byte, v.ReasonLen)
  5483  		copy(byteString[:v.ReasonLen], buf[b:])
  5484  		v.Reason = string(byteString)
  5485  		b += int(v.ReasonLen)
  5486  	}
  5487  
  5488  	return b
  5489  }
  5490  
  5491  // SetupFailedReadList reads a byte slice into a list of SetupFailed values.
  5492  func SetupFailedReadList(buf []byte, dest []SetupFailed) int {
  5493  	b := 0
  5494  	for i := 0; i < len(dest); i++ {
  5495  		dest[i] = SetupFailed{}
  5496  		b += SetupFailedRead(buf[b:], &dest[i])
  5497  	}
  5498  	return xgb.Pad(b)
  5499  }
  5500  
  5501  // Bytes writes a SetupFailed value to a byte slice.
  5502  func (v SetupFailed) Bytes() []byte {
  5503  	buf := make([]byte, (8 + xgb.Pad((int(v.ReasonLen) * 1))))
  5504  	b := 0
  5505  
  5506  	buf[b] = v.Status
  5507  	b += 1
  5508  
  5509  	buf[b] = v.ReasonLen
  5510  	b += 1
  5511  
  5512  	xgb.Put16(buf[b:], v.ProtocolMajorVersion)
  5513  	b += 2
  5514  
  5515  	xgb.Put16(buf[b:], v.ProtocolMinorVersion)
  5516  	b += 2
  5517  
  5518  	xgb.Put16(buf[b:], v.Length)
  5519  	b += 2
  5520  
  5521  	copy(buf[b:], v.Reason[:v.ReasonLen])
  5522  	b += int(v.ReasonLen)
  5523  
  5524  	return buf[:b]
  5525  }
  5526  
  5527  // SetupFailedListBytes writes a list of SetupFailed values to a byte slice.
  5528  func SetupFailedListBytes(buf []byte, list []SetupFailed) int {
  5529  	b := 0
  5530  	var structBytes []byte
  5531  	for _, item := range list {
  5532  		structBytes = item.Bytes()
  5533  		copy(buf[b:], structBytes)
  5534  		b += len(structBytes)
  5535  	}
  5536  	return xgb.Pad(b)
  5537  }
  5538  
  5539  // SetupFailedListSize computes the size (bytes) of a list of SetupFailed values.
  5540  func SetupFailedListSize(list []SetupFailed) int {
  5541  	size := 0
  5542  	for _, item := range list {
  5543  		size += (8 + xgb.Pad((int(item.ReasonLen) * 1)))
  5544  	}
  5545  	return size
  5546  }
  5547  
  5548  type SetupInfo struct {
  5549  	Status byte
  5550  	// padding: 1 bytes
  5551  	ProtocolMajorVersion     uint16
  5552  	ProtocolMinorVersion     uint16
  5553  	Length                   uint16
  5554  	ReleaseNumber            uint32
  5555  	ResourceIdBase           uint32
  5556  	ResourceIdMask           uint32
  5557  	MotionBufferSize         uint32
  5558  	VendorLen                uint16
  5559  	MaximumRequestLength     uint16
  5560  	RootsLen                 byte
  5561  	PixmapFormatsLen         byte
  5562  	ImageByteOrder           byte
  5563  	BitmapFormatBitOrder     byte
  5564  	BitmapFormatScanlineUnit byte
  5565  	BitmapFormatScanlinePad  byte
  5566  	MinKeycode               Keycode
  5567  	MaxKeycode               Keycode
  5568  	// padding: 4 bytes
  5569  	Vendor string // size: xgb.Pad((int(VendorLen) * 1))
  5570  	// alignment gap to multiple of 4
  5571  	PixmapFormats []Format // size: xgb.Pad((int(PixmapFormatsLen) * 8))
  5572  	// alignment gap to multiple of 4
  5573  	Roots []ScreenInfo // size: ScreenInfoListSize(Roots)
  5574  }
  5575  
  5576  // SetupInfoRead reads a byte slice into a SetupInfo value.
  5577  func SetupInfoRead(buf []byte, v *SetupInfo) int {
  5578  	b := 0
  5579  
  5580  	v.Status = buf[b]
  5581  	b += 1
  5582  
  5583  	b += 1 // padding
  5584  
  5585  	v.ProtocolMajorVersion = xgb.Get16(buf[b:])
  5586  	b += 2
  5587  
  5588  	v.ProtocolMinorVersion = xgb.Get16(buf[b:])
  5589  	b += 2
  5590  
  5591  	v.Length = xgb.Get16(buf[b:])
  5592  	b += 2
  5593  
  5594  	v.ReleaseNumber = xgb.Get32(buf[b:])
  5595  	b += 4
  5596  
  5597  	v.ResourceIdBase = xgb.Get32(buf[b:])
  5598  	b += 4
  5599  
  5600  	v.ResourceIdMask = xgb.Get32(buf[b:])
  5601  	b += 4
  5602  
  5603  	v.MotionBufferSize = xgb.Get32(buf[b:])
  5604  	b += 4
  5605  
  5606  	v.VendorLen = xgb.Get16(buf[b:])
  5607  	b += 2
  5608  
  5609  	v.MaximumRequestLength = xgb.Get16(buf[b:])
  5610  	b += 2
  5611  
  5612  	v.RootsLen = buf[b]
  5613  	b += 1
  5614  
  5615  	v.PixmapFormatsLen = buf[b]
  5616  	b += 1
  5617  
  5618  	v.ImageByteOrder = buf[b]
  5619  	b += 1
  5620  
  5621  	v.BitmapFormatBitOrder = buf[b]
  5622  	b += 1
  5623  
  5624  	v.BitmapFormatScanlineUnit = buf[b]
  5625  	b += 1
  5626  
  5627  	v.BitmapFormatScanlinePad = buf[b]
  5628  	b += 1
  5629  
  5630  	v.MinKeycode = Keycode(buf[b])
  5631  	b += 1
  5632  
  5633  	v.MaxKeycode = Keycode(buf[b])
  5634  	b += 1
  5635  
  5636  	b += 4 // padding
  5637  
  5638  	{
  5639  		byteString := make([]byte, v.VendorLen)
  5640  		copy(byteString[:v.VendorLen], buf[b:])
  5641  		v.Vendor = string(byteString)
  5642  		b += int(v.VendorLen)
  5643  	}
  5644  
  5645  	b = (b + 3) & ^3 // alignment gap
  5646  
  5647  	v.PixmapFormats = make([]Format, v.PixmapFormatsLen)
  5648  	b += FormatReadList(buf[b:], v.PixmapFormats)
  5649  
  5650  	b = (b + 3) & ^3 // alignment gap
  5651  
  5652  	v.Roots = make([]ScreenInfo, v.RootsLen)
  5653  	b += ScreenInfoReadList(buf[b:], v.Roots)
  5654  
  5655  	return b
  5656  }
  5657  
  5658  // SetupInfoReadList reads a byte slice into a list of SetupInfo values.
  5659  func SetupInfoReadList(buf []byte, dest []SetupInfo) int {
  5660  	b := 0
  5661  	for i := 0; i < len(dest); i++ {
  5662  		dest[i] = SetupInfo{}
  5663  		b += SetupInfoRead(buf[b:], &dest[i])
  5664  	}
  5665  	return xgb.Pad(b)
  5666  }
  5667  
  5668  // Bytes writes a SetupInfo value to a byte slice.
  5669  func (v SetupInfo) Bytes() []byte {
  5670  	buf := make([]byte, (((((40 + xgb.Pad((int(v.VendorLen) * 1))) + 4) + xgb.Pad((int(v.PixmapFormatsLen) * 8))) + 4) + ScreenInfoListSize(v.Roots)))
  5671  	b := 0
  5672  
  5673  	buf[b] = v.Status
  5674  	b += 1
  5675  
  5676  	b += 1 // padding
  5677  
  5678  	xgb.Put16(buf[b:], v.ProtocolMajorVersion)
  5679  	b += 2
  5680  
  5681  	xgb.Put16(buf[b:], v.ProtocolMinorVersion)
  5682  	b += 2
  5683  
  5684  	xgb.Put16(buf[b:], v.Length)
  5685  	b += 2
  5686  
  5687  	xgb.Put32(buf[b:], v.ReleaseNumber)
  5688  	b += 4
  5689  
  5690  	xgb.Put32(buf[b:], v.ResourceIdBase)
  5691  	b += 4
  5692  
  5693  	xgb.Put32(buf[b:], v.ResourceIdMask)
  5694  	b += 4
  5695  
  5696  	xgb.Put32(buf[b:], v.MotionBufferSize)
  5697  	b += 4
  5698  
  5699  	xgb.Put16(buf[b:], v.VendorLen)
  5700  	b += 2
  5701  
  5702  	xgb.Put16(buf[b:], v.MaximumRequestLength)
  5703  	b += 2
  5704  
  5705  	buf[b] = v.RootsLen
  5706  	b += 1
  5707  
  5708  	buf[b] = v.PixmapFormatsLen
  5709  	b += 1
  5710  
  5711  	buf[b] = v.ImageByteOrder
  5712  	b += 1
  5713  
  5714  	buf[b] = v.BitmapFormatBitOrder
  5715  	b += 1
  5716  
  5717  	buf[b] = v.BitmapFormatScanlineUnit
  5718  	b += 1
  5719  
  5720  	buf[b] = v.BitmapFormatScanlinePad
  5721  	b += 1
  5722  
  5723  	buf[b] = byte(v.MinKeycode)
  5724  	b += 1
  5725  
  5726  	buf[b] = byte(v.MaxKeycode)
  5727  	b += 1
  5728  
  5729  	b += 4 // padding
  5730  
  5731  	copy(buf[b:], v.Vendor[:v.VendorLen])
  5732  	b += int(v.VendorLen)
  5733  
  5734  	b = (b + 3) & ^3 // alignment gap
  5735  
  5736  	b += FormatListBytes(buf[b:], v.PixmapFormats)
  5737  
  5738  	b = (b + 3) & ^3 // alignment gap
  5739  
  5740  	b += ScreenInfoListBytes(buf[b:], v.Roots)
  5741  
  5742  	return buf[:b]
  5743  }
  5744  
  5745  // SetupInfoListBytes writes a list of SetupInfo values to a byte slice.
  5746  func SetupInfoListBytes(buf []byte, list []SetupInfo) int {
  5747  	b := 0
  5748  	var structBytes []byte
  5749  	for _, item := range list {
  5750  		structBytes = item.Bytes()
  5751  		copy(buf[b:], structBytes)
  5752  		b += len(structBytes)
  5753  	}
  5754  	return xgb.Pad(b)
  5755  }
  5756  
  5757  // SetupInfoListSize computes the size (bytes) of a list of SetupInfo values.
  5758  func SetupInfoListSize(list []SetupInfo) int {
  5759  	size := 0
  5760  	for _, item := range list {
  5761  		size += (((((40 + xgb.Pad((int(item.VendorLen) * 1))) + 4) + xgb.Pad((int(item.PixmapFormatsLen) * 8))) + 4) + ScreenInfoListSize(item.Roots))
  5762  	}
  5763  	return size
  5764  }
  5765  
  5766  type SetupRequest struct {
  5767  	ByteOrder byte
  5768  	// padding: 1 bytes
  5769  	ProtocolMajorVersion         uint16
  5770  	ProtocolMinorVersion         uint16
  5771  	AuthorizationProtocolNameLen uint16
  5772  	AuthorizationProtocolDataLen uint16
  5773  	// padding: 2 bytes
  5774  	AuthorizationProtocolName string // size: xgb.Pad((int(AuthorizationProtocolNameLen) * 1))
  5775  	AuthorizationProtocolData string // size: xgb.Pad((int(AuthorizationProtocolDataLen) * 1))
  5776  }
  5777  
  5778  // SetupRequestRead reads a byte slice into a SetupRequest value.
  5779  func SetupRequestRead(buf []byte, v *SetupRequest) int {
  5780  	b := 0
  5781  
  5782  	v.ByteOrder = buf[b]
  5783  	b += 1
  5784  
  5785  	b += 1 // padding
  5786  
  5787  	v.ProtocolMajorVersion = xgb.Get16(buf[b:])
  5788  	b += 2
  5789  
  5790  	v.ProtocolMinorVersion = xgb.Get16(buf[b:])
  5791  	b += 2
  5792  
  5793  	v.AuthorizationProtocolNameLen = xgb.Get16(buf[b:])
  5794  	b += 2
  5795  
  5796  	v.AuthorizationProtocolDataLen = xgb.Get16(buf[b:])
  5797  	b += 2
  5798  
  5799  	b += 2 // padding
  5800  
  5801  	{
  5802  		byteString := make([]byte, v.AuthorizationProtocolNameLen)
  5803  		copy(byteString[:v.AuthorizationProtocolNameLen], buf[b:])
  5804  		v.AuthorizationProtocolName = string(byteString)
  5805  		b += int(v.AuthorizationProtocolNameLen)
  5806  	}
  5807  
  5808  	{
  5809  		byteString := make([]byte, v.AuthorizationProtocolDataLen)
  5810  		copy(byteString[:v.AuthorizationProtocolDataLen], buf[b:])
  5811  		v.AuthorizationProtocolData = string(byteString)
  5812  		b += int(v.AuthorizationProtocolDataLen)
  5813  	}
  5814  
  5815  	return b
  5816  }
  5817  
  5818  // SetupRequestReadList reads a byte slice into a list of SetupRequest values.
  5819  func SetupRequestReadList(buf []byte, dest []SetupRequest) int {
  5820  	b := 0
  5821  	for i := 0; i < len(dest); i++ {
  5822  		dest[i] = SetupRequest{}
  5823  		b += SetupRequestRead(buf[b:], &dest[i])
  5824  	}
  5825  	return xgb.Pad(b)
  5826  }
  5827  
  5828  // Bytes writes a SetupRequest value to a byte slice.
  5829  func (v SetupRequest) Bytes() []byte {
  5830  	buf := make([]byte, ((12 + xgb.Pad((int(v.AuthorizationProtocolNameLen) * 1))) + xgb.Pad((int(v.AuthorizationProtocolDataLen) * 1))))
  5831  	b := 0
  5832  
  5833  	buf[b] = v.ByteOrder
  5834  	b += 1
  5835  
  5836  	b += 1 // padding
  5837  
  5838  	xgb.Put16(buf[b:], v.ProtocolMajorVersion)
  5839  	b += 2
  5840  
  5841  	xgb.Put16(buf[b:], v.ProtocolMinorVersion)
  5842  	b += 2
  5843  
  5844  	xgb.Put16(buf[b:], v.AuthorizationProtocolNameLen)
  5845  	b += 2
  5846  
  5847  	xgb.Put16(buf[b:], v.AuthorizationProtocolDataLen)
  5848  	b += 2
  5849  
  5850  	b += 2 // padding
  5851  
  5852  	copy(buf[b:], v.AuthorizationProtocolName[:v.AuthorizationProtocolNameLen])
  5853  	b += int(v.AuthorizationProtocolNameLen)
  5854  
  5855  	copy(buf[b:], v.AuthorizationProtocolData[:v.AuthorizationProtocolDataLen])
  5856  	b += int(v.AuthorizationProtocolDataLen)
  5857  
  5858  	return buf[:b]
  5859  }
  5860  
  5861  // SetupRequestListBytes writes a list of SetupRequest values to a byte slice.
  5862  func SetupRequestListBytes(buf []byte, list []SetupRequest) int {
  5863  	b := 0
  5864  	var structBytes []byte
  5865  	for _, item := range list {
  5866  		structBytes = item.Bytes()
  5867  		copy(buf[b:], structBytes)
  5868  		b += len(structBytes)
  5869  	}
  5870  	return xgb.Pad(b)
  5871  }
  5872  
  5873  // SetupRequestListSize computes the size (bytes) of a list of SetupRequest values.
  5874  func SetupRequestListSize(list []SetupRequest) int {
  5875  	size := 0
  5876  	for _, item := range list {
  5877  		size += ((12 + xgb.Pad((int(item.AuthorizationProtocolNameLen) * 1))) + xgb.Pad((int(item.AuthorizationProtocolDataLen) * 1)))
  5878  	}
  5879  	return size
  5880  }
  5881  
  5882  const (
  5883  	StackModeAbove    = 0
  5884  	StackModeBelow    = 1
  5885  	StackModeTopIf    = 2
  5886  	StackModeBottomIf = 3
  5887  	StackModeOpposite = 4
  5888  )
  5889  
  5890  type Str struct {
  5891  	NameLen byte
  5892  	Name    string // size: xgb.Pad((int(NameLen) * 1))
  5893  }
  5894  
  5895  // StrRead reads a byte slice into a Str value.
  5896  func StrRead(buf []byte, v *Str) int {
  5897  	b := 0
  5898  
  5899  	v.NameLen = buf[b]
  5900  	b += 1
  5901  
  5902  	{
  5903  		byteString := make([]byte, v.NameLen)
  5904  		copy(byteString[:v.NameLen], buf[b:])
  5905  		v.Name = string(byteString)
  5906  		b += int(v.NameLen)
  5907  	}
  5908  
  5909  	return b
  5910  }
  5911  
  5912  // StrReadList reads a byte slice into a list of Str values.
  5913  func StrReadList(buf []byte, dest []Str) int {
  5914  	b := 0
  5915  	for i := 0; i < len(dest); i++ {
  5916  		dest[i] = Str{}
  5917  		b += StrRead(buf[b:], &dest[i])
  5918  	}
  5919  	return xgb.Pad(b)
  5920  }
  5921  
  5922  // Bytes writes a Str value to a byte slice.
  5923  func (v Str) Bytes() []byte {
  5924  	buf := make([]byte, (1 + xgb.Pad((int(v.NameLen) * 1))))
  5925  	b := 0
  5926  
  5927  	buf[b] = v.NameLen
  5928  	b += 1
  5929  
  5930  	copy(buf[b:], v.Name[:v.NameLen])
  5931  	b += int(v.NameLen)
  5932  
  5933  	return buf[:b]
  5934  }
  5935  
  5936  // StrListBytes writes a list of Str values to a byte slice.
  5937  func StrListBytes(buf []byte, list []Str) int {
  5938  	b := 0
  5939  	var structBytes []byte
  5940  	for _, item := range list {
  5941  		structBytes = item.Bytes()
  5942  		copy(buf[b:], structBytes)
  5943  		b += len(structBytes)
  5944  	}
  5945  	return xgb.Pad(b)
  5946  }
  5947  
  5948  // StrListSize computes the size (bytes) of a list of Str values.
  5949  func StrListSize(list []Str) int {
  5950  	size := 0
  5951  	for _, item := range list {
  5952  		size += (1 + xgb.Pad((int(item.NameLen) * 1)))
  5953  	}
  5954  	return size
  5955  }
  5956  
  5957  const (
  5958  	SubwindowModeClipByChildren   = 0
  5959  	SubwindowModeIncludeInferiors = 1
  5960  )
  5961  
  5962  const (
  5963  	TimeCurrentTime = 0
  5964  )
  5965  
  5966  type Timecoord struct {
  5967  	Time Timestamp
  5968  	X    int16
  5969  	Y    int16
  5970  }
  5971  
  5972  // TimecoordRead reads a byte slice into a Timecoord value.
  5973  func TimecoordRead(buf []byte, v *Timecoord) int {
  5974  	b := 0
  5975  
  5976  	v.Time = Timestamp(xgb.Get32(buf[b:]))
  5977  	b += 4
  5978  
  5979  	v.X = int16(xgb.Get16(buf[b:]))
  5980  	b += 2
  5981  
  5982  	v.Y = int16(xgb.Get16(buf[b:]))
  5983  	b += 2
  5984  
  5985  	return b
  5986  }
  5987  
  5988  // TimecoordReadList reads a byte slice into a list of Timecoord values.
  5989  func TimecoordReadList(buf []byte, dest []Timecoord) int {
  5990  	b := 0
  5991  	for i := 0; i < len(dest); i++ {
  5992  		dest[i] = Timecoord{}
  5993  		b += TimecoordRead(buf[b:], &dest[i])
  5994  	}
  5995  	return xgb.Pad(b)
  5996  }
  5997  
  5998  // Bytes writes a Timecoord value to a byte slice.
  5999  func (v Timecoord) Bytes() []byte {
  6000  	buf := make([]byte, 8)
  6001  	b := 0
  6002  
  6003  	xgb.Put32(buf[b:], uint32(v.Time))
  6004  	b += 4
  6005  
  6006  	xgb.Put16(buf[b:], uint16(v.X))
  6007  	b += 2
  6008  
  6009  	xgb.Put16(buf[b:], uint16(v.Y))
  6010  	b += 2
  6011  
  6012  	return buf[:b]
  6013  }
  6014  
  6015  // TimecoordListBytes writes a list of Timecoord values to a byte slice.
  6016  func TimecoordListBytes(buf []byte, list []Timecoord) int {
  6017  	b := 0
  6018  	var structBytes []byte
  6019  	for _, item := range list {
  6020  		structBytes = item.Bytes()
  6021  		copy(buf[b:], structBytes)
  6022  		b += len(structBytes)
  6023  	}
  6024  	return xgb.Pad(b)
  6025  }
  6026  
  6027  type Timestamp uint32
  6028  
  6029  // UnmapNotify is the event number for a UnmapNotifyEvent.
  6030  const UnmapNotify = 18
  6031  
  6032  type UnmapNotifyEvent struct {
  6033  	Sequence uint16
  6034  	// padding: 1 bytes
  6035  	Event         Window
  6036  	Window        Window
  6037  	FromConfigure bool
  6038  	// padding: 3 bytes
  6039  }
  6040  
  6041  // UnmapNotifyEventNew constructs a UnmapNotifyEvent value that implements xgb.Event from a byte slice.
  6042  func UnmapNotifyEventNew(buf []byte) xgb.Event {
  6043  	v := UnmapNotifyEvent{}
  6044  	b := 1 // don't read event number
  6045  
  6046  	b += 1 // padding
  6047  
  6048  	v.Sequence = xgb.Get16(buf[b:])
  6049  	b += 2
  6050  
  6051  	v.Event = Window(xgb.Get32(buf[b:]))
  6052  	b += 4
  6053  
  6054  	v.Window = Window(xgb.Get32(buf[b:]))
  6055  	b += 4
  6056  
  6057  	if buf[b] == 1 {
  6058  		v.FromConfigure = true
  6059  	} else {
  6060  		v.FromConfigure = false
  6061  	}
  6062  	b += 1
  6063  
  6064  	b += 3 // padding
  6065  
  6066  	return v
  6067  }
  6068  
  6069  // Bytes writes a UnmapNotifyEvent value to a byte slice.
  6070  func (v UnmapNotifyEvent) Bytes() []byte {
  6071  	buf := make([]byte, 32)
  6072  	b := 0
  6073  
  6074  	// write event number
  6075  	buf[b] = 18
  6076  	b += 1
  6077  
  6078  	b += 1 // padding
  6079  
  6080  	b += 2 // skip sequence number
  6081  
  6082  	xgb.Put32(buf[b:], uint32(v.Event))
  6083  	b += 4
  6084  
  6085  	xgb.Put32(buf[b:], uint32(v.Window))
  6086  	b += 4
  6087  
  6088  	if v.FromConfigure {
  6089  		buf[b] = 1
  6090  	} else {
  6091  		buf[b] = 0
  6092  	}
  6093  	b += 1
  6094  
  6095  	b += 3 // padding
  6096  
  6097  	return buf
  6098  }
  6099  
  6100  // SequenceId returns the sequence id attached to the UnmapNotify event.
  6101  // Events without a sequence number (KeymapNotify) return 0.
  6102  // This is mostly used internally.
  6103  func (v UnmapNotifyEvent) SequenceId() uint16 {
  6104  	return v.Sequence
  6105  }
  6106  
  6107  // String is a rudimentary string representation of UnmapNotifyEvent.
  6108  func (v UnmapNotifyEvent) String() string {
  6109  	fieldVals := make([]string, 0, 5)
  6110  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  6111  	fieldVals = append(fieldVals, xgb.Sprintf("Event: %d", v.Event))
  6112  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  6113  	fieldVals = append(fieldVals, xgb.Sprintf("FromConfigure: %t", v.FromConfigure))
  6114  	return "UnmapNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  6115  }
  6116  
  6117  func init() {
  6118  	xgb.NewEventFuncs[18] = UnmapNotifyEventNew
  6119  }
  6120  
  6121  // BadValue is the error number for a BadValue.
  6122  const BadValue = 2
  6123  
  6124  type ValueError struct {
  6125  	Sequence    uint16
  6126  	NiceName    string
  6127  	BadValue    uint32
  6128  	MinorOpcode uint16
  6129  	MajorOpcode byte
  6130  	// padding: 1 bytes
  6131  }
  6132  
  6133  // ValueErrorNew constructs a ValueError value that implements xgb.Error from a byte slice.
  6134  func ValueErrorNew(buf []byte) xgb.Error {
  6135  	v := ValueError{}
  6136  	v.NiceName = "Value"
  6137  
  6138  	b := 1 // skip error determinant
  6139  	b += 1 // don't read error number
  6140  
  6141  	v.Sequence = xgb.Get16(buf[b:])
  6142  	b += 2
  6143  
  6144  	v.BadValue = xgb.Get32(buf[b:])
  6145  	b += 4
  6146  
  6147  	v.MinorOpcode = xgb.Get16(buf[b:])
  6148  	b += 2
  6149  
  6150  	v.MajorOpcode = buf[b]
  6151  	b += 1
  6152  
  6153  	b += 1 // padding
  6154  
  6155  	return v
  6156  }
  6157  
  6158  // SequenceId returns the sequence id attached to the BadValue error.
  6159  // This is mostly used internally.
  6160  func (err ValueError) SequenceId() uint16 {
  6161  	return err.Sequence
  6162  }
  6163  
  6164  // BadId returns the 'BadValue' number if one exists for the BadValue error. If no bad value exists, 0 is returned.
  6165  func (err ValueError) BadId() uint32 {
  6166  	return err.BadValue
  6167  }
  6168  
  6169  // Error returns a rudimentary string representation of the BadValue error.
  6170  
  6171  func (err ValueError) Error() string {
  6172  	fieldVals := make([]string, 0, 4)
  6173  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  6174  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  6175  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  6176  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  6177  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  6178  	return "BadValue {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  6179  }
  6180  
  6181  func init() {
  6182  	xgb.NewErrorFuncs[2] = ValueErrorNew
  6183  }
  6184  
  6185  const (
  6186  	VisibilityUnobscured        = 0
  6187  	VisibilityPartiallyObscured = 1
  6188  	VisibilityFullyObscured     = 2
  6189  )
  6190  
  6191  // VisibilityNotify is the event number for a VisibilityNotifyEvent.
  6192  const VisibilityNotify = 15
  6193  
  6194  type VisibilityNotifyEvent struct {
  6195  	Sequence uint16
  6196  	// padding: 1 bytes
  6197  	Window Window
  6198  	State  byte
  6199  	// padding: 3 bytes
  6200  }
  6201  
  6202  // VisibilityNotifyEventNew constructs a VisibilityNotifyEvent value that implements xgb.Event from a byte slice.
  6203  func VisibilityNotifyEventNew(buf []byte) xgb.Event {
  6204  	v := VisibilityNotifyEvent{}
  6205  	b := 1 // don't read event number
  6206  
  6207  	b += 1 // padding
  6208  
  6209  	v.Sequence = xgb.Get16(buf[b:])
  6210  	b += 2
  6211  
  6212  	v.Window = Window(xgb.Get32(buf[b:]))
  6213  	b += 4
  6214  
  6215  	v.State = buf[b]
  6216  	b += 1
  6217  
  6218  	b += 3 // padding
  6219  
  6220  	return v
  6221  }
  6222  
  6223  // Bytes writes a VisibilityNotifyEvent value to a byte slice.
  6224  func (v VisibilityNotifyEvent) Bytes() []byte {
  6225  	buf := make([]byte, 32)
  6226  	b := 0
  6227  
  6228  	// write event number
  6229  	buf[b] = 15
  6230  	b += 1
  6231  
  6232  	b += 1 // padding
  6233  
  6234  	b += 2 // skip sequence number
  6235  
  6236  	xgb.Put32(buf[b:], uint32(v.Window))
  6237  	b += 4
  6238  
  6239  	buf[b] = v.State
  6240  	b += 1
  6241  
  6242  	b += 3 // padding
  6243  
  6244  	return buf
  6245  }
  6246  
  6247  // SequenceId returns the sequence id attached to the VisibilityNotify event.
  6248  // Events without a sequence number (KeymapNotify) return 0.
  6249  // This is mostly used internally.
  6250  func (v VisibilityNotifyEvent) SequenceId() uint16 {
  6251  	return v.Sequence
  6252  }
  6253  
  6254  // String is a rudimentary string representation of VisibilityNotifyEvent.
  6255  func (v VisibilityNotifyEvent) String() string {
  6256  	fieldVals := make([]string, 0, 4)
  6257  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
  6258  	fieldVals = append(fieldVals, xgb.Sprintf("Window: %d", v.Window))
  6259  	fieldVals = append(fieldVals, xgb.Sprintf("State: %d", v.State))
  6260  	return "VisibilityNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  6261  }
  6262  
  6263  func init() {
  6264  	xgb.NewEventFuncs[15] = VisibilityNotifyEventNew
  6265  }
  6266  
  6267  const (
  6268  	VisualClassStaticGray  = 0
  6269  	VisualClassGrayScale   = 1
  6270  	VisualClassStaticColor = 2
  6271  	VisualClassPseudoColor = 3
  6272  	VisualClassTrueColor   = 4
  6273  	VisualClassDirectColor = 5
  6274  )
  6275  
  6276  type VisualInfo struct {
  6277  	VisualId        Visualid
  6278  	Class           byte
  6279  	BitsPerRgbValue byte
  6280  	ColormapEntries uint16
  6281  	RedMask         uint32
  6282  	GreenMask       uint32
  6283  	BlueMask        uint32
  6284  	// padding: 4 bytes
  6285  }
  6286  
  6287  // VisualInfoRead reads a byte slice into a VisualInfo value.
  6288  func VisualInfoRead(buf []byte, v *VisualInfo) int {
  6289  	b := 0
  6290  
  6291  	v.VisualId = Visualid(xgb.Get32(buf[b:]))
  6292  	b += 4
  6293  
  6294  	v.Class = buf[b]
  6295  	b += 1
  6296  
  6297  	v.BitsPerRgbValue = buf[b]
  6298  	b += 1
  6299  
  6300  	v.ColormapEntries = xgb.Get16(buf[b:])
  6301  	b += 2
  6302  
  6303  	v.RedMask = xgb.Get32(buf[b:])
  6304  	b += 4
  6305  
  6306  	v.GreenMask = xgb.Get32(buf[b:])
  6307  	b += 4
  6308  
  6309  	v.BlueMask = xgb.Get32(buf[b:])
  6310  	b += 4
  6311  
  6312  	b += 4 // padding
  6313  
  6314  	return b
  6315  }
  6316  
  6317  // VisualInfoReadList reads a byte slice into a list of VisualInfo values.
  6318  func VisualInfoReadList(buf []byte, dest []VisualInfo) int {
  6319  	b := 0
  6320  	for i := 0; i < len(dest); i++ {
  6321  		dest[i] = VisualInfo{}
  6322  		b += VisualInfoRead(buf[b:], &dest[i])
  6323  	}
  6324  	return xgb.Pad(b)
  6325  }
  6326  
  6327  // Bytes writes a VisualInfo value to a byte slice.
  6328  func (v VisualInfo) Bytes() []byte {
  6329  	buf := make([]byte, 24)
  6330  	b := 0
  6331  
  6332  	xgb.Put32(buf[b:], uint32(v.VisualId))
  6333  	b += 4
  6334  
  6335  	buf[b] = v.Class
  6336  	b += 1
  6337  
  6338  	buf[b] = v.BitsPerRgbValue
  6339  	b += 1
  6340  
  6341  	xgb.Put16(buf[b:], v.ColormapEntries)
  6342  	b += 2
  6343  
  6344  	xgb.Put32(buf[b:], v.RedMask)
  6345  	b += 4
  6346  
  6347  	xgb.Put32(buf[b:], v.GreenMask)
  6348  	b += 4
  6349  
  6350  	xgb.Put32(buf[b:], v.BlueMask)
  6351  	b += 4
  6352  
  6353  	b += 4 // padding
  6354  
  6355  	return buf[:b]
  6356  }
  6357  
  6358  // VisualInfoListBytes writes a list of VisualInfo values to a byte slice.
  6359  func VisualInfoListBytes(buf []byte, list []VisualInfo) int {
  6360  	b := 0
  6361  	var structBytes []byte
  6362  	for _, item := range list {
  6363  		structBytes = item.Bytes()
  6364  		copy(buf[b:], structBytes)
  6365  		b += len(structBytes)
  6366  	}
  6367  	return xgb.Pad(b)
  6368  }
  6369  
  6370  type Visualid uint32
  6371  
  6372  type Window uint32
  6373  
  6374  func NewWindowId(c *xgb.Conn) (Window, error) {
  6375  	id, err := c.NewId()
  6376  	if err != nil {
  6377  		return 0, err
  6378  	}
  6379  	return Window(id), nil
  6380  }
  6381  
  6382  // BadWindow is the error number for a BadWindow.
  6383  const BadWindow = 3
  6384  
  6385  type WindowError ValueError
  6386  
  6387  // WindowErrorNew constructs a WindowError value that implements xgb.Error from a byte slice.
  6388  func WindowErrorNew(buf []byte) xgb.Error {
  6389  	v := WindowError(ValueErrorNew(buf).(ValueError))
  6390  	v.NiceName = "Window"
  6391  	return v
  6392  }
  6393  
  6394  // SequenceId returns the sequence id attached to the BadWindow error.
  6395  // This is mostly used internally.
  6396  func (err WindowError) SequenceId() uint16 {
  6397  	return err.Sequence
  6398  }
  6399  
  6400  // BadId returns the 'BadValue' number if one exists for the BadWindow error. If no bad value exists, 0 is returned.
  6401  func (err WindowError) BadId() uint32 {
  6402  	return err.BadValue
  6403  }
  6404  
  6405  // Error returns a rudimentary string representation of the BadWindow error.
  6406  func (err WindowError) Error() string {
  6407  	fieldVals := make([]string, 0, 4)
  6408  	fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
  6409  	fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
  6410  	fieldVals = append(fieldVals, xgb.Sprintf("BadValue: %d", err.BadValue))
  6411  	fieldVals = append(fieldVals, xgb.Sprintf("MinorOpcode: %d", err.MinorOpcode))
  6412  	fieldVals = append(fieldVals, xgb.Sprintf("MajorOpcode: %d", err.MajorOpcode))
  6413  	return "BadWindow {" + xgb.StringsJoin(fieldVals, ", ") + "}"
  6414  }
  6415  
  6416  func init() {
  6417  	xgb.NewErrorFuncs[3] = WindowErrorNew
  6418  }
  6419  
  6420  const (
  6421  	WindowNone = 0
  6422  )
  6423  
  6424  const (
  6425  	WindowClassCopyFromParent = 0
  6426  	WindowClassInputOutput    = 1
  6427  	WindowClassInputOnly      = 2
  6428  )
  6429  
  6430  // Skipping definition for base type 'Bool'
  6431  
  6432  // Skipping definition for base type 'Byte'
  6433  
  6434  // Skipping definition for base type 'Card8'
  6435  
  6436  // Skipping definition for base type 'Char'
  6437  
  6438  // Skipping definition for base type 'Void'
  6439  
  6440  // Skipping definition for base type 'Double'
  6441  
  6442  // Skipping definition for base type 'Float'
  6443  
  6444  // Skipping definition for base type 'Int16'
  6445  
  6446  // Skipping definition for base type 'Int32'
  6447  
  6448  // Skipping definition for base type 'Int8'
  6449  
  6450  // Skipping definition for base type 'Card16'
  6451  
  6452  // Skipping definition for base type 'Card32'
  6453  
  6454  // AllocColorCookie is a cookie used only for AllocColor requests.
  6455  type AllocColorCookie struct {
  6456  	*xgb.Cookie
  6457  }
  6458  
  6459  // AllocColor sends a checked request.
  6460  // If an error occurs, it will be returned with the reply by calling AllocColorCookie.Reply()
  6461  func AllocColor(c *xgb.Conn, Cmap Colormap, Red uint16, Green uint16, Blue uint16) AllocColorCookie {
  6462  	cookie := c.NewCookie(true, true)
  6463  	c.NewRequest(allocColorRequest(c, Cmap, Red, Green, Blue), cookie)
  6464  	return AllocColorCookie{cookie}
  6465  }
  6466  
  6467  // AllocColorUnchecked sends an unchecked request.
  6468  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  6469  func AllocColorUnchecked(c *xgb.Conn, Cmap Colormap, Red uint16, Green uint16, Blue uint16) AllocColorCookie {
  6470  	cookie := c.NewCookie(false, true)
  6471  	c.NewRequest(allocColorRequest(c, Cmap, Red, Green, Blue), cookie)
  6472  	return AllocColorCookie{cookie}
  6473  }
  6474  
  6475  // AllocColorReply represents the data returned from a AllocColor request.
  6476  type AllocColorReply struct {
  6477  	Sequence uint16 // sequence number of the request for this reply
  6478  	Length   uint32 // number of bytes in this reply
  6479  	// padding: 1 bytes
  6480  	Red   uint16
  6481  	Green uint16
  6482  	Blue  uint16
  6483  	// padding: 2 bytes
  6484  	Pixel uint32
  6485  }
  6486  
  6487  // Reply blocks and returns the reply data for a AllocColor request.
  6488  func (cook AllocColorCookie) Reply() (*AllocColorReply, error) {
  6489  	buf, err := cook.Cookie.Reply()
  6490  	if err != nil {
  6491  		return nil, err
  6492  	}
  6493  	if buf == nil {
  6494  		return nil, nil
  6495  	}
  6496  	return allocColorReply(buf), nil
  6497  }
  6498  
  6499  // allocColorReply reads a byte slice into a AllocColorReply value.
  6500  func allocColorReply(buf []byte) *AllocColorReply {
  6501  	v := new(AllocColorReply)
  6502  	b := 1 // skip reply determinant
  6503  
  6504  	b += 1 // padding
  6505  
  6506  	v.Sequence = xgb.Get16(buf[b:])
  6507  	b += 2
  6508  
  6509  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  6510  	b += 4
  6511  
  6512  	v.Red = xgb.Get16(buf[b:])
  6513  	b += 2
  6514  
  6515  	v.Green = xgb.Get16(buf[b:])
  6516  	b += 2
  6517  
  6518  	v.Blue = xgb.Get16(buf[b:])
  6519  	b += 2
  6520  
  6521  	b += 2 // padding
  6522  
  6523  	v.Pixel = xgb.Get32(buf[b:])
  6524  	b += 4
  6525  
  6526  	return v
  6527  }
  6528  
  6529  // Write request to wire for AllocColor
  6530  // allocColorRequest writes a AllocColor request to a byte slice.
  6531  func allocColorRequest(c *xgb.Conn, Cmap Colormap, Red uint16, Green uint16, Blue uint16) []byte {
  6532  	size := 16
  6533  	b := 0
  6534  	buf := make([]byte, size)
  6535  
  6536  	buf[b] = 84 // request opcode
  6537  	b += 1
  6538  
  6539  	b += 1 // padding
  6540  
  6541  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  6542  	b += 2
  6543  
  6544  	xgb.Put32(buf[b:], uint32(Cmap))
  6545  	b += 4
  6546  
  6547  	xgb.Put16(buf[b:], Red)
  6548  	b += 2
  6549  
  6550  	xgb.Put16(buf[b:], Green)
  6551  	b += 2
  6552  
  6553  	xgb.Put16(buf[b:], Blue)
  6554  	b += 2
  6555  
  6556  	b += 2 // padding
  6557  
  6558  	return buf
  6559  }
  6560  
  6561  // AllocColorCellsCookie is a cookie used only for AllocColorCells requests.
  6562  type AllocColorCellsCookie struct {
  6563  	*xgb.Cookie
  6564  }
  6565  
  6566  // AllocColorCells sends a checked request.
  6567  // If an error occurs, it will be returned with the reply by calling AllocColorCellsCookie.Reply()
  6568  func AllocColorCells(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Planes uint16) AllocColorCellsCookie {
  6569  	cookie := c.NewCookie(true, true)
  6570  	c.NewRequest(allocColorCellsRequest(c, Contiguous, Cmap, Colors, Planes), cookie)
  6571  	return AllocColorCellsCookie{cookie}
  6572  }
  6573  
  6574  // AllocColorCellsUnchecked sends an unchecked request.
  6575  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  6576  func AllocColorCellsUnchecked(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Planes uint16) AllocColorCellsCookie {
  6577  	cookie := c.NewCookie(false, true)
  6578  	c.NewRequest(allocColorCellsRequest(c, Contiguous, Cmap, Colors, Planes), cookie)
  6579  	return AllocColorCellsCookie{cookie}
  6580  }
  6581  
  6582  // AllocColorCellsReply represents the data returned from a AllocColorCells request.
  6583  type AllocColorCellsReply struct {
  6584  	Sequence uint16 // sequence number of the request for this reply
  6585  	Length   uint32 // number of bytes in this reply
  6586  	// padding: 1 bytes
  6587  	PixelsLen uint16
  6588  	MasksLen  uint16
  6589  	// padding: 20 bytes
  6590  	Pixels []uint32 // size: xgb.Pad((int(PixelsLen) * 4))
  6591  	// alignment gap to multiple of 4
  6592  	Masks []uint32 // size: xgb.Pad((int(MasksLen) * 4))
  6593  }
  6594  
  6595  // Reply blocks and returns the reply data for a AllocColorCells request.
  6596  func (cook AllocColorCellsCookie) Reply() (*AllocColorCellsReply, error) {
  6597  	buf, err := cook.Cookie.Reply()
  6598  	if err != nil {
  6599  		return nil, err
  6600  	}
  6601  	if buf == nil {
  6602  		return nil, nil
  6603  	}
  6604  	return allocColorCellsReply(buf), nil
  6605  }
  6606  
  6607  // allocColorCellsReply reads a byte slice into a AllocColorCellsReply value.
  6608  func allocColorCellsReply(buf []byte) *AllocColorCellsReply {
  6609  	v := new(AllocColorCellsReply)
  6610  	b := 1 // skip reply determinant
  6611  
  6612  	b += 1 // padding
  6613  
  6614  	v.Sequence = xgb.Get16(buf[b:])
  6615  	b += 2
  6616  
  6617  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  6618  	b += 4
  6619  
  6620  	v.PixelsLen = xgb.Get16(buf[b:])
  6621  	b += 2
  6622  
  6623  	v.MasksLen = xgb.Get16(buf[b:])
  6624  	b += 2
  6625  
  6626  	b += 20 // padding
  6627  
  6628  	v.Pixels = make([]uint32, v.PixelsLen)
  6629  	for i := 0; i < int(v.PixelsLen); i++ {
  6630  		v.Pixels[i] = xgb.Get32(buf[b:])
  6631  		b += 4
  6632  	}
  6633  
  6634  	b = (b + 3) & ^3 // alignment gap
  6635  
  6636  	v.Masks = make([]uint32, v.MasksLen)
  6637  	for i := 0; i < int(v.MasksLen); i++ {
  6638  		v.Masks[i] = xgb.Get32(buf[b:])
  6639  		b += 4
  6640  	}
  6641  
  6642  	return v
  6643  }
  6644  
  6645  // Write request to wire for AllocColorCells
  6646  // allocColorCellsRequest writes a AllocColorCells request to a byte slice.
  6647  func allocColorCellsRequest(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Planes uint16) []byte {
  6648  	size := 12
  6649  	b := 0
  6650  	buf := make([]byte, size)
  6651  
  6652  	buf[b] = 86 // request opcode
  6653  	b += 1
  6654  
  6655  	if Contiguous {
  6656  		buf[b] = 1
  6657  	} else {
  6658  		buf[b] = 0
  6659  	}
  6660  	b += 1
  6661  
  6662  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  6663  	b += 2
  6664  
  6665  	xgb.Put32(buf[b:], uint32(Cmap))
  6666  	b += 4
  6667  
  6668  	xgb.Put16(buf[b:], Colors)
  6669  	b += 2
  6670  
  6671  	xgb.Put16(buf[b:], Planes)
  6672  	b += 2
  6673  
  6674  	return buf
  6675  }
  6676  
  6677  // AllocColorPlanesCookie is a cookie used only for AllocColorPlanes requests.
  6678  type AllocColorPlanesCookie struct {
  6679  	*xgb.Cookie
  6680  }
  6681  
  6682  // AllocColorPlanes sends a checked request.
  6683  // If an error occurs, it will be returned with the reply by calling AllocColorPlanesCookie.Reply()
  6684  func AllocColorPlanes(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Reds uint16, Greens uint16, Blues uint16) AllocColorPlanesCookie {
  6685  	cookie := c.NewCookie(true, true)
  6686  	c.NewRequest(allocColorPlanesRequest(c, Contiguous, Cmap, Colors, Reds, Greens, Blues), cookie)
  6687  	return AllocColorPlanesCookie{cookie}
  6688  }
  6689  
  6690  // AllocColorPlanesUnchecked sends an unchecked request.
  6691  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  6692  func AllocColorPlanesUnchecked(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Reds uint16, Greens uint16, Blues uint16) AllocColorPlanesCookie {
  6693  	cookie := c.NewCookie(false, true)
  6694  	c.NewRequest(allocColorPlanesRequest(c, Contiguous, Cmap, Colors, Reds, Greens, Blues), cookie)
  6695  	return AllocColorPlanesCookie{cookie}
  6696  }
  6697  
  6698  // AllocColorPlanesReply represents the data returned from a AllocColorPlanes request.
  6699  type AllocColorPlanesReply struct {
  6700  	Sequence uint16 // sequence number of the request for this reply
  6701  	Length   uint32 // number of bytes in this reply
  6702  	// padding: 1 bytes
  6703  	PixelsLen uint16
  6704  	// padding: 2 bytes
  6705  	RedMask   uint32
  6706  	GreenMask uint32
  6707  	BlueMask  uint32
  6708  	// padding: 8 bytes
  6709  	Pixels []uint32 // size: xgb.Pad((int(PixelsLen) * 4))
  6710  }
  6711  
  6712  // Reply blocks and returns the reply data for a AllocColorPlanes request.
  6713  func (cook AllocColorPlanesCookie) Reply() (*AllocColorPlanesReply, error) {
  6714  	buf, err := cook.Cookie.Reply()
  6715  	if err != nil {
  6716  		return nil, err
  6717  	}
  6718  	if buf == nil {
  6719  		return nil, nil
  6720  	}
  6721  	return allocColorPlanesReply(buf), nil
  6722  }
  6723  
  6724  // allocColorPlanesReply reads a byte slice into a AllocColorPlanesReply value.
  6725  func allocColorPlanesReply(buf []byte) *AllocColorPlanesReply {
  6726  	v := new(AllocColorPlanesReply)
  6727  	b := 1 // skip reply determinant
  6728  
  6729  	b += 1 // padding
  6730  
  6731  	v.Sequence = xgb.Get16(buf[b:])
  6732  	b += 2
  6733  
  6734  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  6735  	b += 4
  6736  
  6737  	v.PixelsLen = xgb.Get16(buf[b:])
  6738  	b += 2
  6739  
  6740  	b += 2 // padding
  6741  
  6742  	v.RedMask = xgb.Get32(buf[b:])
  6743  	b += 4
  6744  
  6745  	v.GreenMask = xgb.Get32(buf[b:])
  6746  	b += 4
  6747  
  6748  	v.BlueMask = xgb.Get32(buf[b:])
  6749  	b += 4
  6750  
  6751  	b += 8 // padding
  6752  
  6753  	v.Pixels = make([]uint32, v.PixelsLen)
  6754  	for i := 0; i < int(v.PixelsLen); i++ {
  6755  		v.Pixels[i] = xgb.Get32(buf[b:])
  6756  		b += 4
  6757  	}
  6758  
  6759  	return v
  6760  }
  6761  
  6762  // Write request to wire for AllocColorPlanes
  6763  // allocColorPlanesRequest writes a AllocColorPlanes request to a byte slice.
  6764  func allocColorPlanesRequest(c *xgb.Conn, Contiguous bool, Cmap Colormap, Colors uint16, Reds uint16, Greens uint16, Blues uint16) []byte {
  6765  	size := 16
  6766  	b := 0
  6767  	buf := make([]byte, size)
  6768  
  6769  	buf[b] = 87 // request opcode
  6770  	b += 1
  6771  
  6772  	if Contiguous {
  6773  		buf[b] = 1
  6774  	} else {
  6775  		buf[b] = 0
  6776  	}
  6777  	b += 1
  6778  
  6779  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  6780  	b += 2
  6781  
  6782  	xgb.Put32(buf[b:], uint32(Cmap))
  6783  	b += 4
  6784  
  6785  	xgb.Put16(buf[b:], Colors)
  6786  	b += 2
  6787  
  6788  	xgb.Put16(buf[b:], Reds)
  6789  	b += 2
  6790  
  6791  	xgb.Put16(buf[b:], Greens)
  6792  	b += 2
  6793  
  6794  	xgb.Put16(buf[b:], Blues)
  6795  	b += 2
  6796  
  6797  	return buf
  6798  }
  6799  
  6800  // AllocNamedColorCookie is a cookie used only for AllocNamedColor requests.
  6801  type AllocNamedColorCookie struct {
  6802  	*xgb.Cookie
  6803  }
  6804  
  6805  // AllocNamedColor sends a checked request.
  6806  // If an error occurs, it will be returned with the reply by calling AllocNamedColorCookie.Reply()
  6807  func AllocNamedColor(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) AllocNamedColorCookie {
  6808  	cookie := c.NewCookie(true, true)
  6809  	c.NewRequest(allocNamedColorRequest(c, Cmap, NameLen, Name), cookie)
  6810  	return AllocNamedColorCookie{cookie}
  6811  }
  6812  
  6813  // AllocNamedColorUnchecked sends an unchecked request.
  6814  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  6815  func AllocNamedColorUnchecked(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) AllocNamedColorCookie {
  6816  	cookie := c.NewCookie(false, true)
  6817  	c.NewRequest(allocNamedColorRequest(c, Cmap, NameLen, Name), cookie)
  6818  	return AllocNamedColorCookie{cookie}
  6819  }
  6820  
  6821  // AllocNamedColorReply represents the data returned from a AllocNamedColor request.
  6822  type AllocNamedColorReply struct {
  6823  	Sequence uint16 // sequence number of the request for this reply
  6824  	Length   uint32 // number of bytes in this reply
  6825  	// padding: 1 bytes
  6826  	Pixel       uint32
  6827  	ExactRed    uint16
  6828  	ExactGreen  uint16
  6829  	ExactBlue   uint16
  6830  	VisualRed   uint16
  6831  	VisualGreen uint16
  6832  	VisualBlue  uint16
  6833  }
  6834  
  6835  // Reply blocks and returns the reply data for a AllocNamedColor request.
  6836  func (cook AllocNamedColorCookie) Reply() (*AllocNamedColorReply, error) {
  6837  	buf, err := cook.Cookie.Reply()
  6838  	if err != nil {
  6839  		return nil, err
  6840  	}
  6841  	if buf == nil {
  6842  		return nil, nil
  6843  	}
  6844  	return allocNamedColorReply(buf), nil
  6845  }
  6846  
  6847  // allocNamedColorReply reads a byte slice into a AllocNamedColorReply value.
  6848  func allocNamedColorReply(buf []byte) *AllocNamedColorReply {
  6849  	v := new(AllocNamedColorReply)
  6850  	b := 1 // skip reply determinant
  6851  
  6852  	b += 1 // padding
  6853  
  6854  	v.Sequence = xgb.Get16(buf[b:])
  6855  	b += 2
  6856  
  6857  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  6858  	b += 4
  6859  
  6860  	v.Pixel = xgb.Get32(buf[b:])
  6861  	b += 4
  6862  
  6863  	v.ExactRed = xgb.Get16(buf[b:])
  6864  	b += 2
  6865  
  6866  	v.ExactGreen = xgb.Get16(buf[b:])
  6867  	b += 2
  6868  
  6869  	v.ExactBlue = xgb.Get16(buf[b:])
  6870  	b += 2
  6871  
  6872  	v.VisualRed = xgb.Get16(buf[b:])
  6873  	b += 2
  6874  
  6875  	v.VisualGreen = xgb.Get16(buf[b:])
  6876  	b += 2
  6877  
  6878  	v.VisualBlue = xgb.Get16(buf[b:])
  6879  	b += 2
  6880  
  6881  	return v
  6882  }
  6883  
  6884  // Write request to wire for AllocNamedColor
  6885  // allocNamedColorRequest writes a AllocNamedColor request to a byte slice.
  6886  func allocNamedColorRequest(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) []byte {
  6887  	size := xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
  6888  	b := 0
  6889  	buf := make([]byte, size)
  6890  
  6891  	buf[b] = 85 // request opcode
  6892  	b += 1
  6893  
  6894  	b += 1 // padding
  6895  
  6896  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  6897  	b += 2
  6898  
  6899  	xgb.Put32(buf[b:], uint32(Cmap))
  6900  	b += 4
  6901  
  6902  	xgb.Put16(buf[b:], NameLen)
  6903  	b += 2
  6904  
  6905  	b += 2 // padding
  6906  
  6907  	copy(buf[b:], Name[:NameLen])
  6908  	b += int(NameLen)
  6909  
  6910  	return buf
  6911  }
  6912  
  6913  // AllowEventsCookie is a cookie used only for AllowEvents requests.
  6914  type AllowEventsCookie struct {
  6915  	*xgb.Cookie
  6916  }
  6917  
  6918  // AllowEvents sends an unchecked request.
  6919  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  6920  func AllowEvents(c *xgb.Conn, Mode byte, Time Timestamp) AllowEventsCookie {
  6921  	cookie := c.NewCookie(false, false)
  6922  	c.NewRequest(allowEventsRequest(c, Mode, Time), cookie)
  6923  	return AllowEventsCookie{cookie}
  6924  }
  6925  
  6926  // AllowEventsChecked sends a checked request.
  6927  // If an error occurs, it can be retrieved using AllowEventsCookie.Check()
  6928  func AllowEventsChecked(c *xgb.Conn, Mode byte, Time Timestamp) AllowEventsCookie {
  6929  	cookie := c.NewCookie(true, false)
  6930  	c.NewRequest(allowEventsRequest(c, Mode, Time), cookie)
  6931  	return AllowEventsCookie{cookie}
  6932  }
  6933  
  6934  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  6935  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  6936  func (cook AllowEventsCookie) Check() error {
  6937  	return cook.Cookie.Check()
  6938  }
  6939  
  6940  // Write request to wire for AllowEvents
  6941  // allowEventsRequest writes a AllowEvents request to a byte slice.
  6942  func allowEventsRequest(c *xgb.Conn, Mode byte, Time Timestamp) []byte {
  6943  	size := 8
  6944  	b := 0
  6945  	buf := make([]byte, size)
  6946  
  6947  	buf[b] = 35 // request opcode
  6948  	b += 1
  6949  
  6950  	buf[b] = Mode
  6951  	b += 1
  6952  
  6953  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  6954  	b += 2
  6955  
  6956  	xgb.Put32(buf[b:], uint32(Time))
  6957  	b += 4
  6958  
  6959  	return buf
  6960  }
  6961  
  6962  // BellCookie is a cookie used only for Bell requests.
  6963  type BellCookie struct {
  6964  	*xgb.Cookie
  6965  }
  6966  
  6967  // Bell sends an unchecked request.
  6968  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  6969  func Bell(c *xgb.Conn, Percent int8) BellCookie {
  6970  	cookie := c.NewCookie(false, false)
  6971  	c.NewRequest(bellRequest(c, Percent), cookie)
  6972  	return BellCookie{cookie}
  6973  }
  6974  
  6975  // BellChecked sends a checked request.
  6976  // If an error occurs, it can be retrieved using BellCookie.Check()
  6977  func BellChecked(c *xgb.Conn, Percent int8) BellCookie {
  6978  	cookie := c.NewCookie(true, false)
  6979  	c.NewRequest(bellRequest(c, Percent), cookie)
  6980  	return BellCookie{cookie}
  6981  }
  6982  
  6983  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  6984  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  6985  func (cook BellCookie) Check() error {
  6986  	return cook.Cookie.Check()
  6987  }
  6988  
  6989  // Write request to wire for Bell
  6990  // bellRequest writes a Bell request to a byte slice.
  6991  func bellRequest(c *xgb.Conn, Percent int8) []byte {
  6992  	size := 4
  6993  	b := 0
  6994  	buf := make([]byte, size)
  6995  
  6996  	buf[b] = 104 // request opcode
  6997  	b += 1
  6998  
  6999  	buf[b] = byte(Percent)
  7000  	b += 1
  7001  
  7002  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7003  	b += 2
  7004  
  7005  	return buf
  7006  }
  7007  
  7008  // ChangeActivePointerGrabCookie is a cookie used only for ChangeActivePointerGrab requests.
  7009  type ChangeActivePointerGrabCookie struct {
  7010  	*xgb.Cookie
  7011  }
  7012  
  7013  // ChangeActivePointerGrab sends an unchecked request.
  7014  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7015  func ChangeActivePointerGrab(c *xgb.Conn, Cursor Cursor, Time Timestamp, EventMask uint16) ChangeActivePointerGrabCookie {
  7016  	cookie := c.NewCookie(false, false)
  7017  	c.NewRequest(changeActivePointerGrabRequest(c, Cursor, Time, EventMask), cookie)
  7018  	return ChangeActivePointerGrabCookie{cookie}
  7019  }
  7020  
  7021  // ChangeActivePointerGrabChecked sends a checked request.
  7022  // If an error occurs, it can be retrieved using ChangeActivePointerGrabCookie.Check()
  7023  func ChangeActivePointerGrabChecked(c *xgb.Conn, Cursor Cursor, Time Timestamp, EventMask uint16) ChangeActivePointerGrabCookie {
  7024  	cookie := c.NewCookie(true, false)
  7025  	c.NewRequest(changeActivePointerGrabRequest(c, Cursor, Time, EventMask), cookie)
  7026  	return ChangeActivePointerGrabCookie{cookie}
  7027  }
  7028  
  7029  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7030  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7031  func (cook ChangeActivePointerGrabCookie) Check() error {
  7032  	return cook.Cookie.Check()
  7033  }
  7034  
  7035  // Write request to wire for ChangeActivePointerGrab
  7036  // changeActivePointerGrabRequest writes a ChangeActivePointerGrab request to a byte slice.
  7037  func changeActivePointerGrabRequest(c *xgb.Conn, Cursor Cursor, Time Timestamp, EventMask uint16) []byte {
  7038  	size := 16
  7039  	b := 0
  7040  	buf := make([]byte, size)
  7041  
  7042  	buf[b] = 30 // request opcode
  7043  	b += 1
  7044  
  7045  	b += 1 // padding
  7046  
  7047  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7048  	b += 2
  7049  
  7050  	xgb.Put32(buf[b:], uint32(Cursor))
  7051  	b += 4
  7052  
  7053  	xgb.Put32(buf[b:], uint32(Time))
  7054  	b += 4
  7055  
  7056  	xgb.Put16(buf[b:], EventMask)
  7057  	b += 2
  7058  
  7059  	b += 2 // padding
  7060  
  7061  	return buf
  7062  }
  7063  
  7064  // ChangeGCCookie is a cookie used only for ChangeGC requests.
  7065  type ChangeGCCookie struct {
  7066  	*xgb.Cookie
  7067  }
  7068  
  7069  // ChangeGC sends an unchecked request.
  7070  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7071  func ChangeGC(c *xgb.Conn, Gc Gcontext, ValueMask uint32, ValueList []uint32) ChangeGCCookie {
  7072  	cookie := c.NewCookie(false, false)
  7073  	c.NewRequest(changeGCRequest(c, Gc, ValueMask, ValueList), cookie)
  7074  	return ChangeGCCookie{cookie}
  7075  }
  7076  
  7077  // ChangeGCChecked sends a checked request.
  7078  // If an error occurs, it can be retrieved using ChangeGCCookie.Check()
  7079  func ChangeGCChecked(c *xgb.Conn, Gc Gcontext, ValueMask uint32, ValueList []uint32) ChangeGCCookie {
  7080  	cookie := c.NewCookie(true, false)
  7081  	c.NewRequest(changeGCRequest(c, Gc, ValueMask, ValueList), cookie)
  7082  	return ChangeGCCookie{cookie}
  7083  }
  7084  
  7085  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7086  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7087  func (cook ChangeGCCookie) Check() error {
  7088  	return cook.Cookie.Check()
  7089  }
  7090  
  7091  // Write request to wire for ChangeGC
  7092  // changeGCRequest writes a ChangeGC request to a byte slice.
  7093  func changeGCRequest(c *xgb.Conn, Gc Gcontext, ValueMask uint32, ValueList []uint32) []byte {
  7094  	size := xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
  7095  	b := 0
  7096  	buf := make([]byte, size)
  7097  
  7098  	buf[b] = 56 // request opcode
  7099  	b += 1
  7100  
  7101  	b += 1 // padding
  7102  
  7103  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7104  	b += 2
  7105  
  7106  	xgb.Put32(buf[b:], uint32(Gc))
  7107  	b += 4
  7108  
  7109  	xgb.Put32(buf[b:], ValueMask)
  7110  	b += 4
  7111  	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
  7112  		xgb.Put32(buf[b:], ValueList[i])
  7113  		b += 4
  7114  	}
  7115  	b = xgb.Pad(b)
  7116  
  7117  	return buf
  7118  }
  7119  
  7120  // ChangeHostsCookie is a cookie used only for ChangeHosts requests.
  7121  type ChangeHostsCookie struct {
  7122  	*xgb.Cookie
  7123  }
  7124  
  7125  // ChangeHosts sends an unchecked request.
  7126  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7127  func ChangeHosts(c *xgb.Conn, Mode byte, Family byte, AddressLen uint16, Address []byte) ChangeHostsCookie {
  7128  	cookie := c.NewCookie(false, false)
  7129  	c.NewRequest(changeHostsRequest(c, Mode, Family, AddressLen, Address), cookie)
  7130  	return ChangeHostsCookie{cookie}
  7131  }
  7132  
  7133  // ChangeHostsChecked sends a checked request.
  7134  // If an error occurs, it can be retrieved using ChangeHostsCookie.Check()
  7135  func ChangeHostsChecked(c *xgb.Conn, Mode byte, Family byte, AddressLen uint16, Address []byte) ChangeHostsCookie {
  7136  	cookie := c.NewCookie(true, false)
  7137  	c.NewRequest(changeHostsRequest(c, Mode, Family, AddressLen, Address), cookie)
  7138  	return ChangeHostsCookie{cookie}
  7139  }
  7140  
  7141  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7142  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7143  func (cook ChangeHostsCookie) Check() error {
  7144  	return cook.Cookie.Check()
  7145  }
  7146  
  7147  // Write request to wire for ChangeHosts
  7148  // changeHostsRequest writes a ChangeHosts request to a byte slice.
  7149  func changeHostsRequest(c *xgb.Conn, Mode byte, Family byte, AddressLen uint16, Address []byte) []byte {
  7150  	size := xgb.Pad((8 + xgb.Pad((int(AddressLen) * 1))))
  7151  	b := 0
  7152  	buf := make([]byte, size)
  7153  
  7154  	buf[b] = 109 // request opcode
  7155  	b += 1
  7156  
  7157  	buf[b] = Mode
  7158  	b += 1
  7159  
  7160  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7161  	b += 2
  7162  
  7163  	buf[b] = Family
  7164  	b += 1
  7165  
  7166  	b += 1 // padding
  7167  
  7168  	xgb.Put16(buf[b:], AddressLen)
  7169  	b += 2
  7170  
  7171  	copy(buf[b:], Address[:AddressLen])
  7172  	b += int(AddressLen)
  7173  
  7174  	return buf
  7175  }
  7176  
  7177  // ChangeKeyboardControlCookie is a cookie used only for ChangeKeyboardControl requests.
  7178  type ChangeKeyboardControlCookie struct {
  7179  	*xgb.Cookie
  7180  }
  7181  
  7182  // ChangeKeyboardControl sends an unchecked request.
  7183  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7184  func ChangeKeyboardControl(c *xgb.Conn, ValueMask uint32, ValueList []uint32) ChangeKeyboardControlCookie {
  7185  	cookie := c.NewCookie(false, false)
  7186  	c.NewRequest(changeKeyboardControlRequest(c, ValueMask, ValueList), cookie)
  7187  	return ChangeKeyboardControlCookie{cookie}
  7188  }
  7189  
  7190  // ChangeKeyboardControlChecked sends a checked request.
  7191  // If an error occurs, it can be retrieved using ChangeKeyboardControlCookie.Check()
  7192  func ChangeKeyboardControlChecked(c *xgb.Conn, ValueMask uint32, ValueList []uint32) ChangeKeyboardControlCookie {
  7193  	cookie := c.NewCookie(true, false)
  7194  	c.NewRequest(changeKeyboardControlRequest(c, ValueMask, ValueList), cookie)
  7195  	return ChangeKeyboardControlCookie{cookie}
  7196  }
  7197  
  7198  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7199  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7200  func (cook ChangeKeyboardControlCookie) Check() error {
  7201  	return cook.Cookie.Check()
  7202  }
  7203  
  7204  // Write request to wire for ChangeKeyboardControl
  7205  // changeKeyboardControlRequest writes a ChangeKeyboardControl request to a byte slice.
  7206  func changeKeyboardControlRequest(c *xgb.Conn, ValueMask uint32, ValueList []uint32) []byte {
  7207  	size := xgb.Pad((4 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
  7208  	b := 0
  7209  	buf := make([]byte, size)
  7210  
  7211  	buf[b] = 102 // request opcode
  7212  	b += 1
  7213  
  7214  	b += 1 // padding
  7215  
  7216  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7217  	b += 2
  7218  
  7219  	xgb.Put32(buf[b:], ValueMask)
  7220  	b += 4
  7221  	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
  7222  		xgb.Put32(buf[b:], ValueList[i])
  7223  		b += 4
  7224  	}
  7225  	b = xgb.Pad(b)
  7226  
  7227  	return buf
  7228  }
  7229  
  7230  // ChangeKeyboardMappingCookie is a cookie used only for ChangeKeyboardMapping requests.
  7231  type ChangeKeyboardMappingCookie struct {
  7232  	*xgb.Cookie
  7233  }
  7234  
  7235  // ChangeKeyboardMapping sends an unchecked request.
  7236  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7237  func ChangeKeyboardMapping(c *xgb.Conn, KeycodeCount byte, FirstKeycode Keycode, KeysymsPerKeycode byte, Keysyms []Keysym) ChangeKeyboardMappingCookie {
  7238  	cookie := c.NewCookie(false, false)
  7239  	c.NewRequest(changeKeyboardMappingRequest(c, KeycodeCount, FirstKeycode, KeysymsPerKeycode, Keysyms), cookie)
  7240  	return ChangeKeyboardMappingCookie{cookie}
  7241  }
  7242  
  7243  // ChangeKeyboardMappingChecked sends a checked request.
  7244  // If an error occurs, it can be retrieved using ChangeKeyboardMappingCookie.Check()
  7245  func ChangeKeyboardMappingChecked(c *xgb.Conn, KeycodeCount byte, FirstKeycode Keycode, KeysymsPerKeycode byte, Keysyms []Keysym) ChangeKeyboardMappingCookie {
  7246  	cookie := c.NewCookie(true, false)
  7247  	c.NewRequest(changeKeyboardMappingRequest(c, KeycodeCount, FirstKeycode, KeysymsPerKeycode, Keysyms), cookie)
  7248  	return ChangeKeyboardMappingCookie{cookie}
  7249  }
  7250  
  7251  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7252  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7253  func (cook ChangeKeyboardMappingCookie) Check() error {
  7254  	return cook.Cookie.Check()
  7255  }
  7256  
  7257  // Write request to wire for ChangeKeyboardMapping
  7258  // changeKeyboardMappingRequest writes a ChangeKeyboardMapping request to a byte slice.
  7259  func changeKeyboardMappingRequest(c *xgb.Conn, KeycodeCount byte, FirstKeycode Keycode, KeysymsPerKeycode byte, Keysyms []Keysym) []byte {
  7260  	size := xgb.Pad((8 + xgb.Pad(((int(KeycodeCount) * int(KeysymsPerKeycode)) * 4))))
  7261  	b := 0
  7262  	buf := make([]byte, size)
  7263  
  7264  	buf[b] = 100 // request opcode
  7265  	b += 1
  7266  
  7267  	buf[b] = KeycodeCount
  7268  	b += 1
  7269  
  7270  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7271  	b += 2
  7272  
  7273  	buf[b] = byte(FirstKeycode)
  7274  	b += 1
  7275  
  7276  	buf[b] = KeysymsPerKeycode
  7277  	b += 1
  7278  
  7279  	b += 2 // padding
  7280  
  7281  	for i := 0; i < int((int(KeycodeCount) * int(KeysymsPerKeycode))); i++ {
  7282  		xgb.Put32(buf[b:], uint32(Keysyms[i]))
  7283  		b += 4
  7284  	}
  7285  
  7286  	return buf
  7287  }
  7288  
  7289  // ChangePointerControlCookie is a cookie used only for ChangePointerControl requests.
  7290  type ChangePointerControlCookie struct {
  7291  	*xgb.Cookie
  7292  }
  7293  
  7294  // ChangePointerControl sends an unchecked request.
  7295  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7296  func ChangePointerControl(c *xgb.Conn, AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration bool, DoThreshold bool) ChangePointerControlCookie {
  7297  	cookie := c.NewCookie(false, false)
  7298  	c.NewRequest(changePointerControlRequest(c, AccelerationNumerator, AccelerationDenominator, Threshold, DoAcceleration, DoThreshold), cookie)
  7299  	return ChangePointerControlCookie{cookie}
  7300  }
  7301  
  7302  // ChangePointerControlChecked sends a checked request.
  7303  // If an error occurs, it can be retrieved using ChangePointerControlCookie.Check()
  7304  func ChangePointerControlChecked(c *xgb.Conn, AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration bool, DoThreshold bool) ChangePointerControlCookie {
  7305  	cookie := c.NewCookie(true, false)
  7306  	c.NewRequest(changePointerControlRequest(c, AccelerationNumerator, AccelerationDenominator, Threshold, DoAcceleration, DoThreshold), cookie)
  7307  	return ChangePointerControlCookie{cookie}
  7308  }
  7309  
  7310  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7311  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7312  func (cook ChangePointerControlCookie) Check() error {
  7313  	return cook.Cookie.Check()
  7314  }
  7315  
  7316  // Write request to wire for ChangePointerControl
  7317  // changePointerControlRequest writes a ChangePointerControl request to a byte slice.
  7318  func changePointerControlRequest(c *xgb.Conn, AccelerationNumerator int16, AccelerationDenominator int16, Threshold int16, DoAcceleration bool, DoThreshold bool) []byte {
  7319  	size := 12
  7320  	b := 0
  7321  	buf := make([]byte, size)
  7322  
  7323  	buf[b] = 105 // request opcode
  7324  	b += 1
  7325  
  7326  	b += 1 // padding
  7327  
  7328  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7329  	b += 2
  7330  
  7331  	xgb.Put16(buf[b:], uint16(AccelerationNumerator))
  7332  	b += 2
  7333  
  7334  	xgb.Put16(buf[b:], uint16(AccelerationDenominator))
  7335  	b += 2
  7336  
  7337  	xgb.Put16(buf[b:], uint16(Threshold))
  7338  	b += 2
  7339  
  7340  	if DoAcceleration {
  7341  		buf[b] = 1
  7342  	} else {
  7343  		buf[b] = 0
  7344  	}
  7345  	b += 1
  7346  
  7347  	if DoThreshold {
  7348  		buf[b] = 1
  7349  	} else {
  7350  		buf[b] = 0
  7351  	}
  7352  	b += 1
  7353  
  7354  	return buf
  7355  }
  7356  
  7357  // ChangePropertyCookie is a cookie used only for ChangeProperty requests.
  7358  type ChangePropertyCookie struct {
  7359  	*xgb.Cookie
  7360  }
  7361  
  7362  // ChangeProperty sends an unchecked request.
  7363  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7364  func ChangeProperty(c *xgb.Conn, Mode byte, Window Window, Property Atom, Type Atom, Format byte, DataLen uint32, Data []byte) ChangePropertyCookie {
  7365  	cookie := c.NewCookie(false, false)
  7366  	c.NewRequest(changePropertyRequest(c, Mode, Window, Property, Type, Format, DataLen, Data), cookie)
  7367  	return ChangePropertyCookie{cookie}
  7368  }
  7369  
  7370  // ChangePropertyChecked sends a checked request.
  7371  // If an error occurs, it can be retrieved using ChangePropertyCookie.Check()
  7372  func ChangePropertyChecked(c *xgb.Conn, Mode byte, Window Window, Property Atom, Type Atom, Format byte, DataLen uint32, Data []byte) ChangePropertyCookie {
  7373  	cookie := c.NewCookie(true, false)
  7374  	c.NewRequest(changePropertyRequest(c, Mode, Window, Property, Type, Format, DataLen, Data), cookie)
  7375  	return ChangePropertyCookie{cookie}
  7376  }
  7377  
  7378  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7379  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7380  func (cook ChangePropertyCookie) Check() error {
  7381  	return cook.Cookie.Check()
  7382  }
  7383  
  7384  // Write request to wire for ChangeProperty
  7385  // changePropertyRequest writes a ChangeProperty request to a byte slice.
  7386  func changePropertyRequest(c *xgb.Conn, Mode byte, Window Window, Property Atom, Type Atom, Format byte, DataLen uint32, Data []byte) []byte {
  7387  	size := xgb.Pad((24 + xgb.Pad((((int(DataLen) * int(Format)) / 8) * 1))))
  7388  	b := 0
  7389  	buf := make([]byte, size)
  7390  
  7391  	buf[b] = 18 // request opcode
  7392  	b += 1
  7393  
  7394  	buf[b] = Mode
  7395  	b += 1
  7396  
  7397  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7398  	b += 2
  7399  
  7400  	xgb.Put32(buf[b:], uint32(Window))
  7401  	b += 4
  7402  
  7403  	xgb.Put32(buf[b:], uint32(Property))
  7404  	b += 4
  7405  
  7406  	xgb.Put32(buf[b:], uint32(Type))
  7407  	b += 4
  7408  
  7409  	buf[b] = Format
  7410  	b += 1
  7411  
  7412  	b += 3 // padding
  7413  
  7414  	xgb.Put32(buf[b:], DataLen)
  7415  	b += 4
  7416  
  7417  	copy(buf[b:], Data[:((int(DataLen)*int(Format))/8)])
  7418  	b += int(((int(DataLen) * int(Format)) / 8))
  7419  
  7420  	return buf
  7421  }
  7422  
  7423  // ChangeSaveSetCookie is a cookie used only for ChangeSaveSet requests.
  7424  type ChangeSaveSetCookie struct {
  7425  	*xgb.Cookie
  7426  }
  7427  
  7428  // ChangeSaveSet sends an unchecked request.
  7429  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7430  func ChangeSaveSet(c *xgb.Conn, Mode byte, Window Window) ChangeSaveSetCookie {
  7431  	cookie := c.NewCookie(false, false)
  7432  	c.NewRequest(changeSaveSetRequest(c, Mode, Window), cookie)
  7433  	return ChangeSaveSetCookie{cookie}
  7434  }
  7435  
  7436  // ChangeSaveSetChecked sends a checked request.
  7437  // If an error occurs, it can be retrieved using ChangeSaveSetCookie.Check()
  7438  func ChangeSaveSetChecked(c *xgb.Conn, Mode byte, Window Window) ChangeSaveSetCookie {
  7439  	cookie := c.NewCookie(true, false)
  7440  	c.NewRequest(changeSaveSetRequest(c, Mode, Window), cookie)
  7441  	return ChangeSaveSetCookie{cookie}
  7442  }
  7443  
  7444  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7445  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7446  func (cook ChangeSaveSetCookie) Check() error {
  7447  	return cook.Cookie.Check()
  7448  }
  7449  
  7450  // Write request to wire for ChangeSaveSet
  7451  // changeSaveSetRequest writes a ChangeSaveSet request to a byte slice.
  7452  func changeSaveSetRequest(c *xgb.Conn, Mode byte, Window Window) []byte {
  7453  	size := 8
  7454  	b := 0
  7455  	buf := make([]byte, size)
  7456  
  7457  	buf[b] = 6 // request opcode
  7458  	b += 1
  7459  
  7460  	buf[b] = Mode
  7461  	b += 1
  7462  
  7463  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7464  	b += 2
  7465  
  7466  	xgb.Put32(buf[b:], uint32(Window))
  7467  	b += 4
  7468  
  7469  	return buf
  7470  }
  7471  
  7472  // ChangeWindowAttributesCookie is a cookie used only for ChangeWindowAttributes requests.
  7473  type ChangeWindowAttributesCookie struct {
  7474  	*xgb.Cookie
  7475  }
  7476  
  7477  // ChangeWindowAttributes sends an unchecked request.
  7478  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7479  func ChangeWindowAttributes(c *xgb.Conn, Window Window, ValueMask uint32, ValueList []uint32) ChangeWindowAttributesCookie {
  7480  	cookie := c.NewCookie(false, false)
  7481  	c.NewRequest(changeWindowAttributesRequest(c, Window, ValueMask, ValueList), cookie)
  7482  	return ChangeWindowAttributesCookie{cookie}
  7483  }
  7484  
  7485  // ChangeWindowAttributesChecked sends a checked request.
  7486  // If an error occurs, it can be retrieved using ChangeWindowAttributesCookie.Check()
  7487  func ChangeWindowAttributesChecked(c *xgb.Conn, Window Window, ValueMask uint32, ValueList []uint32) ChangeWindowAttributesCookie {
  7488  	cookie := c.NewCookie(true, false)
  7489  	c.NewRequest(changeWindowAttributesRequest(c, Window, ValueMask, ValueList), cookie)
  7490  	return ChangeWindowAttributesCookie{cookie}
  7491  }
  7492  
  7493  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7494  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7495  func (cook ChangeWindowAttributesCookie) Check() error {
  7496  	return cook.Cookie.Check()
  7497  }
  7498  
  7499  // Write request to wire for ChangeWindowAttributes
  7500  // changeWindowAttributesRequest writes a ChangeWindowAttributes request to a byte slice.
  7501  func changeWindowAttributesRequest(c *xgb.Conn, Window Window, ValueMask uint32, ValueList []uint32) []byte {
  7502  	size := xgb.Pad((8 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
  7503  	b := 0
  7504  	buf := make([]byte, size)
  7505  
  7506  	buf[b] = 2 // request opcode
  7507  	b += 1
  7508  
  7509  	b += 1 // padding
  7510  
  7511  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7512  	b += 2
  7513  
  7514  	xgb.Put32(buf[b:], uint32(Window))
  7515  	b += 4
  7516  
  7517  	xgb.Put32(buf[b:], ValueMask)
  7518  	b += 4
  7519  	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
  7520  		xgb.Put32(buf[b:], ValueList[i])
  7521  		b += 4
  7522  	}
  7523  	b = xgb.Pad(b)
  7524  
  7525  	return buf
  7526  }
  7527  
  7528  // CirculateWindowCookie is a cookie used only for CirculateWindow requests.
  7529  type CirculateWindowCookie struct {
  7530  	*xgb.Cookie
  7531  }
  7532  
  7533  // CirculateWindow sends an unchecked request.
  7534  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7535  func CirculateWindow(c *xgb.Conn, Direction byte, Window Window) CirculateWindowCookie {
  7536  	cookie := c.NewCookie(false, false)
  7537  	c.NewRequest(circulateWindowRequest(c, Direction, Window), cookie)
  7538  	return CirculateWindowCookie{cookie}
  7539  }
  7540  
  7541  // CirculateWindowChecked sends a checked request.
  7542  // If an error occurs, it can be retrieved using CirculateWindowCookie.Check()
  7543  func CirculateWindowChecked(c *xgb.Conn, Direction byte, Window Window) CirculateWindowCookie {
  7544  	cookie := c.NewCookie(true, false)
  7545  	c.NewRequest(circulateWindowRequest(c, Direction, Window), cookie)
  7546  	return CirculateWindowCookie{cookie}
  7547  }
  7548  
  7549  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7550  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7551  func (cook CirculateWindowCookie) Check() error {
  7552  	return cook.Cookie.Check()
  7553  }
  7554  
  7555  // Write request to wire for CirculateWindow
  7556  // circulateWindowRequest writes a CirculateWindow request to a byte slice.
  7557  func circulateWindowRequest(c *xgb.Conn, Direction byte, Window Window) []byte {
  7558  	size := 8
  7559  	b := 0
  7560  	buf := make([]byte, size)
  7561  
  7562  	buf[b] = 13 // request opcode
  7563  	b += 1
  7564  
  7565  	buf[b] = Direction
  7566  	b += 1
  7567  
  7568  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7569  	b += 2
  7570  
  7571  	xgb.Put32(buf[b:], uint32(Window))
  7572  	b += 4
  7573  
  7574  	return buf
  7575  }
  7576  
  7577  // ClearAreaCookie is a cookie used only for ClearArea requests.
  7578  type ClearAreaCookie struct {
  7579  	*xgb.Cookie
  7580  }
  7581  
  7582  // ClearArea sends an unchecked request.
  7583  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7584  func ClearArea(c *xgb.Conn, Exposures bool, Window Window, X int16, Y int16, Width uint16, Height uint16) ClearAreaCookie {
  7585  	cookie := c.NewCookie(false, false)
  7586  	c.NewRequest(clearAreaRequest(c, Exposures, Window, X, Y, Width, Height), cookie)
  7587  	return ClearAreaCookie{cookie}
  7588  }
  7589  
  7590  // ClearAreaChecked sends a checked request.
  7591  // If an error occurs, it can be retrieved using ClearAreaCookie.Check()
  7592  func ClearAreaChecked(c *xgb.Conn, Exposures bool, Window Window, X int16, Y int16, Width uint16, Height uint16) ClearAreaCookie {
  7593  	cookie := c.NewCookie(true, false)
  7594  	c.NewRequest(clearAreaRequest(c, Exposures, Window, X, Y, Width, Height), cookie)
  7595  	return ClearAreaCookie{cookie}
  7596  }
  7597  
  7598  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7599  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7600  func (cook ClearAreaCookie) Check() error {
  7601  	return cook.Cookie.Check()
  7602  }
  7603  
  7604  // Write request to wire for ClearArea
  7605  // clearAreaRequest writes a ClearArea request to a byte slice.
  7606  func clearAreaRequest(c *xgb.Conn, Exposures bool, Window Window, X int16, Y int16, Width uint16, Height uint16) []byte {
  7607  	size := 16
  7608  	b := 0
  7609  	buf := make([]byte, size)
  7610  
  7611  	buf[b] = 61 // request opcode
  7612  	b += 1
  7613  
  7614  	if Exposures {
  7615  		buf[b] = 1
  7616  	} else {
  7617  		buf[b] = 0
  7618  	}
  7619  	b += 1
  7620  
  7621  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7622  	b += 2
  7623  
  7624  	xgb.Put32(buf[b:], uint32(Window))
  7625  	b += 4
  7626  
  7627  	xgb.Put16(buf[b:], uint16(X))
  7628  	b += 2
  7629  
  7630  	xgb.Put16(buf[b:], uint16(Y))
  7631  	b += 2
  7632  
  7633  	xgb.Put16(buf[b:], Width)
  7634  	b += 2
  7635  
  7636  	xgb.Put16(buf[b:], Height)
  7637  	b += 2
  7638  
  7639  	return buf
  7640  }
  7641  
  7642  // CloseFontCookie is a cookie used only for CloseFont requests.
  7643  type CloseFontCookie struct {
  7644  	*xgb.Cookie
  7645  }
  7646  
  7647  // CloseFont sends an unchecked request.
  7648  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7649  func CloseFont(c *xgb.Conn, Font Font) CloseFontCookie {
  7650  	cookie := c.NewCookie(false, false)
  7651  	c.NewRequest(closeFontRequest(c, Font), cookie)
  7652  	return CloseFontCookie{cookie}
  7653  }
  7654  
  7655  // CloseFontChecked sends a checked request.
  7656  // If an error occurs, it can be retrieved using CloseFontCookie.Check()
  7657  func CloseFontChecked(c *xgb.Conn, Font Font) CloseFontCookie {
  7658  	cookie := c.NewCookie(true, false)
  7659  	c.NewRequest(closeFontRequest(c, Font), cookie)
  7660  	return CloseFontCookie{cookie}
  7661  }
  7662  
  7663  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7664  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7665  func (cook CloseFontCookie) Check() error {
  7666  	return cook.Cookie.Check()
  7667  }
  7668  
  7669  // Write request to wire for CloseFont
  7670  // closeFontRequest writes a CloseFont request to a byte slice.
  7671  func closeFontRequest(c *xgb.Conn, Font Font) []byte {
  7672  	size := 8
  7673  	b := 0
  7674  	buf := make([]byte, size)
  7675  
  7676  	buf[b] = 46 // request opcode
  7677  	b += 1
  7678  
  7679  	b += 1 // padding
  7680  
  7681  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7682  	b += 2
  7683  
  7684  	xgb.Put32(buf[b:], uint32(Font))
  7685  	b += 4
  7686  
  7687  	return buf
  7688  }
  7689  
  7690  // ConfigureWindowCookie is a cookie used only for ConfigureWindow requests.
  7691  type ConfigureWindowCookie struct {
  7692  	*xgb.Cookie
  7693  }
  7694  
  7695  // ConfigureWindow sends an unchecked request.
  7696  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7697  func ConfigureWindow(c *xgb.Conn, Window Window, ValueMask uint16, ValueList []uint32) ConfigureWindowCookie {
  7698  	cookie := c.NewCookie(false, false)
  7699  	c.NewRequest(configureWindowRequest(c, Window, ValueMask, ValueList), cookie)
  7700  	return ConfigureWindowCookie{cookie}
  7701  }
  7702  
  7703  // ConfigureWindowChecked sends a checked request.
  7704  // If an error occurs, it can be retrieved using ConfigureWindowCookie.Check()
  7705  func ConfigureWindowChecked(c *xgb.Conn, Window Window, ValueMask uint16, ValueList []uint32) ConfigureWindowCookie {
  7706  	cookie := c.NewCookie(true, false)
  7707  	c.NewRequest(configureWindowRequest(c, Window, ValueMask, ValueList), cookie)
  7708  	return ConfigureWindowCookie{cookie}
  7709  }
  7710  
  7711  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7712  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7713  func (cook ConfigureWindowCookie) Check() error {
  7714  	return cook.Cookie.Check()
  7715  }
  7716  
  7717  // Write request to wire for ConfigureWindow
  7718  // configureWindowRequest writes a ConfigureWindow request to a byte slice.
  7719  func configureWindowRequest(c *xgb.Conn, Window Window, ValueMask uint16, ValueList []uint32) []byte {
  7720  	size := xgb.Pad((10 + (2 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
  7721  	b := 0
  7722  	buf := make([]byte, size)
  7723  
  7724  	buf[b] = 12 // request opcode
  7725  	b += 1
  7726  
  7727  	b += 1 // padding
  7728  
  7729  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7730  	b += 2
  7731  
  7732  	xgb.Put32(buf[b:], uint32(Window))
  7733  	b += 4
  7734  
  7735  	xgb.Put16(buf[b:], ValueMask)
  7736  	b += 2
  7737  
  7738  	b += 2 // padding
  7739  
  7740  	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
  7741  		xgb.Put32(buf[b:], ValueList[i])
  7742  		b += 4
  7743  	}
  7744  	b = xgb.Pad(b)
  7745  
  7746  	return buf
  7747  }
  7748  
  7749  // ConvertSelectionCookie is a cookie used only for ConvertSelection requests.
  7750  type ConvertSelectionCookie struct {
  7751  	*xgb.Cookie
  7752  }
  7753  
  7754  // ConvertSelection sends an unchecked request.
  7755  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7756  func ConvertSelection(c *xgb.Conn, Requestor Window, Selection Atom, Target Atom, Property Atom, Time Timestamp) ConvertSelectionCookie {
  7757  	cookie := c.NewCookie(false, false)
  7758  	c.NewRequest(convertSelectionRequest(c, Requestor, Selection, Target, Property, Time), cookie)
  7759  	return ConvertSelectionCookie{cookie}
  7760  }
  7761  
  7762  // ConvertSelectionChecked sends a checked request.
  7763  // If an error occurs, it can be retrieved using ConvertSelectionCookie.Check()
  7764  func ConvertSelectionChecked(c *xgb.Conn, Requestor Window, Selection Atom, Target Atom, Property Atom, Time Timestamp) ConvertSelectionCookie {
  7765  	cookie := c.NewCookie(true, false)
  7766  	c.NewRequest(convertSelectionRequest(c, Requestor, Selection, Target, Property, Time), cookie)
  7767  	return ConvertSelectionCookie{cookie}
  7768  }
  7769  
  7770  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7771  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7772  func (cook ConvertSelectionCookie) Check() error {
  7773  	return cook.Cookie.Check()
  7774  }
  7775  
  7776  // Write request to wire for ConvertSelection
  7777  // convertSelectionRequest writes a ConvertSelection request to a byte slice.
  7778  func convertSelectionRequest(c *xgb.Conn, Requestor Window, Selection Atom, Target Atom, Property Atom, Time Timestamp) []byte {
  7779  	size := 24
  7780  	b := 0
  7781  	buf := make([]byte, size)
  7782  
  7783  	buf[b] = 24 // request opcode
  7784  	b += 1
  7785  
  7786  	b += 1 // padding
  7787  
  7788  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7789  	b += 2
  7790  
  7791  	xgb.Put32(buf[b:], uint32(Requestor))
  7792  	b += 4
  7793  
  7794  	xgb.Put32(buf[b:], uint32(Selection))
  7795  	b += 4
  7796  
  7797  	xgb.Put32(buf[b:], uint32(Target))
  7798  	b += 4
  7799  
  7800  	xgb.Put32(buf[b:], uint32(Property))
  7801  	b += 4
  7802  
  7803  	xgb.Put32(buf[b:], uint32(Time))
  7804  	b += 4
  7805  
  7806  	return buf
  7807  }
  7808  
  7809  // CopyAreaCookie is a cookie used only for CopyArea requests.
  7810  type CopyAreaCookie struct {
  7811  	*xgb.Cookie
  7812  }
  7813  
  7814  // CopyArea sends an unchecked request.
  7815  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7816  func CopyArea(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) CopyAreaCookie {
  7817  	cookie := c.NewCookie(false, false)
  7818  	c.NewRequest(copyAreaRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height), cookie)
  7819  	return CopyAreaCookie{cookie}
  7820  }
  7821  
  7822  // CopyAreaChecked sends a checked request.
  7823  // If an error occurs, it can be retrieved using CopyAreaCookie.Check()
  7824  func CopyAreaChecked(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) CopyAreaCookie {
  7825  	cookie := c.NewCookie(true, false)
  7826  	c.NewRequest(copyAreaRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height), cookie)
  7827  	return CopyAreaCookie{cookie}
  7828  }
  7829  
  7830  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7831  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7832  func (cook CopyAreaCookie) Check() error {
  7833  	return cook.Cookie.Check()
  7834  }
  7835  
  7836  // Write request to wire for CopyArea
  7837  // copyAreaRequest writes a CopyArea request to a byte slice.
  7838  func copyAreaRequest(c *xgb.Conn, SrcDrawable Drawable, DstDrawable Drawable, Gc Gcontext, SrcX int16, SrcY int16, DstX int16, DstY int16, Width uint16, Height uint16) []byte {
  7839  	size := 28
  7840  	b := 0
  7841  	buf := make([]byte, size)
  7842  
  7843  	buf[b] = 62 // request opcode
  7844  	b += 1
  7845  
  7846  	b += 1 // padding
  7847  
  7848  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7849  	b += 2
  7850  
  7851  	xgb.Put32(buf[b:], uint32(SrcDrawable))
  7852  	b += 4
  7853  
  7854  	xgb.Put32(buf[b:], uint32(DstDrawable))
  7855  	b += 4
  7856  
  7857  	xgb.Put32(buf[b:], uint32(Gc))
  7858  	b += 4
  7859  
  7860  	xgb.Put16(buf[b:], uint16(SrcX))
  7861  	b += 2
  7862  
  7863  	xgb.Put16(buf[b:], uint16(SrcY))
  7864  	b += 2
  7865  
  7866  	xgb.Put16(buf[b:], uint16(DstX))
  7867  	b += 2
  7868  
  7869  	xgb.Put16(buf[b:], uint16(DstY))
  7870  	b += 2
  7871  
  7872  	xgb.Put16(buf[b:], Width)
  7873  	b += 2
  7874  
  7875  	xgb.Put16(buf[b:], Height)
  7876  	b += 2
  7877  
  7878  	return buf
  7879  }
  7880  
  7881  // CopyColormapAndFreeCookie is a cookie used only for CopyColormapAndFree requests.
  7882  type CopyColormapAndFreeCookie struct {
  7883  	*xgb.Cookie
  7884  }
  7885  
  7886  // CopyColormapAndFree sends an unchecked request.
  7887  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7888  func CopyColormapAndFree(c *xgb.Conn, Mid Colormap, SrcCmap Colormap) CopyColormapAndFreeCookie {
  7889  	cookie := c.NewCookie(false, false)
  7890  	c.NewRequest(copyColormapAndFreeRequest(c, Mid, SrcCmap), cookie)
  7891  	return CopyColormapAndFreeCookie{cookie}
  7892  }
  7893  
  7894  // CopyColormapAndFreeChecked sends a checked request.
  7895  // If an error occurs, it can be retrieved using CopyColormapAndFreeCookie.Check()
  7896  func CopyColormapAndFreeChecked(c *xgb.Conn, Mid Colormap, SrcCmap Colormap) CopyColormapAndFreeCookie {
  7897  	cookie := c.NewCookie(true, false)
  7898  	c.NewRequest(copyColormapAndFreeRequest(c, Mid, SrcCmap), cookie)
  7899  	return CopyColormapAndFreeCookie{cookie}
  7900  }
  7901  
  7902  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7903  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7904  func (cook CopyColormapAndFreeCookie) Check() error {
  7905  	return cook.Cookie.Check()
  7906  }
  7907  
  7908  // Write request to wire for CopyColormapAndFree
  7909  // copyColormapAndFreeRequest writes a CopyColormapAndFree request to a byte slice.
  7910  func copyColormapAndFreeRequest(c *xgb.Conn, Mid Colormap, SrcCmap Colormap) []byte {
  7911  	size := 12
  7912  	b := 0
  7913  	buf := make([]byte, size)
  7914  
  7915  	buf[b] = 80 // request opcode
  7916  	b += 1
  7917  
  7918  	b += 1 // padding
  7919  
  7920  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7921  	b += 2
  7922  
  7923  	xgb.Put32(buf[b:], uint32(Mid))
  7924  	b += 4
  7925  
  7926  	xgb.Put32(buf[b:], uint32(SrcCmap))
  7927  	b += 4
  7928  
  7929  	return buf
  7930  }
  7931  
  7932  // CopyGCCookie is a cookie used only for CopyGC requests.
  7933  type CopyGCCookie struct {
  7934  	*xgb.Cookie
  7935  }
  7936  
  7937  // CopyGC sends an unchecked request.
  7938  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7939  func CopyGC(c *xgb.Conn, SrcGc Gcontext, DstGc Gcontext, ValueMask uint32) CopyGCCookie {
  7940  	cookie := c.NewCookie(false, false)
  7941  	c.NewRequest(copyGCRequest(c, SrcGc, DstGc, ValueMask), cookie)
  7942  	return CopyGCCookie{cookie}
  7943  }
  7944  
  7945  // CopyGCChecked sends a checked request.
  7946  // If an error occurs, it can be retrieved using CopyGCCookie.Check()
  7947  func CopyGCChecked(c *xgb.Conn, SrcGc Gcontext, DstGc Gcontext, ValueMask uint32) CopyGCCookie {
  7948  	cookie := c.NewCookie(true, false)
  7949  	c.NewRequest(copyGCRequest(c, SrcGc, DstGc, ValueMask), cookie)
  7950  	return CopyGCCookie{cookie}
  7951  }
  7952  
  7953  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  7954  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  7955  func (cook CopyGCCookie) Check() error {
  7956  	return cook.Cookie.Check()
  7957  }
  7958  
  7959  // Write request to wire for CopyGC
  7960  // copyGCRequest writes a CopyGC request to a byte slice.
  7961  func copyGCRequest(c *xgb.Conn, SrcGc Gcontext, DstGc Gcontext, ValueMask uint32) []byte {
  7962  	size := 16
  7963  	b := 0
  7964  	buf := make([]byte, size)
  7965  
  7966  	buf[b] = 57 // request opcode
  7967  	b += 1
  7968  
  7969  	b += 1 // padding
  7970  
  7971  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  7972  	b += 2
  7973  
  7974  	xgb.Put32(buf[b:], uint32(SrcGc))
  7975  	b += 4
  7976  
  7977  	xgb.Put32(buf[b:], uint32(DstGc))
  7978  	b += 4
  7979  
  7980  	xgb.Put32(buf[b:], ValueMask)
  7981  	b += 4
  7982  
  7983  	return buf
  7984  }
  7985  
  7986  // CopyPlaneCookie is a cookie used only for CopyPlane requests.
  7987  type CopyPlaneCookie struct {
  7988  	*xgb.Cookie
  7989  }
  7990  
  7991  // CopyPlane sends an unchecked request.
  7992  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  7993  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 {
  7994  	cookie := c.NewCookie(false, false)
  7995  	c.NewRequest(copyPlaneRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height, BitPlane), cookie)
  7996  	return CopyPlaneCookie{cookie}
  7997  }
  7998  
  7999  // CopyPlaneChecked sends a checked request.
  8000  // If an error occurs, it can be retrieved using CopyPlaneCookie.Check()
  8001  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 {
  8002  	cookie := c.NewCookie(true, false)
  8003  	c.NewRequest(copyPlaneRequest(c, SrcDrawable, DstDrawable, Gc, SrcX, SrcY, DstX, DstY, Width, Height, BitPlane), cookie)
  8004  	return CopyPlaneCookie{cookie}
  8005  }
  8006  
  8007  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8008  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8009  func (cook CopyPlaneCookie) Check() error {
  8010  	return cook.Cookie.Check()
  8011  }
  8012  
  8013  // Write request to wire for CopyPlane
  8014  // copyPlaneRequest writes a CopyPlane request to a byte slice.
  8015  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 {
  8016  	size := 32
  8017  	b := 0
  8018  	buf := make([]byte, size)
  8019  
  8020  	buf[b] = 63 // request opcode
  8021  	b += 1
  8022  
  8023  	b += 1 // padding
  8024  
  8025  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8026  	b += 2
  8027  
  8028  	xgb.Put32(buf[b:], uint32(SrcDrawable))
  8029  	b += 4
  8030  
  8031  	xgb.Put32(buf[b:], uint32(DstDrawable))
  8032  	b += 4
  8033  
  8034  	xgb.Put32(buf[b:], uint32(Gc))
  8035  	b += 4
  8036  
  8037  	xgb.Put16(buf[b:], uint16(SrcX))
  8038  	b += 2
  8039  
  8040  	xgb.Put16(buf[b:], uint16(SrcY))
  8041  	b += 2
  8042  
  8043  	xgb.Put16(buf[b:], uint16(DstX))
  8044  	b += 2
  8045  
  8046  	xgb.Put16(buf[b:], uint16(DstY))
  8047  	b += 2
  8048  
  8049  	xgb.Put16(buf[b:], Width)
  8050  	b += 2
  8051  
  8052  	xgb.Put16(buf[b:], Height)
  8053  	b += 2
  8054  
  8055  	xgb.Put32(buf[b:], BitPlane)
  8056  	b += 4
  8057  
  8058  	return buf
  8059  }
  8060  
  8061  // CreateColormapCookie is a cookie used only for CreateColormap requests.
  8062  type CreateColormapCookie struct {
  8063  	*xgb.Cookie
  8064  }
  8065  
  8066  // CreateColormap sends an unchecked request.
  8067  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8068  func CreateColormap(c *xgb.Conn, Alloc byte, Mid Colormap, Window Window, Visual Visualid) CreateColormapCookie {
  8069  	cookie := c.NewCookie(false, false)
  8070  	c.NewRequest(createColormapRequest(c, Alloc, Mid, Window, Visual), cookie)
  8071  	return CreateColormapCookie{cookie}
  8072  }
  8073  
  8074  // CreateColormapChecked sends a checked request.
  8075  // If an error occurs, it can be retrieved using CreateColormapCookie.Check()
  8076  func CreateColormapChecked(c *xgb.Conn, Alloc byte, Mid Colormap, Window Window, Visual Visualid) CreateColormapCookie {
  8077  	cookie := c.NewCookie(true, false)
  8078  	c.NewRequest(createColormapRequest(c, Alloc, Mid, Window, Visual), cookie)
  8079  	return CreateColormapCookie{cookie}
  8080  }
  8081  
  8082  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8083  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8084  func (cook CreateColormapCookie) Check() error {
  8085  	return cook.Cookie.Check()
  8086  }
  8087  
  8088  // Write request to wire for CreateColormap
  8089  // createColormapRequest writes a CreateColormap request to a byte slice.
  8090  func createColormapRequest(c *xgb.Conn, Alloc byte, Mid Colormap, Window Window, Visual Visualid) []byte {
  8091  	size := 16
  8092  	b := 0
  8093  	buf := make([]byte, size)
  8094  
  8095  	buf[b] = 78 // request opcode
  8096  	b += 1
  8097  
  8098  	buf[b] = Alloc
  8099  	b += 1
  8100  
  8101  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8102  	b += 2
  8103  
  8104  	xgb.Put32(buf[b:], uint32(Mid))
  8105  	b += 4
  8106  
  8107  	xgb.Put32(buf[b:], uint32(Window))
  8108  	b += 4
  8109  
  8110  	xgb.Put32(buf[b:], uint32(Visual))
  8111  	b += 4
  8112  
  8113  	return buf
  8114  }
  8115  
  8116  // CreateCursorCookie is a cookie used only for CreateCursor requests.
  8117  type CreateCursorCookie struct {
  8118  	*xgb.Cookie
  8119  }
  8120  
  8121  // CreateCursor sends an unchecked request.
  8122  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8123  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 {
  8124  	cookie := c.NewCookie(false, false)
  8125  	c.NewRequest(createCursorRequest(c, Cid, Source, Mask, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue, X, Y), cookie)
  8126  	return CreateCursorCookie{cookie}
  8127  }
  8128  
  8129  // CreateCursorChecked sends a checked request.
  8130  // If an error occurs, it can be retrieved using CreateCursorCookie.Check()
  8131  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 {
  8132  	cookie := c.NewCookie(true, false)
  8133  	c.NewRequest(createCursorRequest(c, Cid, Source, Mask, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue, X, Y), cookie)
  8134  	return CreateCursorCookie{cookie}
  8135  }
  8136  
  8137  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8138  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8139  func (cook CreateCursorCookie) Check() error {
  8140  	return cook.Cookie.Check()
  8141  }
  8142  
  8143  // Write request to wire for CreateCursor
  8144  // createCursorRequest writes a CreateCursor request to a byte slice.
  8145  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 {
  8146  	size := 32
  8147  	b := 0
  8148  	buf := make([]byte, size)
  8149  
  8150  	buf[b] = 93 // request opcode
  8151  	b += 1
  8152  
  8153  	b += 1 // padding
  8154  
  8155  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8156  	b += 2
  8157  
  8158  	xgb.Put32(buf[b:], uint32(Cid))
  8159  	b += 4
  8160  
  8161  	xgb.Put32(buf[b:], uint32(Source))
  8162  	b += 4
  8163  
  8164  	xgb.Put32(buf[b:], uint32(Mask))
  8165  	b += 4
  8166  
  8167  	xgb.Put16(buf[b:], ForeRed)
  8168  	b += 2
  8169  
  8170  	xgb.Put16(buf[b:], ForeGreen)
  8171  	b += 2
  8172  
  8173  	xgb.Put16(buf[b:], ForeBlue)
  8174  	b += 2
  8175  
  8176  	xgb.Put16(buf[b:], BackRed)
  8177  	b += 2
  8178  
  8179  	xgb.Put16(buf[b:], BackGreen)
  8180  	b += 2
  8181  
  8182  	xgb.Put16(buf[b:], BackBlue)
  8183  	b += 2
  8184  
  8185  	xgb.Put16(buf[b:], X)
  8186  	b += 2
  8187  
  8188  	xgb.Put16(buf[b:], Y)
  8189  	b += 2
  8190  
  8191  	return buf
  8192  }
  8193  
  8194  // CreateGCCookie is a cookie used only for CreateGC requests.
  8195  type CreateGCCookie struct {
  8196  	*xgb.Cookie
  8197  }
  8198  
  8199  // CreateGC sends an unchecked request.
  8200  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8201  func CreateGC(c *xgb.Conn, Cid Gcontext, Drawable Drawable, ValueMask uint32, ValueList []uint32) CreateGCCookie {
  8202  	cookie := c.NewCookie(false, false)
  8203  	c.NewRequest(createGCRequest(c, Cid, Drawable, ValueMask, ValueList), cookie)
  8204  	return CreateGCCookie{cookie}
  8205  }
  8206  
  8207  // CreateGCChecked sends a checked request.
  8208  // If an error occurs, it can be retrieved using CreateGCCookie.Check()
  8209  func CreateGCChecked(c *xgb.Conn, Cid Gcontext, Drawable Drawable, ValueMask uint32, ValueList []uint32) CreateGCCookie {
  8210  	cookie := c.NewCookie(true, false)
  8211  	c.NewRequest(createGCRequest(c, Cid, Drawable, ValueMask, ValueList), cookie)
  8212  	return CreateGCCookie{cookie}
  8213  }
  8214  
  8215  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8216  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8217  func (cook CreateGCCookie) Check() error {
  8218  	return cook.Cookie.Check()
  8219  }
  8220  
  8221  // Write request to wire for CreateGC
  8222  // createGCRequest writes a CreateGC request to a byte slice.
  8223  func createGCRequest(c *xgb.Conn, Cid Gcontext, Drawable Drawable, ValueMask uint32, ValueList []uint32) []byte {
  8224  	size := xgb.Pad((12 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
  8225  	b := 0
  8226  	buf := make([]byte, size)
  8227  
  8228  	buf[b] = 55 // request opcode
  8229  	b += 1
  8230  
  8231  	b += 1 // padding
  8232  
  8233  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8234  	b += 2
  8235  
  8236  	xgb.Put32(buf[b:], uint32(Cid))
  8237  	b += 4
  8238  
  8239  	xgb.Put32(buf[b:], uint32(Drawable))
  8240  	b += 4
  8241  
  8242  	xgb.Put32(buf[b:], ValueMask)
  8243  	b += 4
  8244  	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
  8245  		xgb.Put32(buf[b:], ValueList[i])
  8246  		b += 4
  8247  	}
  8248  	b = xgb.Pad(b)
  8249  
  8250  	return buf
  8251  }
  8252  
  8253  // CreateGlyphCursorCookie is a cookie used only for CreateGlyphCursor requests.
  8254  type CreateGlyphCursorCookie struct {
  8255  	*xgb.Cookie
  8256  }
  8257  
  8258  // CreateGlyphCursor sends an unchecked request.
  8259  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8260  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 {
  8261  	cookie := c.NewCookie(false, false)
  8262  	c.NewRequest(createGlyphCursorRequest(c, Cid, SourceFont, MaskFont, SourceChar, MaskChar, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
  8263  	return CreateGlyphCursorCookie{cookie}
  8264  }
  8265  
  8266  // CreateGlyphCursorChecked sends a checked request.
  8267  // If an error occurs, it can be retrieved using CreateGlyphCursorCookie.Check()
  8268  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 {
  8269  	cookie := c.NewCookie(true, false)
  8270  	c.NewRequest(createGlyphCursorRequest(c, Cid, SourceFont, MaskFont, SourceChar, MaskChar, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
  8271  	return CreateGlyphCursorCookie{cookie}
  8272  }
  8273  
  8274  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8275  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8276  func (cook CreateGlyphCursorCookie) Check() error {
  8277  	return cook.Cookie.Check()
  8278  }
  8279  
  8280  // Write request to wire for CreateGlyphCursor
  8281  // createGlyphCursorRequest writes a CreateGlyphCursor request to a byte slice.
  8282  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 {
  8283  	size := 32
  8284  	b := 0
  8285  	buf := make([]byte, size)
  8286  
  8287  	buf[b] = 94 // request opcode
  8288  	b += 1
  8289  
  8290  	b += 1 // padding
  8291  
  8292  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8293  	b += 2
  8294  
  8295  	xgb.Put32(buf[b:], uint32(Cid))
  8296  	b += 4
  8297  
  8298  	xgb.Put32(buf[b:], uint32(SourceFont))
  8299  	b += 4
  8300  
  8301  	xgb.Put32(buf[b:], uint32(MaskFont))
  8302  	b += 4
  8303  
  8304  	xgb.Put16(buf[b:], SourceChar)
  8305  	b += 2
  8306  
  8307  	xgb.Put16(buf[b:], MaskChar)
  8308  	b += 2
  8309  
  8310  	xgb.Put16(buf[b:], ForeRed)
  8311  	b += 2
  8312  
  8313  	xgb.Put16(buf[b:], ForeGreen)
  8314  	b += 2
  8315  
  8316  	xgb.Put16(buf[b:], ForeBlue)
  8317  	b += 2
  8318  
  8319  	xgb.Put16(buf[b:], BackRed)
  8320  	b += 2
  8321  
  8322  	xgb.Put16(buf[b:], BackGreen)
  8323  	b += 2
  8324  
  8325  	xgb.Put16(buf[b:], BackBlue)
  8326  	b += 2
  8327  
  8328  	return buf
  8329  }
  8330  
  8331  // CreatePixmapCookie is a cookie used only for CreatePixmap requests.
  8332  type CreatePixmapCookie struct {
  8333  	*xgb.Cookie
  8334  }
  8335  
  8336  // CreatePixmap sends an unchecked request.
  8337  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8338  func CreatePixmap(c *xgb.Conn, Depth byte, Pid Pixmap, Drawable Drawable, Width uint16, Height uint16) CreatePixmapCookie {
  8339  	cookie := c.NewCookie(false, false)
  8340  	c.NewRequest(createPixmapRequest(c, Depth, Pid, Drawable, Width, Height), cookie)
  8341  	return CreatePixmapCookie{cookie}
  8342  }
  8343  
  8344  // CreatePixmapChecked sends a checked request.
  8345  // If an error occurs, it can be retrieved using CreatePixmapCookie.Check()
  8346  func CreatePixmapChecked(c *xgb.Conn, Depth byte, Pid Pixmap, Drawable Drawable, Width uint16, Height uint16) CreatePixmapCookie {
  8347  	cookie := c.NewCookie(true, false)
  8348  	c.NewRequest(createPixmapRequest(c, Depth, Pid, Drawable, Width, Height), cookie)
  8349  	return CreatePixmapCookie{cookie}
  8350  }
  8351  
  8352  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8353  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8354  func (cook CreatePixmapCookie) Check() error {
  8355  	return cook.Cookie.Check()
  8356  }
  8357  
  8358  // Write request to wire for CreatePixmap
  8359  // createPixmapRequest writes a CreatePixmap request to a byte slice.
  8360  func createPixmapRequest(c *xgb.Conn, Depth byte, Pid Pixmap, Drawable Drawable, Width uint16, Height uint16) []byte {
  8361  	size := 16
  8362  	b := 0
  8363  	buf := make([]byte, size)
  8364  
  8365  	buf[b] = 53 // request opcode
  8366  	b += 1
  8367  
  8368  	buf[b] = Depth
  8369  	b += 1
  8370  
  8371  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8372  	b += 2
  8373  
  8374  	xgb.Put32(buf[b:], uint32(Pid))
  8375  	b += 4
  8376  
  8377  	xgb.Put32(buf[b:], uint32(Drawable))
  8378  	b += 4
  8379  
  8380  	xgb.Put16(buf[b:], Width)
  8381  	b += 2
  8382  
  8383  	xgb.Put16(buf[b:], Height)
  8384  	b += 2
  8385  
  8386  	return buf
  8387  }
  8388  
  8389  // CreateWindowCookie is a cookie used only for CreateWindow requests.
  8390  type CreateWindowCookie struct {
  8391  	*xgb.Cookie
  8392  }
  8393  
  8394  // CreateWindow sends an unchecked request.
  8395  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8396  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 {
  8397  	cookie := c.NewCookie(false, false)
  8398  	c.NewRequest(createWindowRequest(c, Depth, Wid, Parent, X, Y, Width, Height, BorderWidth, Class, Visual, ValueMask, ValueList), cookie)
  8399  	return CreateWindowCookie{cookie}
  8400  }
  8401  
  8402  // CreateWindowChecked sends a checked request.
  8403  // If an error occurs, it can be retrieved using CreateWindowCookie.Check()
  8404  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 {
  8405  	cookie := c.NewCookie(true, false)
  8406  	c.NewRequest(createWindowRequest(c, Depth, Wid, Parent, X, Y, Width, Height, BorderWidth, Class, Visual, ValueMask, ValueList), cookie)
  8407  	return CreateWindowCookie{cookie}
  8408  }
  8409  
  8410  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8411  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8412  func (cook CreateWindowCookie) Check() error {
  8413  	return cook.Cookie.Check()
  8414  }
  8415  
  8416  // Write request to wire for CreateWindow
  8417  // createWindowRequest writes a CreateWindow request to a byte slice.
  8418  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 {
  8419  	size := xgb.Pad((28 + (4 + xgb.Pad((4 * xgb.PopCount(int(ValueMask)))))))
  8420  	b := 0
  8421  	buf := make([]byte, size)
  8422  
  8423  	buf[b] = 1 // request opcode
  8424  	b += 1
  8425  
  8426  	buf[b] = Depth
  8427  	b += 1
  8428  
  8429  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8430  	b += 2
  8431  
  8432  	xgb.Put32(buf[b:], uint32(Wid))
  8433  	b += 4
  8434  
  8435  	xgb.Put32(buf[b:], uint32(Parent))
  8436  	b += 4
  8437  
  8438  	xgb.Put16(buf[b:], uint16(X))
  8439  	b += 2
  8440  
  8441  	xgb.Put16(buf[b:], uint16(Y))
  8442  	b += 2
  8443  
  8444  	xgb.Put16(buf[b:], Width)
  8445  	b += 2
  8446  
  8447  	xgb.Put16(buf[b:], Height)
  8448  	b += 2
  8449  
  8450  	xgb.Put16(buf[b:], BorderWidth)
  8451  	b += 2
  8452  
  8453  	xgb.Put16(buf[b:], Class)
  8454  	b += 2
  8455  
  8456  	xgb.Put32(buf[b:], uint32(Visual))
  8457  	b += 4
  8458  
  8459  	xgb.Put32(buf[b:], ValueMask)
  8460  	b += 4
  8461  	for i := 0; i < xgb.PopCount(int(ValueMask)); i++ {
  8462  		xgb.Put32(buf[b:], ValueList[i])
  8463  		b += 4
  8464  	}
  8465  	b = xgb.Pad(b)
  8466  
  8467  	return buf
  8468  }
  8469  
  8470  // DeletePropertyCookie is a cookie used only for DeleteProperty requests.
  8471  type DeletePropertyCookie struct {
  8472  	*xgb.Cookie
  8473  }
  8474  
  8475  // DeleteProperty sends an unchecked request.
  8476  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8477  func DeleteProperty(c *xgb.Conn, Window Window, Property Atom) DeletePropertyCookie {
  8478  	cookie := c.NewCookie(false, false)
  8479  	c.NewRequest(deletePropertyRequest(c, Window, Property), cookie)
  8480  	return DeletePropertyCookie{cookie}
  8481  }
  8482  
  8483  // DeletePropertyChecked sends a checked request.
  8484  // If an error occurs, it can be retrieved using DeletePropertyCookie.Check()
  8485  func DeletePropertyChecked(c *xgb.Conn, Window Window, Property Atom) DeletePropertyCookie {
  8486  	cookie := c.NewCookie(true, false)
  8487  	c.NewRequest(deletePropertyRequest(c, Window, Property), cookie)
  8488  	return DeletePropertyCookie{cookie}
  8489  }
  8490  
  8491  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8492  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8493  func (cook DeletePropertyCookie) Check() error {
  8494  	return cook.Cookie.Check()
  8495  }
  8496  
  8497  // Write request to wire for DeleteProperty
  8498  // deletePropertyRequest writes a DeleteProperty request to a byte slice.
  8499  func deletePropertyRequest(c *xgb.Conn, Window Window, Property Atom) []byte {
  8500  	size := 12
  8501  	b := 0
  8502  	buf := make([]byte, size)
  8503  
  8504  	buf[b] = 19 // request opcode
  8505  	b += 1
  8506  
  8507  	b += 1 // padding
  8508  
  8509  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8510  	b += 2
  8511  
  8512  	xgb.Put32(buf[b:], uint32(Window))
  8513  	b += 4
  8514  
  8515  	xgb.Put32(buf[b:], uint32(Property))
  8516  	b += 4
  8517  
  8518  	return buf
  8519  }
  8520  
  8521  // DestroySubwindowsCookie is a cookie used only for DestroySubwindows requests.
  8522  type DestroySubwindowsCookie struct {
  8523  	*xgb.Cookie
  8524  }
  8525  
  8526  // DestroySubwindows sends an unchecked request.
  8527  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8528  func DestroySubwindows(c *xgb.Conn, Window Window) DestroySubwindowsCookie {
  8529  	cookie := c.NewCookie(false, false)
  8530  	c.NewRequest(destroySubwindowsRequest(c, Window), cookie)
  8531  	return DestroySubwindowsCookie{cookie}
  8532  }
  8533  
  8534  // DestroySubwindowsChecked sends a checked request.
  8535  // If an error occurs, it can be retrieved using DestroySubwindowsCookie.Check()
  8536  func DestroySubwindowsChecked(c *xgb.Conn, Window Window) DestroySubwindowsCookie {
  8537  	cookie := c.NewCookie(true, false)
  8538  	c.NewRequest(destroySubwindowsRequest(c, Window), cookie)
  8539  	return DestroySubwindowsCookie{cookie}
  8540  }
  8541  
  8542  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8543  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8544  func (cook DestroySubwindowsCookie) Check() error {
  8545  	return cook.Cookie.Check()
  8546  }
  8547  
  8548  // Write request to wire for DestroySubwindows
  8549  // destroySubwindowsRequest writes a DestroySubwindows request to a byte slice.
  8550  func destroySubwindowsRequest(c *xgb.Conn, Window Window) []byte {
  8551  	size := 8
  8552  	b := 0
  8553  	buf := make([]byte, size)
  8554  
  8555  	buf[b] = 5 // request opcode
  8556  	b += 1
  8557  
  8558  	b += 1 // padding
  8559  
  8560  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8561  	b += 2
  8562  
  8563  	xgb.Put32(buf[b:], uint32(Window))
  8564  	b += 4
  8565  
  8566  	return buf
  8567  }
  8568  
  8569  // DestroyWindowCookie is a cookie used only for DestroyWindow requests.
  8570  type DestroyWindowCookie struct {
  8571  	*xgb.Cookie
  8572  }
  8573  
  8574  // DestroyWindow sends an unchecked request.
  8575  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8576  func DestroyWindow(c *xgb.Conn, Window Window) DestroyWindowCookie {
  8577  	cookie := c.NewCookie(false, false)
  8578  	c.NewRequest(destroyWindowRequest(c, Window), cookie)
  8579  	return DestroyWindowCookie{cookie}
  8580  }
  8581  
  8582  // DestroyWindowChecked sends a checked request.
  8583  // If an error occurs, it can be retrieved using DestroyWindowCookie.Check()
  8584  func DestroyWindowChecked(c *xgb.Conn, Window Window) DestroyWindowCookie {
  8585  	cookie := c.NewCookie(true, false)
  8586  	c.NewRequest(destroyWindowRequest(c, Window), cookie)
  8587  	return DestroyWindowCookie{cookie}
  8588  }
  8589  
  8590  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8591  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8592  func (cook DestroyWindowCookie) Check() error {
  8593  	return cook.Cookie.Check()
  8594  }
  8595  
  8596  // Write request to wire for DestroyWindow
  8597  // destroyWindowRequest writes a DestroyWindow request to a byte slice.
  8598  func destroyWindowRequest(c *xgb.Conn, Window Window) []byte {
  8599  	size := 8
  8600  	b := 0
  8601  	buf := make([]byte, size)
  8602  
  8603  	buf[b] = 4 // request opcode
  8604  	b += 1
  8605  
  8606  	b += 1 // padding
  8607  
  8608  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8609  	b += 2
  8610  
  8611  	xgb.Put32(buf[b:], uint32(Window))
  8612  	b += 4
  8613  
  8614  	return buf
  8615  }
  8616  
  8617  // FillPolyCookie is a cookie used only for FillPoly requests.
  8618  type FillPolyCookie struct {
  8619  	*xgb.Cookie
  8620  }
  8621  
  8622  // FillPoly sends an unchecked request.
  8623  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8624  func FillPoly(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Shape byte, CoordinateMode byte, Points []Point) FillPolyCookie {
  8625  	cookie := c.NewCookie(false, false)
  8626  	c.NewRequest(fillPolyRequest(c, Drawable, Gc, Shape, CoordinateMode, Points), cookie)
  8627  	return FillPolyCookie{cookie}
  8628  }
  8629  
  8630  // FillPolyChecked sends a checked request.
  8631  // If an error occurs, it can be retrieved using FillPolyCookie.Check()
  8632  func FillPolyChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Shape byte, CoordinateMode byte, Points []Point) FillPolyCookie {
  8633  	cookie := c.NewCookie(true, false)
  8634  	c.NewRequest(fillPolyRequest(c, Drawable, Gc, Shape, CoordinateMode, Points), cookie)
  8635  	return FillPolyCookie{cookie}
  8636  }
  8637  
  8638  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8639  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8640  func (cook FillPolyCookie) Check() error {
  8641  	return cook.Cookie.Check()
  8642  }
  8643  
  8644  // Write request to wire for FillPoly
  8645  // fillPolyRequest writes a FillPoly request to a byte slice.
  8646  func fillPolyRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Shape byte, CoordinateMode byte, Points []Point) []byte {
  8647  	size := xgb.Pad((16 + xgb.Pad((len(Points) * 4))))
  8648  	b := 0
  8649  	buf := make([]byte, size)
  8650  
  8651  	buf[b] = 69 // request opcode
  8652  	b += 1
  8653  
  8654  	b += 1 // padding
  8655  
  8656  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8657  	b += 2
  8658  
  8659  	xgb.Put32(buf[b:], uint32(Drawable))
  8660  	b += 4
  8661  
  8662  	xgb.Put32(buf[b:], uint32(Gc))
  8663  	b += 4
  8664  
  8665  	buf[b] = Shape
  8666  	b += 1
  8667  
  8668  	buf[b] = CoordinateMode
  8669  	b += 1
  8670  
  8671  	b += 2 // padding
  8672  
  8673  	b += PointListBytes(buf[b:], Points)
  8674  
  8675  	return buf
  8676  }
  8677  
  8678  // ForceScreenSaverCookie is a cookie used only for ForceScreenSaver requests.
  8679  type ForceScreenSaverCookie struct {
  8680  	*xgb.Cookie
  8681  }
  8682  
  8683  // ForceScreenSaver sends an unchecked request.
  8684  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8685  func ForceScreenSaver(c *xgb.Conn, Mode byte) ForceScreenSaverCookie {
  8686  	cookie := c.NewCookie(false, false)
  8687  	c.NewRequest(forceScreenSaverRequest(c, Mode), cookie)
  8688  	return ForceScreenSaverCookie{cookie}
  8689  }
  8690  
  8691  // ForceScreenSaverChecked sends a checked request.
  8692  // If an error occurs, it can be retrieved using ForceScreenSaverCookie.Check()
  8693  func ForceScreenSaverChecked(c *xgb.Conn, Mode byte) ForceScreenSaverCookie {
  8694  	cookie := c.NewCookie(true, false)
  8695  	c.NewRequest(forceScreenSaverRequest(c, Mode), cookie)
  8696  	return ForceScreenSaverCookie{cookie}
  8697  }
  8698  
  8699  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8700  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8701  func (cook ForceScreenSaverCookie) Check() error {
  8702  	return cook.Cookie.Check()
  8703  }
  8704  
  8705  // Write request to wire for ForceScreenSaver
  8706  // forceScreenSaverRequest writes a ForceScreenSaver request to a byte slice.
  8707  func forceScreenSaverRequest(c *xgb.Conn, Mode byte) []byte {
  8708  	size := 4
  8709  	b := 0
  8710  	buf := make([]byte, size)
  8711  
  8712  	buf[b] = 115 // request opcode
  8713  	b += 1
  8714  
  8715  	buf[b] = Mode
  8716  	b += 1
  8717  
  8718  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8719  	b += 2
  8720  
  8721  	return buf
  8722  }
  8723  
  8724  // FreeColormapCookie is a cookie used only for FreeColormap requests.
  8725  type FreeColormapCookie struct {
  8726  	*xgb.Cookie
  8727  }
  8728  
  8729  // FreeColormap sends an unchecked request.
  8730  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8731  func FreeColormap(c *xgb.Conn, Cmap Colormap) FreeColormapCookie {
  8732  	cookie := c.NewCookie(false, false)
  8733  	c.NewRequest(freeColormapRequest(c, Cmap), cookie)
  8734  	return FreeColormapCookie{cookie}
  8735  }
  8736  
  8737  // FreeColormapChecked sends a checked request.
  8738  // If an error occurs, it can be retrieved using FreeColormapCookie.Check()
  8739  func FreeColormapChecked(c *xgb.Conn, Cmap Colormap) FreeColormapCookie {
  8740  	cookie := c.NewCookie(true, false)
  8741  	c.NewRequest(freeColormapRequest(c, Cmap), cookie)
  8742  	return FreeColormapCookie{cookie}
  8743  }
  8744  
  8745  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8746  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8747  func (cook FreeColormapCookie) Check() error {
  8748  	return cook.Cookie.Check()
  8749  }
  8750  
  8751  // Write request to wire for FreeColormap
  8752  // freeColormapRequest writes a FreeColormap request to a byte slice.
  8753  func freeColormapRequest(c *xgb.Conn, Cmap Colormap) []byte {
  8754  	size := 8
  8755  	b := 0
  8756  	buf := make([]byte, size)
  8757  
  8758  	buf[b] = 79 // request opcode
  8759  	b += 1
  8760  
  8761  	b += 1 // padding
  8762  
  8763  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8764  	b += 2
  8765  
  8766  	xgb.Put32(buf[b:], uint32(Cmap))
  8767  	b += 4
  8768  
  8769  	return buf
  8770  }
  8771  
  8772  // FreeColorsCookie is a cookie used only for FreeColors requests.
  8773  type FreeColorsCookie struct {
  8774  	*xgb.Cookie
  8775  }
  8776  
  8777  // FreeColors sends an unchecked request.
  8778  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8779  func FreeColors(c *xgb.Conn, Cmap Colormap, PlaneMask uint32, Pixels []uint32) FreeColorsCookie {
  8780  	cookie := c.NewCookie(false, false)
  8781  	c.NewRequest(freeColorsRequest(c, Cmap, PlaneMask, Pixels), cookie)
  8782  	return FreeColorsCookie{cookie}
  8783  }
  8784  
  8785  // FreeColorsChecked sends a checked request.
  8786  // If an error occurs, it can be retrieved using FreeColorsCookie.Check()
  8787  func FreeColorsChecked(c *xgb.Conn, Cmap Colormap, PlaneMask uint32, Pixels []uint32) FreeColorsCookie {
  8788  	cookie := c.NewCookie(true, false)
  8789  	c.NewRequest(freeColorsRequest(c, Cmap, PlaneMask, Pixels), cookie)
  8790  	return FreeColorsCookie{cookie}
  8791  }
  8792  
  8793  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8794  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8795  func (cook FreeColorsCookie) Check() error {
  8796  	return cook.Cookie.Check()
  8797  }
  8798  
  8799  // Write request to wire for FreeColors
  8800  // freeColorsRequest writes a FreeColors request to a byte slice.
  8801  func freeColorsRequest(c *xgb.Conn, Cmap Colormap, PlaneMask uint32, Pixels []uint32) []byte {
  8802  	size := xgb.Pad((12 + xgb.Pad((len(Pixels) * 4))))
  8803  	b := 0
  8804  	buf := make([]byte, size)
  8805  
  8806  	buf[b] = 88 // request opcode
  8807  	b += 1
  8808  
  8809  	b += 1 // padding
  8810  
  8811  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8812  	b += 2
  8813  
  8814  	xgb.Put32(buf[b:], uint32(Cmap))
  8815  	b += 4
  8816  
  8817  	xgb.Put32(buf[b:], PlaneMask)
  8818  	b += 4
  8819  
  8820  	for i := 0; i < int(len(Pixels)); i++ {
  8821  		xgb.Put32(buf[b:], Pixels[i])
  8822  		b += 4
  8823  	}
  8824  
  8825  	return buf
  8826  }
  8827  
  8828  // FreeCursorCookie is a cookie used only for FreeCursor requests.
  8829  type FreeCursorCookie struct {
  8830  	*xgb.Cookie
  8831  }
  8832  
  8833  // FreeCursor sends an unchecked request.
  8834  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8835  func FreeCursor(c *xgb.Conn, Cursor Cursor) FreeCursorCookie {
  8836  	cookie := c.NewCookie(false, false)
  8837  	c.NewRequest(freeCursorRequest(c, Cursor), cookie)
  8838  	return FreeCursorCookie{cookie}
  8839  }
  8840  
  8841  // FreeCursorChecked sends a checked request.
  8842  // If an error occurs, it can be retrieved using FreeCursorCookie.Check()
  8843  func FreeCursorChecked(c *xgb.Conn, Cursor Cursor) FreeCursorCookie {
  8844  	cookie := c.NewCookie(true, false)
  8845  	c.NewRequest(freeCursorRequest(c, Cursor), cookie)
  8846  	return FreeCursorCookie{cookie}
  8847  }
  8848  
  8849  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8850  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8851  func (cook FreeCursorCookie) Check() error {
  8852  	return cook.Cookie.Check()
  8853  }
  8854  
  8855  // Write request to wire for FreeCursor
  8856  // freeCursorRequest writes a FreeCursor request to a byte slice.
  8857  func freeCursorRequest(c *xgb.Conn, Cursor Cursor) []byte {
  8858  	size := 8
  8859  	b := 0
  8860  	buf := make([]byte, size)
  8861  
  8862  	buf[b] = 95 // request opcode
  8863  	b += 1
  8864  
  8865  	b += 1 // padding
  8866  
  8867  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8868  	b += 2
  8869  
  8870  	xgb.Put32(buf[b:], uint32(Cursor))
  8871  	b += 4
  8872  
  8873  	return buf
  8874  }
  8875  
  8876  // FreeGCCookie is a cookie used only for FreeGC requests.
  8877  type FreeGCCookie struct {
  8878  	*xgb.Cookie
  8879  }
  8880  
  8881  // FreeGC sends an unchecked request.
  8882  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8883  func FreeGC(c *xgb.Conn, Gc Gcontext) FreeGCCookie {
  8884  	cookie := c.NewCookie(false, false)
  8885  	c.NewRequest(freeGCRequest(c, Gc), cookie)
  8886  	return FreeGCCookie{cookie}
  8887  }
  8888  
  8889  // FreeGCChecked sends a checked request.
  8890  // If an error occurs, it can be retrieved using FreeGCCookie.Check()
  8891  func FreeGCChecked(c *xgb.Conn, Gc Gcontext) FreeGCCookie {
  8892  	cookie := c.NewCookie(true, false)
  8893  	c.NewRequest(freeGCRequest(c, Gc), cookie)
  8894  	return FreeGCCookie{cookie}
  8895  }
  8896  
  8897  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8898  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8899  func (cook FreeGCCookie) Check() error {
  8900  	return cook.Cookie.Check()
  8901  }
  8902  
  8903  // Write request to wire for FreeGC
  8904  // freeGCRequest writes a FreeGC request to a byte slice.
  8905  func freeGCRequest(c *xgb.Conn, Gc Gcontext) []byte {
  8906  	size := 8
  8907  	b := 0
  8908  	buf := make([]byte, size)
  8909  
  8910  	buf[b] = 60 // request opcode
  8911  	b += 1
  8912  
  8913  	b += 1 // padding
  8914  
  8915  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8916  	b += 2
  8917  
  8918  	xgb.Put32(buf[b:], uint32(Gc))
  8919  	b += 4
  8920  
  8921  	return buf
  8922  }
  8923  
  8924  // FreePixmapCookie is a cookie used only for FreePixmap requests.
  8925  type FreePixmapCookie struct {
  8926  	*xgb.Cookie
  8927  }
  8928  
  8929  // FreePixmap sends an unchecked request.
  8930  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8931  func FreePixmap(c *xgb.Conn, Pixmap Pixmap) FreePixmapCookie {
  8932  	cookie := c.NewCookie(false, false)
  8933  	c.NewRequest(freePixmapRequest(c, Pixmap), cookie)
  8934  	return FreePixmapCookie{cookie}
  8935  }
  8936  
  8937  // FreePixmapChecked sends a checked request.
  8938  // If an error occurs, it can be retrieved using FreePixmapCookie.Check()
  8939  func FreePixmapChecked(c *xgb.Conn, Pixmap Pixmap) FreePixmapCookie {
  8940  	cookie := c.NewCookie(true, false)
  8941  	c.NewRequest(freePixmapRequest(c, Pixmap), cookie)
  8942  	return FreePixmapCookie{cookie}
  8943  }
  8944  
  8945  // Check returns an error if one occurred for checked requests that are not expecting a reply.
  8946  // This cannot be called for requests expecting a reply, nor for unchecked requests.
  8947  func (cook FreePixmapCookie) Check() error {
  8948  	return cook.Cookie.Check()
  8949  }
  8950  
  8951  // Write request to wire for FreePixmap
  8952  // freePixmapRequest writes a FreePixmap request to a byte slice.
  8953  func freePixmapRequest(c *xgb.Conn, Pixmap Pixmap) []byte {
  8954  	size := 8
  8955  	b := 0
  8956  	buf := make([]byte, size)
  8957  
  8958  	buf[b] = 54 // request opcode
  8959  	b += 1
  8960  
  8961  	b += 1 // padding
  8962  
  8963  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  8964  	b += 2
  8965  
  8966  	xgb.Put32(buf[b:], uint32(Pixmap))
  8967  	b += 4
  8968  
  8969  	return buf
  8970  }
  8971  
  8972  // GetAtomNameCookie is a cookie used only for GetAtomName requests.
  8973  type GetAtomNameCookie struct {
  8974  	*xgb.Cookie
  8975  }
  8976  
  8977  // GetAtomName sends a checked request.
  8978  // If an error occurs, it will be returned with the reply by calling GetAtomNameCookie.Reply()
  8979  func GetAtomName(c *xgb.Conn, Atom Atom) GetAtomNameCookie {
  8980  	cookie := c.NewCookie(true, true)
  8981  	c.NewRequest(getAtomNameRequest(c, Atom), cookie)
  8982  	return GetAtomNameCookie{cookie}
  8983  }
  8984  
  8985  // GetAtomNameUnchecked sends an unchecked request.
  8986  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  8987  func GetAtomNameUnchecked(c *xgb.Conn, Atom Atom) GetAtomNameCookie {
  8988  	cookie := c.NewCookie(false, true)
  8989  	c.NewRequest(getAtomNameRequest(c, Atom), cookie)
  8990  	return GetAtomNameCookie{cookie}
  8991  }
  8992  
  8993  // GetAtomNameReply represents the data returned from a GetAtomName request.
  8994  type GetAtomNameReply struct {
  8995  	Sequence uint16 // sequence number of the request for this reply
  8996  	Length   uint32 // number of bytes in this reply
  8997  	// padding: 1 bytes
  8998  	NameLen uint16
  8999  	// padding: 22 bytes
  9000  	Name string // size: xgb.Pad((int(NameLen) * 1))
  9001  }
  9002  
  9003  // Reply blocks and returns the reply data for a GetAtomName request.
  9004  func (cook GetAtomNameCookie) Reply() (*GetAtomNameReply, error) {
  9005  	buf, err := cook.Cookie.Reply()
  9006  	if err != nil {
  9007  		return nil, err
  9008  	}
  9009  	if buf == nil {
  9010  		return nil, nil
  9011  	}
  9012  	return getAtomNameReply(buf), nil
  9013  }
  9014  
  9015  // getAtomNameReply reads a byte slice into a GetAtomNameReply value.
  9016  func getAtomNameReply(buf []byte) *GetAtomNameReply {
  9017  	v := new(GetAtomNameReply)
  9018  	b := 1 // skip reply determinant
  9019  
  9020  	b += 1 // padding
  9021  
  9022  	v.Sequence = xgb.Get16(buf[b:])
  9023  	b += 2
  9024  
  9025  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9026  	b += 4
  9027  
  9028  	v.NameLen = xgb.Get16(buf[b:])
  9029  	b += 2
  9030  
  9031  	b += 22 // padding
  9032  
  9033  	{
  9034  		byteString := make([]byte, v.NameLen)
  9035  		copy(byteString[:v.NameLen], buf[b:])
  9036  		v.Name = string(byteString)
  9037  		b += int(v.NameLen)
  9038  	}
  9039  
  9040  	return v
  9041  }
  9042  
  9043  // Write request to wire for GetAtomName
  9044  // getAtomNameRequest writes a GetAtomName request to a byte slice.
  9045  func getAtomNameRequest(c *xgb.Conn, Atom Atom) []byte {
  9046  	size := 8
  9047  	b := 0
  9048  	buf := make([]byte, size)
  9049  
  9050  	buf[b] = 17 // request opcode
  9051  	b += 1
  9052  
  9053  	b += 1 // padding
  9054  
  9055  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9056  	b += 2
  9057  
  9058  	xgb.Put32(buf[b:], uint32(Atom))
  9059  	b += 4
  9060  
  9061  	return buf
  9062  }
  9063  
  9064  // GetFontPathCookie is a cookie used only for GetFontPath requests.
  9065  type GetFontPathCookie struct {
  9066  	*xgb.Cookie
  9067  }
  9068  
  9069  // GetFontPath sends a checked request.
  9070  // If an error occurs, it will be returned with the reply by calling GetFontPathCookie.Reply()
  9071  func GetFontPath(c *xgb.Conn) GetFontPathCookie {
  9072  	cookie := c.NewCookie(true, true)
  9073  	c.NewRequest(getFontPathRequest(c), cookie)
  9074  	return GetFontPathCookie{cookie}
  9075  }
  9076  
  9077  // GetFontPathUnchecked sends an unchecked request.
  9078  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9079  func GetFontPathUnchecked(c *xgb.Conn) GetFontPathCookie {
  9080  	cookie := c.NewCookie(false, true)
  9081  	c.NewRequest(getFontPathRequest(c), cookie)
  9082  	return GetFontPathCookie{cookie}
  9083  }
  9084  
  9085  // GetFontPathReply represents the data returned from a GetFontPath request.
  9086  type GetFontPathReply struct {
  9087  	Sequence uint16 // sequence number of the request for this reply
  9088  	Length   uint32 // number of bytes in this reply
  9089  	// padding: 1 bytes
  9090  	PathLen uint16
  9091  	// padding: 22 bytes
  9092  	Path []Str // size: StrListSize(Path)
  9093  }
  9094  
  9095  // Reply blocks and returns the reply data for a GetFontPath request.
  9096  func (cook GetFontPathCookie) Reply() (*GetFontPathReply, error) {
  9097  	buf, err := cook.Cookie.Reply()
  9098  	if err != nil {
  9099  		return nil, err
  9100  	}
  9101  	if buf == nil {
  9102  		return nil, nil
  9103  	}
  9104  	return getFontPathReply(buf), nil
  9105  }
  9106  
  9107  // getFontPathReply reads a byte slice into a GetFontPathReply value.
  9108  func getFontPathReply(buf []byte) *GetFontPathReply {
  9109  	v := new(GetFontPathReply)
  9110  	b := 1 // skip reply determinant
  9111  
  9112  	b += 1 // padding
  9113  
  9114  	v.Sequence = xgb.Get16(buf[b:])
  9115  	b += 2
  9116  
  9117  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9118  	b += 4
  9119  
  9120  	v.PathLen = xgb.Get16(buf[b:])
  9121  	b += 2
  9122  
  9123  	b += 22 // padding
  9124  
  9125  	v.Path = make([]Str, v.PathLen)
  9126  	b += StrReadList(buf[b:], v.Path)
  9127  
  9128  	return v
  9129  }
  9130  
  9131  // Write request to wire for GetFontPath
  9132  // getFontPathRequest writes a GetFontPath request to a byte slice.
  9133  func getFontPathRequest(c *xgb.Conn) []byte {
  9134  	size := 4
  9135  	b := 0
  9136  	buf := make([]byte, size)
  9137  
  9138  	buf[b] = 52 // request opcode
  9139  	b += 1
  9140  
  9141  	b += 1                             // padding
  9142  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9143  	b += 2
  9144  
  9145  	return buf
  9146  }
  9147  
  9148  // GetGeometryCookie is a cookie used only for GetGeometry requests.
  9149  type GetGeometryCookie struct {
  9150  	*xgb.Cookie
  9151  }
  9152  
  9153  // GetGeometry sends a checked request.
  9154  // If an error occurs, it will be returned with the reply by calling GetGeometryCookie.Reply()
  9155  func GetGeometry(c *xgb.Conn, Drawable Drawable) GetGeometryCookie {
  9156  	cookie := c.NewCookie(true, true)
  9157  	c.NewRequest(getGeometryRequest(c, Drawable), cookie)
  9158  	return GetGeometryCookie{cookie}
  9159  }
  9160  
  9161  // GetGeometryUnchecked sends an unchecked request.
  9162  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9163  func GetGeometryUnchecked(c *xgb.Conn, Drawable Drawable) GetGeometryCookie {
  9164  	cookie := c.NewCookie(false, true)
  9165  	c.NewRequest(getGeometryRequest(c, Drawable), cookie)
  9166  	return GetGeometryCookie{cookie}
  9167  }
  9168  
  9169  // GetGeometryReply represents the data returned from a GetGeometry request.
  9170  type GetGeometryReply struct {
  9171  	Sequence    uint16 // sequence number of the request for this reply
  9172  	Length      uint32 // number of bytes in this reply
  9173  	Depth       byte
  9174  	Root        Window
  9175  	X           int16
  9176  	Y           int16
  9177  	Width       uint16
  9178  	Height      uint16
  9179  	BorderWidth uint16
  9180  	// padding: 2 bytes
  9181  }
  9182  
  9183  // Reply blocks and returns the reply data for a GetGeometry request.
  9184  func (cook GetGeometryCookie) Reply() (*GetGeometryReply, error) {
  9185  	buf, err := cook.Cookie.Reply()
  9186  	if err != nil {
  9187  		return nil, err
  9188  	}
  9189  	if buf == nil {
  9190  		return nil, nil
  9191  	}
  9192  	return getGeometryReply(buf), nil
  9193  }
  9194  
  9195  // getGeometryReply reads a byte slice into a GetGeometryReply value.
  9196  func getGeometryReply(buf []byte) *GetGeometryReply {
  9197  	v := new(GetGeometryReply)
  9198  	b := 1 // skip reply determinant
  9199  
  9200  	v.Depth = buf[b]
  9201  	b += 1
  9202  
  9203  	v.Sequence = xgb.Get16(buf[b:])
  9204  	b += 2
  9205  
  9206  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9207  	b += 4
  9208  
  9209  	v.Root = Window(xgb.Get32(buf[b:]))
  9210  	b += 4
  9211  
  9212  	v.X = int16(xgb.Get16(buf[b:]))
  9213  	b += 2
  9214  
  9215  	v.Y = int16(xgb.Get16(buf[b:]))
  9216  	b += 2
  9217  
  9218  	v.Width = xgb.Get16(buf[b:])
  9219  	b += 2
  9220  
  9221  	v.Height = xgb.Get16(buf[b:])
  9222  	b += 2
  9223  
  9224  	v.BorderWidth = xgb.Get16(buf[b:])
  9225  	b += 2
  9226  
  9227  	b += 2 // padding
  9228  
  9229  	return v
  9230  }
  9231  
  9232  // Write request to wire for GetGeometry
  9233  // getGeometryRequest writes a GetGeometry request to a byte slice.
  9234  func getGeometryRequest(c *xgb.Conn, Drawable Drawable) []byte {
  9235  	size := 8
  9236  	b := 0
  9237  	buf := make([]byte, size)
  9238  
  9239  	buf[b] = 14 // request opcode
  9240  	b += 1
  9241  
  9242  	b += 1 // padding
  9243  
  9244  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9245  	b += 2
  9246  
  9247  	xgb.Put32(buf[b:], uint32(Drawable))
  9248  	b += 4
  9249  
  9250  	return buf
  9251  }
  9252  
  9253  // GetImageCookie is a cookie used only for GetImage requests.
  9254  type GetImageCookie struct {
  9255  	*xgb.Cookie
  9256  }
  9257  
  9258  // GetImage sends a checked request.
  9259  // If an error occurs, it will be returned with the reply by calling GetImageCookie.Reply()
  9260  func GetImage(c *xgb.Conn, Format byte, Drawable Drawable, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) GetImageCookie {
  9261  	cookie := c.NewCookie(true, true)
  9262  	c.NewRequest(getImageRequest(c, Format, Drawable, X, Y, Width, Height, PlaneMask), cookie)
  9263  	return GetImageCookie{cookie}
  9264  }
  9265  
  9266  // GetImageUnchecked sends an unchecked request.
  9267  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9268  func GetImageUnchecked(c *xgb.Conn, Format byte, Drawable Drawable, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) GetImageCookie {
  9269  	cookie := c.NewCookie(false, true)
  9270  	c.NewRequest(getImageRequest(c, Format, Drawable, X, Y, Width, Height, PlaneMask), cookie)
  9271  	return GetImageCookie{cookie}
  9272  }
  9273  
  9274  // GetImageReply represents the data returned from a GetImage request.
  9275  type GetImageReply struct {
  9276  	Sequence uint16 // sequence number of the request for this reply
  9277  	Length   uint32 // number of bytes in this reply
  9278  	Depth    byte
  9279  	Visual   Visualid
  9280  	// padding: 20 bytes
  9281  	Data []byte // size: xgb.Pad(((int(Length) * 4) * 1))
  9282  }
  9283  
  9284  // Reply blocks and returns the reply data for a GetImage request.
  9285  func (cook GetImageCookie) Reply() (*GetImageReply, error) {
  9286  	buf, err := cook.Cookie.Reply()
  9287  	if err != nil {
  9288  		return nil, err
  9289  	}
  9290  	if buf == nil {
  9291  		return nil, nil
  9292  	}
  9293  	return getImageReply(buf), nil
  9294  }
  9295  
  9296  // getImageReply reads a byte slice into a GetImageReply value.
  9297  func getImageReply(buf []byte) *GetImageReply {
  9298  	v := new(GetImageReply)
  9299  	b := 1 // skip reply determinant
  9300  
  9301  	v.Depth = buf[b]
  9302  	b += 1
  9303  
  9304  	v.Sequence = xgb.Get16(buf[b:])
  9305  	b += 2
  9306  
  9307  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9308  	b += 4
  9309  
  9310  	v.Visual = Visualid(xgb.Get32(buf[b:]))
  9311  	b += 4
  9312  
  9313  	b += 20 // padding
  9314  
  9315  	v.Data = make([]byte, (int(v.Length) * 4))
  9316  	copy(v.Data[:(int(v.Length)*4)], buf[b:])
  9317  	b += int((int(v.Length) * 4))
  9318  
  9319  	return v
  9320  }
  9321  
  9322  // Write request to wire for GetImage
  9323  // getImageRequest writes a GetImage request to a byte slice.
  9324  func getImageRequest(c *xgb.Conn, Format byte, Drawable Drawable, X int16, Y int16, Width uint16, Height uint16, PlaneMask uint32) []byte {
  9325  	size := 20
  9326  	b := 0
  9327  	buf := make([]byte, size)
  9328  
  9329  	buf[b] = 73 // request opcode
  9330  	b += 1
  9331  
  9332  	buf[b] = Format
  9333  	b += 1
  9334  
  9335  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9336  	b += 2
  9337  
  9338  	xgb.Put32(buf[b:], uint32(Drawable))
  9339  	b += 4
  9340  
  9341  	xgb.Put16(buf[b:], uint16(X))
  9342  	b += 2
  9343  
  9344  	xgb.Put16(buf[b:], uint16(Y))
  9345  	b += 2
  9346  
  9347  	xgb.Put16(buf[b:], Width)
  9348  	b += 2
  9349  
  9350  	xgb.Put16(buf[b:], Height)
  9351  	b += 2
  9352  
  9353  	xgb.Put32(buf[b:], PlaneMask)
  9354  	b += 4
  9355  
  9356  	return buf
  9357  }
  9358  
  9359  // GetInputFocusCookie is a cookie used only for GetInputFocus requests.
  9360  type GetInputFocusCookie struct {
  9361  	*xgb.Cookie
  9362  }
  9363  
  9364  // GetInputFocus sends a checked request.
  9365  // If an error occurs, it will be returned with the reply by calling GetInputFocusCookie.Reply()
  9366  func GetInputFocus(c *xgb.Conn) GetInputFocusCookie {
  9367  	cookie := c.NewCookie(true, true)
  9368  	c.NewRequest(getInputFocusRequest(c), cookie)
  9369  	return GetInputFocusCookie{cookie}
  9370  }
  9371  
  9372  // GetInputFocusUnchecked sends an unchecked request.
  9373  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9374  func GetInputFocusUnchecked(c *xgb.Conn) GetInputFocusCookie {
  9375  	cookie := c.NewCookie(false, true)
  9376  	c.NewRequest(getInputFocusRequest(c), cookie)
  9377  	return GetInputFocusCookie{cookie}
  9378  }
  9379  
  9380  // GetInputFocusReply represents the data returned from a GetInputFocus request.
  9381  type GetInputFocusReply struct {
  9382  	Sequence uint16 // sequence number of the request for this reply
  9383  	Length   uint32 // number of bytes in this reply
  9384  	RevertTo byte
  9385  	Focus    Window
  9386  }
  9387  
  9388  // Reply blocks and returns the reply data for a GetInputFocus request.
  9389  func (cook GetInputFocusCookie) Reply() (*GetInputFocusReply, error) {
  9390  	buf, err := cook.Cookie.Reply()
  9391  	if err != nil {
  9392  		return nil, err
  9393  	}
  9394  	if buf == nil {
  9395  		return nil, nil
  9396  	}
  9397  	return getInputFocusReply(buf), nil
  9398  }
  9399  
  9400  // getInputFocusReply reads a byte slice into a GetInputFocusReply value.
  9401  func getInputFocusReply(buf []byte) *GetInputFocusReply {
  9402  	v := new(GetInputFocusReply)
  9403  	b := 1 // skip reply determinant
  9404  
  9405  	v.RevertTo = buf[b]
  9406  	b += 1
  9407  
  9408  	v.Sequence = xgb.Get16(buf[b:])
  9409  	b += 2
  9410  
  9411  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9412  	b += 4
  9413  
  9414  	v.Focus = Window(xgb.Get32(buf[b:]))
  9415  	b += 4
  9416  
  9417  	return v
  9418  }
  9419  
  9420  // Write request to wire for GetInputFocus
  9421  // getInputFocusRequest writes a GetInputFocus request to a byte slice.
  9422  func getInputFocusRequest(c *xgb.Conn) []byte {
  9423  	size := 4
  9424  	b := 0
  9425  	buf := make([]byte, size)
  9426  
  9427  	buf[b] = 43 // request opcode
  9428  	b += 1
  9429  
  9430  	b += 1                             // padding
  9431  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9432  	b += 2
  9433  
  9434  	return buf
  9435  }
  9436  
  9437  // GetKeyboardControlCookie is a cookie used only for GetKeyboardControl requests.
  9438  type GetKeyboardControlCookie struct {
  9439  	*xgb.Cookie
  9440  }
  9441  
  9442  // GetKeyboardControl sends a checked request.
  9443  // If an error occurs, it will be returned with the reply by calling GetKeyboardControlCookie.Reply()
  9444  func GetKeyboardControl(c *xgb.Conn) GetKeyboardControlCookie {
  9445  	cookie := c.NewCookie(true, true)
  9446  	c.NewRequest(getKeyboardControlRequest(c), cookie)
  9447  	return GetKeyboardControlCookie{cookie}
  9448  }
  9449  
  9450  // GetKeyboardControlUnchecked sends an unchecked request.
  9451  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9452  func GetKeyboardControlUnchecked(c *xgb.Conn) GetKeyboardControlCookie {
  9453  	cookie := c.NewCookie(false, true)
  9454  	c.NewRequest(getKeyboardControlRequest(c), cookie)
  9455  	return GetKeyboardControlCookie{cookie}
  9456  }
  9457  
  9458  // GetKeyboardControlReply represents the data returned from a GetKeyboardControl request.
  9459  type GetKeyboardControlReply struct {
  9460  	Sequence         uint16 // sequence number of the request for this reply
  9461  	Length           uint32 // number of bytes in this reply
  9462  	GlobalAutoRepeat byte
  9463  	LedMask          uint32
  9464  	KeyClickPercent  byte
  9465  	BellPercent      byte
  9466  	BellPitch        uint16
  9467  	BellDuration     uint16
  9468  	// padding: 2 bytes
  9469  	AutoRepeats []byte // size: 32
  9470  }
  9471  
  9472  // Reply blocks and returns the reply data for a GetKeyboardControl request.
  9473  func (cook GetKeyboardControlCookie) Reply() (*GetKeyboardControlReply, error) {
  9474  	buf, err := cook.Cookie.Reply()
  9475  	if err != nil {
  9476  		return nil, err
  9477  	}
  9478  	if buf == nil {
  9479  		return nil, nil
  9480  	}
  9481  	return getKeyboardControlReply(buf), nil
  9482  }
  9483  
  9484  // getKeyboardControlReply reads a byte slice into a GetKeyboardControlReply value.
  9485  func getKeyboardControlReply(buf []byte) *GetKeyboardControlReply {
  9486  	v := new(GetKeyboardControlReply)
  9487  	b := 1 // skip reply determinant
  9488  
  9489  	v.GlobalAutoRepeat = buf[b]
  9490  	b += 1
  9491  
  9492  	v.Sequence = xgb.Get16(buf[b:])
  9493  	b += 2
  9494  
  9495  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9496  	b += 4
  9497  
  9498  	v.LedMask = xgb.Get32(buf[b:])
  9499  	b += 4
  9500  
  9501  	v.KeyClickPercent = buf[b]
  9502  	b += 1
  9503  
  9504  	v.BellPercent = buf[b]
  9505  	b += 1
  9506  
  9507  	v.BellPitch = xgb.Get16(buf[b:])
  9508  	b += 2
  9509  
  9510  	v.BellDuration = xgb.Get16(buf[b:])
  9511  	b += 2
  9512  
  9513  	b += 2 // padding
  9514  
  9515  	v.AutoRepeats = make([]byte, 32)
  9516  	copy(v.AutoRepeats[:32], buf[b:])
  9517  	b += int(32)
  9518  
  9519  	return v
  9520  }
  9521  
  9522  // Write request to wire for GetKeyboardControl
  9523  // getKeyboardControlRequest writes a GetKeyboardControl request to a byte slice.
  9524  func getKeyboardControlRequest(c *xgb.Conn) []byte {
  9525  	size := 4
  9526  	b := 0
  9527  	buf := make([]byte, size)
  9528  
  9529  	buf[b] = 103 // request opcode
  9530  	b += 1
  9531  
  9532  	b += 1                             // padding
  9533  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9534  	b += 2
  9535  
  9536  	return buf
  9537  }
  9538  
  9539  // GetKeyboardMappingCookie is a cookie used only for GetKeyboardMapping requests.
  9540  type GetKeyboardMappingCookie struct {
  9541  	*xgb.Cookie
  9542  }
  9543  
  9544  // GetKeyboardMapping sends a checked request.
  9545  // If an error occurs, it will be returned with the reply by calling GetKeyboardMappingCookie.Reply()
  9546  func GetKeyboardMapping(c *xgb.Conn, FirstKeycode Keycode, Count byte) GetKeyboardMappingCookie {
  9547  	cookie := c.NewCookie(true, true)
  9548  	c.NewRequest(getKeyboardMappingRequest(c, FirstKeycode, Count), cookie)
  9549  	return GetKeyboardMappingCookie{cookie}
  9550  }
  9551  
  9552  // GetKeyboardMappingUnchecked sends an unchecked request.
  9553  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9554  func GetKeyboardMappingUnchecked(c *xgb.Conn, FirstKeycode Keycode, Count byte) GetKeyboardMappingCookie {
  9555  	cookie := c.NewCookie(false, true)
  9556  	c.NewRequest(getKeyboardMappingRequest(c, FirstKeycode, Count), cookie)
  9557  	return GetKeyboardMappingCookie{cookie}
  9558  }
  9559  
  9560  // GetKeyboardMappingReply represents the data returned from a GetKeyboardMapping request.
  9561  type GetKeyboardMappingReply struct {
  9562  	Sequence          uint16 // sequence number of the request for this reply
  9563  	Length            uint32 // number of bytes in this reply
  9564  	KeysymsPerKeycode byte
  9565  	// padding: 24 bytes
  9566  	Keysyms []Keysym // size: xgb.Pad((int(Length) * 4))
  9567  }
  9568  
  9569  // Reply blocks and returns the reply data for a GetKeyboardMapping request.
  9570  func (cook GetKeyboardMappingCookie) Reply() (*GetKeyboardMappingReply, error) {
  9571  	buf, err := cook.Cookie.Reply()
  9572  	if err != nil {
  9573  		return nil, err
  9574  	}
  9575  	if buf == nil {
  9576  		return nil, nil
  9577  	}
  9578  	return getKeyboardMappingReply(buf), nil
  9579  }
  9580  
  9581  // getKeyboardMappingReply reads a byte slice into a GetKeyboardMappingReply value.
  9582  func getKeyboardMappingReply(buf []byte) *GetKeyboardMappingReply {
  9583  	v := new(GetKeyboardMappingReply)
  9584  	b := 1 // skip reply determinant
  9585  
  9586  	v.KeysymsPerKeycode = buf[b]
  9587  	b += 1
  9588  
  9589  	v.Sequence = xgb.Get16(buf[b:])
  9590  	b += 2
  9591  
  9592  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9593  	b += 4
  9594  
  9595  	b += 24 // padding
  9596  
  9597  	v.Keysyms = make([]Keysym, v.Length)
  9598  	for i := 0; i < int(v.Length); i++ {
  9599  		v.Keysyms[i] = Keysym(xgb.Get32(buf[b:]))
  9600  		b += 4
  9601  	}
  9602  
  9603  	return v
  9604  }
  9605  
  9606  // Write request to wire for GetKeyboardMapping
  9607  // getKeyboardMappingRequest writes a GetKeyboardMapping request to a byte slice.
  9608  func getKeyboardMappingRequest(c *xgb.Conn, FirstKeycode Keycode, Count byte) []byte {
  9609  	size := 8
  9610  	b := 0
  9611  	buf := make([]byte, size)
  9612  
  9613  	buf[b] = 101 // request opcode
  9614  	b += 1
  9615  
  9616  	b += 1 // padding
  9617  
  9618  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9619  	b += 2
  9620  
  9621  	buf[b] = byte(FirstKeycode)
  9622  	b += 1
  9623  
  9624  	buf[b] = Count
  9625  	b += 1
  9626  
  9627  	return buf
  9628  }
  9629  
  9630  // GetModifierMappingCookie is a cookie used only for GetModifierMapping requests.
  9631  type GetModifierMappingCookie struct {
  9632  	*xgb.Cookie
  9633  }
  9634  
  9635  // GetModifierMapping sends a checked request.
  9636  // If an error occurs, it will be returned with the reply by calling GetModifierMappingCookie.Reply()
  9637  func GetModifierMapping(c *xgb.Conn) GetModifierMappingCookie {
  9638  	cookie := c.NewCookie(true, true)
  9639  	c.NewRequest(getModifierMappingRequest(c), cookie)
  9640  	return GetModifierMappingCookie{cookie}
  9641  }
  9642  
  9643  // GetModifierMappingUnchecked sends an unchecked request.
  9644  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9645  func GetModifierMappingUnchecked(c *xgb.Conn) GetModifierMappingCookie {
  9646  	cookie := c.NewCookie(false, true)
  9647  	c.NewRequest(getModifierMappingRequest(c), cookie)
  9648  	return GetModifierMappingCookie{cookie}
  9649  }
  9650  
  9651  // GetModifierMappingReply represents the data returned from a GetModifierMapping request.
  9652  type GetModifierMappingReply struct {
  9653  	Sequence            uint16 // sequence number of the request for this reply
  9654  	Length              uint32 // number of bytes in this reply
  9655  	KeycodesPerModifier byte
  9656  	// padding: 24 bytes
  9657  	Keycodes []Keycode // size: xgb.Pad(((int(KeycodesPerModifier) * 8) * 1))
  9658  }
  9659  
  9660  // Reply blocks and returns the reply data for a GetModifierMapping request.
  9661  func (cook GetModifierMappingCookie) Reply() (*GetModifierMappingReply, error) {
  9662  	buf, err := cook.Cookie.Reply()
  9663  	if err != nil {
  9664  		return nil, err
  9665  	}
  9666  	if buf == nil {
  9667  		return nil, nil
  9668  	}
  9669  	return getModifierMappingReply(buf), nil
  9670  }
  9671  
  9672  // getModifierMappingReply reads a byte slice into a GetModifierMappingReply value.
  9673  func getModifierMappingReply(buf []byte) *GetModifierMappingReply {
  9674  	v := new(GetModifierMappingReply)
  9675  	b := 1 // skip reply determinant
  9676  
  9677  	v.KeycodesPerModifier = buf[b]
  9678  	b += 1
  9679  
  9680  	v.Sequence = xgb.Get16(buf[b:])
  9681  	b += 2
  9682  
  9683  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9684  	b += 4
  9685  
  9686  	b += 24 // padding
  9687  
  9688  	v.Keycodes = make([]Keycode, (int(v.KeycodesPerModifier) * 8))
  9689  	for i := 0; i < int((int(v.KeycodesPerModifier) * 8)); i++ {
  9690  		v.Keycodes[i] = Keycode(buf[b])
  9691  		b += 1
  9692  	}
  9693  
  9694  	return v
  9695  }
  9696  
  9697  // Write request to wire for GetModifierMapping
  9698  // getModifierMappingRequest writes a GetModifierMapping request to a byte slice.
  9699  func getModifierMappingRequest(c *xgb.Conn) []byte {
  9700  	size := 4
  9701  	b := 0
  9702  	buf := make([]byte, size)
  9703  
  9704  	buf[b] = 119 // request opcode
  9705  	b += 1
  9706  
  9707  	b += 1                             // padding
  9708  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9709  	b += 2
  9710  
  9711  	return buf
  9712  }
  9713  
  9714  // GetMotionEventsCookie is a cookie used only for GetMotionEvents requests.
  9715  type GetMotionEventsCookie struct {
  9716  	*xgb.Cookie
  9717  }
  9718  
  9719  // GetMotionEvents sends a checked request.
  9720  // If an error occurs, it will be returned with the reply by calling GetMotionEventsCookie.Reply()
  9721  func GetMotionEvents(c *xgb.Conn, Window Window, Start Timestamp, Stop Timestamp) GetMotionEventsCookie {
  9722  	cookie := c.NewCookie(true, true)
  9723  	c.NewRequest(getMotionEventsRequest(c, Window, Start, Stop), cookie)
  9724  	return GetMotionEventsCookie{cookie}
  9725  }
  9726  
  9727  // GetMotionEventsUnchecked sends an unchecked request.
  9728  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9729  func GetMotionEventsUnchecked(c *xgb.Conn, Window Window, Start Timestamp, Stop Timestamp) GetMotionEventsCookie {
  9730  	cookie := c.NewCookie(false, true)
  9731  	c.NewRequest(getMotionEventsRequest(c, Window, Start, Stop), cookie)
  9732  	return GetMotionEventsCookie{cookie}
  9733  }
  9734  
  9735  // GetMotionEventsReply represents the data returned from a GetMotionEvents request.
  9736  type GetMotionEventsReply struct {
  9737  	Sequence uint16 // sequence number of the request for this reply
  9738  	Length   uint32 // number of bytes in this reply
  9739  	// padding: 1 bytes
  9740  	EventsLen uint32
  9741  	// padding: 20 bytes
  9742  	Events []Timecoord // size: xgb.Pad((int(EventsLen) * 8))
  9743  }
  9744  
  9745  // Reply blocks and returns the reply data for a GetMotionEvents request.
  9746  func (cook GetMotionEventsCookie) Reply() (*GetMotionEventsReply, error) {
  9747  	buf, err := cook.Cookie.Reply()
  9748  	if err != nil {
  9749  		return nil, err
  9750  	}
  9751  	if buf == nil {
  9752  		return nil, nil
  9753  	}
  9754  	return getMotionEventsReply(buf), nil
  9755  }
  9756  
  9757  // getMotionEventsReply reads a byte slice into a GetMotionEventsReply value.
  9758  func getMotionEventsReply(buf []byte) *GetMotionEventsReply {
  9759  	v := new(GetMotionEventsReply)
  9760  	b := 1 // skip reply determinant
  9761  
  9762  	b += 1 // padding
  9763  
  9764  	v.Sequence = xgb.Get16(buf[b:])
  9765  	b += 2
  9766  
  9767  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9768  	b += 4
  9769  
  9770  	v.EventsLen = xgb.Get32(buf[b:])
  9771  	b += 4
  9772  
  9773  	b += 20 // padding
  9774  
  9775  	v.Events = make([]Timecoord, v.EventsLen)
  9776  	b += TimecoordReadList(buf[b:], v.Events)
  9777  
  9778  	return v
  9779  }
  9780  
  9781  // Write request to wire for GetMotionEvents
  9782  // getMotionEventsRequest writes a GetMotionEvents request to a byte slice.
  9783  func getMotionEventsRequest(c *xgb.Conn, Window Window, Start Timestamp, Stop Timestamp) []byte {
  9784  	size := 16
  9785  	b := 0
  9786  	buf := make([]byte, size)
  9787  
  9788  	buf[b] = 39 // request opcode
  9789  	b += 1
  9790  
  9791  	b += 1 // padding
  9792  
  9793  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9794  	b += 2
  9795  
  9796  	xgb.Put32(buf[b:], uint32(Window))
  9797  	b += 4
  9798  
  9799  	xgb.Put32(buf[b:], uint32(Start))
  9800  	b += 4
  9801  
  9802  	xgb.Put32(buf[b:], uint32(Stop))
  9803  	b += 4
  9804  
  9805  	return buf
  9806  }
  9807  
  9808  // GetPointerControlCookie is a cookie used only for GetPointerControl requests.
  9809  type GetPointerControlCookie struct {
  9810  	*xgb.Cookie
  9811  }
  9812  
  9813  // GetPointerControl sends a checked request.
  9814  // If an error occurs, it will be returned with the reply by calling GetPointerControlCookie.Reply()
  9815  func GetPointerControl(c *xgb.Conn) GetPointerControlCookie {
  9816  	cookie := c.NewCookie(true, true)
  9817  	c.NewRequest(getPointerControlRequest(c), cookie)
  9818  	return GetPointerControlCookie{cookie}
  9819  }
  9820  
  9821  // GetPointerControlUnchecked sends an unchecked request.
  9822  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9823  func GetPointerControlUnchecked(c *xgb.Conn) GetPointerControlCookie {
  9824  	cookie := c.NewCookie(false, true)
  9825  	c.NewRequest(getPointerControlRequest(c), cookie)
  9826  	return GetPointerControlCookie{cookie}
  9827  }
  9828  
  9829  // GetPointerControlReply represents the data returned from a GetPointerControl request.
  9830  type GetPointerControlReply struct {
  9831  	Sequence uint16 // sequence number of the request for this reply
  9832  	Length   uint32 // number of bytes in this reply
  9833  	// padding: 1 bytes
  9834  	AccelerationNumerator   uint16
  9835  	AccelerationDenominator uint16
  9836  	Threshold               uint16
  9837  	// padding: 18 bytes
  9838  }
  9839  
  9840  // Reply blocks and returns the reply data for a GetPointerControl request.
  9841  func (cook GetPointerControlCookie) Reply() (*GetPointerControlReply, error) {
  9842  	buf, err := cook.Cookie.Reply()
  9843  	if err != nil {
  9844  		return nil, err
  9845  	}
  9846  	if buf == nil {
  9847  		return nil, nil
  9848  	}
  9849  	return getPointerControlReply(buf), nil
  9850  }
  9851  
  9852  // getPointerControlReply reads a byte slice into a GetPointerControlReply value.
  9853  func getPointerControlReply(buf []byte) *GetPointerControlReply {
  9854  	v := new(GetPointerControlReply)
  9855  	b := 1 // skip reply determinant
  9856  
  9857  	b += 1 // padding
  9858  
  9859  	v.Sequence = xgb.Get16(buf[b:])
  9860  	b += 2
  9861  
  9862  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9863  	b += 4
  9864  
  9865  	v.AccelerationNumerator = xgb.Get16(buf[b:])
  9866  	b += 2
  9867  
  9868  	v.AccelerationDenominator = xgb.Get16(buf[b:])
  9869  	b += 2
  9870  
  9871  	v.Threshold = xgb.Get16(buf[b:])
  9872  	b += 2
  9873  
  9874  	b += 18 // padding
  9875  
  9876  	return v
  9877  }
  9878  
  9879  // Write request to wire for GetPointerControl
  9880  // getPointerControlRequest writes a GetPointerControl request to a byte slice.
  9881  func getPointerControlRequest(c *xgb.Conn) []byte {
  9882  	size := 4
  9883  	b := 0
  9884  	buf := make([]byte, size)
  9885  
  9886  	buf[b] = 106 // request opcode
  9887  	b += 1
  9888  
  9889  	b += 1                             // padding
  9890  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9891  	b += 2
  9892  
  9893  	return buf
  9894  }
  9895  
  9896  // GetPointerMappingCookie is a cookie used only for GetPointerMapping requests.
  9897  type GetPointerMappingCookie struct {
  9898  	*xgb.Cookie
  9899  }
  9900  
  9901  // GetPointerMapping sends a checked request.
  9902  // If an error occurs, it will be returned with the reply by calling GetPointerMappingCookie.Reply()
  9903  func GetPointerMapping(c *xgb.Conn) GetPointerMappingCookie {
  9904  	cookie := c.NewCookie(true, true)
  9905  	c.NewRequest(getPointerMappingRequest(c), cookie)
  9906  	return GetPointerMappingCookie{cookie}
  9907  }
  9908  
  9909  // GetPointerMappingUnchecked sends an unchecked request.
  9910  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9911  func GetPointerMappingUnchecked(c *xgb.Conn) GetPointerMappingCookie {
  9912  	cookie := c.NewCookie(false, true)
  9913  	c.NewRequest(getPointerMappingRequest(c), cookie)
  9914  	return GetPointerMappingCookie{cookie}
  9915  }
  9916  
  9917  // GetPointerMappingReply represents the data returned from a GetPointerMapping request.
  9918  type GetPointerMappingReply struct {
  9919  	Sequence uint16 // sequence number of the request for this reply
  9920  	Length   uint32 // number of bytes in this reply
  9921  	MapLen   byte
  9922  	// padding: 24 bytes
  9923  	Map []byte // size: xgb.Pad((int(MapLen) * 1))
  9924  }
  9925  
  9926  // Reply blocks and returns the reply data for a GetPointerMapping request.
  9927  func (cook GetPointerMappingCookie) Reply() (*GetPointerMappingReply, error) {
  9928  	buf, err := cook.Cookie.Reply()
  9929  	if err != nil {
  9930  		return nil, err
  9931  	}
  9932  	if buf == nil {
  9933  		return nil, nil
  9934  	}
  9935  	return getPointerMappingReply(buf), nil
  9936  }
  9937  
  9938  // getPointerMappingReply reads a byte slice into a GetPointerMappingReply value.
  9939  func getPointerMappingReply(buf []byte) *GetPointerMappingReply {
  9940  	v := new(GetPointerMappingReply)
  9941  	b := 1 // skip reply determinant
  9942  
  9943  	v.MapLen = buf[b]
  9944  	b += 1
  9945  
  9946  	v.Sequence = xgb.Get16(buf[b:])
  9947  	b += 2
  9948  
  9949  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
  9950  	b += 4
  9951  
  9952  	b += 24 // padding
  9953  
  9954  	v.Map = make([]byte, v.MapLen)
  9955  	copy(v.Map[:v.MapLen], buf[b:])
  9956  	b += int(v.MapLen)
  9957  
  9958  	return v
  9959  }
  9960  
  9961  // Write request to wire for GetPointerMapping
  9962  // getPointerMappingRequest writes a GetPointerMapping request to a byte slice.
  9963  func getPointerMappingRequest(c *xgb.Conn) []byte {
  9964  	size := 4
  9965  	b := 0
  9966  	buf := make([]byte, size)
  9967  
  9968  	buf[b] = 117 // request opcode
  9969  	b += 1
  9970  
  9971  	b += 1                             // padding
  9972  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
  9973  	b += 2
  9974  
  9975  	return buf
  9976  }
  9977  
  9978  // GetPropertyCookie is a cookie used only for GetProperty requests.
  9979  type GetPropertyCookie struct {
  9980  	*xgb.Cookie
  9981  }
  9982  
  9983  // GetProperty sends a checked request.
  9984  // If an error occurs, it will be returned with the reply by calling GetPropertyCookie.Reply()
  9985  func GetProperty(c *xgb.Conn, Delete bool, Window Window, Property Atom, Type Atom, LongOffset uint32, LongLength uint32) GetPropertyCookie {
  9986  	cookie := c.NewCookie(true, true)
  9987  	c.NewRequest(getPropertyRequest(c, Delete, Window, Property, Type, LongOffset, LongLength), cookie)
  9988  	return GetPropertyCookie{cookie}
  9989  }
  9990  
  9991  // GetPropertyUnchecked sends an unchecked request.
  9992  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
  9993  func GetPropertyUnchecked(c *xgb.Conn, Delete bool, Window Window, Property Atom, Type Atom, LongOffset uint32, LongLength uint32) GetPropertyCookie {
  9994  	cookie := c.NewCookie(false, true)
  9995  	c.NewRequest(getPropertyRequest(c, Delete, Window, Property, Type, LongOffset, LongLength), cookie)
  9996  	return GetPropertyCookie{cookie}
  9997  }
  9998  
  9999  // GetPropertyReply represents the data returned from a GetProperty request.
 10000  type GetPropertyReply struct {
 10001  	Sequence   uint16 // sequence number of the request for this reply
 10002  	Length     uint32 // number of bytes in this reply
 10003  	Format     byte
 10004  	Type       Atom
 10005  	BytesAfter uint32
 10006  	ValueLen   uint32
 10007  	// padding: 12 bytes
 10008  	Value []byte // size: xgb.Pad(((int(ValueLen) * (int(Format) / 8)) * 1))
 10009  }
 10010  
 10011  // Reply blocks and returns the reply data for a GetProperty request.
 10012  func (cook GetPropertyCookie) Reply() (*GetPropertyReply, error) {
 10013  	buf, err := cook.Cookie.Reply()
 10014  	if err != nil {
 10015  		return nil, err
 10016  	}
 10017  	if buf == nil {
 10018  		return nil, nil
 10019  	}
 10020  	return getPropertyReply(buf), nil
 10021  }
 10022  
 10023  // getPropertyReply reads a byte slice into a GetPropertyReply value.
 10024  func getPropertyReply(buf []byte) *GetPropertyReply {
 10025  	v := new(GetPropertyReply)
 10026  	b := 1 // skip reply determinant
 10027  
 10028  	v.Format = buf[b]
 10029  	b += 1
 10030  
 10031  	v.Sequence = xgb.Get16(buf[b:])
 10032  	b += 2
 10033  
 10034  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 10035  	b += 4
 10036  
 10037  	v.Type = Atom(xgb.Get32(buf[b:]))
 10038  	b += 4
 10039  
 10040  	v.BytesAfter = xgb.Get32(buf[b:])
 10041  	b += 4
 10042  
 10043  	v.ValueLen = xgb.Get32(buf[b:])
 10044  	b += 4
 10045  
 10046  	b += 12 // padding
 10047  
 10048  	v.Value = make([]byte, (int(v.ValueLen) * (int(v.Format) / 8)))
 10049  	copy(v.Value[:(int(v.ValueLen)*(int(v.Format)/8))], buf[b:])
 10050  	b += int((int(v.ValueLen) * (int(v.Format) / 8)))
 10051  
 10052  	return v
 10053  }
 10054  
 10055  // Write request to wire for GetProperty
 10056  // getPropertyRequest writes a GetProperty request to a byte slice.
 10057  func getPropertyRequest(c *xgb.Conn, Delete bool, Window Window, Property Atom, Type Atom, LongOffset uint32, LongLength uint32) []byte {
 10058  	size := 24
 10059  	b := 0
 10060  	buf := make([]byte, size)
 10061  
 10062  	buf[b] = 20 // request opcode
 10063  	b += 1
 10064  
 10065  	if Delete {
 10066  		buf[b] = 1
 10067  	} else {
 10068  		buf[b] = 0
 10069  	}
 10070  	b += 1
 10071  
 10072  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10073  	b += 2
 10074  
 10075  	xgb.Put32(buf[b:], uint32(Window))
 10076  	b += 4
 10077  
 10078  	xgb.Put32(buf[b:], uint32(Property))
 10079  	b += 4
 10080  
 10081  	xgb.Put32(buf[b:], uint32(Type))
 10082  	b += 4
 10083  
 10084  	xgb.Put32(buf[b:], LongOffset)
 10085  	b += 4
 10086  
 10087  	xgb.Put32(buf[b:], LongLength)
 10088  	b += 4
 10089  
 10090  	return buf
 10091  }
 10092  
 10093  // GetScreenSaverCookie is a cookie used only for GetScreenSaver requests.
 10094  type GetScreenSaverCookie struct {
 10095  	*xgb.Cookie
 10096  }
 10097  
 10098  // GetScreenSaver sends a checked request.
 10099  // If an error occurs, it will be returned with the reply by calling GetScreenSaverCookie.Reply()
 10100  func GetScreenSaver(c *xgb.Conn) GetScreenSaverCookie {
 10101  	cookie := c.NewCookie(true, true)
 10102  	c.NewRequest(getScreenSaverRequest(c), cookie)
 10103  	return GetScreenSaverCookie{cookie}
 10104  }
 10105  
 10106  // GetScreenSaverUnchecked sends an unchecked request.
 10107  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10108  func GetScreenSaverUnchecked(c *xgb.Conn) GetScreenSaverCookie {
 10109  	cookie := c.NewCookie(false, true)
 10110  	c.NewRequest(getScreenSaverRequest(c), cookie)
 10111  	return GetScreenSaverCookie{cookie}
 10112  }
 10113  
 10114  // GetScreenSaverReply represents the data returned from a GetScreenSaver request.
 10115  type GetScreenSaverReply struct {
 10116  	Sequence uint16 // sequence number of the request for this reply
 10117  	Length   uint32 // number of bytes in this reply
 10118  	// padding: 1 bytes
 10119  	Timeout        uint16
 10120  	Interval       uint16
 10121  	PreferBlanking byte
 10122  	AllowExposures byte
 10123  	// padding: 18 bytes
 10124  }
 10125  
 10126  // Reply blocks and returns the reply data for a GetScreenSaver request.
 10127  func (cook GetScreenSaverCookie) Reply() (*GetScreenSaverReply, error) {
 10128  	buf, err := cook.Cookie.Reply()
 10129  	if err != nil {
 10130  		return nil, err
 10131  	}
 10132  	if buf == nil {
 10133  		return nil, nil
 10134  	}
 10135  	return getScreenSaverReply(buf), nil
 10136  }
 10137  
 10138  // getScreenSaverReply reads a byte slice into a GetScreenSaverReply value.
 10139  func getScreenSaverReply(buf []byte) *GetScreenSaverReply {
 10140  	v := new(GetScreenSaverReply)
 10141  	b := 1 // skip reply determinant
 10142  
 10143  	b += 1 // padding
 10144  
 10145  	v.Sequence = xgb.Get16(buf[b:])
 10146  	b += 2
 10147  
 10148  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 10149  	b += 4
 10150  
 10151  	v.Timeout = xgb.Get16(buf[b:])
 10152  	b += 2
 10153  
 10154  	v.Interval = xgb.Get16(buf[b:])
 10155  	b += 2
 10156  
 10157  	v.PreferBlanking = buf[b]
 10158  	b += 1
 10159  
 10160  	v.AllowExposures = buf[b]
 10161  	b += 1
 10162  
 10163  	b += 18 // padding
 10164  
 10165  	return v
 10166  }
 10167  
 10168  // Write request to wire for GetScreenSaver
 10169  // getScreenSaverRequest writes a GetScreenSaver request to a byte slice.
 10170  func getScreenSaverRequest(c *xgb.Conn) []byte {
 10171  	size := 4
 10172  	b := 0
 10173  	buf := make([]byte, size)
 10174  
 10175  	buf[b] = 108 // request opcode
 10176  	b += 1
 10177  
 10178  	b += 1                             // padding
 10179  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10180  	b += 2
 10181  
 10182  	return buf
 10183  }
 10184  
 10185  // GetSelectionOwnerCookie is a cookie used only for GetSelectionOwner requests.
 10186  type GetSelectionOwnerCookie struct {
 10187  	*xgb.Cookie
 10188  }
 10189  
 10190  // GetSelectionOwner sends a checked request.
 10191  // If an error occurs, it will be returned with the reply by calling GetSelectionOwnerCookie.Reply()
 10192  func GetSelectionOwner(c *xgb.Conn, Selection Atom) GetSelectionOwnerCookie {
 10193  	cookie := c.NewCookie(true, true)
 10194  	c.NewRequest(getSelectionOwnerRequest(c, Selection), cookie)
 10195  	return GetSelectionOwnerCookie{cookie}
 10196  }
 10197  
 10198  // GetSelectionOwnerUnchecked sends an unchecked request.
 10199  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10200  func GetSelectionOwnerUnchecked(c *xgb.Conn, Selection Atom) GetSelectionOwnerCookie {
 10201  	cookie := c.NewCookie(false, true)
 10202  	c.NewRequest(getSelectionOwnerRequest(c, Selection), cookie)
 10203  	return GetSelectionOwnerCookie{cookie}
 10204  }
 10205  
 10206  // GetSelectionOwnerReply represents the data returned from a GetSelectionOwner request.
 10207  type GetSelectionOwnerReply struct {
 10208  	Sequence uint16 // sequence number of the request for this reply
 10209  	Length   uint32 // number of bytes in this reply
 10210  	// padding: 1 bytes
 10211  	Owner Window
 10212  }
 10213  
 10214  // Reply blocks and returns the reply data for a GetSelectionOwner request.
 10215  func (cook GetSelectionOwnerCookie) Reply() (*GetSelectionOwnerReply, error) {
 10216  	buf, err := cook.Cookie.Reply()
 10217  	if err != nil {
 10218  		return nil, err
 10219  	}
 10220  	if buf == nil {
 10221  		return nil, nil
 10222  	}
 10223  	return getSelectionOwnerReply(buf), nil
 10224  }
 10225  
 10226  // getSelectionOwnerReply reads a byte slice into a GetSelectionOwnerReply value.
 10227  func getSelectionOwnerReply(buf []byte) *GetSelectionOwnerReply {
 10228  	v := new(GetSelectionOwnerReply)
 10229  	b := 1 // skip reply determinant
 10230  
 10231  	b += 1 // padding
 10232  
 10233  	v.Sequence = xgb.Get16(buf[b:])
 10234  	b += 2
 10235  
 10236  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 10237  	b += 4
 10238  
 10239  	v.Owner = Window(xgb.Get32(buf[b:]))
 10240  	b += 4
 10241  
 10242  	return v
 10243  }
 10244  
 10245  // Write request to wire for GetSelectionOwner
 10246  // getSelectionOwnerRequest writes a GetSelectionOwner request to a byte slice.
 10247  func getSelectionOwnerRequest(c *xgb.Conn, Selection Atom) []byte {
 10248  	size := 8
 10249  	b := 0
 10250  	buf := make([]byte, size)
 10251  
 10252  	buf[b] = 23 // request opcode
 10253  	b += 1
 10254  
 10255  	b += 1 // padding
 10256  
 10257  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10258  	b += 2
 10259  
 10260  	xgb.Put32(buf[b:], uint32(Selection))
 10261  	b += 4
 10262  
 10263  	return buf
 10264  }
 10265  
 10266  // GetWindowAttributesCookie is a cookie used only for GetWindowAttributes requests.
 10267  type GetWindowAttributesCookie struct {
 10268  	*xgb.Cookie
 10269  }
 10270  
 10271  // GetWindowAttributes sends a checked request.
 10272  // If an error occurs, it will be returned with the reply by calling GetWindowAttributesCookie.Reply()
 10273  func GetWindowAttributes(c *xgb.Conn, Window Window) GetWindowAttributesCookie {
 10274  	cookie := c.NewCookie(true, true)
 10275  	c.NewRequest(getWindowAttributesRequest(c, Window), cookie)
 10276  	return GetWindowAttributesCookie{cookie}
 10277  }
 10278  
 10279  // GetWindowAttributesUnchecked sends an unchecked request.
 10280  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10281  func GetWindowAttributesUnchecked(c *xgb.Conn, Window Window) GetWindowAttributesCookie {
 10282  	cookie := c.NewCookie(false, true)
 10283  	c.NewRequest(getWindowAttributesRequest(c, Window), cookie)
 10284  	return GetWindowAttributesCookie{cookie}
 10285  }
 10286  
 10287  // GetWindowAttributesReply represents the data returned from a GetWindowAttributes request.
 10288  type GetWindowAttributesReply struct {
 10289  	Sequence           uint16 // sequence number of the request for this reply
 10290  	Length             uint32 // number of bytes in this reply
 10291  	BackingStore       byte
 10292  	Visual             Visualid
 10293  	Class              uint16
 10294  	BitGravity         byte
 10295  	WinGravity         byte
 10296  	BackingPlanes      uint32
 10297  	BackingPixel       uint32
 10298  	SaveUnder          bool
 10299  	MapIsInstalled     bool
 10300  	MapState           byte
 10301  	OverrideRedirect   bool
 10302  	Colormap           Colormap
 10303  	AllEventMasks      uint32
 10304  	YourEventMask      uint32
 10305  	DoNotPropagateMask uint16
 10306  	// padding: 2 bytes
 10307  }
 10308  
 10309  // Reply blocks and returns the reply data for a GetWindowAttributes request.
 10310  func (cook GetWindowAttributesCookie) Reply() (*GetWindowAttributesReply, error) {
 10311  	buf, err := cook.Cookie.Reply()
 10312  	if err != nil {
 10313  		return nil, err
 10314  	}
 10315  	if buf == nil {
 10316  		return nil, nil
 10317  	}
 10318  	return getWindowAttributesReply(buf), nil
 10319  }
 10320  
 10321  // getWindowAttributesReply reads a byte slice into a GetWindowAttributesReply value.
 10322  func getWindowAttributesReply(buf []byte) *GetWindowAttributesReply {
 10323  	v := new(GetWindowAttributesReply)
 10324  	b := 1 // skip reply determinant
 10325  
 10326  	v.BackingStore = buf[b]
 10327  	b += 1
 10328  
 10329  	v.Sequence = xgb.Get16(buf[b:])
 10330  	b += 2
 10331  
 10332  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 10333  	b += 4
 10334  
 10335  	v.Visual = Visualid(xgb.Get32(buf[b:]))
 10336  	b += 4
 10337  
 10338  	v.Class = xgb.Get16(buf[b:])
 10339  	b += 2
 10340  
 10341  	v.BitGravity = buf[b]
 10342  	b += 1
 10343  
 10344  	v.WinGravity = buf[b]
 10345  	b += 1
 10346  
 10347  	v.BackingPlanes = xgb.Get32(buf[b:])
 10348  	b += 4
 10349  
 10350  	v.BackingPixel = xgb.Get32(buf[b:])
 10351  	b += 4
 10352  
 10353  	if buf[b] == 1 {
 10354  		v.SaveUnder = true
 10355  	} else {
 10356  		v.SaveUnder = false
 10357  	}
 10358  	b += 1
 10359  
 10360  	if buf[b] == 1 {
 10361  		v.MapIsInstalled = true
 10362  	} else {
 10363  		v.MapIsInstalled = false
 10364  	}
 10365  	b += 1
 10366  
 10367  	v.MapState = buf[b]
 10368  	b += 1
 10369  
 10370  	if buf[b] == 1 {
 10371  		v.OverrideRedirect = true
 10372  	} else {
 10373  		v.OverrideRedirect = false
 10374  	}
 10375  	b += 1
 10376  
 10377  	v.Colormap = Colormap(xgb.Get32(buf[b:]))
 10378  	b += 4
 10379  
 10380  	v.AllEventMasks = xgb.Get32(buf[b:])
 10381  	b += 4
 10382  
 10383  	v.YourEventMask = xgb.Get32(buf[b:])
 10384  	b += 4
 10385  
 10386  	v.DoNotPropagateMask = xgb.Get16(buf[b:])
 10387  	b += 2
 10388  
 10389  	b += 2 // padding
 10390  
 10391  	return v
 10392  }
 10393  
 10394  // Write request to wire for GetWindowAttributes
 10395  // getWindowAttributesRequest writes a GetWindowAttributes request to a byte slice.
 10396  func getWindowAttributesRequest(c *xgb.Conn, Window Window) []byte {
 10397  	size := 8
 10398  	b := 0
 10399  	buf := make([]byte, size)
 10400  
 10401  	buf[b] = 3 // request opcode
 10402  	b += 1
 10403  
 10404  	b += 1 // padding
 10405  
 10406  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10407  	b += 2
 10408  
 10409  	xgb.Put32(buf[b:], uint32(Window))
 10410  	b += 4
 10411  
 10412  	return buf
 10413  }
 10414  
 10415  // GrabButtonCookie is a cookie used only for GrabButton requests.
 10416  type GrabButtonCookie struct {
 10417  	*xgb.Cookie
 10418  }
 10419  
 10420  // GrabButton sends an unchecked request.
 10421  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10422  func GrabButton(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Button byte, Modifiers uint16) GrabButtonCookie {
 10423  	cookie := c.NewCookie(false, false)
 10424  	c.NewRequest(grabButtonRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Button, Modifiers), cookie)
 10425  	return GrabButtonCookie{cookie}
 10426  }
 10427  
 10428  // GrabButtonChecked sends a checked request.
 10429  // If an error occurs, it can be retrieved using GrabButtonCookie.Check()
 10430  func GrabButtonChecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Button byte, Modifiers uint16) GrabButtonCookie {
 10431  	cookie := c.NewCookie(true, false)
 10432  	c.NewRequest(grabButtonRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Button, Modifiers), cookie)
 10433  	return GrabButtonCookie{cookie}
 10434  }
 10435  
 10436  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 10437  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 10438  func (cook GrabButtonCookie) Check() error {
 10439  	return cook.Cookie.Check()
 10440  }
 10441  
 10442  // Write request to wire for GrabButton
 10443  // grabButtonRequest writes a GrabButton request to a byte slice.
 10444  func grabButtonRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Button byte, Modifiers uint16) []byte {
 10445  	size := 24
 10446  	b := 0
 10447  	buf := make([]byte, size)
 10448  
 10449  	buf[b] = 28 // request opcode
 10450  	b += 1
 10451  
 10452  	if OwnerEvents {
 10453  		buf[b] = 1
 10454  	} else {
 10455  		buf[b] = 0
 10456  	}
 10457  	b += 1
 10458  
 10459  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10460  	b += 2
 10461  
 10462  	xgb.Put32(buf[b:], uint32(GrabWindow))
 10463  	b += 4
 10464  
 10465  	xgb.Put16(buf[b:], EventMask)
 10466  	b += 2
 10467  
 10468  	buf[b] = PointerMode
 10469  	b += 1
 10470  
 10471  	buf[b] = KeyboardMode
 10472  	b += 1
 10473  
 10474  	xgb.Put32(buf[b:], uint32(ConfineTo))
 10475  	b += 4
 10476  
 10477  	xgb.Put32(buf[b:], uint32(Cursor))
 10478  	b += 4
 10479  
 10480  	buf[b] = Button
 10481  	b += 1
 10482  
 10483  	b += 1 // padding
 10484  
 10485  	xgb.Put16(buf[b:], Modifiers)
 10486  	b += 2
 10487  
 10488  	return buf
 10489  }
 10490  
 10491  // GrabKeyCookie is a cookie used only for GrabKey requests.
 10492  type GrabKeyCookie struct {
 10493  	*xgb.Cookie
 10494  }
 10495  
 10496  // GrabKey sends an unchecked request.
 10497  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10498  func GrabKey(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Modifiers uint16, Key Keycode, PointerMode byte, KeyboardMode byte) GrabKeyCookie {
 10499  	cookie := c.NewCookie(false, false)
 10500  	c.NewRequest(grabKeyRequest(c, OwnerEvents, GrabWindow, Modifiers, Key, PointerMode, KeyboardMode), cookie)
 10501  	return GrabKeyCookie{cookie}
 10502  }
 10503  
 10504  // GrabKeyChecked sends a checked request.
 10505  // If an error occurs, it can be retrieved using GrabKeyCookie.Check()
 10506  func GrabKeyChecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Modifiers uint16, Key Keycode, PointerMode byte, KeyboardMode byte) GrabKeyCookie {
 10507  	cookie := c.NewCookie(true, false)
 10508  	c.NewRequest(grabKeyRequest(c, OwnerEvents, GrabWindow, Modifiers, Key, PointerMode, KeyboardMode), cookie)
 10509  	return GrabKeyCookie{cookie}
 10510  }
 10511  
 10512  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 10513  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 10514  func (cook GrabKeyCookie) Check() error {
 10515  	return cook.Cookie.Check()
 10516  }
 10517  
 10518  // Write request to wire for GrabKey
 10519  // grabKeyRequest writes a GrabKey request to a byte slice.
 10520  func grabKeyRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Modifiers uint16, Key Keycode, PointerMode byte, KeyboardMode byte) []byte {
 10521  	size := 16
 10522  	b := 0
 10523  	buf := make([]byte, size)
 10524  
 10525  	buf[b] = 33 // request opcode
 10526  	b += 1
 10527  
 10528  	if OwnerEvents {
 10529  		buf[b] = 1
 10530  	} else {
 10531  		buf[b] = 0
 10532  	}
 10533  	b += 1
 10534  
 10535  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10536  	b += 2
 10537  
 10538  	xgb.Put32(buf[b:], uint32(GrabWindow))
 10539  	b += 4
 10540  
 10541  	xgb.Put16(buf[b:], Modifiers)
 10542  	b += 2
 10543  
 10544  	buf[b] = byte(Key)
 10545  	b += 1
 10546  
 10547  	buf[b] = PointerMode
 10548  	b += 1
 10549  
 10550  	buf[b] = KeyboardMode
 10551  	b += 1
 10552  
 10553  	b += 3 // padding
 10554  
 10555  	return buf
 10556  }
 10557  
 10558  // GrabKeyboardCookie is a cookie used only for GrabKeyboard requests.
 10559  type GrabKeyboardCookie struct {
 10560  	*xgb.Cookie
 10561  }
 10562  
 10563  // GrabKeyboard sends a checked request.
 10564  // If an error occurs, it will be returned with the reply by calling GrabKeyboardCookie.Reply()
 10565  func GrabKeyboard(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Time Timestamp, PointerMode byte, KeyboardMode byte) GrabKeyboardCookie {
 10566  	cookie := c.NewCookie(true, true)
 10567  	c.NewRequest(grabKeyboardRequest(c, OwnerEvents, GrabWindow, Time, PointerMode, KeyboardMode), cookie)
 10568  	return GrabKeyboardCookie{cookie}
 10569  }
 10570  
 10571  // GrabKeyboardUnchecked sends an unchecked request.
 10572  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10573  func GrabKeyboardUnchecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Time Timestamp, PointerMode byte, KeyboardMode byte) GrabKeyboardCookie {
 10574  	cookie := c.NewCookie(false, true)
 10575  	c.NewRequest(grabKeyboardRequest(c, OwnerEvents, GrabWindow, Time, PointerMode, KeyboardMode), cookie)
 10576  	return GrabKeyboardCookie{cookie}
 10577  }
 10578  
 10579  // GrabKeyboardReply represents the data returned from a GrabKeyboard request.
 10580  type GrabKeyboardReply struct {
 10581  	Sequence uint16 // sequence number of the request for this reply
 10582  	Length   uint32 // number of bytes in this reply
 10583  	Status   byte
 10584  }
 10585  
 10586  // Reply blocks and returns the reply data for a GrabKeyboard request.
 10587  func (cook GrabKeyboardCookie) Reply() (*GrabKeyboardReply, error) {
 10588  	buf, err := cook.Cookie.Reply()
 10589  	if err != nil {
 10590  		return nil, err
 10591  	}
 10592  	if buf == nil {
 10593  		return nil, nil
 10594  	}
 10595  	return grabKeyboardReply(buf), nil
 10596  }
 10597  
 10598  // grabKeyboardReply reads a byte slice into a GrabKeyboardReply value.
 10599  func grabKeyboardReply(buf []byte) *GrabKeyboardReply {
 10600  	v := new(GrabKeyboardReply)
 10601  	b := 1 // skip reply determinant
 10602  
 10603  	v.Status = buf[b]
 10604  	b += 1
 10605  
 10606  	v.Sequence = xgb.Get16(buf[b:])
 10607  	b += 2
 10608  
 10609  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 10610  	b += 4
 10611  
 10612  	return v
 10613  }
 10614  
 10615  // Write request to wire for GrabKeyboard
 10616  // grabKeyboardRequest writes a GrabKeyboard request to a byte slice.
 10617  func grabKeyboardRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, Time Timestamp, PointerMode byte, KeyboardMode byte) []byte {
 10618  	size := 16
 10619  	b := 0
 10620  	buf := make([]byte, size)
 10621  
 10622  	buf[b] = 31 // request opcode
 10623  	b += 1
 10624  
 10625  	if OwnerEvents {
 10626  		buf[b] = 1
 10627  	} else {
 10628  		buf[b] = 0
 10629  	}
 10630  	b += 1
 10631  
 10632  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10633  	b += 2
 10634  
 10635  	xgb.Put32(buf[b:], uint32(GrabWindow))
 10636  	b += 4
 10637  
 10638  	xgb.Put32(buf[b:], uint32(Time))
 10639  	b += 4
 10640  
 10641  	buf[b] = PointerMode
 10642  	b += 1
 10643  
 10644  	buf[b] = KeyboardMode
 10645  	b += 1
 10646  
 10647  	b += 2 // padding
 10648  
 10649  	return buf
 10650  }
 10651  
 10652  // GrabPointerCookie is a cookie used only for GrabPointer requests.
 10653  type GrabPointerCookie struct {
 10654  	*xgb.Cookie
 10655  }
 10656  
 10657  // GrabPointer sends a checked request.
 10658  // If an error occurs, it will be returned with the reply by calling GrabPointerCookie.Reply()
 10659  func GrabPointer(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Time Timestamp) GrabPointerCookie {
 10660  	cookie := c.NewCookie(true, true)
 10661  	c.NewRequest(grabPointerRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Time), cookie)
 10662  	return GrabPointerCookie{cookie}
 10663  }
 10664  
 10665  // GrabPointerUnchecked sends an unchecked request.
 10666  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10667  func GrabPointerUnchecked(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Time Timestamp) GrabPointerCookie {
 10668  	cookie := c.NewCookie(false, true)
 10669  	c.NewRequest(grabPointerRequest(c, OwnerEvents, GrabWindow, EventMask, PointerMode, KeyboardMode, ConfineTo, Cursor, Time), cookie)
 10670  	return GrabPointerCookie{cookie}
 10671  }
 10672  
 10673  // GrabPointerReply represents the data returned from a GrabPointer request.
 10674  type GrabPointerReply struct {
 10675  	Sequence uint16 // sequence number of the request for this reply
 10676  	Length   uint32 // number of bytes in this reply
 10677  	Status   byte
 10678  }
 10679  
 10680  // Reply blocks and returns the reply data for a GrabPointer request.
 10681  func (cook GrabPointerCookie) Reply() (*GrabPointerReply, error) {
 10682  	buf, err := cook.Cookie.Reply()
 10683  	if err != nil {
 10684  		return nil, err
 10685  	}
 10686  	if buf == nil {
 10687  		return nil, nil
 10688  	}
 10689  	return grabPointerReply(buf), nil
 10690  }
 10691  
 10692  // grabPointerReply reads a byte slice into a GrabPointerReply value.
 10693  func grabPointerReply(buf []byte) *GrabPointerReply {
 10694  	v := new(GrabPointerReply)
 10695  	b := 1 // skip reply determinant
 10696  
 10697  	v.Status = buf[b]
 10698  	b += 1
 10699  
 10700  	v.Sequence = xgb.Get16(buf[b:])
 10701  	b += 2
 10702  
 10703  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 10704  	b += 4
 10705  
 10706  	return v
 10707  }
 10708  
 10709  // Write request to wire for GrabPointer
 10710  // grabPointerRequest writes a GrabPointer request to a byte slice.
 10711  func grabPointerRequest(c *xgb.Conn, OwnerEvents bool, GrabWindow Window, EventMask uint16, PointerMode byte, KeyboardMode byte, ConfineTo Window, Cursor Cursor, Time Timestamp) []byte {
 10712  	size := 24
 10713  	b := 0
 10714  	buf := make([]byte, size)
 10715  
 10716  	buf[b] = 26 // request opcode
 10717  	b += 1
 10718  
 10719  	if OwnerEvents {
 10720  		buf[b] = 1
 10721  	} else {
 10722  		buf[b] = 0
 10723  	}
 10724  	b += 1
 10725  
 10726  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10727  	b += 2
 10728  
 10729  	xgb.Put32(buf[b:], uint32(GrabWindow))
 10730  	b += 4
 10731  
 10732  	xgb.Put16(buf[b:], EventMask)
 10733  	b += 2
 10734  
 10735  	buf[b] = PointerMode
 10736  	b += 1
 10737  
 10738  	buf[b] = KeyboardMode
 10739  	b += 1
 10740  
 10741  	xgb.Put32(buf[b:], uint32(ConfineTo))
 10742  	b += 4
 10743  
 10744  	xgb.Put32(buf[b:], uint32(Cursor))
 10745  	b += 4
 10746  
 10747  	xgb.Put32(buf[b:], uint32(Time))
 10748  	b += 4
 10749  
 10750  	return buf
 10751  }
 10752  
 10753  // GrabServerCookie is a cookie used only for GrabServer requests.
 10754  type GrabServerCookie struct {
 10755  	*xgb.Cookie
 10756  }
 10757  
 10758  // GrabServer sends an unchecked request.
 10759  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10760  func GrabServer(c *xgb.Conn) GrabServerCookie {
 10761  	cookie := c.NewCookie(false, false)
 10762  	c.NewRequest(grabServerRequest(c), cookie)
 10763  	return GrabServerCookie{cookie}
 10764  }
 10765  
 10766  // GrabServerChecked sends a checked request.
 10767  // If an error occurs, it can be retrieved using GrabServerCookie.Check()
 10768  func GrabServerChecked(c *xgb.Conn) GrabServerCookie {
 10769  	cookie := c.NewCookie(true, false)
 10770  	c.NewRequest(grabServerRequest(c), cookie)
 10771  	return GrabServerCookie{cookie}
 10772  }
 10773  
 10774  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 10775  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 10776  func (cook GrabServerCookie) Check() error {
 10777  	return cook.Cookie.Check()
 10778  }
 10779  
 10780  // Write request to wire for GrabServer
 10781  // grabServerRequest writes a GrabServer request to a byte slice.
 10782  func grabServerRequest(c *xgb.Conn) []byte {
 10783  	size := 4
 10784  	b := 0
 10785  	buf := make([]byte, size)
 10786  
 10787  	buf[b] = 36 // request opcode
 10788  	b += 1
 10789  
 10790  	b += 1                             // padding
 10791  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10792  	b += 2
 10793  
 10794  	return buf
 10795  }
 10796  
 10797  // ImageText16Cookie is a cookie used only for ImageText16 requests.
 10798  type ImageText16Cookie struct {
 10799  	*xgb.Cookie
 10800  }
 10801  
 10802  // ImageText16 sends an unchecked request.
 10803  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10804  func ImageText16(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String []Char2b) ImageText16Cookie {
 10805  	cookie := c.NewCookie(false, false)
 10806  	c.NewRequest(imageText16Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
 10807  	return ImageText16Cookie{cookie}
 10808  }
 10809  
 10810  // ImageText16Checked sends a checked request.
 10811  // If an error occurs, it can be retrieved using ImageText16Cookie.Check()
 10812  func ImageText16Checked(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String []Char2b) ImageText16Cookie {
 10813  	cookie := c.NewCookie(true, false)
 10814  	c.NewRequest(imageText16Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
 10815  	return ImageText16Cookie{cookie}
 10816  }
 10817  
 10818  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 10819  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 10820  func (cook ImageText16Cookie) Check() error {
 10821  	return cook.Cookie.Check()
 10822  }
 10823  
 10824  // Write request to wire for ImageText16
 10825  // imageText16Request writes a ImageText16 request to a byte slice.
 10826  func imageText16Request(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String []Char2b) []byte {
 10827  	size := xgb.Pad((16 + xgb.Pad((int(StringLen) * 2))))
 10828  	b := 0
 10829  	buf := make([]byte, size)
 10830  
 10831  	buf[b] = 77 // request opcode
 10832  	b += 1
 10833  
 10834  	buf[b] = StringLen
 10835  	b += 1
 10836  
 10837  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10838  	b += 2
 10839  
 10840  	xgb.Put32(buf[b:], uint32(Drawable))
 10841  	b += 4
 10842  
 10843  	xgb.Put32(buf[b:], uint32(Gc))
 10844  	b += 4
 10845  
 10846  	xgb.Put16(buf[b:], uint16(X))
 10847  	b += 2
 10848  
 10849  	xgb.Put16(buf[b:], uint16(Y))
 10850  	b += 2
 10851  
 10852  	b += Char2bListBytes(buf[b:], String)
 10853  
 10854  	return buf
 10855  }
 10856  
 10857  // ImageText8Cookie is a cookie used only for ImageText8 requests.
 10858  type ImageText8Cookie struct {
 10859  	*xgb.Cookie
 10860  }
 10861  
 10862  // ImageText8 sends an unchecked request.
 10863  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10864  func ImageText8(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String string) ImageText8Cookie {
 10865  	cookie := c.NewCookie(false, false)
 10866  	c.NewRequest(imageText8Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
 10867  	return ImageText8Cookie{cookie}
 10868  }
 10869  
 10870  // ImageText8Checked sends a checked request.
 10871  // If an error occurs, it can be retrieved using ImageText8Cookie.Check()
 10872  func ImageText8Checked(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String string) ImageText8Cookie {
 10873  	cookie := c.NewCookie(true, false)
 10874  	c.NewRequest(imageText8Request(c, StringLen, Drawable, Gc, X, Y, String), cookie)
 10875  	return ImageText8Cookie{cookie}
 10876  }
 10877  
 10878  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 10879  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 10880  func (cook ImageText8Cookie) Check() error {
 10881  	return cook.Cookie.Check()
 10882  }
 10883  
 10884  // Write request to wire for ImageText8
 10885  // imageText8Request writes a ImageText8 request to a byte slice.
 10886  func imageText8Request(c *xgb.Conn, StringLen byte, Drawable Drawable, Gc Gcontext, X int16, Y int16, String string) []byte {
 10887  	size := xgb.Pad((16 + xgb.Pad((int(StringLen) * 1))))
 10888  	b := 0
 10889  	buf := make([]byte, size)
 10890  
 10891  	buf[b] = 76 // request opcode
 10892  	b += 1
 10893  
 10894  	buf[b] = StringLen
 10895  	b += 1
 10896  
 10897  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10898  	b += 2
 10899  
 10900  	xgb.Put32(buf[b:], uint32(Drawable))
 10901  	b += 4
 10902  
 10903  	xgb.Put32(buf[b:], uint32(Gc))
 10904  	b += 4
 10905  
 10906  	xgb.Put16(buf[b:], uint16(X))
 10907  	b += 2
 10908  
 10909  	xgb.Put16(buf[b:], uint16(Y))
 10910  	b += 2
 10911  
 10912  	copy(buf[b:], String[:StringLen])
 10913  	b += int(StringLen)
 10914  
 10915  	return buf
 10916  }
 10917  
 10918  // InstallColormapCookie is a cookie used only for InstallColormap requests.
 10919  type InstallColormapCookie struct {
 10920  	*xgb.Cookie
 10921  }
 10922  
 10923  // InstallColormap sends an unchecked request.
 10924  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10925  func InstallColormap(c *xgb.Conn, Cmap Colormap) InstallColormapCookie {
 10926  	cookie := c.NewCookie(false, false)
 10927  	c.NewRequest(installColormapRequest(c, Cmap), cookie)
 10928  	return InstallColormapCookie{cookie}
 10929  }
 10930  
 10931  // InstallColormapChecked sends a checked request.
 10932  // If an error occurs, it can be retrieved using InstallColormapCookie.Check()
 10933  func InstallColormapChecked(c *xgb.Conn, Cmap Colormap) InstallColormapCookie {
 10934  	cookie := c.NewCookie(true, false)
 10935  	c.NewRequest(installColormapRequest(c, Cmap), cookie)
 10936  	return InstallColormapCookie{cookie}
 10937  }
 10938  
 10939  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 10940  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 10941  func (cook InstallColormapCookie) Check() error {
 10942  	return cook.Cookie.Check()
 10943  }
 10944  
 10945  // Write request to wire for InstallColormap
 10946  // installColormapRequest writes a InstallColormap request to a byte slice.
 10947  func installColormapRequest(c *xgb.Conn, Cmap Colormap) []byte {
 10948  	size := 8
 10949  	b := 0
 10950  	buf := make([]byte, size)
 10951  
 10952  	buf[b] = 81 // request opcode
 10953  	b += 1
 10954  
 10955  	b += 1 // padding
 10956  
 10957  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 10958  	b += 2
 10959  
 10960  	xgb.Put32(buf[b:], uint32(Cmap))
 10961  	b += 4
 10962  
 10963  	return buf
 10964  }
 10965  
 10966  // InternAtomCookie is a cookie used only for InternAtom requests.
 10967  type InternAtomCookie struct {
 10968  	*xgb.Cookie
 10969  }
 10970  
 10971  // InternAtom sends a checked request.
 10972  // If an error occurs, it will be returned with the reply by calling InternAtomCookie.Reply()
 10973  func InternAtom(c *xgb.Conn, OnlyIfExists bool, NameLen uint16, Name string) InternAtomCookie {
 10974  	cookie := c.NewCookie(true, true)
 10975  	c.NewRequest(internAtomRequest(c, OnlyIfExists, NameLen, Name), cookie)
 10976  	return InternAtomCookie{cookie}
 10977  }
 10978  
 10979  // InternAtomUnchecked sends an unchecked request.
 10980  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 10981  func InternAtomUnchecked(c *xgb.Conn, OnlyIfExists bool, NameLen uint16, Name string) InternAtomCookie {
 10982  	cookie := c.NewCookie(false, true)
 10983  	c.NewRequest(internAtomRequest(c, OnlyIfExists, NameLen, Name), cookie)
 10984  	return InternAtomCookie{cookie}
 10985  }
 10986  
 10987  // InternAtomReply represents the data returned from a InternAtom request.
 10988  type InternAtomReply struct {
 10989  	Sequence uint16 // sequence number of the request for this reply
 10990  	Length   uint32 // number of bytes in this reply
 10991  	// padding: 1 bytes
 10992  	Atom Atom
 10993  }
 10994  
 10995  // Reply blocks and returns the reply data for a InternAtom request.
 10996  func (cook InternAtomCookie) Reply() (*InternAtomReply, error) {
 10997  	buf, err := cook.Cookie.Reply()
 10998  	if err != nil {
 10999  		return nil, err
 11000  	}
 11001  	if buf == nil {
 11002  		return nil, nil
 11003  	}
 11004  	return internAtomReply(buf), nil
 11005  }
 11006  
 11007  // internAtomReply reads a byte slice into a InternAtomReply value.
 11008  func internAtomReply(buf []byte) *InternAtomReply {
 11009  	v := new(InternAtomReply)
 11010  	b := 1 // skip reply determinant
 11011  
 11012  	b += 1 // padding
 11013  
 11014  	v.Sequence = xgb.Get16(buf[b:])
 11015  	b += 2
 11016  
 11017  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11018  	b += 4
 11019  
 11020  	v.Atom = Atom(xgb.Get32(buf[b:]))
 11021  	b += 4
 11022  
 11023  	return v
 11024  }
 11025  
 11026  // Write request to wire for InternAtom
 11027  // internAtomRequest writes a InternAtom request to a byte slice.
 11028  func internAtomRequest(c *xgb.Conn, OnlyIfExists bool, NameLen uint16, Name string) []byte {
 11029  	size := xgb.Pad((8 + xgb.Pad((int(NameLen) * 1))))
 11030  	b := 0
 11031  	buf := make([]byte, size)
 11032  
 11033  	buf[b] = 16 // request opcode
 11034  	b += 1
 11035  
 11036  	if OnlyIfExists {
 11037  		buf[b] = 1
 11038  	} else {
 11039  		buf[b] = 0
 11040  	}
 11041  	b += 1
 11042  
 11043  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11044  	b += 2
 11045  
 11046  	xgb.Put16(buf[b:], NameLen)
 11047  	b += 2
 11048  
 11049  	b += 2 // padding
 11050  
 11051  	copy(buf[b:], Name[:NameLen])
 11052  	b += int(NameLen)
 11053  
 11054  	return buf
 11055  }
 11056  
 11057  // KillClientCookie is a cookie used only for KillClient requests.
 11058  type KillClientCookie struct {
 11059  	*xgb.Cookie
 11060  }
 11061  
 11062  // KillClient sends an unchecked request.
 11063  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11064  func KillClient(c *xgb.Conn, Resource uint32) KillClientCookie {
 11065  	cookie := c.NewCookie(false, false)
 11066  	c.NewRequest(killClientRequest(c, Resource), cookie)
 11067  	return KillClientCookie{cookie}
 11068  }
 11069  
 11070  // KillClientChecked sends a checked request.
 11071  // If an error occurs, it can be retrieved using KillClientCookie.Check()
 11072  func KillClientChecked(c *xgb.Conn, Resource uint32) KillClientCookie {
 11073  	cookie := c.NewCookie(true, false)
 11074  	c.NewRequest(killClientRequest(c, Resource), cookie)
 11075  	return KillClientCookie{cookie}
 11076  }
 11077  
 11078  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 11079  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 11080  func (cook KillClientCookie) Check() error {
 11081  	return cook.Cookie.Check()
 11082  }
 11083  
 11084  // Write request to wire for KillClient
 11085  // killClientRequest writes a KillClient request to a byte slice.
 11086  func killClientRequest(c *xgb.Conn, Resource uint32) []byte {
 11087  	size := 8
 11088  	b := 0
 11089  	buf := make([]byte, size)
 11090  
 11091  	buf[b] = 113 // request opcode
 11092  	b += 1
 11093  
 11094  	b += 1 // padding
 11095  
 11096  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11097  	b += 2
 11098  
 11099  	xgb.Put32(buf[b:], Resource)
 11100  	b += 4
 11101  
 11102  	return buf
 11103  }
 11104  
 11105  // ListExtensionsCookie is a cookie used only for ListExtensions requests.
 11106  type ListExtensionsCookie struct {
 11107  	*xgb.Cookie
 11108  }
 11109  
 11110  // ListExtensions sends a checked request.
 11111  // If an error occurs, it will be returned with the reply by calling ListExtensionsCookie.Reply()
 11112  func ListExtensions(c *xgb.Conn) ListExtensionsCookie {
 11113  	cookie := c.NewCookie(true, true)
 11114  	c.NewRequest(listExtensionsRequest(c), cookie)
 11115  	return ListExtensionsCookie{cookie}
 11116  }
 11117  
 11118  // ListExtensionsUnchecked sends an unchecked request.
 11119  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11120  func ListExtensionsUnchecked(c *xgb.Conn) ListExtensionsCookie {
 11121  	cookie := c.NewCookie(false, true)
 11122  	c.NewRequest(listExtensionsRequest(c), cookie)
 11123  	return ListExtensionsCookie{cookie}
 11124  }
 11125  
 11126  // ListExtensionsReply represents the data returned from a ListExtensions request.
 11127  type ListExtensionsReply struct {
 11128  	Sequence uint16 // sequence number of the request for this reply
 11129  	Length   uint32 // number of bytes in this reply
 11130  	NamesLen byte
 11131  	// padding: 24 bytes
 11132  	Names []Str // size: StrListSize(Names)
 11133  }
 11134  
 11135  // Reply blocks and returns the reply data for a ListExtensions request.
 11136  func (cook ListExtensionsCookie) Reply() (*ListExtensionsReply, error) {
 11137  	buf, err := cook.Cookie.Reply()
 11138  	if err != nil {
 11139  		return nil, err
 11140  	}
 11141  	if buf == nil {
 11142  		return nil, nil
 11143  	}
 11144  	return listExtensionsReply(buf), nil
 11145  }
 11146  
 11147  // listExtensionsReply reads a byte slice into a ListExtensionsReply value.
 11148  func listExtensionsReply(buf []byte) *ListExtensionsReply {
 11149  	v := new(ListExtensionsReply)
 11150  	b := 1 // skip reply determinant
 11151  
 11152  	v.NamesLen = buf[b]
 11153  	b += 1
 11154  
 11155  	v.Sequence = xgb.Get16(buf[b:])
 11156  	b += 2
 11157  
 11158  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11159  	b += 4
 11160  
 11161  	b += 24 // padding
 11162  
 11163  	v.Names = make([]Str, v.NamesLen)
 11164  	b += StrReadList(buf[b:], v.Names)
 11165  
 11166  	return v
 11167  }
 11168  
 11169  // Write request to wire for ListExtensions
 11170  // listExtensionsRequest writes a ListExtensions request to a byte slice.
 11171  func listExtensionsRequest(c *xgb.Conn) []byte {
 11172  	size := 4
 11173  	b := 0
 11174  	buf := make([]byte, size)
 11175  
 11176  	buf[b] = 99 // request opcode
 11177  	b += 1
 11178  
 11179  	b += 1                             // padding
 11180  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11181  	b += 2
 11182  
 11183  	return buf
 11184  }
 11185  
 11186  // ListFontsCookie is a cookie used only for ListFonts requests.
 11187  type ListFontsCookie struct {
 11188  	*xgb.Cookie
 11189  }
 11190  
 11191  // ListFonts sends a checked request.
 11192  // If an error occurs, it will be returned with the reply by calling ListFontsCookie.Reply()
 11193  func ListFonts(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsCookie {
 11194  	cookie := c.NewCookie(true, true)
 11195  	c.NewRequest(listFontsRequest(c, MaxNames, PatternLen, Pattern), cookie)
 11196  	return ListFontsCookie{cookie}
 11197  }
 11198  
 11199  // ListFontsUnchecked sends an unchecked request.
 11200  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11201  func ListFontsUnchecked(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsCookie {
 11202  	cookie := c.NewCookie(false, true)
 11203  	c.NewRequest(listFontsRequest(c, MaxNames, PatternLen, Pattern), cookie)
 11204  	return ListFontsCookie{cookie}
 11205  }
 11206  
 11207  // ListFontsReply represents the data returned from a ListFonts request.
 11208  type ListFontsReply struct {
 11209  	Sequence uint16 // sequence number of the request for this reply
 11210  	Length   uint32 // number of bytes in this reply
 11211  	// padding: 1 bytes
 11212  	NamesLen uint16
 11213  	// padding: 22 bytes
 11214  	Names []Str // size: StrListSize(Names)
 11215  }
 11216  
 11217  // Reply blocks and returns the reply data for a ListFonts request.
 11218  func (cook ListFontsCookie) Reply() (*ListFontsReply, error) {
 11219  	buf, err := cook.Cookie.Reply()
 11220  	if err != nil {
 11221  		return nil, err
 11222  	}
 11223  	if buf == nil {
 11224  		return nil, nil
 11225  	}
 11226  	return listFontsReply(buf), nil
 11227  }
 11228  
 11229  // listFontsReply reads a byte slice into a ListFontsReply value.
 11230  func listFontsReply(buf []byte) *ListFontsReply {
 11231  	v := new(ListFontsReply)
 11232  	b := 1 // skip reply determinant
 11233  
 11234  	b += 1 // padding
 11235  
 11236  	v.Sequence = xgb.Get16(buf[b:])
 11237  	b += 2
 11238  
 11239  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11240  	b += 4
 11241  
 11242  	v.NamesLen = xgb.Get16(buf[b:])
 11243  	b += 2
 11244  
 11245  	b += 22 // padding
 11246  
 11247  	v.Names = make([]Str, v.NamesLen)
 11248  	b += StrReadList(buf[b:], v.Names)
 11249  
 11250  	return v
 11251  }
 11252  
 11253  // Write request to wire for ListFonts
 11254  // listFontsRequest writes a ListFonts request to a byte slice.
 11255  func listFontsRequest(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) []byte {
 11256  	size := xgb.Pad((8 + xgb.Pad((int(PatternLen) * 1))))
 11257  	b := 0
 11258  	buf := make([]byte, size)
 11259  
 11260  	buf[b] = 49 // request opcode
 11261  	b += 1
 11262  
 11263  	b += 1 // padding
 11264  
 11265  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11266  	b += 2
 11267  
 11268  	xgb.Put16(buf[b:], MaxNames)
 11269  	b += 2
 11270  
 11271  	xgb.Put16(buf[b:], PatternLen)
 11272  	b += 2
 11273  
 11274  	copy(buf[b:], Pattern[:PatternLen])
 11275  	b += int(PatternLen)
 11276  
 11277  	return buf
 11278  }
 11279  
 11280  // ListFontsWithInfoCookie is a cookie used only for ListFontsWithInfo requests.
 11281  type ListFontsWithInfoCookie struct {
 11282  	*xgb.Cookie
 11283  }
 11284  
 11285  // ListFontsWithInfo sends a checked request.
 11286  // If an error occurs, it will be returned with the reply by calling ListFontsWithInfoCookie.Reply()
 11287  func ListFontsWithInfo(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsWithInfoCookie {
 11288  	cookie := c.NewCookie(true, true)
 11289  	c.NewRequest(listFontsWithInfoRequest(c, MaxNames, PatternLen, Pattern), cookie)
 11290  	return ListFontsWithInfoCookie{cookie}
 11291  }
 11292  
 11293  // ListFontsWithInfoUnchecked sends an unchecked request.
 11294  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11295  func ListFontsWithInfoUnchecked(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) ListFontsWithInfoCookie {
 11296  	cookie := c.NewCookie(false, true)
 11297  	c.NewRequest(listFontsWithInfoRequest(c, MaxNames, PatternLen, Pattern), cookie)
 11298  	return ListFontsWithInfoCookie{cookie}
 11299  }
 11300  
 11301  // ListFontsWithInfoReply represents the data returned from a ListFontsWithInfo request.
 11302  type ListFontsWithInfoReply struct {
 11303  	Sequence  uint16 // sequence number of the request for this reply
 11304  	Length    uint32 // number of bytes in this reply
 11305  	NameLen   byte
 11306  	MinBounds Charinfo
 11307  	// padding: 4 bytes
 11308  	MaxBounds Charinfo
 11309  	// padding: 4 bytes
 11310  	MinCharOrByte2 uint16
 11311  	MaxCharOrByte2 uint16
 11312  	DefaultChar    uint16
 11313  	PropertiesLen  uint16
 11314  	DrawDirection  byte
 11315  	MinByte1       byte
 11316  	MaxByte1       byte
 11317  	AllCharsExist  bool
 11318  	FontAscent     int16
 11319  	FontDescent    int16
 11320  	RepliesHint    uint32
 11321  	Properties     []Fontprop // size: xgb.Pad((int(PropertiesLen) * 8))
 11322  	Name           string     // size: xgb.Pad((int(NameLen) * 1))
 11323  }
 11324  
 11325  // Reply blocks and returns the reply data for a ListFontsWithInfo request.
 11326  func (cook ListFontsWithInfoCookie) Reply() (*ListFontsWithInfoReply, error) {
 11327  	buf, err := cook.Cookie.Reply()
 11328  	if err != nil {
 11329  		return nil, err
 11330  	}
 11331  	if buf == nil {
 11332  		return nil, nil
 11333  	}
 11334  	return listFontsWithInfoReply(buf), nil
 11335  }
 11336  
 11337  // listFontsWithInfoReply reads a byte slice into a ListFontsWithInfoReply value.
 11338  func listFontsWithInfoReply(buf []byte) *ListFontsWithInfoReply {
 11339  	v := new(ListFontsWithInfoReply)
 11340  	b := 1 // skip reply determinant
 11341  
 11342  	v.NameLen = buf[b]
 11343  	b += 1
 11344  
 11345  	v.Sequence = xgb.Get16(buf[b:])
 11346  	b += 2
 11347  
 11348  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11349  	b += 4
 11350  
 11351  	v.MinBounds = Charinfo{}
 11352  	b += CharinfoRead(buf[b:], &v.MinBounds)
 11353  
 11354  	b += 4 // padding
 11355  
 11356  	v.MaxBounds = Charinfo{}
 11357  	b += CharinfoRead(buf[b:], &v.MaxBounds)
 11358  
 11359  	b += 4 // padding
 11360  
 11361  	v.MinCharOrByte2 = xgb.Get16(buf[b:])
 11362  	b += 2
 11363  
 11364  	v.MaxCharOrByte2 = xgb.Get16(buf[b:])
 11365  	b += 2
 11366  
 11367  	v.DefaultChar = xgb.Get16(buf[b:])
 11368  	b += 2
 11369  
 11370  	v.PropertiesLen = xgb.Get16(buf[b:])
 11371  	b += 2
 11372  
 11373  	v.DrawDirection = buf[b]
 11374  	b += 1
 11375  
 11376  	v.MinByte1 = buf[b]
 11377  	b += 1
 11378  
 11379  	v.MaxByte1 = buf[b]
 11380  	b += 1
 11381  
 11382  	if buf[b] == 1 {
 11383  		v.AllCharsExist = true
 11384  	} else {
 11385  		v.AllCharsExist = false
 11386  	}
 11387  	b += 1
 11388  
 11389  	v.FontAscent = int16(xgb.Get16(buf[b:]))
 11390  	b += 2
 11391  
 11392  	v.FontDescent = int16(xgb.Get16(buf[b:]))
 11393  	b += 2
 11394  
 11395  	v.RepliesHint = xgb.Get32(buf[b:])
 11396  	b += 4
 11397  
 11398  	v.Properties = make([]Fontprop, v.PropertiesLen)
 11399  	b += FontpropReadList(buf[b:], v.Properties)
 11400  
 11401  	{
 11402  		byteString := make([]byte, v.NameLen)
 11403  		copy(byteString[:v.NameLen], buf[b:])
 11404  		v.Name = string(byteString)
 11405  		b += int(v.NameLen)
 11406  	}
 11407  
 11408  	return v
 11409  }
 11410  
 11411  // Write request to wire for ListFontsWithInfo
 11412  // listFontsWithInfoRequest writes a ListFontsWithInfo request to a byte slice.
 11413  func listFontsWithInfoRequest(c *xgb.Conn, MaxNames uint16, PatternLen uint16, Pattern string) []byte {
 11414  	size := xgb.Pad((8 + xgb.Pad((int(PatternLen) * 1))))
 11415  	b := 0
 11416  	buf := make([]byte, size)
 11417  
 11418  	buf[b] = 50 // request opcode
 11419  	b += 1
 11420  
 11421  	b += 1 // padding
 11422  
 11423  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11424  	b += 2
 11425  
 11426  	xgb.Put16(buf[b:], MaxNames)
 11427  	b += 2
 11428  
 11429  	xgb.Put16(buf[b:], PatternLen)
 11430  	b += 2
 11431  
 11432  	copy(buf[b:], Pattern[:PatternLen])
 11433  	b += int(PatternLen)
 11434  
 11435  	return buf
 11436  }
 11437  
 11438  // ListHostsCookie is a cookie used only for ListHosts requests.
 11439  type ListHostsCookie struct {
 11440  	*xgb.Cookie
 11441  }
 11442  
 11443  // ListHosts sends a checked request.
 11444  // If an error occurs, it will be returned with the reply by calling ListHostsCookie.Reply()
 11445  func ListHosts(c *xgb.Conn) ListHostsCookie {
 11446  	cookie := c.NewCookie(true, true)
 11447  	c.NewRequest(listHostsRequest(c), cookie)
 11448  	return ListHostsCookie{cookie}
 11449  }
 11450  
 11451  // ListHostsUnchecked sends an unchecked request.
 11452  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11453  func ListHostsUnchecked(c *xgb.Conn) ListHostsCookie {
 11454  	cookie := c.NewCookie(false, true)
 11455  	c.NewRequest(listHostsRequest(c), cookie)
 11456  	return ListHostsCookie{cookie}
 11457  }
 11458  
 11459  // ListHostsReply represents the data returned from a ListHosts request.
 11460  type ListHostsReply struct {
 11461  	Sequence uint16 // sequence number of the request for this reply
 11462  	Length   uint32 // number of bytes in this reply
 11463  	Mode     byte
 11464  	HostsLen uint16
 11465  	// padding: 22 bytes
 11466  	Hosts []Host // size: HostListSize(Hosts)
 11467  }
 11468  
 11469  // Reply blocks and returns the reply data for a ListHosts request.
 11470  func (cook ListHostsCookie) Reply() (*ListHostsReply, error) {
 11471  	buf, err := cook.Cookie.Reply()
 11472  	if err != nil {
 11473  		return nil, err
 11474  	}
 11475  	if buf == nil {
 11476  		return nil, nil
 11477  	}
 11478  	return listHostsReply(buf), nil
 11479  }
 11480  
 11481  // listHostsReply reads a byte slice into a ListHostsReply value.
 11482  func listHostsReply(buf []byte) *ListHostsReply {
 11483  	v := new(ListHostsReply)
 11484  	b := 1 // skip reply determinant
 11485  
 11486  	v.Mode = buf[b]
 11487  	b += 1
 11488  
 11489  	v.Sequence = xgb.Get16(buf[b:])
 11490  	b += 2
 11491  
 11492  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11493  	b += 4
 11494  
 11495  	v.HostsLen = xgb.Get16(buf[b:])
 11496  	b += 2
 11497  
 11498  	b += 22 // padding
 11499  
 11500  	v.Hosts = make([]Host, v.HostsLen)
 11501  	b += HostReadList(buf[b:], v.Hosts)
 11502  
 11503  	return v
 11504  }
 11505  
 11506  // Write request to wire for ListHosts
 11507  // listHostsRequest writes a ListHosts request to a byte slice.
 11508  func listHostsRequest(c *xgb.Conn) []byte {
 11509  	size := 4
 11510  	b := 0
 11511  	buf := make([]byte, size)
 11512  
 11513  	buf[b] = 110 // request opcode
 11514  	b += 1
 11515  
 11516  	b += 1                             // padding
 11517  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11518  	b += 2
 11519  
 11520  	return buf
 11521  }
 11522  
 11523  // ListInstalledColormapsCookie is a cookie used only for ListInstalledColormaps requests.
 11524  type ListInstalledColormapsCookie struct {
 11525  	*xgb.Cookie
 11526  }
 11527  
 11528  // ListInstalledColormaps sends a checked request.
 11529  // If an error occurs, it will be returned with the reply by calling ListInstalledColormapsCookie.Reply()
 11530  func ListInstalledColormaps(c *xgb.Conn, Window Window) ListInstalledColormapsCookie {
 11531  	cookie := c.NewCookie(true, true)
 11532  	c.NewRequest(listInstalledColormapsRequest(c, Window), cookie)
 11533  	return ListInstalledColormapsCookie{cookie}
 11534  }
 11535  
 11536  // ListInstalledColormapsUnchecked sends an unchecked request.
 11537  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11538  func ListInstalledColormapsUnchecked(c *xgb.Conn, Window Window) ListInstalledColormapsCookie {
 11539  	cookie := c.NewCookie(false, true)
 11540  	c.NewRequest(listInstalledColormapsRequest(c, Window), cookie)
 11541  	return ListInstalledColormapsCookie{cookie}
 11542  }
 11543  
 11544  // ListInstalledColormapsReply represents the data returned from a ListInstalledColormaps request.
 11545  type ListInstalledColormapsReply struct {
 11546  	Sequence uint16 // sequence number of the request for this reply
 11547  	Length   uint32 // number of bytes in this reply
 11548  	// padding: 1 bytes
 11549  	CmapsLen uint16
 11550  	// padding: 22 bytes
 11551  	Cmaps []Colormap // size: xgb.Pad((int(CmapsLen) * 4))
 11552  }
 11553  
 11554  // Reply blocks and returns the reply data for a ListInstalledColormaps request.
 11555  func (cook ListInstalledColormapsCookie) Reply() (*ListInstalledColormapsReply, error) {
 11556  	buf, err := cook.Cookie.Reply()
 11557  	if err != nil {
 11558  		return nil, err
 11559  	}
 11560  	if buf == nil {
 11561  		return nil, nil
 11562  	}
 11563  	return listInstalledColormapsReply(buf), nil
 11564  }
 11565  
 11566  // listInstalledColormapsReply reads a byte slice into a ListInstalledColormapsReply value.
 11567  func listInstalledColormapsReply(buf []byte) *ListInstalledColormapsReply {
 11568  	v := new(ListInstalledColormapsReply)
 11569  	b := 1 // skip reply determinant
 11570  
 11571  	b += 1 // padding
 11572  
 11573  	v.Sequence = xgb.Get16(buf[b:])
 11574  	b += 2
 11575  
 11576  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11577  	b += 4
 11578  
 11579  	v.CmapsLen = xgb.Get16(buf[b:])
 11580  	b += 2
 11581  
 11582  	b += 22 // padding
 11583  
 11584  	v.Cmaps = make([]Colormap, v.CmapsLen)
 11585  	for i := 0; i < int(v.CmapsLen); i++ {
 11586  		v.Cmaps[i] = Colormap(xgb.Get32(buf[b:]))
 11587  		b += 4
 11588  	}
 11589  
 11590  	return v
 11591  }
 11592  
 11593  // Write request to wire for ListInstalledColormaps
 11594  // listInstalledColormapsRequest writes a ListInstalledColormaps request to a byte slice.
 11595  func listInstalledColormapsRequest(c *xgb.Conn, Window Window) []byte {
 11596  	size := 8
 11597  	b := 0
 11598  	buf := make([]byte, size)
 11599  
 11600  	buf[b] = 83 // request opcode
 11601  	b += 1
 11602  
 11603  	b += 1 // padding
 11604  
 11605  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11606  	b += 2
 11607  
 11608  	xgb.Put32(buf[b:], uint32(Window))
 11609  	b += 4
 11610  
 11611  	return buf
 11612  }
 11613  
 11614  // ListPropertiesCookie is a cookie used only for ListProperties requests.
 11615  type ListPropertiesCookie struct {
 11616  	*xgb.Cookie
 11617  }
 11618  
 11619  // ListProperties sends a checked request.
 11620  // If an error occurs, it will be returned with the reply by calling ListPropertiesCookie.Reply()
 11621  func ListProperties(c *xgb.Conn, Window Window) ListPropertiesCookie {
 11622  	cookie := c.NewCookie(true, true)
 11623  	c.NewRequest(listPropertiesRequest(c, Window), cookie)
 11624  	return ListPropertiesCookie{cookie}
 11625  }
 11626  
 11627  // ListPropertiesUnchecked sends an unchecked request.
 11628  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11629  func ListPropertiesUnchecked(c *xgb.Conn, Window Window) ListPropertiesCookie {
 11630  	cookie := c.NewCookie(false, true)
 11631  	c.NewRequest(listPropertiesRequest(c, Window), cookie)
 11632  	return ListPropertiesCookie{cookie}
 11633  }
 11634  
 11635  // ListPropertiesReply represents the data returned from a ListProperties request.
 11636  type ListPropertiesReply struct {
 11637  	Sequence uint16 // sequence number of the request for this reply
 11638  	Length   uint32 // number of bytes in this reply
 11639  	// padding: 1 bytes
 11640  	AtomsLen uint16
 11641  	// padding: 22 bytes
 11642  	Atoms []Atom // size: xgb.Pad((int(AtomsLen) * 4))
 11643  }
 11644  
 11645  // Reply blocks and returns the reply data for a ListProperties request.
 11646  func (cook ListPropertiesCookie) Reply() (*ListPropertiesReply, error) {
 11647  	buf, err := cook.Cookie.Reply()
 11648  	if err != nil {
 11649  		return nil, err
 11650  	}
 11651  	if buf == nil {
 11652  		return nil, nil
 11653  	}
 11654  	return listPropertiesReply(buf), nil
 11655  }
 11656  
 11657  // listPropertiesReply reads a byte slice into a ListPropertiesReply value.
 11658  func listPropertiesReply(buf []byte) *ListPropertiesReply {
 11659  	v := new(ListPropertiesReply)
 11660  	b := 1 // skip reply determinant
 11661  
 11662  	b += 1 // padding
 11663  
 11664  	v.Sequence = xgb.Get16(buf[b:])
 11665  	b += 2
 11666  
 11667  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11668  	b += 4
 11669  
 11670  	v.AtomsLen = xgb.Get16(buf[b:])
 11671  	b += 2
 11672  
 11673  	b += 22 // padding
 11674  
 11675  	v.Atoms = make([]Atom, v.AtomsLen)
 11676  	for i := 0; i < int(v.AtomsLen); i++ {
 11677  		v.Atoms[i] = Atom(xgb.Get32(buf[b:]))
 11678  		b += 4
 11679  	}
 11680  
 11681  	return v
 11682  }
 11683  
 11684  // Write request to wire for ListProperties
 11685  // listPropertiesRequest writes a ListProperties request to a byte slice.
 11686  func listPropertiesRequest(c *xgb.Conn, Window Window) []byte {
 11687  	size := 8
 11688  	b := 0
 11689  	buf := make([]byte, size)
 11690  
 11691  	buf[b] = 21 // request opcode
 11692  	b += 1
 11693  
 11694  	b += 1 // padding
 11695  
 11696  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11697  	b += 2
 11698  
 11699  	xgb.Put32(buf[b:], uint32(Window))
 11700  	b += 4
 11701  
 11702  	return buf
 11703  }
 11704  
 11705  // LookupColorCookie is a cookie used only for LookupColor requests.
 11706  type LookupColorCookie struct {
 11707  	*xgb.Cookie
 11708  }
 11709  
 11710  // LookupColor sends a checked request.
 11711  // If an error occurs, it will be returned with the reply by calling LookupColorCookie.Reply()
 11712  func LookupColor(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) LookupColorCookie {
 11713  	cookie := c.NewCookie(true, true)
 11714  	c.NewRequest(lookupColorRequest(c, Cmap, NameLen, Name), cookie)
 11715  	return LookupColorCookie{cookie}
 11716  }
 11717  
 11718  // LookupColorUnchecked sends an unchecked request.
 11719  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11720  func LookupColorUnchecked(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) LookupColorCookie {
 11721  	cookie := c.NewCookie(false, true)
 11722  	c.NewRequest(lookupColorRequest(c, Cmap, NameLen, Name), cookie)
 11723  	return LookupColorCookie{cookie}
 11724  }
 11725  
 11726  // LookupColorReply represents the data returned from a LookupColor request.
 11727  type LookupColorReply struct {
 11728  	Sequence uint16 // sequence number of the request for this reply
 11729  	Length   uint32 // number of bytes in this reply
 11730  	// padding: 1 bytes
 11731  	ExactRed    uint16
 11732  	ExactGreen  uint16
 11733  	ExactBlue   uint16
 11734  	VisualRed   uint16
 11735  	VisualGreen uint16
 11736  	VisualBlue  uint16
 11737  }
 11738  
 11739  // Reply blocks and returns the reply data for a LookupColor request.
 11740  func (cook LookupColorCookie) Reply() (*LookupColorReply, error) {
 11741  	buf, err := cook.Cookie.Reply()
 11742  	if err != nil {
 11743  		return nil, err
 11744  	}
 11745  	if buf == nil {
 11746  		return nil, nil
 11747  	}
 11748  	return lookupColorReply(buf), nil
 11749  }
 11750  
 11751  // lookupColorReply reads a byte slice into a LookupColorReply value.
 11752  func lookupColorReply(buf []byte) *LookupColorReply {
 11753  	v := new(LookupColorReply)
 11754  	b := 1 // skip reply determinant
 11755  
 11756  	b += 1 // padding
 11757  
 11758  	v.Sequence = xgb.Get16(buf[b:])
 11759  	b += 2
 11760  
 11761  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 11762  	b += 4
 11763  
 11764  	v.ExactRed = xgb.Get16(buf[b:])
 11765  	b += 2
 11766  
 11767  	v.ExactGreen = xgb.Get16(buf[b:])
 11768  	b += 2
 11769  
 11770  	v.ExactBlue = xgb.Get16(buf[b:])
 11771  	b += 2
 11772  
 11773  	v.VisualRed = xgb.Get16(buf[b:])
 11774  	b += 2
 11775  
 11776  	v.VisualGreen = xgb.Get16(buf[b:])
 11777  	b += 2
 11778  
 11779  	v.VisualBlue = xgb.Get16(buf[b:])
 11780  	b += 2
 11781  
 11782  	return v
 11783  }
 11784  
 11785  // Write request to wire for LookupColor
 11786  // lookupColorRequest writes a LookupColor request to a byte slice.
 11787  func lookupColorRequest(c *xgb.Conn, Cmap Colormap, NameLen uint16, Name string) []byte {
 11788  	size := xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
 11789  	b := 0
 11790  	buf := make([]byte, size)
 11791  
 11792  	buf[b] = 92 // request opcode
 11793  	b += 1
 11794  
 11795  	b += 1 // padding
 11796  
 11797  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11798  	b += 2
 11799  
 11800  	xgb.Put32(buf[b:], uint32(Cmap))
 11801  	b += 4
 11802  
 11803  	xgb.Put16(buf[b:], NameLen)
 11804  	b += 2
 11805  
 11806  	b += 2 // padding
 11807  
 11808  	copy(buf[b:], Name[:NameLen])
 11809  	b += int(NameLen)
 11810  
 11811  	return buf
 11812  }
 11813  
 11814  // MapSubwindowsCookie is a cookie used only for MapSubwindows requests.
 11815  type MapSubwindowsCookie struct {
 11816  	*xgb.Cookie
 11817  }
 11818  
 11819  // MapSubwindows sends an unchecked request.
 11820  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11821  func MapSubwindows(c *xgb.Conn, Window Window) MapSubwindowsCookie {
 11822  	cookie := c.NewCookie(false, false)
 11823  	c.NewRequest(mapSubwindowsRequest(c, Window), cookie)
 11824  	return MapSubwindowsCookie{cookie}
 11825  }
 11826  
 11827  // MapSubwindowsChecked sends a checked request.
 11828  // If an error occurs, it can be retrieved using MapSubwindowsCookie.Check()
 11829  func MapSubwindowsChecked(c *xgb.Conn, Window Window) MapSubwindowsCookie {
 11830  	cookie := c.NewCookie(true, false)
 11831  	c.NewRequest(mapSubwindowsRequest(c, Window), cookie)
 11832  	return MapSubwindowsCookie{cookie}
 11833  }
 11834  
 11835  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 11836  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 11837  func (cook MapSubwindowsCookie) Check() error {
 11838  	return cook.Cookie.Check()
 11839  }
 11840  
 11841  // Write request to wire for MapSubwindows
 11842  // mapSubwindowsRequest writes a MapSubwindows request to a byte slice.
 11843  func mapSubwindowsRequest(c *xgb.Conn, Window Window) []byte {
 11844  	size := 8
 11845  	b := 0
 11846  	buf := make([]byte, size)
 11847  
 11848  	buf[b] = 9 // request opcode
 11849  	b += 1
 11850  
 11851  	b += 1 // padding
 11852  
 11853  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11854  	b += 2
 11855  
 11856  	xgb.Put32(buf[b:], uint32(Window))
 11857  	b += 4
 11858  
 11859  	return buf
 11860  }
 11861  
 11862  // MapWindowCookie is a cookie used only for MapWindow requests.
 11863  type MapWindowCookie struct {
 11864  	*xgb.Cookie
 11865  }
 11866  
 11867  // MapWindow sends an unchecked request.
 11868  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11869  func MapWindow(c *xgb.Conn, Window Window) MapWindowCookie {
 11870  	cookie := c.NewCookie(false, false)
 11871  	c.NewRequest(mapWindowRequest(c, Window), cookie)
 11872  	return MapWindowCookie{cookie}
 11873  }
 11874  
 11875  // MapWindowChecked sends a checked request.
 11876  // If an error occurs, it can be retrieved using MapWindowCookie.Check()
 11877  func MapWindowChecked(c *xgb.Conn, Window Window) MapWindowCookie {
 11878  	cookie := c.NewCookie(true, false)
 11879  	c.NewRequest(mapWindowRequest(c, Window), cookie)
 11880  	return MapWindowCookie{cookie}
 11881  }
 11882  
 11883  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 11884  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 11885  func (cook MapWindowCookie) Check() error {
 11886  	return cook.Cookie.Check()
 11887  }
 11888  
 11889  // Write request to wire for MapWindow
 11890  // mapWindowRequest writes a MapWindow request to a byte slice.
 11891  func mapWindowRequest(c *xgb.Conn, Window Window) []byte {
 11892  	size := 8
 11893  	b := 0
 11894  	buf := make([]byte, size)
 11895  
 11896  	buf[b] = 8 // request opcode
 11897  	b += 1
 11898  
 11899  	b += 1 // padding
 11900  
 11901  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11902  	b += 2
 11903  
 11904  	xgb.Put32(buf[b:], uint32(Window))
 11905  	b += 4
 11906  
 11907  	return buf
 11908  }
 11909  
 11910  // NoOperationCookie is a cookie used only for NoOperation requests.
 11911  type NoOperationCookie struct {
 11912  	*xgb.Cookie
 11913  }
 11914  
 11915  // NoOperation sends an unchecked request.
 11916  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11917  func NoOperation(c *xgb.Conn) NoOperationCookie {
 11918  	cookie := c.NewCookie(false, false)
 11919  	c.NewRequest(noOperationRequest(c), cookie)
 11920  	return NoOperationCookie{cookie}
 11921  }
 11922  
 11923  // NoOperationChecked sends a checked request.
 11924  // If an error occurs, it can be retrieved using NoOperationCookie.Check()
 11925  func NoOperationChecked(c *xgb.Conn) NoOperationCookie {
 11926  	cookie := c.NewCookie(true, false)
 11927  	c.NewRequest(noOperationRequest(c), cookie)
 11928  	return NoOperationCookie{cookie}
 11929  }
 11930  
 11931  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 11932  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 11933  func (cook NoOperationCookie) Check() error {
 11934  	return cook.Cookie.Check()
 11935  }
 11936  
 11937  // Write request to wire for NoOperation
 11938  // noOperationRequest writes a NoOperation request to a byte slice.
 11939  func noOperationRequest(c *xgb.Conn) []byte {
 11940  	size := 4
 11941  	b := 0
 11942  	buf := make([]byte, size)
 11943  
 11944  	buf[b] = 127 // request opcode
 11945  	b += 1
 11946  
 11947  	b += 1                             // padding
 11948  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11949  	b += 2
 11950  
 11951  	return buf
 11952  }
 11953  
 11954  // OpenFontCookie is a cookie used only for OpenFont requests.
 11955  type OpenFontCookie struct {
 11956  	*xgb.Cookie
 11957  }
 11958  
 11959  // OpenFont sends an unchecked request.
 11960  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 11961  func OpenFont(c *xgb.Conn, Fid Font, NameLen uint16, Name string) OpenFontCookie {
 11962  	cookie := c.NewCookie(false, false)
 11963  	c.NewRequest(openFontRequest(c, Fid, NameLen, Name), cookie)
 11964  	return OpenFontCookie{cookie}
 11965  }
 11966  
 11967  // OpenFontChecked sends a checked request.
 11968  // If an error occurs, it can be retrieved using OpenFontCookie.Check()
 11969  func OpenFontChecked(c *xgb.Conn, Fid Font, NameLen uint16, Name string) OpenFontCookie {
 11970  	cookie := c.NewCookie(true, false)
 11971  	c.NewRequest(openFontRequest(c, Fid, NameLen, Name), cookie)
 11972  	return OpenFontCookie{cookie}
 11973  }
 11974  
 11975  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 11976  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 11977  func (cook OpenFontCookie) Check() error {
 11978  	return cook.Cookie.Check()
 11979  }
 11980  
 11981  // Write request to wire for OpenFont
 11982  // openFontRequest writes a OpenFont request to a byte slice.
 11983  func openFontRequest(c *xgb.Conn, Fid Font, NameLen uint16, Name string) []byte {
 11984  	size := xgb.Pad((12 + xgb.Pad((int(NameLen) * 1))))
 11985  	b := 0
 11986  	buf := make([]byte, size)
 11987  
 11988  	buf[b] = 45 // request opcode
 11989  	b += 1
 11990  
 11991  	b += 1 // padding
 11992  
 11993  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 11994  	b += 2
 11995  
 11996  	xgb.Put32(buf[b:], uint32(Fid))
 11997  	b += 4
 11998  
 11999  	xgb.Put16(buf[b:], NameLen)
 12000  	b += 2
 12001  
 12002  	b += 2 // padding
 12003  
 12004  	copy(buf[b:], Name[:NameLen])
 12005  	b += int(NameLen)
 12006  
 12007  	return buf
 12008  }
 12009  
 12010  // PolyArcCookie is a cookie used only for PolyArc requests.
 12011  type PolyArcCookie struct {
 12012  	*xgb.Cookie
 12013  }
 12014  
 12015  // PolyArc sends an unchecked request.
 12016  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12017  func PolyArc(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyArcCookie {
 12018  	cookie := c.NewCookie(false, false)
 12019  	c.NewRequest(polyArcRequest(c, Drawable, Gc, Arcs), cookie)
 12020  	return PolyArcCookie{cookie}
 12021  }
 12022  
 12023  // PolyArcChecked sends a checked request.
 12024  // If an error occurs, it can be retrieved using PolyArcCookie.Check()
 12025  func PolyArcChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyArcCookie {
 12026  	cookie := c.NewCookie(true, false)
 12027  	c.NewRequest(polyArcRequest(c, Drawable, Gc, Arcs), cookie)
 12028  	return PolyArcCookie{cookie}
 12029  }
 12030  
 12031  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12032  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12033  func (cook PolyArcCookie) Check() error {
 12034  	return cook.Cookie.Check()
 12035  }
 12036  
 12037  // Write request to wire for PolyArc
 12038  // polyArcRequest writes a PolyArc request to a byte slice.
 12039  func polyArcRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) []byte {
 12040  	size := xgb.Pad((12 + xgb.Pad((len(Arcs) * 12))))
 12041  	b := 0
 12042  	buf := make([]byte, size)
 12043  
 12044  	buf[b] = 68 // request opcode
 12045  	b += 1
 12046  
 12047  	b += 1 // padding
 12048  
 12049  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12050  	b += 2
 12051  
 12052  	xgb.Put32(buf[b:], uint32(Drawable))
 12053  	b += 4
 12054  
 12055  	xgb.Put32(buf[b:], uint32(Gc))
 12056  	b += 4
 12057  
 12058  	b += ArcListBytes(buf[b:], Arcs)
 12059  
 12060  	return buf
 12061  }
 12062  
 12063  // PolyFillArcCookie is a cookie used only for PolyFillArc requests.
 12064  type PolyFillArcCookie struct {
 12065  	*xgb.Cookie
 12066  }
 12067  
 12068  // PolyFillArc sends an unchecked request.
 12069  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12070  func PolyFillArc(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyFillArcCookie {
 12071  	cookie := c.NewCookie(false, false)
 12072  	c.NewRequest(polyFillArcRequest(c, Drawable, Gc, Arcs), cookie)
 12073  	return PolyFillArcCookie{cookie}
 12074  }
 12075  
 12076  // PolyFillArcChecked sends a checked request.
 12077  // If an error occurs, it can be retrieved using PolyFillArcCookie.Check()
 12078  func PolyFillArcChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) PolyFillArcCookie {
 12079  	cookie := c.NewCookie(true, false)
 12080  	c.NewRequest(polyFillArcRequest(c, Drawable, Gc, Arcs), cookie)
 12081  	return PolyFillArcCookie{cookie}
 12082  }
 12083  
 12084  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12085  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12086  func (cook PolyFillArcCookie) Check() error {
 12087  	return cook.Cookie.Check()
 12088  }
 12089  
 12090  // Write request to wire for PolyFillArc
 12091  // polyFillArcRequest writes a PolyFillArc request to a byte slice.
 12092  func polyFillArcRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Arcs []Arc) []byte {
 12093  	size := xgb.Pad((12 + xgb.Pad((len(Arcs) * 12))))
 12094  	b := 0
 12095  	buf := make([]byte, size)
 12096  
 12097  	buf[b] = 71 // request opcode
 12098  	b += 1
 12099  
 12100  	b += 1 // padding
 12101  
 12102  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12103  	b += 2
 12104  
 12105  	xgb.Put32(buf[b:], uint32(Drawable))
 12106  	b += 4
 12107  
 12108  	xgb.Put32(buf[b:], uint32(Gc))
 12109  	b += 4
 12110  
 12111  	b += ArcListBytes(buf[b:], Arcs)
 12112  
 12113  	return buf
 12114  }
 12115  
 12116  // PolyFillRectangleCookie is a cookie used only for PolyFillRectangle requests.
 12117  type PolyFillRectangleCookie struct {
 12118  	*xgb.Cookie
 12119  }
 12120  
 12121  // PolyFillRectangle sends an unchecked request.
 12122  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12123  func PolyFillRectangle(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyFillRectangleCookie {
 12124  	cookie := c.NewCookie(false, false)
 12125  	c.NewRequest(polyFillRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
 12126  	return PolyFillRectangleCookie{cookie}
 12127  }
 12128  
 12129  // PolyFillRectangleChecked sends a checked request.
 12130  // If an error occurs, it can be retrieved using PolyFillRectangleCookie.Check()
 12131  func PolyFillRectangleChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyFillRectangleCookie {
 12132  	cookie := c.NewCookie(true, false)
 12133  	c.NewRequest(polyFillRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
 12134  	return PolyFillRectangleCookie{cookie}
 12135  }
 12136  
 12137  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12138  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12139  func (cook PolyFillRectangleCookie) Check() error {
 12140  	return cook.Cookie.Check()
 12141  }
 12142  
 12143  // Write request to wire for PolyFillRectangle
 12144  // polyFillRectangleRequest writes a PolyFillRectangle request to a byte slice.
 12145  func polyFillRectangleRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) []byte {
 12146  	size := xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
 12147  	b := 0
 12148  	buf := make([]byte, size)
 12149  
 12150  	buf[b] = 70 // request opcode
 12151  	b += 1
 12152  
 12153  	b += 1 // padding
 12154  
 12155  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12156  	b += 2
 12157  
 12158  	xgb.Put32(buf[b:], uint32(Drawable))
 12159  	b += 4
 12160  
 12161  	xgb.Put32(buf[b:], uint32(Gc))
 12162  	b += 4
 12163  
 12164  	b += RectangleListBytes(buf[b:], Rectangles)
 12165  
 12166  	return buf
 12167  }
 12168  
 12169  // PolyLineCookie is a cookie used only for PolyLine requests.
 12170  type PolyLineCookie struct {
 12171  	*xgb.Cookie
 12172  }
 12173  
 12174  // PolyLine sends an unchecked request.
 12175  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12176  func PolyLine(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyLineCookie {
 12177  	cookie := c.NewCookie(false, false)
 12178  	c.NewRequest(polyLineRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
 12179  	return PolyLineCookie{cookie}
 12180  }
 12181  
 12182  // PolyLineChecked sends a checked request.
 12183  // If an error occurs, it can be retrieved using PolyLineCookie.Check()
 12184  func PolyLineChecked(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyLineCookie {
 12185  	cookie := c.NewCookie(true, false)
 12186  	c.NewRequest(polyLineRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
 12187  	return PolyLineCookie{cookie}
 12188  }
 12189  
 12190  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12191  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12192  func (cook PolyLineCookie) Check() error {
 12193  	return cook.Cookie.Check()
 12194  }
 12195  
 12196  // Write request to wire for PolyLine
 12197  // polyLineRequest writes a PolyLine request to a byte slice.
 12198  func polyLineRequest(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) []byte {
 12199  	size := xgb.Pad((12 + xgb.Pad((len(Points) * 4))))
 12200  	b := 0
 12201  	buf := make([]byte, size)
 12202  
 12203  	buf[b] = 65 // request opcode
 12204  	b += 1
 12205  
 12206  	buf[b] = CoordinateMode
 12207  	b += 1
 12208  
 12209  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12210  	b += 2
 12211  
 12212  	xgb.Put32(buf[b:], uint32(Drawable))
 12213  	b += 4
 12214  
 12215  	xgb.Put32(buf[b:], uint32(Gc))
 12216  	b += 4
 12217  
 12218  	b += PointListBytes(buf[b:], Points)
 12219  
 12220  	return buf
 12221  }
 12222  
 12223  // PolyPointCookie is a cookie used only for PolyPoint requests.
 12224  type PolyPointCookie struct {
 12225  	*xgb.Cookie
 12226  }
 12227  
 12228  // PolyPoint sends an unchecked request.
 12229  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12230  func PolyPoint(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyPointCookie {
 12231  	cookie := c.NewCookie(false, false)
 12232  	c.NewRequest(polyPointRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
 12233  	return PolyPointCookie{cookie}
 12234  }
 12235  
 12236  // PolyPointChecked sends a checked request.
 12237  // If an error occurs, it can be retrieved using PolyPointCookie.Check()
 12238  func PolyPointChecked(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) PolyPointCookie {
 12239  	cookie := c.NewCookie(true, false)
 12240  	c.NewRequest(polyPointRequest(c, CoordinateMode, Drawable, Gc, Points), cookie)
 12241  	return PolyPointCookie{cookie}
 12242  }
 12243  
 12244  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12245  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12246  func (cook PolyPointCookie) Check() error {
 12247  	return cook.Cookie.Check()
 12248  }
 12249  
 12250  // Write request to wire for PolyPoint
 12251  // polyPointRequest writes a PolyPoint request to a byte slice.
 12252  func polyPointRequest(c *xgb.Conn, CoordinateMode byte, Drawable Drawable, Gc Gcontext, Points []Point) []byte {
 12253  	size := xgb.Pad((12 + xgb.Pad((len(Points) * 4))))
 12254  	b := 0
 12255  	buf := make([]byte, size)
 12256  
 12257  	buf[b] = 64 // request opcode
 12258  	b += 1
 12259  
 12260  	buf[b] = CoordinateMode
 12261  	b += 1
 12262  
 12263  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12264  	b += 2
 12265  
 12266  	xgb.Put32(buf[b:], uint32(Drawable))
 12267  	b += 4
 12268  
 12269  	xgb.Put32(buf[b:], uint32(Gc))
 12270  	b += 4
 12271  
 12272  	b += PointListBytes(buf[b:], Points)
 12273  
 12274  	return buf
 12275  }
 12276  
 12277  // PolyRectangleCookie is a cookie used only for PolyRectangle requests.
 12278  type PolyRectangleCookie struct {
 12279  	*xgb.Cookie
 12280  }
 12281  
 12282  // PolyRectangle sends an unchecked request.
 12283  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12284  func PolyRectangle(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyRectangleCookie {
 12285  	cookie := c.NewCookie(false, false)
 12286  	c.NewRequest(polyRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
 12287  	return PolyRectangleCookie{cookie}
 12288  }
 12289  
 12290  // PolyRectangleChecked sends a checked request.
 12291  // If an error occurs, it can be retrieved using PolyRectangleCookie.Check()
 12292  func PolyRectangleChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) PolyRectangleCookie {
 12293  	cookie := c.NewCookie(true, false)
 12294  	c.NewRequest(polyRectangleRequest(c, Drawable, Gc, Rectangles), cookie)
 12295  	return PolyRectangleCookie{cookie}
 12296  }
 12297  
 12298  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12299  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12300  func (cook PolyRectangleCookie) Check() error {
 12301  	return cook.Cookie.Check()
 12302  }
 12303  
 12304  // Write request to wire for PolyRectangle
 12305  // polyRectangleRequest writes a PolyRectangle request to a byte slice.
 12306  func polyRectangleRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Rectangles []Rectangle) []byte {
 12307  	size := xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
 12308  	b := 0
 12309  	buf := make([]byte, size)
 12310  
 12311  	buf[b] = 67 // request opcode
 12312  	b += 1
 12313  
 12314  	b += 1 // padding
 12315  
 12316  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12317  	b += 2
 12318  
 12319  	xgb.Put32(buf[b:], uint32(Drawable))
 12320  	b += 4
 12321  
 12322  	xgb.Put32(buf[b:], uint32(Gc))
 12323  	b += 4
 12324  
 12325  	b += RectangleListBytes(buf[b:], Rectangles)
 12326  
 12327  	return buf
 12328  }
 12329  
 12330  // PolySegmentCookie is a cookie used only for PolySegment requests.
 12331  type PolySegmentCookie struct {
 12332  	*xgb.Cookie
 12333  }
 12334  
 12335  // PolySegment sends an unchecked request.
 12336  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12337  func PolySegment(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Segments []Segment) PolySegmentCookie {
 12338  	cookie := c.NewCookie(false, false)
 12339  	c.NewRequest(polySegmentRequest(c, Drawable, Gc, Segments), cookie)
 12340  	return PolySegmentCookie{cookie}
 12341  }
 12342  
 12343  // PolySegmentChecked sends a checked request.
 12344  // If an error occurs, it can be retrieved using PolySegmentCookie.Check()
 12345  func PolySegmentChecked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Segments []Segment) PolySegmentCookie {
 12346  	cookie := c.NewCookie(true, false)
 12347  	c.NewRequest(polySegmentRequest(c, Drawable, Gc, Segments), cookie)
 12348  	return PolySegmentCookie{cookie}
 12349  }
 12350  
 12351  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12352  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12353  func (cook PolySegmentCookie) Check() error {
 12354  	return cook.Cookie.Check()
 12355  }
 12356  
 12357  // Write request to wire for PolySegment
 12358  // polySegmentRequest writes a PolySegment request to a byte slice.
 12359  func polySegmentRequest(c *xgb.Conn, Drawable Drawable, Gc Gcontext, Segments []Segment) []byte {
 12360  	size := xgb.Pad((12 + xgb.Pad((len(Segments) * 8))))
 12361  	b := 0
 12362  	buf := make([]byte, size)
 12363  
 12364  	buf[b] = 66 // request opcode
 12365  	b += 1
 12366  
 12367  	b += 1 // padding
 12368  
 12369  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12370  	b += 2
 12371  
 12372  	xgb.Put32(buf[b:], uint32(Drawable))
 12373  	b += 4
 12374  
 12375  	xgb.Put32(buf[b:], uint32(Gc))
 12376  	b += 4
 12377  
 12378  	b += SegmentListBytes(buf[b:], Segments)
 12379  
 12380  	return buf
 12381  }
 12382  
 12383  // PolyText16Cookie is a cookie used only for PolyText16 requests.
 12384  type PolyText16Cookie struct {
 12385  	*xgb.Cookie
 12386  }
 12387  
 12388  // PolyText16 sends an unchecked request.
 12389  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12390  func PolyText16(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText16Cookie {
 12391  	cookie := c.NewCookie(false, false)
 12392  	c.NewRequest(polyText16Request(c, Drawable, Gc, X, Y, Items), cookie)
 12393  	return PolyText16Cookie{cookie}
 12394  }
 12395  
 12396  // PolyText16Checked sends a checked request.
 12397  // If an error occurs, it can be retrieved using PolyText16Cookie.Check()
 12398  func PolyText16Checked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText16Cookie {
 12399  	cookie := c.NewCookie(true, false)
 12400  	c.NewRequest(polyText16Request(c, Drawable, Gc, X, Y, Items), cookie)
 12401  	return PolyText16Cookie{cookie}
 12402  }
 12403  
 12404  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12405  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12406  func (cook PolyText16Cookie) Check() error {
 12407  	return cook.Cookie.Check()
 12408  }
 12409  
 12410  // Write request to wire for PolyText16
 12411  // polyText16Request writes a PolyText16 request to a byte slice.
 12412  func polyText16Request(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) []byte {
 12413  	size := xgb.Pad((16 + xgb.Pad((len(Items) * 1))))
 12414  	b := 0
 12415  	buf := make([]byte, size)
 12416  
 12417  	buf[b] = 75 // request opcode
 12418  	b += 1
 12419  
 12420  	b += 1 // padding
 12421  
 12422  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12423  	b += 2
 12424  
 12425  	xgb.Put32(buf[b:], uint32(Drawable))
 12426  	b += 4
 12427  
 12428  	xgb.Put32(buf[b:], uint32(Gc))
 12429  	b += 4
 12430  
 12431  	xgb.Put16(buf[b:], uint16(X))
 12432  	b += 2
 12433  
 12434  	xgb.Put16(buf[b:], uint16(Y))
 12435  	b += 2
 12436  
 12437  	copy(buf[b:], Items[:len(Items)])
 12438  	b += int(len(Items))
 12439  
 12440  	return buf
 12441  }
 12442  
 12443  // PolyText8Cookie is a cookie used only for PolyText8 requests.
 12444  type PolyText8Cookie struct {
 12445  	*xgb.Cookie
 12446  }
 12447  
 12448  // PolyText8 sends an unchecked request.
 12449  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12450  func PolyText8(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText8Cookie {
 12451  	cookie := c.NewCookie(false, false)
 12452  	c.NewRequest(polyText8Request(c, Drawable, Gc, X, Y, Items), cookie)
 12453  	return PolyText8Cookie{cookie}
 12454  }
 12455  
 12456  // PolyText8Checked sends a checked request.
 12457  // If an error occurs, it can be retrieved using PolyText8Cookie.Check()
 12458  func PolyText8Checked(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) PolyText8Cookie {
 12459  	cookie := c.NewCookie(true, false)
 12460  	c.NewRequest(polyText8Request(c, Drawable, Gc, X, Y, Items), cookie)
 12461  	return PolyText8Cookie{cookie}
 12462  }
 12463  
 12464  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12465  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12466  func (cook PolyText8Cookie) Check() error {
 12467  	return cook.Cookie.Check()
 12468  }
 12469  
 12470  // Write request to wire for PolyText8
 12471  // polyText8Request writes a PolyText8 request to a byte slice.
 12472  func polyText8Request(c *xgb.Conn, Drawable Drawable, Gc Gcontext, X int16, Y int16, Items []byte) []byte {
 12473  	size := xgb.Pad((16 + xgb.Pad((len(Items) * 1))))
 12474  	b := 0
 12475  	buf := make([]byte, size)
 12476  
 12477  	buf[b] = 74 // request opcode
 12478  	b += 1
 12479  
 12480  	b += 1 // padding
 12481  
 12482  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12483  	b += 2
 12484  
 12485  	xgb.Put32(buf[b:], uint32(Drawable))
 12486  	b += 4
 12487  
 12488  	xgb.Put32(buf[b:], uint32(Gc))
 12489  	b += 4
 12490  
 12491  	xgb.Put16(buf[b:], uint16(X))
 12492  	b += 2
 12493  
 12494  	xgb.Put16(buf[b:], uint16(Y))
 12495  	b += 2
 12496  
 12497  	copy(buf[b:], Items[:len(Items)])
 12498  	b += int(len(Items))
 12499  
 12500  	return buf
 12501  }
 12502  
 12503  // PutImageCookie is a cookie used only for PutImage requests.
 12504  type PutImageCookie struct {
 12505  	*xgb.Cookie
 12506  }
 12507  
 12508  // PutImage sends an unchecked request.
 12509  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12510  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 {
 12511  	cookie := c.NewCookie(false, false)
 12512  	c.NewRequest(putImageRequest(c, Format, Drawable, Gc, Width, Height, DstX, DstY, LeftPad, Depth, Data), cookie)
 12513  	return PutImageCookie{cookie}
 12514  }
 12515  
 12516  // PutImageChecked sends a checked request.
 12517  // If an error occurs, it can be retrieved using PutImageCookie.Check()
 12518  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 {
 12519  	cookie := c.NewCookie(true, false)
 12520  	c.NewRequest(putImageRequest(c, Format, Drawable, Gc, Width, Height, DstX, DstY, LeftPad, Depth, Data), cookie)
 12521  	return PutImageCookie{cookie}
 12522  }
 12523  
 12524  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 12525  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 12526  func (cook PutImageCookie) Check() error {
 12527  	return cook.Cookie.Check()
 12528  }
 12529  
 12530  // Write request to wire for PutImage
 12531  // putImageRequest writes a PutImage request to a byte slice.
 12532  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 {
 12533  	size := xgb.Pad((24 + xgb.Pad((len(Data) * 1))))
 12534  	b := 0
 12535  	buf := make([]byte, size)
 12536  
 12537  	buf[b] = 72 // request opcode
 12538  	b += 1
 12539  
 12540  	buf[b] = Format
 12541  	b += 1
 12542  
 12543  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12544  	b += 2
 12545  
 12546  	xgb.Put32(buf[b:], uint32(Drawable))
 12547  	b += 4
 12548  
 12549  	xgb.Put32(buf[b:], uint32(Gc))
 12550  	b += 4
 12551  
 12552  	xgb.Put16(buf[b:], Width)
 12553  	b += 2
 12554  
 12555  	xgb.Put16(buf[b:], Height)
 12556  	b += 2
 12557  
 12558  	xgb.Put16(buf[b:], uint16(DstX))
 12559  	b += 2
 12560  
 12561  	xgb.Put16(buf[b:], uint16(DstY))
 12562  	b += 2
 12563  
 12564  	buf[b] = LeftPad
 12565  	b += 1
 12566  
 12567  	buf[b] = Depth
 12568  	b += 1
 12569  
 12570  	b += 2 // padding
 12571  
 12572  	copy(buf[b:], Data[:len(Data)])
 12573  	b += int(len(Data))
 12574  
 12575  	return buf
 12576  }
 12577  
 12578  // QueryBestSizeCookie is a cookie used only for QueryBestSize requests.
 12579  type QueryBestSizeCookie struct {
 12580  	*xgb.Cookie
 12581  }
 12582  
 12583  // QueryBestSize sends a checked request.
 12584  // If an error occurs, it will be returned with the reply by calling QueryBestSizeCookie.Reply()
 12585  func QueryBestSize(c *xgb.Conn, Class byte, Drawable Drawable, Width uint16, Height uint16) QueryBestSizeCookie {
 12586  	cookie := c.NewCookie(true, true)
 12587  	c.NewRequest(queryBestSizeRequest(c, Class, Drawable, Width, Height), cookie)
 12588  	return QueryBestSizeCookie{cookie}
 12589  }
 12590  
 12591  // QueryBestSizeUnchecked sends an unchecked request.
 12592  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12593  func QueryBestSizeUnchecked(c *xgb.Conn, Class byte, Drawable Drawable, Width uint16, Height uint16) QueryBestSizeCookie {
 12594  	cookie := c.NewCookie(false, true)
 12595  	c.NewRequest(queryBestSizeRequest(c, Class, Drawable, Width, Height), cookie)
 12596  	return QueryBestSizeCookie{cookie}
 12597  }
 12598  
 12599  // QueryBestSizeReply represents the data returned from a QueryBestSize request.
 12600  type QueryBestSizeReply struct {
 12601  	Sequence uint16 // sequence number of the request for this reply
 12602  	Length   uint32 // number of bytes in this reply
 12603  	// padding: 1 bytes
 12604  	Width  uint16
 12605  	Height uint16
 12606  }
 12607  
 12608  // Reply blocks and returns the reply data for a QueryBestSize request.
 12609  func (cook QueryBestSizeCookie) Reply() (*QueryBestSizeReply, error) {
 12610  	buf, err := cook.Cookie.Reply()
 12611  	if err != nil {
 12612  		return nil, err
 12613  	}
 12614  	if buf == nil {
 12615  		return nil, nil
 12616  	}
 12617  	return queryBestSizeReply(buf), nil
 12618  }
 12619  
 12620  // queryBestSizeReply reads a byte slice into a QueryBestSizeReply value.
 12621  func queryBestSizeReply(buf []byte) *QueryBestSizeReply {
 12622  	v := new(QueryBestSizeReply)
 12623  	b := 1 // skip reply determinant
 12624  
 12625  	b += 1 // padding
 12626  
 12627  	v.Sequence = xgb.Get16(buf[b:])
 12628  	b += 2
 12629  
 12630  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 12631  	b += 4
 12632  
 12633  	v.Width = xgb.Get16(buf[b:])
 12634  	b += 2
 12635  
 12636  	v.Height = xgb.Get16(buf[b:])
 12637  	b += 2
 12638  
 12639  	return v
 12640  }
 12641  
 12642  // Write request to wire for QueryBestSize
 12643  // queryBestSizeRequest writes a QueryBestSize request to a byte slice.
 12644  func queryBestSizeRequest(c *xgb.Conn, Class byte, Drawable Drawable, Width uint16, Height uint16) []byte {
 12645  	size := 12
 12646  	b := 0
 12647  	buf := make([]byte, size)
 12648  
 12649  	buf[b] = 97 // request opcode
 12650  	b += 1
 12651  
 12652  	buf[b] = Class
 12653  	b += 1
 12654  
 12655  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12656  	b += 2
 12657  
 12658  	xgb.Put32(buf[b:], uint32(Drawable))
 12659  	b += 4
 12660  
 12661  	xgb.Put16(buf[b:], Width)
 12662  	b += 2
 12663  
 12664  	xgb.Put16(buf[b:], Height)
 12665  	b += 2
 12666  
 12667  	return buf
 12668  }
 12669  
 12670  // QueryColorsCookie is a cookie used only for QueryColors requests.
 12671  type QueryColorsCookie struct {
 12672  	*xgb.Cookie
 12673  }
 12674  
 12675  // QueryColors sends a checked request.
 12676  // If an error occurs, it will be returned with the reply by calling QueryColorsCookie.Reply()
 12677  func QueryColors(c *xgb.Conn, Cmap Colormap, Pixels []uint32) QueryColorsCookie {
 12678  	cookie := c.NewCookie(true, true)
 12679  	c.NewRequest(queryColorsRequest(c, Cmap, Pixels), cookie)
 12680  	return QueryColorsCookie{cookie}
 12681  }
 12682  
 12683  // QueryColorsUnchecked sends an unchecked request.
 12684  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12685  func QueryColorsUnchecked(c *xgb.Conn, Cmap Colormap, Pixels []uint32) QueryColorsCookie {
 12686  	cookie := c.NewCookie(false, true)
 12687  	c.NewRequest(queryColorsRequest(c, Cmap, Pixels), cookie)
 12688  	return QueryColorsCookie{cookie}
 12689  }
 12690  
 12691  // QueryColorsReply represents the data returned from a QueryColors request.
 12692  type QueryColorsReply struct {
 12693  	Sequence uint16 // sequence number of the request for this reply
 12694  	Length   uint32 // number of bytes in this reply
 12695  	// padding: 1 bytes
 12696  	ColorsLen uint16
 12697  	// padding: 22 bytes
 12698  	Colors []Rgb // size: xgb.Pad((int(ColorsLen) * 8))
 12699  }
 12700  
 12701  // Reply blocks and returns the reply data for a QueryColors request.
 12702  func (cook QueryColorsCookie) Reply() (*QueryColorsReply, error) {
 12703  	buf, err := cook.Cookie.Reply()
 12704  	if err != nil {
 12705  		return nil, err
 12706  	}
 12707  	if buf == nil {
 12708  		return nil, nil
 12709  	}
 12710  	return queryColorsReply(buf), nil
 12711  }
 12712  
 12713  // queryColorsReply reads a byte slice into a QueryColorsReply value.
 12714  func queryColorsReply(buf []byte) *QueryColorsReply {
 12715  	v := new(QueryColorsReply)
 12716  	b := 1 // skip reply determinant
 12717  
 12718  	b += 1 // padding
 12719  
 12720  	v.Sequence = xgb.Get16(buf[b:])
 12721  	b += 2
 12722  
 12723  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 12724  	b += 4
 12725  
 12726  	v.ColorsLen = xgb.Get16(buf[b:])
 12727  	b += 2
 12728  
 12729  	b += 22 // padding
 12730  
 12731  	v.Colors = make([]Rgb, v.ColorsLen)
 12732  	b += RgbReadList(buf[b:], v.Colors)
 12733  
 12734  	return v
 12735  }
 12736  
 12737  // Write request to wire for QueryColors
 12738  // queryColorsRequest writes a QueryColors request to a byte slice.
 12739  func queryColorsRequest(c *xgb.Conn, Cmap Colormap, Pixels []uint32) []byte {
 12740  	size := xgb.Pad((8 + xgb.Pad((len(Pixels) * 4))))
 12741  	b := 0
 12742  	buf := make([]byte, size)
 12743  
 12744  	buf[b] = 91 // request opcode
 12745  	b += 1
 12746  
 12747  	b += 1 // padding
 12748  
 12749  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12750  	b += 2
 12751  
 12752  	xgb.Put32(buf[b:], uint32(Cmap))
 12753  	b += 4
 12754  
 12755  	for i := 0; i < int(len(Pixels)); i++ {
 12756  		xgb.Put32(buf[b:], Pixels[i])
 12757  		b += 4
 12758  	}
 12759  
 12760  	return buf
 12761  }
 12762  
 12763  // QueryExtensionCookie is a cookie used only for QueryExtension requests.
 12764  type QueryExtensionCookie struct {
 12765  	*xgb.Cookie
 12766  }
 12767  
 12768  // QueryExtension sends a checked request.
 12769  // If an error occurs, it will be returned with the reply by calling QueryExtensionCookie.Reply()
 12770  func QueryExtension(c *xgb.Conn, NameLen uint16, Name string) QueryExtensionCookie {
 12771  	cookie := c.NewCookie(true, true)
 12772  	c.NewRequest(queryExtensionRequest(c, NameLen, Name), cookie)
 12773  	return QueryExtensionCookie{cookie}
 12774  }
 12775  
 12776  // QueryExtensionUnchecked sends an unchecked request.
 12777  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12778  func QueryExtensionUnchecked(c *xgb.Conn, NameLen uint16, Name string) QueryExtensionCookie {
 12779  	cookie := c.NewCookie(false, true)
 12780  	c.NewRequest(queryExtensionRequest(c, NameLen, Name), cookie)
 12781  	return QueryExtensionCookie{cookie}
 12782  }
 12783  
 12784  // QueryExtensionReply represents the data returned from a QueryExtension request.
 12785  type QueryExtensionReply struct {
 12786  	Sequence uint16 // sequence number of the request for this reply
 12787  	Length   uint32 // number of bytes in this reply
 12788  	// padding: 1 bytes
 12789  	Present     bool
 12790  	MajorOpcode byte
 12791  	FirstEvent  byte
 12792  	FirstError  byte
 12793  }
 12794  
 12795  // Reply blocks and returns the reply data for a QueryExtension request.
 12796  func (cook QueryExtensionCookie) Reply() (*QueryExtensionReply, error) {
 12797  	buf, err := cook.Cookie.Reply()
 12798  	if err != nil {
 12799  		return nil, err
 12800  	}
 12801  	if buf == nil {
 12802  		return nil, nil
 12803  	}
 12804  	return queryExtensionReply(buf), nil
 12805  }
 12806  
 12807  // queryExtensionReply reads a byte slice into a QueryExtensionReply value.
 12808  func queryExtensionReply(buf []byte) *QueryExtensionReply {
 12809  	v := new(QueryExtensionReply)
 12810  	b := 1 // skip reply determinant
 12811  
 12812  	b += 1 // padding
 12813  
 12814  	v.Sequence = xgb.Get16(buf[b:])
 12815  	b += 2
 12816  
 12817  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 12818  	b += 4
 12819  
 12820  	if buf[b] == 1 {
 12821  		v.Present = true
 12822  	} else {
 12823  		v.Present = false
 12824  	}
 12825  	b += 1
 12826  
 12827  	v.MajorOpcode = buf[b]
 12828  	b += 1
 12829  
 12830  	v.FirstEvent = buf[b]
 12831  	b += 1
 12832  
 12833  	v.FirstError = buf[b]
 12834  	b += 1
 12835  
 12836  	return v
 12837  }
 12838  
 12839  // Write request to wire for QueryExtension
 12840  // queryExtensionRequest writes a QueryExtension request to a byte slice.
 12841  func queryExtensionRequest(c *xgb.Conn, NameLen uint16, Name string) []byte {
 12842  	size := xgb.Pad((8 + xgb.Pad((int(NameLen) * 1))))
 12843  	b := 0
 12844  	buf := make([]byte, size)
 12845  
 12846  	buf[b] = 98 // request opcode
 12847  	b += 1
 12848  
 12849  	b += 1 // padding
 12850  
 12851  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 12852  	b += 2
 12853  
 12854  	xgb.Put16(buf[b:], NameLen)
 12855  	b += 2
 12856  
 12857  	b += 2 // padding
 12858  
 12859  	copy(buf[b:], Name[:NameLen])
 12860  	b += int(NameLen)
 12861  
 12862  	return buf
 12863  }
 12864  
 12865  // QueryFontCookie is a cookie used only for QueryFont requests.
 12866  type QueryFontCookie struct {
 12867  	*xgb.Cookie
 12868  }
 12869  
 12870  // QueryFont sends a checked request.
 12871  // If an error occurs, it will be returned with the reply by calling QueryFontCookie.Reply()
 12872  func QueryFont(c *xgb.Conn, Font Fontable) QueryFontCookie {
 12873  	cookie := c.NewCookie(true, true)
 12874  	c.NewRequest(queryFontRequest(c, Font), cookie)
 12875  	return QueryFontCookie{cookie}
 12876  }
 12877  
 12878  // QueryFontUnchecked sends an unchecked request.
 12879  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 12880  func QueryFontUnchecked(c *xgb.Conn, Font Fontable) QueryFontCookie {
 12881  	cookie := c.NewCookie(false, true)
 12882  	c.NewRequest(queryFontRequest(c, Font), cookie)
 12883  	return QueryFontCookie{cookie}
 12884  }
 12885  
 12886  // QueryFontReply represents the data returned from a QueryFont request.
 12887  type QueryFontReply struct {
 12888  	Sequence uint16 // sequence number of the request for this reply
 12889  	Length   uint32 // number of bytes in this reply
 12890  	// padding: 1 bytes
 12891  	MinBounds Charinfo
 12892  	// padding: 4 bytes
 12893  	MaxBounds Charinfo
 12894  	// padding: 4 bytes
 12895  	MinCharOrByte2 uint16
 12896  	MaxCharOrByte2 uint16
 12897  	DefaultChar    uint16
 12898  	PropertiesLen  uint16
 12899  	DrawDirection  byte
 12900  	MinByte1       byte
 12901  	MaxByte1       byte
 12902  	AllCharsExist  bool
 12903  	FontAscent     int16
 12904  	FontDescent    int16
 12905  	CharInfosLen   uint32
 12906  	Properties     []Fontprop // size: xgb.Pad((int(PropertiesLen) * 8))
 12907  	// alignment gap to multiple of 4
 12908  	CharInfos []Charinfo // size: xgb.Pad((int(CharInfosLen) * 12))
 12909  }
 12910  
 12911  // Reply blocks and returns the reply data for a QueryFont request.
 12912  func (cook QueryFontCookie) Reply() (*QueryFontReply, error) {
 12913  	buf, err := cook.Cookie.Reply()
 12914  	if err != nil {
 12915  		return nil, err
 12916  	}
 12917  	if buf == nil {
 12918  		return nil, nil
 12919  	}
 12920  	return queryFontReply(buf), nil
 12921  }
 12922  
 12923  // queryFontReply reads a byte slice into a QueryFontReply value.
 12924  func queryFontReply(buf []byte) *QueryFontReply {
 12925  	v := new(QueryFontReply)
 12926  	b := 1 // skip reply determinant
 12927  
 12928  	b += 1 // padding
 12929  
 12930  	v.Sequence = xgb.Get16(buf[b:])
 12931  	b += 2
 12932  
 12933  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 12934  	b += 4
 12935  
 12936  	v.MinBounds = Charinfo{}
 12937  	b += CharinfoRead(buf[b:], &v.MinBounds)
 12938  
 12939  	b += 4 // padding
 12940  
 12941  	v.MaxBounds = Charinfo{}
 12942  	b += CharinfoRead(buf[b:], &v.MaxBounds)
 12943  
 12944  	b += 4 // padding
 12945  
 12946  	v.MinCharOrByte2 = xgb.Get16(buf[b:])
 12947  	b += 2
 12948  
 12949  	v.MaxCharOrByte2 = xgb.Get16(buf[b:])
 12950  	b += 2
 12951  
 12952  	v.DefaultChar = xgb.Get16(buf[b:])
 12953  	b += 2
 12954  
 12955  	v.PropertiesLen = xgb.Get16(buf[b:])
 12956  	b += 2
 12957  
 12958  	v.DrawDirection = buf[b]
 12959  	b += 1
 12960  
 12961  	v.MinByte1 = buf[b]
 12962  	b += 1
 12963  
 12964  	v.MaxByte1 = buf[b]
 12965  	b += 1
 12966  
 12967  	if buf[b] == 1 {
 12968  		v.AllCharsExist = true
 12969  	} else {
 12970  		v.AllCharsExist = false
 12971  	}
 12972  	b += 1
 12973  
 12974  	v.FontAscent = int16(xgb.Get16(buf[b:]))
 12975  	b += 2
 12976  
 12977  	v.FontDescent = int16(xgb.Get16(buf[b:]))
 12978  	b += 2
 12979  
 12980  	v.CharInfosLen = xgb.Get32(buf[b:])
 12981  	b += 4
 12982  
 12983  	v.Properties = make([]Fontprop, v.PropertiesLen)
 12984  	b += FontpropReadList(buf[b:], v.Properties)
 12985  
 12986  	b = (b + 3) & ^3 // alignment gap
 12987  
 12988  	v.CharInfos = make([]Charinfo, v.CharInfosLen)
 12989  	b += CharinfoReadList(buf[b:], v.CharInfos)
 12990  
 12991  	return v
 12992  }
 12993  
 12994  // Write request to wire for QueryFont
 12995  // queryFontRequest writes a QueryFont request to a byte slice.
 12996  func queryFontRequest(c *xgb.Conn, Font Fontable) []byte {
 12997  	size := 8
 12998  	b := 0
 12999  	buf := make([]byte, size)
 13000  
 13001  	buf[b] = 47 // request opcode
 13002  	b += 1
 13003  
 13004  	b += 1 // padding
 13005  
 13006  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13007  	b += 2
 13008  
 13009  	xgb.Put32(buf[b:], uint32(Font))
 13010  	b += 4
 13011  
 13012  	return buf
 13013  }
 13014  
 13015  // QueryKeymapCookie is a cookie used only for QueryKeymap requests.
 13016  type QueryKeymapCookie struct {
 13017  	*xgb.Cookie
 13018  }
 13019  
 13020  // QueryKeymap sends a checked request.
 13021  // If an error occurs, it will be returned with the reply by calling QueryKeymapCookie.Reply()
 13022  func QueryKeymap(c *xgb.Conn) QueryKeymapCookie {
 13023  	cookie := c.NewCookie(true, true)
 13024  	c.NewRequest(queryKeymapRequest(c), cookie)
 13025  	return QueryKeymapCookie{cookie}
 13026  }
 13027  
 13028  // QueryKeymapUnchecked sends an unchecked request.
 13029  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13030  func QueryKeymapUnchecked(c *xgb.Conn) QueryKeymapCookie {
 13031  	cookie := c.NewCookie(false, true)
 13032  	c.NewRequest(queryKeymapRequest(c), cookie)
 13033  	return QueryKeymapCookie{cookie}
 13034  }
 13035  
 13036  // QueryKeymapReply represents the data returned from a QueryKeymap request.
 13037  type QueryKeymapReply struct {
 13038  	Sequence uint16 // sequence number of the request for this reply
 13039  	Length   uint32 // number of bytes in this reply
 13040  	// padding: 1 bytes
 13041  	Keys []byte // size: 32
 13042  }
 13043  
 13044  // Reply blocks and returns the reply data for a QueryKeymap request.
 13045  func (cook QueryKeymapCookie) Reply() (*QueryKeymapReply, error) {
 13046  	buf, err := cook.Cookie.Reply()
 13047  	if err != nil {
 13048  		return nil, err
 13049  	}
 13050  	if buf == nil {
 13051  		return nil, nil
 13052  	}
 13053  	return queryKeymapReply(buf), nil
 13054  }
 13055  
 13056  // queryKeymapReply reads a byte slice into a QueryKeymapReply value.
 13057  func queryKeymapReply(buf []byte) *QueryKeymapReply {
 13058  	v := new(QueryKeymapReply)
 13059  	b := 1 // skip reply determinant
 13060  
 13061  	b += 1 // padding
 13062  
 13063  	v.Sequence = xgb.Get16(buf[b:])
 13064  	b += 2
 13065  
 13066  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 13067  	b += 4
 13068  
 13069  	v.Keys = make([]byte, 32)
 13070  	copy(v.Keys[:32], buf[b:])
 13071  	b += int(32)
 13072  
 13073  	return v
 13074  }
 13075  
 13076  // Write request to wire for QueryKeymap
 13077  // queryKeymapRequest writes a QueryKeymap request to a byte slice.
 13078  func queryKeymapRequest(c *xgb.Conn) []byte {
 13079  	size := 4
 13080  	b := 0
 13081  	buf := make([]byte, size)
 13082  
 13083  	buf[b] = 44 // request opcode
 13084  	b += 1
 13085  
 13086  	b += 1                             // padding
 13087  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13088  	b += 2
 13089  
 13090  	return buf
 13091  }
 13092  
 13093  // QueryPointerCookie is a cookie used only for QueryPointer requests.
 13094  type QueryPointerCookie struct {
 13095  	*xgb.Cookie
 13096  }
 13097  
 13098  // QueryPointer sends a checked request.
 13099  // If an error occurs, it will be returned with the reply by calling QueryPointerCookie.Reply()
 13100  func QueryPointer(c *xgb.Conn, Window Window) QueryPointerCookie {
 13101  	cookie := c.NewCookie(true, true)
 13102  	c.NewRequest(queryPointerRequest(c, Window), cookie)
 13103  	return QueryPointerCookie{cookie}
 13104  }
 13105  
 13106  // QueryPointerUnchecked sends an unchecked request.
 13107  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13108  func QueryPointerUnchecked(c *xgb.Conn, Window Window) QueryPointerCookie {
 13109  	cookie := c.NewCookie(false, true)
 13110  	c.NewRequest(queryPointerRequest(c, Window), cookie)
 13111  	return QueryPointerCookie{cookie}
 13112  }
 13113  
 13114  // QueryPointerReply represents the data returned from a QueryPointer request.
 13115  type QueryPointerReply struct {
 13116  	Sequence   uint16 // sequence number of the request for this reply
 13117  	Length     uint32 // number of bytes in this reply
 13118  	SameScreen bool
 13119  	Root       Window
 13120  	Child      Window
 13121  	RootX      int16
 13122  	RootY      int16
 13123  	WinX       int16
 13124  	WinY       int16
 13125  	Mask       uint16
 13126  	// padding: 2 bytes
 13127  }
 13128  
 13129  // Reply blocks and returns the reply data for a QueryPointer request.
 13130  func (cook QueryPointerCookie) Reply() (*QueryPointerReply, error) {
 13131  	buf, err := cook.Cookie.Reply()
 13132  	if err != nil {
 13133  		return nil, err
 13134  	}
 13135  	if buf == nil {
 13136  		return nil, nil
 13137  	}
 13138  	return queryPointerReply(buf), nil
 13139  }
 13140  
 13141  // queryPointerReply reads a byte slice into a QueryPointerReply value.
 13142  func queryPointerReply(buf []byte) *QueryPointerReply {
 13143  	v := new(QueryPointerReply)
 13144  	b := 1 // skip reply determinant
 13145  
 13146  	if buf[b] == 1 {
 13147  		v.SameScreen = true
 13148  	} else {
 13149  		v.SameScreen = false
 13150  	}
 13151  	b += 1
 13152  
 13153  	v.Sequence = xgb.Get16(buf[b:])
 13154  	b += 2
 13155  
 13156  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 13157  	b += 4
 13158  
 13159  	v.Root = Window(xgb.Get32(buf[b:]))
 13160  	b += 4
 13161  
 13162  	v.Child = Window(xgb.Get32(buf[b:]))
 13163  	b += 4
 13164  
 13165  	v.RootX = int16(xgb.Get16(buf[b:]))
 13166  	b += 2
 13167  
 13168  	v.RootY = int16(xgb.Get16(buf[b:]))
 13169  	b += 2
 13170  
 13171  	v.WinX = int16(xgb.Get16(buf[b:]))
 13172  	b += 2
 13173  
 13174  	v.WinY = int16(xgb.Get16(buf[b:]))
 13175  	b += 2
 13176  
 13177  	v.Mask = xgb.Get16(buf[b:])
 13178  	b += 2
 13179  
 13180  	b += 2 // padding
 13181  
 13182  	return v
 13183  }
 13184  
 13185  // Write request to wire for QueryPointer
 13186  // queryPointerRequest writes a QueryPointer request to a byte slice.
 13187  func queryPointerRequest(c *xgb.Conn, Window Window) []byte {
 13188  	size := 8
 13189  	b := 0
 13190  	buf := make([]byte, size)
 13191  
 13192  	buf[b] = 38 // request opcode
 13193  	b += 1
 13194  
 13195  	b += 1 // padding
 13196  
 13197  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13198  	b += 2
 13199  
 13200  	xgb.Put32(buf[b:], uint32(Window))
 13201  	b += 4
 13202  
 13203  	return buf
 13204  }
 13205  
 13206  // QueryTextExtentsCookie is a cookie used only for QueryTextExtents requests.
 13207  type QueryTextExtentsCookie struct {
 13208  	*xgb.Cookie
 13209  }
 13210  
 13211  // QueryTextExtents sends a checked request.
 13212  // If an error occurs, it will be returned with the reply by calling QueryTextExtentsCookie.Reply()
 13213  func QueryTextExtents(c *xgb.Conn, Font Fontable, String []Char2b, StringLen uint16) QueryTextExtentsCookie {
 13214  	cookie := c.NewCookie(true, true)
 13215  	c.NewRequest(queryTextExtentsRequest(c, Font, String, StringLen), cookie)
 13216  	return QueryTextExtentsCookie{cookie}
 13217  }
 13218  
 13219  // QueryTextExtentsUnchecked sends an unchecked request.
 13220  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13221  func QueryTextExtentsUnchecked(c *xgb.Conn, Font Fontable, String []Char2b, StringLen uint16) QueryTextExtentsCookie {
 13222  	cookie := c.NewCookie(false, true)
 13223  	c.NewRequest(queryTextExtentsRequest(c, Font, String, StringLen), cookie)
 13224  	return QueryTextExtentsCookie{cookie}
 13225  }
 13226  
 13227  // QueryTextExtentsReply represents the data returned from a QueryTextExtents request.
 13228  type QueryTextExtentsReply struct {
 13229  	Sequence       uint16 // sequence number of the request for this reply
 13230  	Length         uint32 // number of bytes in this reply
 13231  	DrawDirection  byte
 13232  	FontAscent     int16
 13233  	FontDescent    int16
 13234  	OverallAscent  int16
 13235  	OverallDescent int16
 13236  	OverallWidth   int32
 13237  	OverallLeft    int32
 13238  	OverallRight   int32
 13239  }
 13240  
 13241  // Reply blocks and returns the reply data for a QueryTextExtents request.
 13242  func (cook QueryTextExtentsCookie) Reply() (*QueryTextExtentsReply, error) {
 13243  	buf, err := cook.Cookie.Reply()
 13244  	if err != nil {
 13245  		return nil, err
 13246  	}
 13247  	if buf == nil {
 13248  		return nil, nil
 13249  	}
 13250  	return queryTextExtentsReply(buf), nil
 13251  }
 13252  
 13253  // queryTextExtentsReply reads a byte slice into a QueryTextExtentsReply value.
 13254  func queryTextExtentsReply(buf []byte) *QueryTextExtentsReply {
 13255  	v := new(QueryTextExtentsReply)
 13256  	b := 1 // skip reply determinant
 13257  
 13258  	v.DrawDirection = buf[b]
 13259  	b += 1
 13260  
 13261  	v.Sequence = xgb.Get16(buf[b:])
 13262  	b += 2
 13263  
 13264  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 13265  	b += 4
 13266  
 13267  	v.FontAscent = int16(xgb.Get16(buf[b:]))
 13268  	b += 2
 13269  
 13270  	v.FontDescent = int16(xgb.Get16(buf[b:]))
 13271  	b += 2
 13272  
 13273  	v.OverallAscent = int16(xgb.Get16(buf[b:]))
 13274  	b += 2
 13275  
 13276  	v.OverallDescent = int16(xgb.Get16(buf[b:]))
 13277  	b += 2
 13278  
 13279  	v.OverallWidth = int32(xgb.Get32(buf[b:]))
 13280  	b += 4
 13281  
 13282  	v.OverallLeft = int32(xgb.Get32(buf[b:]))
 13283  	b += 4
 13284  
 13285  	v.OverallRight = int32(xgb.Get32(buf[b:]))
 13286  	b += 4
 13287  
 13288  	return v
 13289  }
 13290  
 13291  // Write request to wire for QueryTextExtents
 13292  // queryTextExtentsRequest writes a QueryTextExtents request to a byte slice.
 13293  func queryTextExtentsRequest(c *xgb.Conn, Font Fontable, String []Char2b, StringLen uint16) []byte {
 13294  	size := xgb.Pad((8 + xgb.Pad((len(String) * 2))))
 13295  	b := 0
 13296  	buf := make([]byte, size)
 13297  
 13298  	buf[b] = 48 // request opcode
 13299  	b += 1
 13300  
 13301  	buf[b] = byte((int(StringLen) & 1))
 13302  	b += 1
 13303  
 13304  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13305  	b += 2
 13306  
 13307  	xgb.Put32(buf[b:], uint32(Font))
 13308  	b += 4
 13309  
 13310  	b += Char2bListBytes(buf[b:], String)
 13311  
 13312  	// skip writing local field: StringLen (2) :: uint16
 13313  
 13314  	return buf
 13315  }
 13316  
 13317  // QueryTreeCookie is a cookie used only for QueryTree requests.
 13318  type QueryTreeCookie struct {
 13319  	*xgb.Cookie
 13320  }
 13321  
 13322  // QueryTree sends a checked request.
 13323  // If an error occurs, it will be returned with the reply by calling QueryTreeCookie.Reply()
 13324  func QueryTree(c *xgb.Conn, Window Window) QueryTreeCookie {
 13325  	cookie := c.NewCookie(true, true)
 13326  	c.NewRequest(queryTreeRequest(c, Window), cookie)
 13327  	return QueryTreeCookie{cookie}
 13328  }
 13329  
 13330  // QueryTreeUnchecked sends an unchecked request.
 13331  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13332  func QueryTreeUnchecked(c *xgb.Conn, Window Window) QueryTreeCookie {
 13333  	cookie := c.NewCookie(false, true)
 13334  	c.NewRequest(queryTreeRequest(c, Window), cookie)
 13335  	return QueryTreeCookie{cookie}
 13336  }
 13337  
 13338  // QueryTreeReply represents the data returned from a QueryTree request.
 13339  type QueryTreeReply struct {
 13340  	Sequence uint16 // sequence number of the request for this reply
 13341  	Length   uint32 // number of bytes in this reply
 13342  	// padding: 1 bytes
 13343  	Root        Window
 13344  	Parent      Window
 13345  	ChildrenLen uint16
 13346  	// padding: 14 bytes
 13347  	Children []Window // size: xgb.Pad((int(ChildrenLen) * 4))
 13348  }
 13349  
 13350  // Reply blocks and returns the reply data for a QueryTree request.
 13351  func (cook QueryTreeCookie) Reply() (*QueryTreeReply, error) {
 13352  	buf, err := cook.Cookie.Reply()
 13353  	if err != nil {
 13354  		return nil, err
 13355  	}
 13356  	if buf == nil {
 13357  		return nil, nil
 13358  	}
 13359  	return queryTreeReply(buf), nil
 13360  }
 13361  
 13362  // queryTreeReply reads a byte slice into a QueryTreeReply value.
 13363  func queryTreeReply(buf []byte) *QueryTreeReply {
 13364  	v := new(QueryTreeReply)
 13365  	b := 1 // skip reply determinant
 13366  
 13367  	b += 1 // padding
 13368  
 13369  	v.Sequence = xgb.Get16(buf[b:])
 13370  	b += 2
 13371  
 13372  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 13373  	b += 4
 13374  
 13375  	v.Root = Window(xgb.Get32(buf[b:]))
 13376  	b += 4
 13377  
 13378  	v.Parent = Window(xgb.Get32(buf[b:]))
 13379  	b += 4
 13380  
 13381  	v.ChildrenLen = xgb.Get16(buf[b:])
 13382  	b += 2
 13383  
 13384  	b += 14 // padding
 13385  
 13386  	v.Children = make([]Window, v.ChildrenLen)
 13387  	for i := 0; i < int(v.ChildrenLen); i++ {
 13388  		v.Children[i] = Window(xgb.Get32(buf[b:]))
 13389  		b += 4
 13390  	}
 13391  
 13392  	return v
 13393  }
 13394  
 13395  // Write request to wire for QueryTree
 13396  // queryTreeRequest writes a QueryTree request to a byte slice.
 13397  func queryTreeRequest(c *xgb.Conn, Window Window) []byte {
 13398  	size := 8
 13399  	b := 0
 13400  	buf := make([]byte, size)
 13401  
 13402  	buf[b] = 15 // request opcode
 13403  	b += 1
 13404  
 13405  	b += 1 // padding
 13406  
 13407  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13408  	b += 2
 13409  
 13410  	xgb.Put32(buf[b:], uint32(Window))
 13411  	b += 4
 13412  
 13413  	return buf
 13414  }
 13415  
 13416  // RecolorCursorCookie is a cookie used only for RecolorCursor requests.
 13417  type RecolorCursorCookie struct {
 13418  	*xgb.Cookie
 13419  }
 13420  
 13421  // RecolorCursor sends an unchecked request.
 13422  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13423  func RecolorCursor(c *xgb.Conn, Cursor Cursor, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) RecolorCursorCookie {
 13424  	cookie := c.NewCookie(false, false)
 13425  	c.NewRequest(recolorCursorRequest(c, Cursor, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
 13426  	return RecolorCursorCookie{cookie}
 13427  }
 13428  
 13429  // RecolorCursorChecked sends a checked request.
 13430  // If an error occurs, it can be retrieved using RecolorCursorCookie.Check()
 13431  func RecolorCursorChecked(c *xgb.Conn, Cursor Cursor, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) RecolorCursorCookie {
 13432  	cookie := c.NewCookie(true, false)
 13433  	c.NewRequest(recolorCursorRequest(c, Cursor, ForeRed, ForeGreen, ForeBlue, BackRed, BackGreen, BackBlue), cookie)
 13434  	return RecolorCursorCookie{cookie}
 13435  }
 13436  
 13437  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13438  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13439  func (cook RecolorCursorCookie) Check() error {
 13440  	return cook.Cookie.Check()
 13441  }
 13442  
 13443  // Write request to wire for RecolorCursor
 13444  // recolorCursorRequest writes a RecolorCursor request to a byte slice.
 13445  func recolorCursorRequest(c *xgb.Conn, Cursor Cursor, ForeRed uint16, ForeGreen uint16, ForeBlue uint16, BackRed uint16, BackGreen uint16, BackBlue uint16) []byte {
 13446  	size := 20
 13447  	b := 0
 13448  	buf := make([]byte, size)
 13449  
 13450  	buf[b] = 96 // request opcode
 13451  	b += 1
 13452  
 13453  	b += 1 // padding
 13454  
 13455  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13456  	b += 2
 13457  
 13458  	xgb.Put32(buf[b:], uint32(Cursor))
 13459  	b += 4
 13460  
 13461  	xgb.Put16(buf[b:], ForeRed)
 13462  	b += 2
 13463  
 13464  	xgb.Put16(buf[b:], ForeGreen)
 13465  	b += 2
 13466  
 13467  	xgb.Put16(buf[b:], ForeBlue)
 13468  	b += 2
 13469  
 13470  	xgb.Put16(buf[b:], BackRed)
 13471  	b += 2
 13472  
 13473  	xgb.Put16(buf[b:], BackGreen)
 13474  	b += 2
 13475  
 13476  	xgb.Put16(buf[b:], BackBlue)
 13477  	b += 2
 13478  
 13479  	return buf
 13480  }
 13481  
 13482  // ReparentWindowCookie is a cookie used only for ReparentWindow requests.
 13483  type ReparentWindowCookie struct {
 13484  	*xgb.Cookie
 13485  }
 13486  
 13487  // ReparentWindow sends an unchecked request.
 13488  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13489  func ReparentWindow(c *xgb.Conn, Window Window, Parent Window, X int16, Y int16) ReparentWindowCookie {
 13490  	cookie := c.NewCookie(false, false)
 13491  	c.NewRequest(reparentWindowRequest(c, Window, Parent, X, Y), cookie)
 13492  	return ReparentWindowCookie{cookie}
 13493  }
 13494  
 13495  // ReparentWindowChecked sends a checked request.
 13496  // If an error occurs, it can be retrieved using ReparentWindowCookie.Check()
 13497  func ReparentWindowChecked(c *xgb.Conn, Window Window, Parent Window, X int16, Y int16) ReparentWindowCookie {
 13498  	cookie := c.NewCookie(true, false)
 13499  	c.NewRequest(reparentWindowRequest(c, Window, Parent, X, Y), cookie)
 13500  	return ReparentWindowCookie{cookie}
 13501  }
 13502  
 13503  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13504  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13505  func (cook ReparentWindowCookie) Check() error {
 13506  	return cook.Cookie.Check()
 13507  }
 13508  
 13509  // Write request to wire for ReparentWindow
 13510  // reparentWindowRequest writes a ReparentWindow request to a byte slice.
 13511  func reparentWindowRequest(c *xgb.Conn, Window Window, Parent Window, X int16, Y int16) []byte {
 13512  	size := 16
 13513  	b := 0
 13514  	buf := make([]byte, size)
 13515  
 13516  	buf[b] = 7 // request opcode
 13517  	b += 1
 13518  
 13519  	b += 1 // padding
 13520  
 13521  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13522  	b += 2
 13523  
 13524  	xgb.Put32(buf[b:], uint32(Window))
 13525  	b += 4
 13526  
 13527  	xgb.Put32(buf[b:], uint32(Parent))
 13528  	b += 4
 13529  
 13530  	xgb.Put16(buf[b:], uint16(X))
 13531  	b += 2
 13532  
 13533  	xgb.Put16(buf[b:], uint16(Y))
 13534  	b += 2
 13535  
 13536  	return buf
 13537  }
 13538  
 13539  // RotatePropertiesCookie is a cookie used only for RotateProperties requests.
 13540  type RotatePropertiesCookie struct {
 13541  	*xgb.Cookie
 13542  }
 13543  
 13544  // RotateProperties sends an unchecked request.
 13545  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13546  func RotateProperties(c *xgb.Conn, Window Window, AtomsLen uint16, Delta int16, Atoms []Atom) RotatePropertiesCookie {
 13547  	cookie := c.NewCookie(false, false)
 13548  	c.NewRequest(rotatePropertiesRequest(c, Window, AtomsLen, Delta, Atoms), cookie)
 13549  	return RotatePropertiesCookie{cookie}
 13550  }
 13551  
 13552  // RotatePropertiesChecked sends a checked request.
 13553  // If an error occurs, it can be retrieved using RotatePropertiesCookie.Check()
 13554  func RotatePropertiesChecked(c *xgb.Conn, Window Window, AtomsLen uint16, Delta int16, Atoms []Atom) RotatePropertiesCookie {
 13555  	cookie := c.NewCookie(true, false)
 13556  	c.NewRequest(rotatePropertiesRequest(c, Window, AtomsLen, Delta, Atoms), cookie)
 13557  	return RotatePropertiesCookie{cookie}
 13558  }
 13559  
 13560  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13561  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13562  func (cook RotatePropertiesCookie) Check() error {
 13563  	return cook.Cookie.Check()
 13564  }
 13565  
 13566  // Write request to wire for RotateProperties
 13567  // rotatePropertiesRequest writes a RotateProperties request to a byte slice.
 13568  func rotatePropertiesRequest(c *xgb.Conn, Window Window, AtomsLen uint16, Delta int16, Atoms []Atom) []byte {
 13569  	size := xgb.Pad((12 + xgb.Pad((int(AtomsLen) * 4))))
 13570  	b := 0
 13571  	buf := make([]byte, size)
 13572  
 13573  	buf[b] = 114 // request opcode
 13574  	b += 1
 13575  
 13576  	b += 1 // padding
 13577  
 13578  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13579  	b += 2
 13580  
 13581  	xgb.Put32(buf[b:], uint32(Window))
 13582  	b += 4
 13583  
 13584  	xgb.Put16(buf[b:], AtomsLen)
 13585  	b += 2
 13586  
 13587  	xgb.Put16(buf[b:], uint16(Delta))
 13588  	b += 2
 13589  
 13590  	for i := 0; i < int(AtomsLen); i++ {
 13591  		xgb.Put32(buf[b:], uint32(Atoms[i]))
 13592  		b += 4
 13593  	}
 13594  
 13595  	return buf
 13596  }
 13597  
 13598  // SendEventCookie is a cookie used only for SendEvent requests.
 13599  type SendEventCookie struct {
 13600  	*xgb.Cookie
 13601  }
 13602  
 13603  // SendEvent sends an unchecked request.
 13604  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13605  func SendEvent(c *xgb.Conn, Propagate bool, Destination Window, EventMask uint32, Event string) SendEventCookie {
 13606  	cookie := c.NewCookie(false, false)
 13607  	c.NewRequest(sendEventRequest(c, Propagate, Destination, EventMask, Event), cookie)
 13608  	return SendEventCookie{cookie}
 13609  }
 13610  
 13611  // SendEventChecked sends a checked request.
 13612  // If an error occurs, it can be retrieved using SendEventCookie.Check()
 13613  func SendEventChecked(c *xgb.Conn, Propagate bool, Destination Window, EventMask uint32, Event string) SendEventCookie {
 13614  	cookie := c.NewCookie(true, false)
 13615  	c.NewRequest(sendEventRequest(c, Propagate, Destination, EventMask, Event), cookie)
 13616  	return SendEventCookie{cookie}
 13617  }
 13618  
 13619  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13620  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13621  func (cook SendEventCookie) Check() error {
 13622  	return cook.Cookie.Check()
 13623  }
 13624  
 13625  // Write request to wire for SendEvent
 13626  // sendEventRequest writes a SendEvent request to a byte slice.
 13627  func sendEventRequest(c *xgb.Conn, Propagate bool, Destination Window, EventMask uint32, Event string) []byte {
 13628  	size := 44
 13629  	b := 0
 13630  	buf := make([]byte, size)
 13631  
 13632  	buf[b] = 25 // request opcode
 13633  	b += 1
 13634  
 13635  	if Propagate {
 13636  		buf[b] = 1
 13637  	} else {
 13638  		buf[b] = 0
 13639  	}
 13640  	b += 1
 13641  
 13642  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13643  	b += 2
 13644  
 13645  	xgb.Put32(buf[b:], uint32(Destination))
 13646  	b += 4
 13647  
 13648  	xgb.Put32(buf[b:], EventMask)
 13649  	b += 4
 13650  
 13651  	copy(buf[b:], Event[:32])
 13652  	b += int(32)
 13653  
 13654  	return buf
 13655  }
 13656  
 13657  // SetAccessControlCookie is a cookie used only for SetAccessControl requests.
 13658  type SetAccessControlCookie struct {
 13659  	*xgb.Cookie
 13660  }
 13661  
 13662  // SetAccessControl sends an unchecked request.
 13663  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13664  func SetAccessControl(c *xgb.Conn, Mode byte) SetAccessControlCookie {
 13665  	cookie := c.NewCookie(false, false)
 13666  	c.NewRequest(setAccessControlRequest(c, Mode), cookie)
 13667  	return SetAccessControlCookie{cookie}
 13668  }
 13669  
 13670  // SetAccessControlChecked sends a checked request.
 13671  // If an error occurs, it can be retrieved using SetAccessControlCookie.Check()
 13672  func SetAccessControlChecked(c *xgb.Conn, Mode byte) SetAccessControlCookie {
 13673  	cookie := c.NewCookie(true, false)
 13674  	c.NewRequest(setAccessControlRequest(c, Mode), cookie)
 13675  	return SetAccessControlCookie{cookie}
 13676  }
 13677  
 13678  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13679  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13680  func (cook SetAccessControlCookie) Check() error {
 13681  	return cook.Cookie.Check()
 13682  }
 13683  
 13684  // Write request to wire for SetAccessControl
 13685  // setAccessControlRequest writes a SetAccessControl request to a byte slice.
 13686  func setAccessControlRequest(c *xgb.Conn, Mode byte) []byte {
 13687  	size := 4
 13688  	b := 0
 13689  	buf := make([]byte, size)
 13690  
 13691  	buf[b] = 111 // request opcode
 13692  	b += 1
 13693  
 13694  	buf[b] = Mode
 13695  	b += 1
 13696  
 13697  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13698  	b += 2
 13699  
 13700  	return buf
 13701  }
 13702  
 13703  // SetClipRectanglesCookie is a cookie used only for SetClipRectangles requests.
 13704  type SetClipRectanglesCookie struct {
 13705  	*xgb.Cookie
 13706  }
 13707  
 13708  // SetClipRectangles sends an unchecked request.
 13709  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13710  func SetClipRectangles(c *xgb.Conn, Ordering byte, Gc Gcontext, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) SetClipRectanglesCookie {
 13711  	cookie := c.NewCookie(false, false)
 13712  	c.NewRequest(setClipRectanglesRequest(c, Ordering, Gc, ClipXOrigin, ClipYOrigin, Rectangles), cookie)
 13713  	return SetClipRectanglesCookie{cookie}
 13714  }
 13715  
 13716  // SetClipRectanglesChecked sends a checked request.
 13717  // If an error occurs, it can be retrieved using SetClipRectanglesCookie.Check()
 13718  func SetClipRectanglesChecked(c *xgb.Conn, Ordering byte, Gc Gcontext, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) SetClipRectanglesCookie {
 13719  	cookie := c.NewCookie(true, false)
 13720  	c.NewRequest(setClipRectanglesRequest(c, Ordering, Gc, ClipXOrigin, ClipYOrigin, Rectangles), cookie)
 13721  	return SetClipRectanglesCookie{cookie}
 13722  }
 13723  
 13724  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13725  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13726  func (cook SetClipRectanglesCookie) Check() error {
 13727  	return cook.Cookie.Check()
 13728  }
 13729  
 13730  // Write request to wire for SetClipRectangles
 13731  // setClipRectanglesRequest writes a SetClipRectangles request to a byte slice.
 13732  func setClipRectanglesRequest(c *xgb.Conn, Ordering byte, Gc Gcontext, ClipXOrigin int16, ClipYOrigin int16, Rectangles []Rectangle) []byte {
 13733  	size := xgb.Pad((12 + xgb.Pad((len(Rectangles) * 8))))
 13734  	b := 0
 13735  	buf := make([]byte, size)
 13736  
 13737  	buf[b] = 59 // request opcode
 13738  	b += 1
 13739  
 13740  	buf[b] = Ordering
 13741  	b += 1
 13742  
 13743  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13744  	b += 2
 13745  
 13746  	xgb.Put32(buf[b:], uint32(Gc))
 13747  	b += 4
 13748  
 13749  	xgb.Put16(buf[b:], uint16(ClipXOrigin))
 13750  	b += 2
 13751  
 13752  	xgb.Put16(buf[b:], uint16(ClipYOrigin))
 13753  	b += 2
 13754  
 13755  	b += RectangleListBytes(buf[b:], Rectangles)
 13756  
 13757  	return buf
 13758  }
 13759  
 13760  // SetCloseDownModeCookie is a cookie used only for SetCloseDownMode requests.
 13761  type SetCloseDownModeCookie struct {
 13762  	*xgb.Cookie
 13763  }
 13764  
 13765  // SetCloseDownMode sends an unchecked request.
 13766  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13767  func SetCloseDownMode(c *xgb.Conn, Mode byte) SetCloseDownModeCookie {
 13768  	cookie := c.NewCookie(false, false)
 13769  	c.NewRequest(setCloseDownModeRequest(c, Mode), cookie)
 13770  	return SetCloseDownModeCookie{cookie}
 13771  }
 13772  
 13773  // SetCloseDownModeChecked sends a checked request.
 13774  // If an error occurs, it can be retrieved using SetCloseDownModeCookie.Check()
 13775  func SetCloseDownModeChecked(c *xgb.Conn, Mode byte) SetCloseDownModeCookie {
 13776  	cookie := c.NewCookie(true, false)
 13777  	c.NewRequest(setCloseDownModeRequest(c, Mode), cookie)
 13778  	return SetCloseDownModeCookie{cookie}
 13779  }
 13780  
 13781  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13782  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13783  func (cook SetCloseDownModeCookie) Check() error {
 13784  	return cook.Cookie.Check()
 13785  }
 13786  
 13787  // Write request to wire for SetCloseDownMode
 13788  // setCloseDownModeRequest writes a SetCloseDownMode request to a byte slice.
 13789  func setCloseDownModeRequest(c *xgb.Conn, Mode byte) []byte {
 13790  	size := 4
 13791  	b := 0
 13792  	buf := make([]byte, size)
 13793  
 13794  	buf[b] = 112 // request opcode
 13795  	b += 1
 13796  
 13797  	buf[b] = Mode
 13798  	b += 1
 13799  
 13800  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13801  	b += 2
 13802  
 13803  	return buf
 13804  }
 13805  
 13806  // SetDashesCookie is a cookie used only for SetDashes requests.
 13807  type SetDashesCookie struct {
 13808  	*xgb.Cookie
 13809  }
 13810  
 13811  // SetDashes sends an unchecked request.
 13812  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13813  func SetDashes(c *xgb.Conn, Gc Gcontext, DashOffset uint16, DashesLen uint16, Dashes []byte) SetDashesCookie {
 13814  	cookie := c.NewCookie(false, false)
 13815  	c.NewRequest(setDashesRequest(c, Gc, DashOffset, DashesLen, Dashes), cookie)
 13816  	return SetDashesCookie{cookie}
 13817  }
 13818  
 13819  // SetDashesChecked sends a checked request.
 13820  // If an error occurs, it can be retrieved using SetDashesCookie.Check()
 13821  func SetDashesChecked(c *xgb.Conn, Gc Gcontext, DashOffset uint16, DashesLen uint16, Dashes []byte) SetDashesCookie {
 13822  	cookie := c.NewCookie(true, false)
 13823  	c.NewRequest(setDashesRequest(c, Gc, DashOffset, DashesLen, Dashes), cookie)
 13824  	return SetDashesCookie{cookie}
 13825  }
 13826  
 13827  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13828  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13829  func (cook SetDashesCookie) Check() error {
 13830  	return cook.Cookie.Check()
 13831  }
 13832  
 13833  // Write request to wire for SetDashes
 13834  // setDashesRequest writes a SetDashes request to a byte slice.
 13835  func setDashesRequest(c *xgb.Conn, Gc Gcontext, DashOffset uint16, DashesLen uint16, Dashes []byte) []byte {
 13836  	size := xgb.Pad((12 + xgb.Pad((int(DashesLen) * 1))))
 13837  	b := 0
 13838  	buf := make([]byte, size)
 13839  
 13840  	buf[b] = 58 // request opcode
 13841  	b += 1
 13842  
 13843  	b += 1 // padding
 13844  
 13845  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13846  	b += 2
 13847  
 13848  	xgb.Put32(buf[b:], uint32(Gc))
 13849  	b += 4
 13850  
 13851  	xgb.Put16(buf[b:], DashOffset)
 13852  	b += 2
 13853  
 13854  	xgb.Put16(buf[b:], DashesLen)
 13855  	b += 2
 13856  
 13857  	copy(buf[b:], Dashes[:DashesLen])
 13858  	b += int(DashesLen)
 13859  
 13860  	return buf
 13861  }
 13862  
 13863  // SetFontPathCookie is a cookie used only for SetFontPath requests.
 13864  type SetFontPathCookie struct {
 13865  	*xgb.Cookie
 13866  }
 13867  
 13868  // SetFontPath sends an unchecked request.
 13869  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13870  func SetFontPath(c *xgb.Conn, FontQty uint16, Font []Str) SetFontPathCookie {
 13871  	cookie := c.NewCookie(false, false)
 13872  	c.NewRequest(setFontPathRequest(c, FontQty, Font), cookie)
 13873  	return SetFontPathCookie{cookie}
 13874  }
 13875  
 13876  // SetFontPathChecked sends a checked request.
 13877  // If an error occurs, it can be retrieved using SetFontPathCookie.Check()
 13878  func SetFontPathChecked(c *xgb.Conn, FontQty uint16, Font []Str) SetFontPathCookie {
 13879  	cookie := c.NewCookie(true, false)
 13880  	c.NewRequest(setFontPathRequest(c, FontQty, Font), cookie)
 13881  	return SetFontPathCookie{cookie}
 13882  }
 13883  
 13884  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13885  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13886  func (cook SetFontPathCookie) Check() error {
 13887  	return cook.Cookie.Check()
 13888  }
 13889  
 13890  // Write request to wire for SetFontPath
 13891  // setFontPathRequest writes a SetFontPath request to a byte slice.
 13892  func setFontPathRequest(c *xgb.Conn, FontQty uint16, Font []Str) []byte {
 13893  	size := xgb.Pad((8 + StrListSize(Font)))
 13894  	b := 0
 13895  	buf := make([]byte, size)
 13896  
 13897  	buf[b] = 51 // request opcode
 13898  	b += 1
 13899  
 13900  	b += 1 // padding
 13901  
 13902  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13903  	b += 2
 13904  
 13905  	xgb.Put16(buf[b:], FontQty)
 13906  	b += 2
 13907  
 13908  	b += 2 // padding
 13909  
 13910  	b += StrListBytes(buf[b:], Font)
 13911  
 13912  	return buf
 13913  }
 13914  
 13915  // SetInputFocusCookie is a cookie used only for SetInputFocus requests.
 13916  type SetInputFocusCookie struct {
 13917  	*xgb.Cookie
 13918  }
 13919  
 13920  // SetInputFocus sends an unchecked request.
 13921  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13922  func SetInputFocus(c *xgb.Conn, RevertTo byte, Focus Window, Time Timestamp) SetInputFocusCookie {
 13923  	cookie := c.NewCookie(false, false)
 13924  	c.NewRequest(setInputFocusRequest(c, RevertTo, Focus, Time), cookie)
 13925  	return SetInputFocusCookie{cookie}
 13926  }
 13927  
 13928  // SetInputFocusChecked sends a checked request.
 13929  // If an error occurs, it can be retrieved using SetInputFocusCookie.Check()
 13930  func SetInputFocusChecked(c *xgb.Conn, RevertTo byte, Focus Window, Time Timestamp) SetInputFocusCookie {
 13931  	cookie := c.NewCookie(true, false)
 13932  	c.NewRequest(setInputFocusRequest(c, RevertTo, Focus, Time), cookie)
 13933  	return SetInputFocusCookie{cookie}
 13934  }
 13935  
 13936  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 13937  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 13938  func (cook SetInputFocusCookie) Check() error {
 13939  	return cook.Cookie.Check()
 13940  }
 13941  
 13942  // Write request to wire for SetInputFocus
 13943  // setInputFocusRequest writes a SetInputFocus request to a byte slice.
 13944  func setInputFocusRequest(c *xgb.Conn, RevertTo byte, Focus Window, Time Timestamp) []byte {
 13945  	size := 12
 13946  	b := 0
 13947  	buf := make([]byte, size)
 13948  
 13949  	buf[b] = 42 // request opcode
 13950  	b += 1
 13951  
 13952  	buf[b] = RevertTo
 13953  	b += 1
 13954  
 13955  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 13956  	b += 2
 13957  
 13958  	xgb.Put32(buf[b:], uint32(Focus))
 13959  	b += 4
 13960  
 13961  	xgb.Put32(buf[b:], uint32(Time))
 13962  	b += 4
 13963  
 13964  	return buf
 13965  }
 13966  
 13967  // SetModifierMappingCookie is a cookie used only for SetModifierMapping requests.
 13968  type SetModifierMappingCookie struct {
 13969  	*xgb.Cookie
 13970  }
 13971  
 13972  // SetModifierMapping sends a checked request.
 13973  // If an error occurs, it will be returned with the reply by calling SetModifierMappingCookie.Reply()
 13974  func SetModifierMapping(c *xgb.Conn, KeycodesPerModifier byte, Keycodes []Keycode) SetModifierMappingCookie {
 13975  	cookie := c.NewCookie(true, true)
 13976  	c.NewRequest(setModifierMappingRequest(c, KeycodesPerModifier, Keycodes), cookie)
 13977  	return SetModifierMappingCookie{cookie}
 13978  }
 13979  
 13980  // SetModifierMappingUnchecked sends an unchecked request.
 13981  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 13982  func SetModifierMappingUnchecked(c *xgb.Conn, KeycodesPerModifier byte, Keycodes []Keycode) SetModifierMappingCookie {
 13983  	cookie := c.NewCookie(false, true)
 13984  	c.NewRequest(setModifierMappingRequest(c, KeycodesPerModifier, Keycodes), cookie)
 13985  	return SetModifierMappingCookie{cookie}
 13986  }
 13987  
 13988  // SetModifierMappingReply represents the data returned from a SetModifierMapping request.
 13989  type SetModifierMappingReply struct {
 13990  	Sequence uint16 // sequence number of the request for this reply
 13991  	Length   uint32 // number of bytes in this reply
 13992  	Status   byte
 13993  }
 13994  
 13995  // Reply blocks and returns the reply data for a SetModifierMapping request.
 13996  func (cook SetModifierMappingCookie) Reply() (*SetModifierMappingReply, error) {
 13997  	buf, err := cook.Cookie.Reply()
 13998  	if err != nil {
 13999  		return nil, err
 14000  	}
 14001  	if buf == nil {
 14002  		return nil, nil
 14003  	}
 14004  	return setModifierMappingReply(buf), nil
 14005  }
 14006  
 14007  // setModifierMappingReply reads a byte slice into a SetModifierMappingReply value.
 14008  func setModifierMappingReply(buf []byte) *SetModifierMappingReply {
 14009  	v := new(SetModifierMappingReply)
 14010  	b := 1 // skip reply determinant
 14011  
 14012  	v.Status = buf[b]
 14013  	b += 1
 14014  
 14015  	v.Sequence = xgb.Get16(buf[b:])
 14016  	b += 2
 14017  
 14018  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 14019  	b += 4
 14020  
 14021  	return v
 14022  }
 14023  
 14024  // Write request to wire for SetModifierMapping
 14025  // setModifierMappingRequest writes a SetModifierMapping request to a byte slice.
 14026  func setModifierMappingRequest(c *xgb.Conn, KeycodesPerModifier byte, Keycodes []Keycode) []byte {
 14027  	size := xgb.Pad((4 + xgb.Pad(((int(KeycodesPerModifier) * 8) * 1))))
 14028  	b := 0
 14029  	buf := make([]byte, size)
 14030  
 14031  	buf[b] = 118 // request opcode
 14032  	b += 1
 14033  
 14034  	buf[b] = KeycodesPerModifier
 14035  	b += 1
 14036  
 14037  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14038  	b += 2
 14039  
 14040  	for i := 0; i < int((int(KeycodesPerModifier) * 8)); i++ {
 14041  		buf[b] = byte(Keycodes[i])
 14042  		b += 1
 14043  	}
 14044  
 14045  	return buf
 14046  }
 14047  
 14048  // SetPointerMappingCookie is a cookie used only for SetPointerMapping requests.
 14049  type SetPointerMappingCookie struct {
 14050  	*xgb.Cookie
 14051  }
 14052  
 14053  // SetPointerMapping sends a checked request.
 14054  // If an error occurs, it will be returned with the reply by calling SetPointerMappingCookie.Reply()
 14055  func SetPointerMapping(c *xgb.Conn, MapLen byte, Map []byte) SetPointerMappingCookie {
 14056  	cookie := c.NewCookie(true, true)
 14057  	c.NewRequest(setPointerMappingRequest(c, MapLen, Map), cookie)
 14058  	return SetPointerMappingCookie{cookie}
 14059  }
 14060  
 14061  // SetPointerMappingUnchecked sends an unchecked request.
 14062  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14063  func SetPointerMappingUnchecked(c *xgb.Conn, MapLen byte, Map []byte) SetPointerMappingCookie {
 14064  	cookie := c.NewCookie(false, true)
 14065  	c.NewRequest(setPointerMappingRequest(c, MapLen, Map), cookie)
 14066  	return SetPointerMappingCookie{cookie}
 14067  }
 14068  
 14069  // SetPointerMappingReply represents the data returned from a SetPointerMapping request.
 14070  type SetPointerMappingReply struct {
 14071  	Sequence uint16 // sequence number of the request for this reply
 14072  	Length   uint32 // number of bytes in this reply
 14073  	Status   byte
 14074  }
 14075  
 14076  // Reply blocks and returns the reply data for a SetPointerMapping request.
 14077  func (cook SetPointerMappingCookie) Reply() (*SetPointerMappingReply, error) {
 14078  	buf, err := cook.Cookie.Reply()
 14079  	if err != nil {
 14080  		return nil, err
 14081  	}
 14082  	if buf == nil {
 14083  		return nil, nil
 14084  	}
 14085  	return setPointerMappingReply(buf), nil
 14086  }
 14087  
 14088  // setPointerMappingReply reads a byte slice into a SetPointerMappingReply value.
 14089  func setPointerMappingReply(buf []byte) *SetPointerMappingReply {
 14090  	v := new(SetPointerMappingReply)
 14091  	b := 1 // skip reply determinant
 14092  
 14093  	v.Status = buf[b]
 14094  	b += 1
 14095  
 14096  	v.Sequence = xgb.Get16(buf[b:])
 14097  	b += 2
 14098  
 14099  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 14100  	b += 4
 14101  
 14102  	return v
 14103  }
 14104  
 14105  // Write request to wire for SetPointerMapping
 14106  // setPointerMappingRequest writes a SetPointerMapping request to a byte slice.
 14107  func setPointerMappingRequest(c *xgb.Conn, MapLen byte, Map []byte) []byte {
 14108  	size := xgb.Pad((4 + xgb.Pad((int(MapLen) * 1))))
 14109  	b := 0
 14110  	buf := make([]byte, size)
 14111  
 14112  	buf[b] = 116 // request opcode
 14113  	b += 1
 14114  
 14115  	buf[b] = MapLen
 14116  	b += 1
 14117  
 14118  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14119  	b += 2
 14120  
 14121  	copy(buf[b:], Map[:MapLen])
 14122  	b += int(MapLen)
 14123  
 14124  	return buf
 14125  }
 14126  
 14127  // SetScreenSaverCookie is a cookie used only for SetScreenSaver requests.
 14128  type SetScreenSaverCookie struct {
 14129  	*xgb.Cookie
 14130  }
 14131  
 14132  // SetScreenSaver sends an unchecked request.
 14133  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14134  func SetScreenSaver(c *xgb.Conn, Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) SetScreenSaverCookie {
 14135  	cookie := c.NewCookie(false, false)
 14136  	c.NewRequest(setScreenSaverRequest(c, Timeout, Interval, PreferBlanking, AllowExposures), cookie)
 14137  	return SetScreenSaverCookie{cookie}
 14138  }
 14139  
 14140  // SetScreenSaverChecked sends a checked request.
 14141  // If an error occurs, it can be retrieved using SetScreenSaverCookie.Check()
 14142  func SetScreenSaverChecked(c *xgb.Conn, Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) SetScreenSaverCookie {
 14143  	cookie := c.NewCookie(true, false)
 14144  	c.NewRequest(setScreenSaverRequest(c, Timeout, Interval, PreferBlanking, AllowExposures), cookie)
 14145  	return SetScreenSaverCookie{cookie}
 14146  }
 14147  
 14148  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14149  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14150  func (cook SetScreenSaverCookie) Check() error {
 14151  	return cook.Cookie.Check()
 14152  }
 14153  
 14154  // Write request to wire for SetScreenSaver
 14155  // setScreenSaverRequest writes a SetScreenSaver request to a byte slice.
 14156  func setScreenSaverRequest(c *xgb.Conn, Timeout int16, Interval int16, PreferBlanking byte, AllowExposures byte) []byte {
 14157  	size := 12
 14158  	b := 0
 14159  	buf := make([]byte, size)
 14160  
 14161  	buf[b] = 107 // request opcode
 14162  	b += 1
 14163  
 14164  	b += 1 // padding
 14165  
 14166  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14167  	b += 2
 14168  
 14169  	xgb.Put16(buf[b:], uint16(Timeout))
 14170  	b += 2
 14171  
 14172  	xgb.Put16(buf[b:], uint16(Interval))
 14173  	b += 2
 14174  
 14175  	buf[b] = PreferBlanking
 14176  	b += 1
 14177  
 14178  	buf[b] = AllowExposures
 14179  	b += 1
 14180  
 14181  	return buf
 14182  }
 14183  
 14184  // SetSelectionOwnerCookie is a cookie used only for SetSelectionOwner requests.
 14185  type SetSelectionOwnerCookie struct {
 14186  	*xgb.Cookie
 14187  }
 14188  
 14189  // SetSelectionOwner sends an unchecked request.
 14190  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14191  func SetSelectionOwner(c *xgb.Conn, Owner Window, Selection Atom, Time Timestamp) SetSelectionOwnerCookie {
 14192  	cookie := c.NewCookie(false, false)
 14193  	c.NewRequest(setSelectionOwnerRequest(c, Owner, Selection, Time), cookie)
 14194  	return SetSelectionOwnerCookie{cookie}
 14195  }
 14196  
 14197  // SetSelectionOwnerChecked sends a checked request.
 14198  // If an error occurs, it can be retrieved using SetSelectionOwnerCookie.Check()
 14199  func SetSelectionOwnerChecked(c *xgb.Conn, Owner Window, Selection Atom, Time Timestamp) SetSelectionOwnerCookie {
 14200  	cookie := c.NewCookie(true, false)
 14201  	c.NewRequest(setSelectionOwnerRequest(c, Owner, Selection, Time), cookie)
 14202  	return SetSelectionOwnerCookie{cookie}
 14203  }
 14204  
 14205  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14206  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14207  func (cook SetSelectionOwnerCookie) Check() error {
 14208  	return cook.Cookie.Check()
 14209  }
 14210  
 14211  // Write request to wire for SetSelectionOwner
 14212  // setSelectionOwnerRequest writes a SetSelectionOwner request to a byte slice.
 14213  func setSelectionOwnerRequest(c *xgb.Conn, Owner Window, Selection Atom, Time Timestamp) []byte {
 14214  	size := 16
 14215  	b := 0
 14216  	buf := make([]byte, size)
 14217  
 14218  	buf[b] = 22 // request opcode
 14219  	b += 1
 14220  
 14221  	b += 1 // padding
 14222  
 14223  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14224  	b += 2
 14225  
 14226  	xgb.Put32(buf[b:], uint32(Owner))
 14227  	b += 4
 14228  
 14229  	xgb.Put32(buf[b:], uint32(Selection))
 14230  	b += 4
 14231  
 14232  	xgb.Put32(buf[b:], uint32(Time))
 14233  	b += 4
 14234  
 14235  	return buf
 14236  }
 14237  
 14238  // StoreColorsCookie is a cookie used only for StoreColors requests.
 14239  type StoreColorsCookie struct {
 14240  	*xgb.Cookie
 14241  }
 14242  
 14243  // StoreColors sends an unchecked request.
 14244  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14245  func StoreColors(c *xgb.Conn, Cmap Colormap, Items []Coloritem) StoreColorsCookie {
 14246  	cookie := c.NewCookie(false, false)
 14247  	c.NewRequest(storeColorsRequest(c, Cmap, Items), cookie)
 14248  	return StoreColorsCookie{cookie}
 14249  }
 14250  
 14251  // StoreColorsChecked sends a checked request.
 14252  // If an error occurs, it can be retrieved using StoreColorsCookie.Check()
 14253  func StoreColorsChecked(c *xgb.Conn, Cmap Colormap, Items []Coloritem) StoreColorsCookie {
 14254  	cookie := c.NewCookie(true, false)
 14255  	c.NewRequest(storeColorsRequest(c, Cmap, Items), cookie)
 14256  	return StoreColorsCookie{cookie}
 14257  }
 14258  
 14259  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14260  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14261  func (cook StoreColorsCookie) Check() error {
 14262  	return cook.Cookie.Check()
 14263  }
 14264  
 14265  // Write request to wire for StoreColors
 14266  // storeColorsRequest writes a StoreColors request to a byte slice.
 14267  func storeColorsRequest(c *xgb.Conn, Cmap Colormap, Items []Coloritem) []byte {
 14268  	size := xgb.Pad((8 + xgb.Pad((len(Items) * 12))))
 14269  	b := 0
 14270  	buf := make([]byte, size)
 14271  
 14272  	buf[b] = 89 // request opcode
 14273  	b += 1
 14274  
 14275  	b += 1 // padding
 14276  
 14277  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14278  	b += 2
 14279  
 14280  	xgb.Put32(buf[b:], uint32(Cmap))
 14281  	b += 4
 14282  
 14283  	b += ColoritemListBytes(buf[b:], Items)
 14284  
 14285  	return buf
 14286  }
 14287  
 14288  // StoreNamedColorCookie is a cookie used only for StoreNamedColor requests.
 14289  type StoreNamedColorCookie struct {
 14290  	*xgb.Cookie
 14291  }
 14292  
 14293  // StoreNamedColor sends an unchecked request.
 14294  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14295  func StoreNamedColor(c *xgb.Conn, Flags byte, Cmap Colormap, Pixel uint32, NameLen uint16, Name string) StoreNamedColorCookie {
 14296  	cookie := c.NewCookie(false, false)
 14297  	c.NewRequest(storeNamedColorRequest(c, Flags, Cmap, Pixel, NameLen, Name), cookie)
 14298  	return StoreNamedColorCookie{cookie}
 14299  }
 14300  
 14301  // StoreNamedColorChecked sends a checked request.
 14302  // If an error occurs, it can be retrieved using StoreNamedColorCookie.Check()
 14303  func StoreNamedColorChecked(c *xgb.Conn, Flags byte, Cmap Colormap, Pixel uint32, NameLen uint16, Name string) StoreNamedColorCookie {
 14304  	cookie := c.NewCookie(true, false)
 14305  	c.NewRequest(storeNamedColorRequest(c, Flags, Cmap, Pixel, NameLen, Name), cookie)
 14306  	return StoreNamedColorCookie{cookie}
 14307  }
 14308  
 14309  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14310  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14311  func (cook StoreNamedColorCookie) Check() error {
 14312  	return cook.Cookie.Check()
 14313  }
 14314  
 14315  // Write request to wire for StoreNamedColor
 14316  // storeNamedColorRequest writes a StoreNamedColor request to a byte slice.
 14317  func storeNamedColorRequest(c *xgb.Conn, Flags byte, Cmap Colormap, Pixel uint32, NameLen uint16, Name string) []byte {
 14318  	size := xgb.Pad((16 + xgb.Pad((int(NameLen) * 1))))
 14319  	b := 0
 14320  	buf := make([]byte, size)
 14321  
 14322  	buf[b] = 90 // request opcode
 14323  	b += 1
 14324  
 14325  	buf[b] = Flags
 14326  	b += 1
 14327  
 14328  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14329  	b += 2
 14330  
 14331  	xgb.Put32(buf[b:], uint32(Cmap))
 14332  	b += 4
 14333  
 14334  	xgb.Put32(buf[b:], Pixel)
 14335  	b += 4
 14336  
 14337  	xgb.Put16(buf[b:], NameLen)
 14338  	b += 2
 14339  
 14340  	b += 2 // padding
 14341  
 14342  	copy(buf[b:], Name[:NameLen])
 14343  	b += int(NameLen)
 14344  
 14345  	return buf
 14346  }
 14347  
 14348  // TranslateCoordinatesCookie is a cookie used only for TranslateCoordinates requests.
 14349  type TranslateCoordinatesCookie struct {
 14350  	*xgb.Cookie
 14351  }
 14352  
 14353  // TranslateCoordinates sends a checked request.
 14354  // If an error occurs, it will be returned with the reply by calling TranslateCoordinatesCookie.Reply()
 14355  func TranslateCoordinates(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16) TranslateCoordinatesCookie {
 14356  	cookie := c.NewCookie(true, true)
 14357  	c.NewRequest(translateCoordinatesRequest(c, SrcWindow, DstWindow, SrcX, SrcY), cookie)
 14358  	return TranslateCoordinatesCookie{cookie}
 14359  }
 14360  
 14361  // TranslateCoordinatesUnchecked sends an unchecked request.
 14362  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14363  func TranslateCoordinatesUnchecked(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16) TranslateCoordinatesCookie {
 14364  	cookie := c.NewCookie(false, true)
 14365  	c.NewRequest(translateCoordinatesRequest(c, SrcWindow, DstWindow, SrcX, SrcY), cookie)
 14366  	return TranslateCoordinatesCookie{cookie}
 14367  }
 14368  
 14369  // TranslateCoordinatesReply represents the data returned from a TranslateCoordinates request.
 14370  type TranslateCoordinatesReply struct {
 14371  	Sequence   uint16 // sequence number of the request for this reply
 14372  	Length     uint32 // number of bytes in this reply
 14373  	SameScreen bool
 14374  	Child      Window
 14375  	DstX       int16
 14376  	DstY       int16
 14377  }
 14378  
 14379  // Reply blocks and returns the reply data for a TranslateCoordinates request.
 14380  func (cook TranslateCoordinatesCookie) Reply() (*TranslateCoordinatesReply, error) {
 14381  	buf, err := cook.Cookie.Reply()
 14382  	if err != nil {
 14383  		return nil, err
 14384  	}
 14385  	if buf == nil {
 14386  		return nil, nil
 14387  	}
 14388  	return translateCoordinatesReply(buf), nil
 14389  }
 14390  
 14391  // translateCoordinatesReply reads a byte slice into a TranslateCoordinatesReply value.
 14392  func translateCoordinatesReply(buf []byte) *TranslateCoordinatesReply {
 14393  	v := new(TranslateCoordinatesReply)
 14394  	b := 1 // skip reply determinant
 14395  
 14396  	if buf[b] == 1 {
 14397  		v.SameScreen = true
 14398  	} else {
 14399  		v.SameScreen = false
 14400  	}
 14401  	b += 1
 14402  
 14403  	v.Sequence = xgb.Get16(buf[b:])
 14404  	b += 2
 14405  
 14406  	v.Length = xgb.Get32(buf[b:]) // 4-byte units
 14407  	b += 4
 14408  
 14409  	v.Child = Window(xgb.Get32(buf[b:]))
 14410  	b += 4
 14411  
 14412  	v.DstX = int16(xgb.Get16(buf[b:]))
 14413  	b += 2
 14414  
 14415  	v.DstY = int16(xgb.Get16(buf[b:]))
 14416  	b += 2
 14417  
 14418  	return v
 14419  }
 14420  
 14421  // Write request to wire for TranslateCoordinates
 14422  // translateCoordinatesRequest writes a TranslateCoordinates request to a byte slice.
 14423  func translateCoordinatesRequest(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16) []byte {
 14424  	size := 16
 14425  	b := 0
 14426  	buf := make([]byte, size)
 14427  
 14428  	buf[b] = 40 // request opcode
 14429  	b += 1
 14430  
 14431  	b += 1 // padding
 14432  
 14433  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14434  	b += 2
 14435  
 14436  	xgb.Put32(buf[b:], uint32(SrcWindow))
 14437  	b += 4
 14438  
 14439  	xgb.Put32(buf[b:], uint32(DstWindow))
 14440  	b += 4
 14441  
 14442  	xgb.Put16(buf[b:], uint16(SrcX))
 14443  	b += 2
 14444  
 14445  	xgb.Put16(buf[b:], uint16(SrcY))
 14446  	b += 2
 14447  
 14448  	return buf
 14449  }
 14450  
 14451  // UngrabButtonCookie is a cookie used only for UngrabButton requests.
 14452  type UngrabButtonCookie struct {
 14453  	*xgb.Cookie
 14454  }
 14455  
 14456  // UngrabButton sends an unchecked request.
 14457  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14458  func UngrabButton(c *xgb.Conn, Button byte, GrabWindow Window, Modifiers uint16) UngrabButtonCookie {
 14459  	cookie := c.NewCookie(false, false)
 14460  	c.NewRequest(ungrabButtonRequest(c, Button, GrabWindow, Modifiers), cookie)
 14461  	return UngrabButtonCookie{cookie}
 14462  }
 14463  
 14464  // UngrabButtonChecked sends a checked request.
 14465  // If an error occurs, it can be retrieved using UngrabButtonCookie.Check()
 14466  func UngrabButtonChecked(c *xgb.Conn, Button byte, GrabWindow Window, Modifiers uint16) UngrabButtonCookie {
 14467  	cookie := c.NewCookie(true, false)
 14468  	c.NewRequest(ungrabButtonRequest(c, Button, GrabWindow, Modifiers), cookie)
 14469  	return UngrabButtonCookie{cookie}
 14470  }
 14471  
 14472  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14473  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14474  func (cook UngrabButtonCookie) Check() error {
 14475  	return cook.Cookie.Check()
 14476  }
 14477  
 14478  // Write request to wire for UngrabButton
 14479  // ungrabButtonRequest writes a UngrabButton request to a byte slice.
 14480  func ungrabButtonRequest(c *xgb.Conn, Button byte, GrabWindow Window, Modifiers uint16) []byte {
 14481  	size := 12
 14482  	b := 0
 14483  	buf := make([]byte, size)
 14484  
 14485  	buf[b] = 29 // request opcode
 14486  	b += 1
 14487  
 14488  	buf[b] = Button
 14489  	b += 1
 14490  
 14491  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14492  	b += 2
 14493  
 14494  	xgb.Put32(buf[b:], uint32(GrabWindow))
 14495  	b += 4
 14496  
 14497  	xgb.Put16(buf[b:], Modifiers)
 14498  	b += 2
 14499  
 14500  	b += 2 // padding
 14501  
 14502  	return buf
 14503  }
 14504  
 14505  // UngrabKeyCookie is a cookie used only for UngrabKey requests.
 14506  type UngrabKeyCookie struct {
 14507  	*xgb.Cookie
 14508  }
 14509  
 14510  // UngrabKey sends an unchecked request.
 14511  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14512  func UngrabKey(c *xgb.Conn, Key Keycode, GrabWindow Window, Modifiers uint16) UngrabKeyCookie {
 14513  	cookie := c.NewCookie(false, false)
 14514  	c.NewRequest(ungrabKeyRequest(c, Key, GrabWindow, Modifiers), cookie)
 14515  	return UngrabKeyCookie{cookie}
 14516  }
 14517  
 14518  // UngrabKeyChecked sends a checked request.
 14519  // If an error occurs, it can be retrieved using UngrabKeyCookie.Check()
 14520  func UngrabKeyChecked(c *xgb.Conn, Key Keycode, GrabWindow Window, Modifiers uint16) UngrabKeyCookie {
 14521  	cookie := c.NewCookie(true, false)
 14522  	c.NewRequest(ungrabKeyRequest(c, Key, GrabWindow, Modifiers), cookie)
 14523  	return UngrabKeyCookie{cookie}
 14524  }
 14525  
 14526  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14527  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14528  func (cook UngrabKeyCookie) Check() error {
 14529  	return cook.Cookie.Check()
 14530  }
 14531  
 14532  // Write request to wire for UngrabKey
 14533  // ungrabKeyRequest writes a UngrabKey request to a byte slice.
 14534  func ungrabKeyRequest(c *xgb.Conn, Key Keycode, GrabWindow Window, Modifiers uint16) []byte {
 14535  	size := 12
 14536  	b := 0
 14537  	buf := make([]byte, size)
 14538  
 14539  	buf[b] = 34 // request opcode
 14540  	b += 1
 14541  
 14542  	buf[b] = byte(Key)
 14543  	b += 1
 14544  
 14545  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14546  	b += 2
 14547  
 14548  	xgb.Put32(buf[b:], uint32(GrabWindow))
 14549  	b += 4
 14550  
 14551  	xgb.Put16(buf[b:], Modifiers)
 14552  	b += 2
 14553  
 14554  	b += 2 // padding
 14555  
 14556  	return buf
 14557  }
 14558  
 14559  // UngrabKeyboardCookie is a cookie used only for UngrabKeyboard requests.
 14560  type UngrabKeyboardCookie struct {
 14561  	*xgb.Cookie
 14562  }
 14563  
 14564  // UngrabKeyboard sends an unchecked request.
 14565  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14566  func UngrabKeyboard(c *xgb.Conn, Time Timestamp) UngrabKeyboardCookie {
 14567  	cookie := c.NewCookie(false, false)
 14568  	c.NewRequest(ungrabKeyboardRequest(c, Time), cookie)
 14569  	return UngrabKeyboardCookie{cookie}
 14570  }
 14571  
 14572  // UngrabKeyboardChecked sends a checked request.
 14573  // If an error occurs, it can be retrieved using UngrabKeyboardCookie.Check()
 14574  func UngrabKeyboardChecked(c *xgb.Conn, Time Timestamp) UngrabKeyboardCookie {
 14575  	cookie := c.NewCookie(true, false)
 14576  	c.NewRequest(ungrabKeyboardRequest(c, Time), cookie)
 14577  	return UngrabKeyboardCookie{cookie}
 14578  }
 14579  
 14580  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14581  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14582  func (cook UngrabKeyboardCookie) Check() error {
 14583  	return cook.Cookie.Check()
 14584  }
 14585  
 14586  // Write request to wire for UngrabKeyboard
 14587  // ungrabKeyboardRequest writes a UngrabKeyboard request to a byte slice.
 14588  func ungrabKeyboardRequest(c *xgb.Conn, Time Timestamp) []byte {
 14589  	size := 8
 14590  	b := 0
 14591  	buf := make([]byte, size)
 14592  
 14593  	buf[b] = 32 // request opcode
 14594  	b += 1
 14595  
 14596  	b += 1 // padding
 14597  
 14598  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14599  	b += 2
 14600  
 14601  	xgb.Put32(buf[b:], uint32(Time))
 14602  	b += 4
 14603  
 14604  	return buf
 14605  }
 14606  
 14607  // UngrabPointerCookie is a cookie used only for UngrabPointer requests.
 14608  type UngrabPointerCookie struct {
 14609  	*xgb.Cookie
 14610  }
 14611  
 14612  // UngrabPointer sends an unchecked request.
 14613  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14614  func UngrabPointer(c *xgb.Conn, Time Timestamp) UngrabPointerCookie {
 14615  	cookie := c.NewCookie(false, false)
 14616  	c.NewRequest(ungrabPointerRequest(c, Time), cookie)
 14617  	return UngrabPointerCookie{cookie}
 14618  }
 14619  
 14620  // UngrabPointerChecked sends a checked request.
 14621  // If an error occurs, it can be retrieved using UngrabPointerCookie.Check()
 14622  func UngrabPointerChecked(c *xgb.Conn, Time Timestamp) UngrabPointerCookie {
 14623  	cookie := c.NewCookie(true, false)
 14624  	c.NewRequest(ungrabPointerRequest(c, Time), cookie)
 14625  	return UngrabPointerCookie{cookie}
 14626  }
 14627  
 14628  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14629  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14630  func (cook UngrabPointerCookie) Check() error {
 14631  	return cook.Cookie.Check()
 14632  }
 14633  
 14634  // Write request to wire for UngrabPointer
 14635  // ungrabPointerRequest writes a UngrabPointer request to a byte slice.
 14636  func ungrabPointerRequest(c *xgb.Conn, Time Timestamp) []byte {
 14637  	size := 8
 14638  	b := 0
 14639  	buf := make([]byte, size)
 14640  
 14641  	buf[b] = 27 // request opcode
 14642  	b += 1
 14643  
 14644  	b += 1 // padding
 14645  
 14646  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14647  	b += 2
 14648  
 14649  	xgb.Put32(buf[b:], uint32(Time))
 14650  	b += 4
 14651  
 14652  	return buf
 14653  }
 14654  
 14655  // UngrabServerCookie is a cookie used only for UngrabServer requests.
 14656  type UngrabServerCookie struct {
 14657  	*xgb.Cookie
 14658  }
 14659  
 14660  // UngrabServer sends an unchecked request.
 14661  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14662  func UngrabServer(c *xgb.Conn) UngrabServerCookie {
 14663  	cookie := c.NewCookie(false, false)
 14664  	c.NewRequest(ungrabServerRequest(c), cookie)
 14665  	return UngrabServerCookie{cookie}
 14666  }
 14667  
 14668  // UngrabServerChecked sends a checked request.
 14669  // If an error occurs, it can be retrieved using UngrabServerCookie.Check()
 14670  func UngrabServerChecked(c *xgb.Conn) UngrabServerCookie {
 14671  	cookie := c.NewCookie(true, false)
 14672  	c.NewRequest(ungrabServerRequest(c), cookie)
 14673  	return UngrabServerCookie{cookie}
 14674  }
 14675  
 14676  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14677  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14678  func (cook UngrabServerCookie) Check() error {
 14679  	return cook.Cookie.Check()
 14680  }
 14681  
 14682  // Write request to wire for UngrabServer
 14683  // ungrabServerRequest writes a UngrabServer request to a byte slice.
 14684  func ungrabServerRequest(c *xgb.Conn) []byte {
 14685  	size := 4
 14686  	b := 0
 14687  	buf := make([]byte, size)
 14688  
 14689  	buf[b] = 37 // request opcode
 14690  	b += 1
 14691  
 14692  	b += 1                             // padding
 14693  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14694  	b += 2
 14695  
 14696  	return buf
 14697  }
 14698  
 14699  // UninstallColormapCookie is a cookie used only for UninstallColormap requests.
 14700  type UninstallColormapCookie struct {
 14701  	*xgb.Cookie
 14702  }
 14703  
 14704  // UninstallColormap sends an unchecked request.
 14705  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14706  func UninstallColormap(c *xgb.Conn, Cmap Colormap) UninstallColormapCookie {
 14707  	cookie := c.NewCookie(false, false)
 14708  	c.NewRequest(uninstallColormapRequest(c, Cmap), cookie)
 14709  	return UninstallColormapCookie{cookie}
 14710  }
 14711  
 14712  // UninstallColormapChecked sends a checked request.
 14713  // If an error occurs, it can be retrieved using UninstallColormapCookie.Check()
 14714  func UninstallColormapChecked(c *xgb.Conn, Cmap Colormap) UninstallColormapCookie {
 14715  	cookie := c.NewCookie(true, false)
 14716  	c.NewRequest(uninstallColormapRequest(c, Cmap), cookie)
 14717  	return UninstallColormapCookie{cookie}
 14718  }
 14719  
 14720  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14721  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14722  func (cook UninstallColormapCookie) Check() error {
 14723  	return cook.Cookie.Check()
 14724  }
 14725  
 14726  // Write request to wire for UninstallColormap
 14727  // uninstallColormapRequest writes a UninstallColormap request to a byte slice.
 14728  func uninstallColormapRequest(c *xgb.Conn, Cmap Colormap) []byte {
 14729  	size := 8
 14730  	b := 0
 14731  	buf := make([]byte, size)
 14732  
 14733  	buf[b] = 82 // request opcode
 14734  	b += 1
 14735  
 14736  	b += 1 // padding
 14737  
 14738  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14739  	b += 2
 14740  
 14741  	xgb.Put32(buf[b:], uint32(Cmap))
 14742  	b += 4
 14743  
 14744  	return buf
 14745  }
 14746  
 14747  // UnmapSubwindowsCookie is a cookie used only for UnmapSubwindows requests.
 14748  type UnmapSubwindowsCookie struct {
 14749  	*xgb.Cookie
 14750  }
 14751  
 14752  // UnmapSubwindows sends an unchecked request.
 14753  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14754  func UnmapSubwindows(c *xgb.Conn, Window Window) UnmapSubwindowsCookie {
 14755  	cookie := c.NewCookie(false, false)
 14756  	c.NewRequest(unmapSubwindowsRequest(c, Window), cookie)
 14757  	return UnmapSubwindowsCookie{cookie}
 14758  }
 14759  
 14760  // UnmapSubwindowsChecked sends a checked request.
 14761  // If an error occurs, it can be retrieved using UnmapSubwindowsCookie.Check()
 14762  func UnmapSubwindowsChecked(c *xgb.Conn, Window Window) UnmapSubwindowsCookie {
 14763  	cookie := c.NewCookie(true, false)
 14764  	c.NewRequest(unmapSubwindowsRequest(c, Window), cookie)
 14765  	return UnmapSubwindowsCookie{cookie}
 14766  }
 14767  
 14768  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14769  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14770  func (cook UnmapSubwindowsCookie) Check() error {
 14771  	return cook.Cookie.Check()
 14772  }
 14773  
 14774  // Write request to wire for UnmapSubwindows
 14775  // unmapSubwindowsRequest writes a UnmapSubwindows request to a byte slice.
 14776  func unmapSubwindowsRequest(c *xgb.Conn, Window Window) []byte {
 14777  	size := 8
 14778  	b := 0
 14779  	buf := make([]byte, size)
 14780  
 14781  	buf[b] = 11 // request opcode
 14782  	b += 1
 14783  
 14784  	b += 1 // padding
 14785  
 14786  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14787  	b += 2
 14788  
 14789  	xgb.Put32(buf[b:], uint32(Window))
 14790  	b += 4
 14791  
 14792  	return buf
 14793  }
 14794  
 14795  // UnmapWindowCookie is a cookie used only for UnmapWindow requests.
 14796  type UnmapWindowCookie struct {
 14797  	*xgb.Cookie
 14798  }
 14799  
 14800  // UnmapWindow sends an unchecked request.
 14801  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14802  func UnmapWindow(c *xgb.Conn, Window Window) UnmapWindowCookie {
 14803  	cookie := c.NewCookie(false, false)
 14804  	c.NewRequest(unmapWindowRequest(c, Window), cookie)
 14805  	return UnmapWindowCookie{cookie}
 14806  }
 14807  
 14808  // UnmapWindowChecked sends a checked request.
 14809  // If an error occurs, it can be retrieved using UnmapWindowCookie.Check()
 14810  func UnmapWindowChecked(c *xgb.Conn, Window Window) UnmapWindowCookie {
 14811  	cookie := c.NewCookie(true, false)
 14812  	c.NewRequest(unmapWindowRequest(c, Window), cookie)
 14813  	return UnmapWindowCookie{cookie}
 14814  }
 14815  
 14816  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14817  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14818  func (cook UnmapWindowCookie) Check() error {
 14819  	return cook.Cookie.Check()
 14820  }
 14821  
 14822  // Write request to wire for UnmapWindow
 14823  // unmapWindowRequest writes a UnmapWindow request to a byte slice.
 14824  func unmapWindowRequest(c *xgb.Conn, Window Window) []byte {
 14825  	size := 8
 14826  	b := 0
 14827  	buf := make([]byte, size)
 14828  
 14829  	buf[b] = 10 // request opcode
 14830  	b += 1
 14831  
 14832  	b += 1 // padding
 14833  
 14834  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14835  	b += 2
 14836  
 14837  	xgb.Put32(buf[b:], uint32(Window))
 14838  	b += 4
 14839  
 14840  	return buf
 14841  }
 14842  
 14843  // WarpPointerCookie is a cookie used only for WarpPointer requests.
 14844  type WarpPointerCookie struct {
 14845  	*xgb.Cookie
 14846  }
 14847  
 14848  // WarpPointer sends an unchecked request.
 14849  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
 14850  func WarpPointer(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) WarpPointerCookie {
 14851  	cookie := c.NewCookie(false, false)
 14852  	c.NewRequest(warpPointerRequest(c, SrcWindow, DstWindow, SrcX, SrcY, SrcWidth, SrcHeight, DstX, DstY), cookie)
 14853  	return WarpPointerCookie{cookie}
 14854  }
 14855  
 14856  // WarpPointerChecked sends a checked request.
 14857  // If an error occurs, it can be retrieved using WarpPointerCookie.Check()
 14858  func WarpPointerChecked(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) WarpPointerCookie {
 14859  	cookie := c.NewCookie(true, false)
 14860  	c.NewRequest(warpPointerRequest(c, SrcWindow, DstWindow, SrcX, SrcY, SrcWidth, SrcHeight, DstX, DstY), cookie)
 14861  	return WarpPointerCookie{cookie}
 14862  }
 14863  
 14864  // Check returns an error if one occurred for checked requests that are not expecting a reply.
 14865  // This cannot be called for requests expecting a reply, nor for unchecked requests.
 14866  func (cook WarpPointerCookie) Check() error {
 14867  	return cook.Cookie.Check()
 14868  }
 14869  
 14870  // Write request to wire for WarpPointer
 14871  // warpPointerRequest writes a WarpPointer request to a byte slice.
 14872  func warpPointerRequest(c *xgb.Conn, SrcWindow Window, DstWindow Window, SrcX int16, SrcY int16, SrcWidth uint16, SrcHeight uint16, DstX int16, DstY int16) []byte {
 14873  	size := 24
 14874  	b := 0
 14875  	buf := make([]byte, size)
 14876  
 14877  	buf[b] = 41 // request opcode
 14878  	b += 1
 14879  
 14880  	b += 1 // padding
 14881  
 14882  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
 14883  	b += 2
 14884  
 14885  	xgb.Put32(buf[b:], uint32(SrcWindow))
 14886  	b += 4
 14887  
 14888  	xgb.Put32(buf[b:], uint32(DstWindow))
 14889  	b += 4
 14890  
 14891  	xgb.Put16(buf[b:], uint16(SrcX))
 14892  	b += 2
 14893  
 14894  	xgb.Put16(buf[b:], uint16(SrcY))
 14895  	b += 2
 14896  
 14897  	xgb.Put16(buf[b:], SrcWidth)
 14898  	b += 2
 14899  
 14900  	xgb.Put16(buf[b:], SrcHeight)
 14901  	b += 2
 14902  
 14903  	xgb.Put16(buf[b:], uint16(DstX))
 14904  	b += 2
 14905  
 14906  	xgb.Put16(buf[b:], uint16(DstY))
 14907  	b += 2
 14908  
 14909  	return buf
 14910  }