xproto.go (394197B)
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/jezek/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 }