aboutsummaryrefslogtreecommitdiff
path: root/nexgb/randr/randr.go
diff options
context:
space:
mode:
Diffstat (limited to 'nexgb/randr/randr.go')
-rw-r--r--nexgb/randr/randr.go6267
1 files changed, 6267 insertions, 0 deletions
diff --git a/nexgb/randr/randr.go b/nexgb/randr/randr.go
new file mode 100644
index 0000000..d280e95
--- /dev/null
+++ b/nexgb/randr/randr.go
@@ -0,0 +1,6267 @@
+// Package randr is the X client API for the RANDR extension.
+package randr
+
+// This file is automatically generated from randr.xml. Edit at your peril!
+
+import (
+ "github.com/BurntSushi/xgb"
+
+ "github.com/BurntSushi/xgb/render"
+ "github.com/BurntSushi/xgb/xproto"
+)
+
+// Init must be called before using the RANDR extension.
+func Init(c *xgb.Conn) error {
+ reply, err := xproto.QueryExtension(c, 5, "RANDR").Reply()
+ switch {
+ case err != nil:
+ return err
+ case !reply.Present:
+ return xgb.Errorf("No extension named RANDR could be found on on the server.")
+ }
+
+ c.ExtLock.Lock()
+ c.Extensions["RANDR"] = reply.MajorOpcode
+ c.ExtLock.Unlock()
+ for evNum, fun := range xgb.NewExtEventFuncs["RANDR"] {
+ xgb.NewEventFuncs[int(reply.FirstEvent)+evNum] = fun
+ }
+ for errNum, fun := range xgb.NewExtErrorFuncs["RANDR"] {
+ xgb.NewErrorFuncs[int(reply.FirstError)+errNum] = fun
+ }
+ return nil
+}
+
+func init() {
+ xgb.NewExtEventFuncs["RANDR"] = make(map[int]xgb.NewEventFun)
+ xgb.NewExtErrorFuncs["RANDR"] = make(map[int]xgb.NewErrorFun)
+}
+
+// BadBadCrtc is the error number for a BadBadCrtc.
+const BadBadCrtc = 1
+
+type BadCrtcError struct {
+ Sequence uint16
+ NiceName string
+}
+
+// BadCrtcErrorNew constructs a BadCrtcError value that implements xgb.Error from a byte slice.
+func BadCrtcErrorNew(buf []byte) xgb.Error {
+ v := BadCrtcError{}
+ v.NiceName = "BadCrtc"
+
+ b := 1 // skip error determinant
+ b += 1 // don't read error number
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ return v
+}
+
+// SequenceId returns the sequence id attached to the BadBadCrtc error.
+// This is mostly used internally.
+func (err BadCrtcError) SequenceId() uint16 {
+ return err.Sequence
+}
+
+// BadId returns the 'BadValue' number if one exists for the BadBadCrtc error. If no bad value exists, 0 is returned.
+func (err BadCrtcError) BadId() uint32 {
+ return 0
+}
+
+// Error returns a rudimentary string representation of the BadBadCrtc error.
+
+func (err BadCrtcError) Error() string {
+ fieldVals := make([]string, 0, 0)
+ fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+ return "BadBadCrtc {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtErrorFuncs["RANDR"][1] = BadCrtcErrorNew
+}
+
+// BadBadMode is the error number for a BadBadMode.
+const BadBadMode = 2
+
+type BadModeError struct {
+ Sequence uint16
+ NiceName string
+}
+
+// BadModeErrorNew constructs a BadModeError value that implements xgb.Error from a byte slice.
+func BadModeErrorNew(buf []byte) xgb.Error {
+ v := BadModeError{}
+ v.NiceName = "BadMode"
+
+ b := 1 // skip error determinant
+ b += 1 // don't read error number
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ return v
+}
+
+// SequenceId returns the sequence id attached to the BadBadMode error.
+// This is mostly used internally.
+func (err BadModeError) SequenceId() uint16 {
+ return err.Sequence
+}
+
+// BadId returns the 'BadValue' number if one exists for the BadBadMode error. If no bad value exists, 0 is returned.
+func (err BadModeError) BadId() uint32 {
+ return 0
+}
+
+// Error returns a rudimentary string representation of the BadBadMode error.
+
+func (err BadModeError) Error() string {
+ fieldVals := make([]string, 0, 0)
+ fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+ return "BadBadMode {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtErrorFuncs["RANDR"][2] = BadModeErrorNew
+}
+
+// BadBadOutput is the error number for a BadBadOutput.
+const BadBadOutput = 0
+
+type BadOutputError struct {
+ Sequence uint16
+ NiceName string
+}
+
+// BadOutputErrorNew constructs a BadOutputError value that implements xgb.Error from a byte slice.
+func BadOutputErrorNew(buf []byte) xgb.Error {
+ v := BadOutputError{}
+ v.NiceName = "BadOutput"
+
+ b := 1 // skip error determinant
+ b += 1 // don't read error number
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ return v
+}
+
+// SequenceId returns the sequence id attached to the BadBadOutput error.
+// This is mostly used internally.
+func (err BadOutputError) SequenceId() uint16 {
+ return err.Sequence
+}
+
+// BadId returns the 'BadValue' number if one exists for the BadBadOutput error. If no bad value exists, 0 is returned.
+func (err BadOutputError) BadId() uint32 {
+ return 0
+}
+
+// Error returns a rudimentary string representation of the BadBadOutput error.
+
+func (err BadOutputError) Error() string {
+ fieldVals := make([]string, 0, 0)
+ fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+ return "BadBadOutput {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtErrorFuncs["RANDR"][0] = BadOutputErrorNew
+}
+
+// BadBadProvider is the error number for a BadBadProvider.
+const BadBadProvider = 3
+
+type BadProviderError struct {
+ Sequence uint16
+ NiceName string
+}
+
+// BadProviderErrorNew constructs a BadProviderError value that implements xgb.Error from a byte slice.
+func BadProviderErrorNew(buf []byte) xgb.Error {
+ v := BadProviderError{}
+ v.NiceName = "BadProvider"
+
+ b := 1 // skip error determinant
+ b += 1 // don't read error number
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ return v
+}
+
+// SequenceId returns the sequence id attached to the BadBadProvider error.
+// This is mostly used internally.
+func (err BadProviderError) SequenceId() uint16 {
+ return err.Sequence
+}
+
+// BadId returns the 'BadValue' number if one exists for the BadBadProvider error. If no bad value exists, 0 is returned.
+func (err BadProviderError) BadId() uint32 {
+ return 0
+}
+
+// Error returns a rudimentary string representation of the BadBadProvider error.
+
+func (err BadProviderError) Error() string {
+ fieldVals := make([]string, 0, 0)
+ fieldVals = append(fieldVals, "NiceName: "+err.NiceName)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", err.Sequence))
+ return "BadBadProvider {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtErrorFuncs["RANDR"][3] = BadProviderErrorNew
+}
+
+const (
+ ConnectionConnected = 0
+ ConnectionDisconnected = 1
+ ConnectionUnknown = 2
+)
+
+type Crtc uint32
+
+func NewCrtcId(c *xgb.Conn) (Crtc, error) {
+ id, err := c.NewId()
+ if err != nil {
+ return 0, err
+ }
+ return Crtc(id), nil
+}
+
+type CrtcChange struct {
+ Timestamp xproto.Timestamp
+ Window xproto.Window
+ Crtc Crtc
+ Mode Mode
+ Rotation uint16
+ // padding: 2 bytes
+ X int16
+ Y int16
+ Width uint16
+ Height uint16
+}
+
+// CrtcChangeRead reads a byte slice into a CrtcChange value.
+func CrtcChangeRead(buf []byte, v *CrtcChange) int {
+ b := 0
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Window = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Crtc = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Mode = Mode(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Rotation = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 2 // padding
+
+ v.X = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Y = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ return b
+}
+
+// CrtcChangeReadList reads a byte slice into a list of CrtcChange values.
+func CrtcChangeReadList(buf []byte, dest []CrtcChange) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a CrtcChange value to a byte slice.
+func (v CrtcChange) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Crtc))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Mode))
+ b += 4
+
+ xgb.Put16(buf[b:], v.Rotation)
+ b += 2
+
+ b += 2 // padding
+
+ xgb.Put16(buf[b:], uint16(v.X))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(v.Y))
+ b += 2
+
+ xgb.Put16(buf[b:], v.Width)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Height)
+ b += 2
+
+ return buf[:b]
+}
+
+// CrtcChangeListBytes writes a list of CrtcChange values to a byte slice.
+func CrtcChangeListBytes(buf []byte, list []CrtcChange) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+type Mode uint32
+
+func NewModeId(c *xgb.Conn) (Mode, error) {
+ id, err := c.NewId()
+ if err != nil {
+ return 0, err
+ }
+ return Mode(id), nil
+}
+
+const (
+ ModeFlagHsyncPositive = 1
+ ModeFlagHsyncNegative = 2
+ ModeFlagVsyncPositive = 4
+ ModeFlagVsyncNegative = 8
+ ModeFlagInterlace = 16
+ ModeFlagDoubleScan = 32
+ ModeFlagCsync = 64
+ ModeFlagCsyncPositive = 128
+ ModeFlagCsyncNegative = 256
+ ModeFlagHskewPresent = 512
+ ModeFlagBcast = 1024
+ ModeFlagPixelMultiplex = 2048
+ ModeFlagDoubleClock = 4096
+ ModeFlagHalveClock = 8192
+)
+
+type ModeInfo struct {
+ Id uint32
+ Width uint16
+ Height uint16
+ DotClock uint32
+ HsyncStart uint16
+ HsyncEnd uint16
+ Htotal uint16
+ Hskew uint16
+ VsyncStart uint16
+ VsyncEnd uint16
+ Vtotal uint16
+ NameLen uint16
+ ModeFlags uint32
+}
+
+// ModeInfoRead reads a byte slice into a ModeInfo value.
+func ModeInfoRead(buf []byte, v *ModeInfo) int {
+ b := 0
+
+ v.Id = xgb.Get32(buf[b:])
+ b += 4
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ v.DotClock = xgb.Get32(buf[b:])
+ b += 4
+
+ v.HsyncStart = xgb.Get16(buf[b:])
+ b += 2
+
+ v.HsyncEnd = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Htotal = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Hskew = xgb.Get16(buf[b:])
+ b += 2
+
+ v.VsyncStart = xgb.Get16(buf[b:])
+ b += 2
+
+ v.VsyncEnd = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Vtotal = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NameLen = xgb.Get16(buf[b:])
+ b += 2
+
+ v.ModeFlags = xgb.Get32(buf[b:])
+ b += 4
+
+ return b
+}
+
+// ModeInfoReadList reads a byte slice into a list of ModeInfo values.
+func ModeInfoReadList(buf []byte, dest []ModeInfo) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = ModeInfo{}
+ b += ModeInfoRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a ModeInfo value to a byte slice.
+func (v ModeInfo) Bytes() []byte {
+ buf := make([]byte, 32)
+ b := 0
+
+ xgb.Put32(buf[b:], v.Id)
+ b += 4
+
+ xgb.Put16(buf[b:], v.Width)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Height)
+ b += 2
+
+ xgb.Put32(buf[b:], v.DotClock)
+ b += 4
+
+ xgb.Put16(buf[b:], v.HsyncStart)
+ b += 2
+
+ xgb.Put16(buf[b:], v.HsyncEnd)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Htotal)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Hskew)
+ b += 2
+
+ xgb.Put16(buf[b:], v.VsyncStart)
+ b += 2
+
+ xgb.Put16(buf[b:], v.VsyncEnd)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Vtotal)
+ b += 2
+
+ xgb.Put16(buf[b:], v.NameLen)
+ b += 2
+
+ xgb.Put32(buf[b:], v.ModeFlags)
+ b += 4
+
+ return buf[:b]
+}
+
+// ModeInfoListBytes writes a list of ModeInfo values to a byte slice.
+func ModeInfoListBytes(buf []byte, list []ModeInfo) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+type MonitorInfo struct {
+ Name xproto.Atom
+ Primary bool
+ Automatic bool
+ NOutput uint16
+ X int16
+ Y int16
+ Width uint16
+ Height uint16
+ WidthInMillimeters uint32
+ HeightInMillimeters uint32
+ Outputs []Output // size: xgb.Pad((int(NOutput) * 4))
+}
+
+// MonitorInfoRead reads a byte slice into a MonitorInfo value.
+func MonitorInfoRead(buf []byte, v *MonitorInfo) int {
+ b := 0
+
+ v.Name = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+
+ if buf[b] == 1 {
+ v.Primary = true
+ } else {
+ v.Primary = false
+ }
+ b += 1
+
+ if buf[b] == 1 {
+ v.Automatic = true
+ } else {
+ v.Automatic = false
+ }
+ b += 1
+
+ v.NOutput = xgb.Get16(buf[b:])
+ b += 2
+
+ v.X = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Y = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ v.WidthInMillimeters = xgb.Get32(buf[b:])
+ b += 4
+
+ v.HeightInMillimeters = xgb.Get32(buf[b:])
+ b += 4
+
+ v.Outputs = make([]Output, v.NOutput)
+ for i := 0; i < int(v.NOutput); i++ {
+ v.Outputs[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return b
+}
+
+// MonitorInfoReadList reads a byte slice into a list of MonitorInfo values.
+func MonitorInfoReadList(buf []byte, dest []MonitorInfo) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = MonitorInfo{}
+ b += MonitorInfoRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a MonitorInfo value to a byte slice.
+func (v MonitorInfo) Bytes() []byte {
+ buf := make([]byte, (24 + xgb.Pad((int(v.NOutput) * 4))))
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Name))
+ b += 4
+
+ if v.Primary {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ if v.Automatic {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ xgb.Put16(buf[b:], v.NOutput)
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(v.X))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(v.Y))
+ b += 2
+
+ xgb.Put16(buf[b:], v.Width)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Height)
+ b += 2
+
+ xgb.Put32(buf[b:], v.WidthInMillimeters)
+ b += 4
+
+ xgb.Put32(buf[b:], v.HeightInMillimeters)
+ b += 4
+
+ for i := 0; i < int(v.NOutput); i++ {
+ xgb.Put32(buf[b:], uint32(v.Outputs[i]))
+ b += 4
+ }
+
+ return buf[:b]
+}
+
+// MonitorInfoListBytes writes a list of MonitorInfo values to a byte slice.
+func MonitorInfoListBytes(buf []byte, list []MonitorInfo) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+// MonitorInfoListSize computes the size (bytes) of a list of MonitorInfo values.
+func MonitorInfoListSize(list []MonitorInfo) int {
+ size := 0
+ for _, item := range list {
+ size += (24 + xgb.Pad((int(item.NOutput) * 4)))
+ }
+ return size
+}
+
+const (
+ NotifyCrtcChange = 0
+ NotifyOutputChange = 1
+ NotifyOutputProperty = 2
+ NotifyProviderChange = 3
+ NotifyProviderProperty = 4
+ NotifyResourceChange = 5
+)
+
+// Notify is the event number for a NotifyEvent.
+const Notify = 1
+
+type NotifyEvent struct {
+ Sequence uint16
+ SubCode byte
+ U NotifyDataUnion
+}
+
+// NotifyEventNew constructs a NotifyEvent value that implements xgb.Event from a byte slice.
+func NotifyEventNew(buf []byte) xgb.Event {
+ v := NotifyEvent{}
+ b := 1 // don't read event number
+
+ v.SubCode = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.U = NotifyDataUnion{}
+ b += NotifyDataUnionRead(buf[b:], &v.U)
+
+ return v
+}
+
+// Bytes writes a NotifyEvent value to a byte slice.
+func (v NotifyEvent) Bytes() []byte {
+ buf := make([]byte, 32)
+ b := 0
+
+ // write event number
+ buf[b] = 1
+ b += 1
+
+ buf[b] = v.SubCode
+ b += 1
+
+ b += 2 // skip sequence number
+
+ {
+ unionBytes := v.U.Bytes()
+ copy(buf[b:], unionBytes)
+ b += len(unionBytes)
+ }
+
+ return buf
+}
+
+// SequenceId returns the sequence id attached to the Notify event.
+// Events without a sequence number (KeymapNotify) return 0.
+// This is mostly used internally.
+func (v NotifyEvent) SequenceId() uint16 {
+ return v.Sequence
+}
+
+// String is a rudimentary string representation of NotifyEvent.
+func (v NotifyEvent) String() string {
+ fieldVals := make([]string, 0, 2)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+ fieldVals = append(fieldVals, xgb.Sprintf("SubCode: %d", v.SubCode))
+ return "Notify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtEventFuncs["RANDR"][1] = NotifyEventNew
+}
+
+// NotifyDataUnion is a represention of the NotifyDataUnion union type.
+// Note that to *create* a Union, you should *never* create
+// this struct directly (unless you know what you're doing).
+// Instead use one of the following constructors for 'NotifyDataUnion':
+// NotifyDataUnionCcNew(Cc CrtcChange) NotifyDataUnion
+// NotifyDataUnionOcNew(Oc OutputChange) NotifyDataUnion
+// NotifyDataUnionOpNew(Op OutputProperty) NotifyDataUnion
+// NotifyDataUnionPcNew(Pc ProviderChange) NotifyDataUnion
+// NotifyDataUnionPpNew(Pp ProviderProperty) NotifyDataUnion
+// NotifyDataUnionRcNew(Rc ResourceChange) NotifyDataUnion
+type NotifyDataUnion struct {
+ Cc CrtcChange
+ Oc OutputChange
+ Op OutputProperty
+ Pc ProviderChange
+ Pp ProviderProperty
+ Rc ResourceChange
+}
+
+// NotifyDataUnionCcNew constructs a new NotifyDataUnion union type with the Cc field.
+func NotifyDataUnionCcNew(Cc CrtcChange) NotifyDataUnion {
+ var b int
+ buf := make([]byte, 28)
+
+ {
+ structBytes := Cc.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ // Create the Union type
+ v := NotifyDataUnion{}
+
+ // Now copy buf into all fields
+
+ b = 0 // always read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // always read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // always read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // always read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // always read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // always read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return v
+}
+
+// NotifyDataUnionOcNew constructs a new NotifyDataUnion union type with the Oc field.
+func NotifyDataUnionOcNew(Oc OutputChange) NotifyDataUnion {
+ var b int
+ buf := make([]byte, 28)
+
+ {
+ structBytes := Oc.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ // Create the Union type
+ v := NotifyDataUnion{}
+
+ // Now copy buf into all fields
+
+ b = 0 // always read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // always read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // always read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // always read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // always read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // always read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return v
+}
+
+// NotifyDataUnionOpNew constructs a new NotifyDataUnion union type with the Op field.
+func NotifyDataUnionOpNew(Op OutputProperty) NotifyDataUnion {
+ var b int
+ buf := make([]byte, 28)
+
+ {
+ structBytes := Op.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ // Create the Union type
+ v := NotifyDataUnion{}
+
+ // Now copy buf into all fields
+
+ b = 0 // always read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // always read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // always read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // always read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // always read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // always read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return v
+}
+
+// NotifyDataUnionPcNew constructs a new NotifyDataUnion union type with the Pc field.
+func NotifyDataUnionPcNew(Pc ProviderChange) NotifyDataUnion {
+ var b int
+ buf := make([]byte, 28)
+
+ {
+ structBytes := Pc.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ // Create the Union type
+ v := NotifyDataUnion{}
+
+ // Now copy buf into all fields
+
+ b = 0 // always read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // always read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // always read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // always read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // always read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // always read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return v
+}
+
+// NotifyDataUnionPpNew constructs a new NotifyDataUnion union type with the Pp field.
+func NotifyDataUnionPpNew(Pp ProviderProperty) NotifyDataUnion {
+ var b int
+ buf := make([]byte, 28)
+
+ {
+ structBytes := Pp.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ // Create the Union type
+ v := NotifyDataUnion{}
+
+ // Now copy buf into all fields
+
+ b = 0 // always read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // always read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // always read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // always read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // always read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // always read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return v
+}
+
+// NotifyDataUnionRcNew constructs a new NotifyDataUnion union type with the Rc field.
+func NotifyDataUnionRcNew(Rc ResourceChange) NotifyDataUnion {
+ var b int
+ buf := make([]byte, 28)
+
+ {
+ structBytes := Rc.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ // Create the Union type
+ v := NotifyDataUnion{}
+
+ // Now copy buf into all fields
+
+ b = 0 // always read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // always read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // always read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // always read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // always read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // always read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return v
+}
+
+// NotifyDataUnionRead reads a byte slice into a NotifyDataUnion value.
+func NotifyDataUnionRead(buf []byte, v *NotifyDataUnion) int {
+ var b int
+
+ b = 0 // re-read the same bytes
+ v.Cc = CrtcChange{}
+ b += CrtcChangeRead(buf[b:], &v.Cc)
+
+ b = 0 // re-read the same bytes
+ v.Oc = OutputChange{}
+ b += OutputChangeRead(buf[b:], &v.Oc)
+
+ b = 0 // re-read the same bytes
+ v.Op = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &v.Op)
+
+ b = 0 // re-read the same bytes
+ v.Pc = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &v.Pc)
+
+ b = 0 // re-read the same bytes
+ v.Pp = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &v.Pp)
+
+ b = 0 // re-read the same bytes
+ v.Rc = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &v.Rc)
+
+ return 28
+}
+
+// NotifyDataUnionReadList reads a byte slice into a list of NotifyDataUnion values.
+func NotifyDataUnionReadList(buf []byte, dest []NotifyDataUnion) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = NotifyDataUnion{}
+ b += NotifyDataUnionRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a NotifyDataUnion value to a byte slice.
+// Each field in a union must contain the same data.
+// So simply pick the first field and write that to the wire.
+func (v NotifyDataUnion) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ {
+ structBytes := v.Cc.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return buf
+}
+
+// NotifyDataUnionListBytes writes a list of NotifyDataUnion values to a byte slice.
+func NotifyDataUnionListBytes(buf []byte, list []NotifyDataUnion) int {
+ b := 0
+ var unionBytes []byte
+ for _, item := range list {
+ unionBytes = item.Bytes()
+ copy(buf[b:], unionBytes)
+ b += xgb.Pad(len(unionBytes))
+ }
+ return b
+}
+
+const (
+ NotifyMaskScreenChange = 1
+ NotifyMaskCrtcChange = 2
+ NotifyMaskOutputChange = 4
+ NotifyMaskOutputProperty = 8
+ NotifyMaskProviderChange = 16
+ NotifyMaskProviderProperty = 32
+ NotifyMaskResourceChange = 64
+)
+
+type Output uint32
+
+func NewOutputId(c *xgb.Conn) (Output, error) {
+ id, err := c.NewId()
+ if err != nil {
+ return 0, err
+ }
+ return Output(id), nil
+}
+
+type OutputChange struct {
+ Timestamp xproto.Timestamp
+ ConfigTimestamp xproto.Timestamp
+ Window xproto.Window
+ Output Output
+ Crtc Crtc
+ Mode Mode
+ Rotation uint16
+ Connection byte
+ SubpixelOrder byte
+}
+
+// OutputChangeRead reads a byte slice into a OutputChange value.
+func OutputChangeRead(buf []byte, v *OutputChange) int {
+ b := 0
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.ConfigTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Window = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Output = Output(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Crtc = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Mode = Mode(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Rotation = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Connection = buf[b]
+ b += 1
+
+ v.SubpixelOrder = buf[b]
+ b += 1
+
+ return b
+}
+
+// OutputChangeReadList reads a byte slice into a list of OutputChange values.
+func OutputChangeReadList(buf []byte, dest []OutputChange) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = OutputChange{}
+ b += OutputChangeRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a OutputChange value to a byte slice.
+func (v OutputChange) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.ConfigTimestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Crtc))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Mode))
+ b += 4
+
+ xgb.Put16(buf[b:], v.Rotation)
+ b += 2
+
+ buf[b] = v.Connection
+ b += 1
+
+ buf[b] = v.SubpixelOrder
+ b += 1
+
+ return buf[:b]
+}
+
+// OutputChangeListBytes writes a list of OutputChange values to a byte slice.
+func OutputChangeListBytes(buf []byte, list []OutputChange) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+type OutputProperty struct {
+ Window xproto.Window
+ Output Output
+ Atom xproto.Atom
+ Timestamp xproto.Timestamp
+ Status byte
+ // padding: 11 bytes
+}
+
+// OutputPropertyRead reads a byte slice into a OutputProperty value.
+func OutputPropertyRead(buf []byte, v *OutputProperty) int {
+ b := 0
+
+ v.Window = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Output = Output(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Atom = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Status = buf[b]
+ b += 1
+
+ b += 11 // padding
+
+ return b
+}
+
+// OutputPropertyReadList reads a byte slice into a list of OutputProperty values.
+func OutputPropertyReadList(buf []byte, dest []OutputProperty) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = OutputProperty{}
+ b += OutputPropertyRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a OutputProperty value to a byte slice.
+func (v OutputProperty) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Atom))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ buf[b] = v.Status
+ b += 1
+
+ b += 11 // padding
+
+ return buf[:b]
+}
+
+// OutputPropertyListBytes writes a list of OutputProperty values to a byte slice.
+func OutputPropertyListBytes(buf []byte, list []OutputProperty) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+type Provider uint32
+
+func NewProviderId(c *xgb.Conn) (Provider, error) {
+ id, err := c.NewId()
+ if err != nil {
+ return 0, err
+ }
+ return Provider(id), nil
+}
+
+const (
+ ProviderCapabilitySourceOutput = 1
+ ProviderCapabilitySinkOutput = 2
+ ProviderCapabilitySourceOffload = 4
+ ProviderCapabilitySinkOffload = 8
+)
+
+type ProviderChange struct {
+ Timestamp xproto.Timestamp
+ Window xproto.Window
+ Provider Provider
+ // padding: 16 bytes
+}
+
+// ProviderChangeRead reads a byte slice into a ProviderChange value.
+func ProviderChangeRead(buf []byte, v *ProviderChange) int {
+ b := 0
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Window = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Provider = Provider(xgb.Get32(buf[b:]))
+ b += 4
+
+ b += 16 // padding
+
+ return b
+}
+
+// ProviderChangeReadList reads a byte slice into a list of ProviderChange values.
+func ProviderChangeReadList(buf []byte, dest []ProviderChange) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = ProviderChange{}
+ b += ProviderChangeRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a ProviderChange value to a byte slice.
+func (v ProviderChange) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Provider))
+ b += 4
+
+ b += 16 // padding
+
+ return buf[:b]
+}
+
+// ProviderChangeListBytes writes a list of ProviderChange values to a byte slice.
+func ProviderChangeListBytes(buf []byte, list []ProviderChange) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+type ProviderProperty struct {
+ Window xproto.Window
+ Provider Provider
+ Atom xproto.Atom
+ Timestamp xproto.Timestamp
+ State byte
+ // padding: 11 bytes
+}
+
+// ProviderPropertyRead reads a byte slice into a ProviderProperty value.
+func ProviderPropertyRead(buf []byte, v *ProviderProperty) int {
+ b := 0
+
+ v.Window = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Provider = Provider(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Atom = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.State = buf[b]
+ b += 1
+
+ b += 11 // padding
+
+ return b
+}
+
+// ProviderPropertyReadList reads a byte slice into a list of ProviderProperty values.
+func ProviderPropertyReadList(buf []byte, dest []ProviderProperty) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = ProviderProperty{}
+ b += ProviderPropertyRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a ProviderProperty value to a byte slice.
+func (v ProviderProperty) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Atom))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ buf[b] = v.State
+ b += 1
+
+ b += 11 // padding
+
+ return buf[:b]
+}
+
+// ProviderPropertyListBytes writes a list of ProviderProperty values to a byte slice.
+func ProviderPropertyListBytes(buf []byte, list []ProviderProperty) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+type RefreshRates struct {
+ NRates uint16
+ Rates []uint16 // size: xgb.Pad((int(NRates) * 2))
+}
+
+// RefreshRatesRead reads a byte slice into a RefreshRates value.
+func RefreshRatesRead(buf []byte, v *RefreshRates) int {
+ b := 0
+
+ v.NRates = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Rates = make([]uint16, v.NRates)
+ for i := 0; i < int(v.NRates); i++ {
+ v.Rates[i] = xgb.Get16(buf[b:])
+ b += 2
+ }
+
+ return b
+}
+
+// RefreshRatesReadList reads a byte slice into a list of RefreshRates values.
+func RefreshRatesReadList(buf []byte, dest []RefreshRates) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = RefreshRates{}
+ b += RefreshRatesRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a RefreshRates value to a byte slice.
+func (v RefreshRates) Bytes() []byte {
+ buf := make([]byte, (2 + xgb.Pad((int(v.NRates) * 2))))
+ b := 0
+
+ xgb.Put16(buf[b:], v.NRates)
+ b += 2
+
+ for i := 0; i < int(v.NRates); i++ {
+ xgb.Put16(buf[b:], v.Rates[i])
+ b += 2
+ }
+
+ return buf[:b]
+}
+
+// RefreshRatesListBytes writes a list of RefreshRates values to a byte slice.
+func RefreshRatesListBytes(buf []byte, list []RefreshRates) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+// RefreshRatesListSize computes the size (bytes) of a list of RefreshRates values.
+func RefreshRatesListSize(list []RefreshRates) int {
+ size := 0
+ for _, item := range list {
+ size += (2 + xgb.Pad((int(item.NRates) * 2)))
+ }
+ return size
+}
+
+type ResourceChange struct {
+ Timestamp xproto.Timestamp
+ Window xproto.Window
+ // padding: 20 bytes
+}
+
+// ResourceChangeRead reads a byte slice into a ResourceChange value.
+func ResourceChangeRead(buf []byte, v *ResourceChange) int {
+ b := 0
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Window = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ b += 20 // padding
+
+ return b
+}
+
+// ResourceChangeReadList reads a byte slice into a list of ResourceChange values.
+func ResourceChangeReadList(buf []byte, dest []ResourceChange) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = ResourceChange{}
+ b += ResourceChangeRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a ResourceChange value to a byte slice.
+func (v ResourceChange) Bytes() []byte {
+ buf := make([]byte, 28)
+ b := 0
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Window))
+ b += 4
+
+ b += 20 // padding
+
+ return buf[:b]
+}
+
+// ResourceChangeListBytes writes a list of ResourceChange values to a byte slice.
+func ResourceChangeListBytes(buf []byte, list []ResourceChange) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+const (
+ RotationRotate0 = 1
+ RotationRotate90 = 2
+ RotationRotate180 = 4
+ RotationRotate270 = 8
+ RotationReflectX = 16
+ RotationReflectY = 32
+)
+
+// ScreenChangeNotify is the event number for a ScreenChangeNotifyEvent.
+const ScreenChangeNotify = 0
+
+type ScreenChangeNotifyEvent struct {
+ Sequence uint16
+ Rotation byte
+ Timestamp xproto.Timestamp
+ ConfigTimestamp xproto.Timestamp
+ Root xproto.Window
+ RequestWindow xproto.Window
+ SizeID uint16
+ SubpixelOrder uint16
+ Width uint16
+ Height uint16
+ Mwidth uint16
+ Mheight uint16
+}
+
+// ScreenChangeNotifyEventNew constructs a ScreenChangeNotifyEvent value that implements xgb.Event from a byte slice.
+func ScreenChangeNotifyEventNew(buf []byte) xgb.Event {
+ v := ScreenChangeNotifyEvent{}
+ b := 1 // don't read event number
+
+ v.Rotation = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.ConfigTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Root = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.RequestWindow = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.SizeID = xgb.Get16(buf[b:])
+ b += 2
+
+ v.SubpixelOrder = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Mwidth = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Mheight = xgb.Get16(buf[b:])
+ b += 2
+
+ return v
+}
+
+// Bytes writes a ScreenChangeNotifyEvent value to a byte slice.
+func (v ScreenChangeNotifyEvent) Bytes() []byte {
+ buf := make([]byte, 32)
+ b := 0
+
+ // write event number
+ buf[b] = 0
+ b += 1
+
+ buf[b] = v.Rotation
+ b += 1
+
+ b += 2 // skip sequence number
+
+ xgb.Put32(buf[b:], uint32(v.Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.ConfigTimestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.Root))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(v.RequestWindow))
+ b += 4
+
+ xgb.Put16(buf[b:], v.SizeID)
+ b += 2
+
+ xgb.Put16(buf[b:], v.SubpixelOrder)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Width)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Height)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Mwidth)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Mheight)
+ b += 2
+
+ return buf
+}
+
+// SequenceId returns the sequence id attached to the ScreenChangeNotify event.
+// Events without a sequence number (KeymapNotify) return 0.
+// This is mostly used internally.
+func (v ScreenChangeNotifyEvent) SequenceId() uint16 {
+ return v.Sequence
+}
+
+// String is a rudimentary string representation of ScreenChangeNotifyEvent.
+func (v ScreenChangeNotifyEvent) String() string {
+ fieldVals := make([]string, 0, 11)
+ fieldVals = append(fieldVals, xgb.Sprintf("Sequence: %d", v.Sequence))
+ fieldVals = append(fieldVals, xgb.Sprintf("Rotation: %d", v.Rotation))
+ fieldVals = append(fieldVals, xgb.Sprintf("Timestamp: %d", v.Timestamp))
+ fieldVals = append(fieldVals, xgb.Sprintf("ConfigTimestamp: %d", v.ConfigTimestamp))
+ fieldVals = append(fieldVals, xgb.Sprintf("Root: %d", v.Root))
+ fieldVals = append(fieldVals, xgb.Sprintf("RequestWindow: %d", v.RequestWindow))
+ fieldVals = append(fieldVals, xgb.Sprintf("SizeID: %d", v.SizeID))
+ fieldVals = append(fieldVals, xgb.Sprintf("SubpixelOrder: %d", v.SubpixelOrder))
+ fieldVals = append(fieldVals, xgb.Sprintf("Width: %d", v.Width))
+ fieldVals = append(fieldVals, xgb.Sprintf("Height: %d", v.Height))
+ fieldVals = append(fieldVals, xgb.Sprintf("Mwidth: %d", v.Mwidth))
+ fieldVals = append(fieldVals, xgb.Sprintf("Mheight: %d", v.Mheight))
+ return "ScreenChangeNotify {" + xgb.StringsJoin(fieldVals, ", ") + "}"
+}
+
+func init() {
+ xgb.NewExtEventFuncs["RANDR"][0] = ScreenChangeNotifyEventNew
+}
+
+type ScreenSize struct {
+ Width uint16
+ Height uint16
+ Mwidth uint16
+ Mheight uint16
+}
+
+// ScreenSizeRead reads a byte slice into a ScreenSize value.
+func ScreenSizeRead(buf []byte, v *ScreenSize) int {
+ b := 0
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Mwidth = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Mheight = xgb.Get16(buf[b:])
+ b += 2
+
+ return b
+}
+
+// ScreenSizeReadList reads a byte slice into a list of ScreenSize values.
+func ScreenSizeReadList(buf []byte, dest []ScreenSize) int {
+ b := 0
+ for i := 0; i < len(dest); i++ {
+ dest[i] = ScreenSize{}
+ b += ScreenSizeRead(buf[b:], &dest[i])
+ }
+ return xgb.Pad(b)
+}
+
+// Bytes writes a ScreenSize value to a byte slice.
+func (v ScreenSize) Bytes() []byte {
+ buf := make([]byte, 8)
+ b := 0
+
+ xgb.Put16(buf[b:], v.Width)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Height)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Mwidth)
+ b += 2
+
+ xgb.Put16(buf[b:], v.Mheight)
+ b += 2
+
+ return buf[:b]
+}
+
+// ScreenSizeListBytes writes a list of ScreenSize values to a byte slice.
+func ScreenSizeListBytes(buf []byte, list []ScreenSize) int {
+ b := 0
+ var structBytes []byte
+ for _, item := range list {
+ structBytes = item.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+ return xgb.Pad(b)
+}
+
+const (
+ SetConfigSuccess = 0
+ SetConfigInvalidConfigTime = 1
+ SetConfigInvalidTime = 2
+ SetConfigFailed = 3
+)
+
+const (
+ TransformUnit = 1
+ TransformScaleUp = 2
+ TransformScaleDown = 4
+ TransformProjective = 8
+)
+
+// Skipping definition for base type 'Bool'
+
+// Skipping definition for base type 'Byte'
+
+// Skipping definition for base type 'Card8'
+
+// Skipping definition for base type 'Char'
+
+// Skipping definition for base type 'Void'
+
+// Skipping definition for base type 'Double'
+
+// Skipping definition for base type 'Float'
+
+// Skipping definition for base type 'Int16'
+
+// Skipping definition for base type 'Int32'
+
+// Skipping definition for base type 'Int8'
+
+// Skipping definition for base type 'Card16'
+
+// Skipping definition for base type 'Card32'
+
+// AddOutputModeCookie is a cookie used only for AddOutputMode requests.
+type AddOutputModeCookie struct {
+ *xgb.Cookie
+}
+
+// AddOutputMode sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func AddOutputMode(c *xgb.Conn, Output Output, Mode Mode) AddOutputModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'AddOutputMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(addOutputModeRequest(c, Output, Mode), cookie)
+ return AddOutputModeCookie{cookie}
+}
+
+// AddOutputModeChecked sends a checked request.
+// If an error occurs, it can be retrieved using AddOutputModeCookie.Check()
+func AddOutputModeChecked(c *xgb.Conn, Output Output, Mode Mode) AddOutputModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'AddOutputMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(addOutputModeRequest(c, Output, Mode), cookie)
+ return AddOutputModeCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook AddOutputModeCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for AddOutputMode
+// addOutputModeRequest writes a AddOutputMode request to a byte slice.
+func addOutputModeRequest(c *xgb.Conn, Output Output, Mode Mode) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 18 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Mode))
+ b += 4
+
+ return buf
+}
+
+// ChangeOutputPropertyCookie is a cookie used only for ChangeOutputProperty requests.
+type ChangeOutputPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// ChangeOutputProperty sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func ChangeOutputProperty(c *xgb.Conn, Output Output, Property xproto.Atom, Type xproto.Atom, Format byte, Mode byte, NumUnits uint32, Data []byte) ChangeOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ChangeOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(changeOutputPropertyRequest(c, Output, Property, Type, Format, Mode, NumUnits, Data), cookie)
+ return ChangeOutputPropertyCookie{cookie}
+}
+
+// ChangeOutputPropertyChecked sends a checked request.
+// If an error occurs, it can be retrieved using ChangeOutputPropertyCookie.Check()
+func ChangeOutputPropertyChecked(c *xgb.Conn, Output Output, Property xproto.Atom, Type xproto.Atom, Format byte, Mode byte, NumUnits uint32, Data []byte) ChangeOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ChangeOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(changeOutputPropertyRequest(c, Output, Property, Type, Format, Mode, NumUnits, Data), cookie)
+ return ChangeOutputPropertyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook ChangeOutputPropertyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeOutputProperty
+// changeOutputPropertyRequest writes a ChangeOutputProperty request to a byte slice.
+func changeOutputPropertyRequest(c *xgb.Conn, Output Output, Property xproto.Atom, Type xproto.Atom, Format byte, Mode byte, NumUnits uint32, Data []byte) []byte {
+ size := xgb.Pad((24 + xgb.Pad((((int(NumUnits) * int(Format)) / 8) * 1))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 13 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Type))
+ b += 4
+
+ buf[b] = Format
+ b += 1
+
+ buf[b] = Mode
+ b += 1
+
+ b += 2 // padding
+
+ xgb.Put32(buf[b:], NumUnits)
+ b += 4
+
+ copy(buf[b:], Data[:((int(NumUnits)*int(Format))/8)])
+ b += int(((int(NumUnits) * int(Format)) / 8))
+
+ return buf
+}
+
+// ChangeProviderPropertyCookie is a cookie used only for ChangeProviderProperty requests.
+type ChangeProviderPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// ChangeProviderProperty sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func ChangeProviderProperty(c *xgb.Conn, Provider Provider, Property xproto.Atom, Type xproto.Atom, Format byte, Mode byte, NumItems uint32, Data []byte) ChangeProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ChangeProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(changeProviderPropertyRequest(c, Provider, Property, Type, Format, Mode, NumItems, Data), cookie)
+ return ChangeProviderPropertyCookie{cookie}
+}
+
+// ChangeProviderPropertyChecked sends a checked request.
+// If an error occurs, it can be retrieved using ChangeProviderPropertyCookie.Check()
+func ChangeProviderPropertyChecked(c *xgb.Conn, Provider Provider, Property xproto.Atom, Type xproto.Atom, Format byte, Mode byte, NumItems uint32, Data []byte) ChangeProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ChangeProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(changeProviderPropertyRequest(c, Provider, Property, Type, Format, Mode, NumItems, Data), cookie)
+ return ChangeProviderPropertyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook ChangeProviderPropertyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for ChangeProviderProperty
+// changeProviderPropertyRequest writes a ChangeProviderProperty request to a byte slice.
+func changeProviderPropertyRequest(c *xgb.Conn, Provider Provider, Property xproto.Atom, Type xproto.Atom, Format byte, Mode byte, NumItems uint32, Data []byte) []byte {
+ size := xgb.Pad((24 + xgb.Pad(((int(NumItems) * (int(Format) / 8)) * 1))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 39 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Type))
+ b += 4
+
+ buf[b] = Format
+ b += 1
+
+ buf[b] = Mode
+ b += 1
+
+ b += 2 // padding
+
+ xgb.Put32(buf[b:], NumItems)
+ b += 4
+
+ copy(buf[b:], Data[:(int(NumItems)*(int(Format)/8))])
+ b += int((int(NumItems) * (int(Format) / 8)))
+
+ return buf
+}
+
+// ConfigureOutputPropertyCookie is a cookie used only for ConfigureOutputProperty requests.
+type ConfigureOutputPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// ConfigureOutputProperty sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func ConfigureOutputProperty(c *xgb.Conn, Output Output, Property xproto.Atom, Pending bool, Range bool, Values []int32) ConfigureOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ConfigureOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(configureOutputPropertyRequest(c, Output, Property, Pending, Range, Values), cookie)
+ return ConfigureOutputPropertyCookie{cookie}
+}
+
+// ConfigureOutputPropertyChecked sends a checked request.
+// If an error occurs, it can be retrieved using ConfigureOutputPropertyCookie.Check()
+func ConfigureOutputPropertyChecked(c *xgb.Conn, Output Output, Property xproto.Atom, Pending bool, Range bool, Values []int32) ConfigureOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ConfigureOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(configureOutputPropertyRequest(c, Output, Property, Pending, Range, Values), cookie)
+ return ConfigureOutputPropertyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook ConfigureOutputPropertyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for ConfigureOutputProperty
+// configureOutputPropertyRequest writes a ConfigureOutputProperty request to a byte slice.
+func configureOutputPropertyRequest(c *xgb.Conn, Output Output, Property xproto.Atom, Pending bool, Range bool, Values []int32) []byte {
+ size := xgb.Pad((16 + xgb.Pad((len(Values) * 4))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 12 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ if Pending {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ if Range {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ b += 2 // padding
+
+ for i := 0; i < int(len(Values)); i++ {
+ xgb.Put32(buf[b:], uint32(Values[i]))
+ b += 4
+ }
+
+ return buf
+}
+
+// ConfigureProviderPropertyCookie is a cookie used only for ConfigureProviderProperty requests.
+type ConfigureProviderPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// ConfigureProviderProperty sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func ConfigureProviderProperty(c *xgb.Conn, Provider Provider, Property xproto.Atom, Pending bool, Range bool, Values []int32) ConfigureProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ConfigureProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(configureProviderPropertyRequest(c, Provider, Property, Pending, Range, Values), cookie)
+ return ConfigureProviderPropertyCookie{cookie}
+}
+
+// ConfigureProviderPropertyChecked sends a checked request.
+// If an error occurs, it can be retrieved using ConfigureProviderPropertyCookie.Check()
+func ConfigureProviderPropertyChecked(c *xgb.Conn, Provider Provider, Property xproto.Atom, Pending bool, Range bool, Values []int32) ConfigureProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ConfigureProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(configureProviderPropertyRequest(c, Provider, Property, Pending, Range, Values), cookie)
+ return ConfigureProviderPropertyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook ConfigureProviderPropertyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for ConfigureProviderProperty
+// configureProviderPropertyRequest writes a ConfigureProviderProperty request to a byte slice.
+func configureProviderPropertyRequest(c *xgb.Conn, Provider Provider, Property xproto.Atom, Pending bool, Range bool, Values []int32) []byte {
+ size := xgb.Pad((16 + xgb.Pad((len(Values) * 4))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 38 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ if Pending {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ if Range {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ b += 2 // padding
+
+ for i := 0; i < int(len(Values)); i++ {
+ xgb.Put32(buf[b:], uint32(Values[i]))
+ b += 4
+ }
+
+ return buf
+}
+
+// CreateModeCookie is a cookie used only for CreateMode requests.
+type CreateModeCookie struct {
+ *xgb.Cookie
+}
+
+// CreateMode sends a checked request.
+// If an error occurs, it will be returned with the reply by calling CreateModeCookie.Reply()
+func CreateMode(c *xgb.Conn, Window xproto.Window, ModeInfo ModeInfo, Name string) CreateModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'CreateMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(createModeRequest(c, Window, ModeInfo, Name), cookie)
+ return CreateModeCookie{cookie}
+}
+
+// CreateModeUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func CreateModeUnchecked(c *xgb.Conn, Window xproto.Window, ModeInfo ModeInfo, Name string) CreateModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'CreateMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(createModeRequest(c, Window, ModeInfo, Name), cookie)
+ return CreateModeCookie{cookie}
+}
+
+// CreateModeReply represents the data returned from a CreateMode request.
+type CreateModeReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Mode Mode
+ // padding: 20 bytes
+}
+
+// Reply blocks and returns the reply data for a CreateMode request.
+func (cook CreateModeCookie) Reply() (*CreateModeReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return createModeReply(buf), nil
+}
+
+// createModeReply reads a byte slice into a CreateModeReply value.
+func createModeReply(buf []byte) *CreateModeReply {
+ v := new(CreateModeReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Mode = Mode(xgb.Get32(buf[b:]))
+ b += 4
+
+ b += 20 // padding
+
+ return v
+}
+
+// Write request to wire for CreateMode
+// createModeRequest writes a CreateMode request to a byte slice.
+func createModeRequest(c *xgb.Conn, Window xproto.Window, ModeInfo ModeInfo, Name string) []byte {
+ size := xgb.Pad((40 + xgb.Pad((len(Name) * 1))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 16 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ {
+ structBytes := ModeInfo.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ copy(buf[b:], Name[:len(Name)])
+ b += int(len(Name))
+
+ return buf
+}
+
+// DeleteMonitorCookie is a cookie used only for DeleteMonitor requests.
+type DeleteMonitorCookie struct {
+ *xgb.Cookie
+}
+
+// DeleteMonitor sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DeleteMonitor(c *xgb.Conn, Window xproto.Window, Name xproto.Atom) DeleteMonitorCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteMonitor' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(deleteMonitorRequest(c, Window, Name), cookie)
+ return DeleteMonitorCookie{cookie}
+}
+
+// DeleteMonitorChecked sends a checked request.
+// If an error occurs, it can be retrieved using DeleteMonitorCookie.Check()
+func DeleteMonitorChecked(c *xgb.Conn, Window xproto.Window, Name xproto.Atom) DeleteMonitorCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteMonitor' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(deleteMonitorRequest(c, Window, Name), cookie)
+ return DeleteMonitorCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook DeleteMonitorCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DeleteMonitor
+// deleteMonitorRequest writes a DeleteMonitor request to a byte slice.
+func deleteMonitorRequest(c *xgb.Conn, Window xproto.Window, Name xproto.Atom) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 44 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Name))
+ b += 4
+
+ return buf
+}
+
+// DeleteOutputModeCookie is a cookie used only for DeleteOutputMode requests.
+type DeleteOutputModeCookie struct {
+ *xgb.Cookie
+}
+
+// DeleteOutputMode sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DeleteOutputMode(c *xgb.Conn, Output Output, Mode Mode) DeleteOutputModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteOutputMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(deleteOutputModeRequest(c, Output, Mode), cookie)
+ return DeleteOutputModeCookie{cookie}
+}
+
+// DeleteOutputModeChecked sends a checked request.
+// If an error occurs, it can be retrieved using DeleteOutputModeCookie.Check()
+func DeleteOutputModeChecked(c *xgb.Conn, Output Output, Mode Mode) DeleteOutputModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteOutputMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(deleteOutputModeRequest(c, Output, Mode), cookie)
+ return DeleteOutputModeCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook DeleteOutputModeCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DeleteOutputMode
+// deleteOutputModeRequest writes a DeleteOutputMode request to a byte slice.
+func deleteOutputModeRequest(c *xgb.Conn, Output Output, Mode Mode) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 19 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Mode))
+ b += 4
+
+ return buf
+}
+
+// DeleteOutputPropertyCookie is a cookie used only for DeleteOutputProperty requests.
+type DeleteOutputPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// DeleteOutputProperty sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DeleteOutputProperty(c *xgb.Conn, Output Output, Property xproto.Atom) DeleteOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(deleteOutputPropertyRequest(c, Output, Property), cookie)
+ return DeleteOutputPropertyCookie{cookie}
+}
+
+// DeleteOutputPropertyChecked sends a checked request.
+// If an error occurs, it can be retrieved using DeleteOutputPropertyCookie.Check()
+func DeleteOutputPropertyChecked(c *xgb.Conn, Output Output, Property xproto.Atom) DeleteOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(deleteOutputPropertyRequest(c, Output, Property), cookie)
+ return DeleteOutputPropertyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook DeleteOutputPropertyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DeleteOutputProperty
+// deleteOutputPropertyRequest writes a DeleteOutputProperty request to a byte slice.
+func deleteOutputPropertyRequest(c *xgb.Conn, Output Output, Property xproto.Atom) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 14 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ return buf
+}
+
+// DeleteProviderPropertyCookie is a cookie used only for DeleteProviderProperty requests.
+type DeleteProviderPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// DeleteProviderProperty sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DeleteProviderProperty(c *xgb.Conn, Provider Provider, Property xproto.Atom) DeleteProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(deleteProviderPropertyRequest(c, Provider, Property), cookie)
+ return DeleteProviderPropertyCookie{cookie}
+}
+
+// DeleteProviderPropertyChecked sends a checked request.
+// If an error occurs, it can be retrieved using DeleteProviderPropertyCookie.Check()
+func DeleteProviderPropertyChecked(c *xgb.Conn, Provider Provider, Property xproto.Atom) DeleteProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DeleteProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(deleteProviderPropertyRequest(c, Provider, Property), cookie)
+ return DeleteProviderPropertyCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook DeleteProviderPropertyCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DeleteProviderProperty
+// deleteProviderPropertyRequest writes a DeleteProviderProperty request to a byte slice.
+func deleteProviderPropertyRequest(c *xgb.Conn, Provider Provider, Property xproto.Atom) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 40 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ return buf
+}
+
+// DestroyModeCookie is a cookie used only for DestroyMode requests.
+type DestroyModeCookie struct {
+ *xgb.Cookie
+}
+
+// DestroyMode sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func DestroyMode(c *xgb.Conn, Mode Mode) DestroyModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DestroyMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(destroyModeRequest(c, Mode), cookie)
+ return DestroyModeCookie{cookie}
+}
+
+// DestroyModeChecked sends a checked request.
+// If an error occurs, it can be retrieved using DestroyModeCookie.Check()
+func DestroyModeChecked(c *xgb.Conn, Mode Mode) DestroyModeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'DestroyMode' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(destroyModeRequest(c, Mode), cookie)
+ return DestroyModeCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook DestroyModeCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for DestroyMode
+// destroyModeRequest writes a DestroyMode request to a byte slice.
+func destroyModeRequest(c *xgb.Conn, Mode Mode) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 17 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Mode))
+ b += 4
+
+ return buf
+}
+
+// GetCrtcGammaCookie is a cookie used only for GetCrtcGamma requests.
+type GetCrtcGammaCookie struct {
+ *xgb.Cookie
+}
+
+// GetCrtcGamma sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetCrtcGammaCookie.Reply()
+func GetCrtcGamma(c *xgb.Conn, Crtc Crtc) GetCrtcGammaCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcGamma' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getCrtcGammaRequest(c, Crtc), cookie)
+ return GetCrtcGammaCookie{cookie}
+}
+
+// GetCrtcGammaUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetCrtcGammaUnchecked(c *xgb.Conn, Crtc Crtc) GetCrtcGammaCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcGamma' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getCrtcGammaRequest(c, Crtc), cookie)
+ return GetCrtcGammaCookie{cookie}
+}
+
+// GetCrtcGammaReply represents the data returned from a GetCrtcGamma request.
+type GetCrtcGammaReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Size uint16
+ // padding: 22 bytes
+ Red []uint16 // size: xgb.Pad((int(Size) * 2))
+ Green []uint16 // size: xgb.Pad((int(Size) * 2))
+ Blue []uint16 // size: xgb.Pad((int(Size) * 2))
+}
+
+// Reply blocks and returns the reply data for a GetCrtcGamma request.
+func (cook GetCrtcGammaCookie) Reply() (*GetCrtcGammaReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getCrtcGammaReply(buf), nil
+}
+
+// getCrtcGammaReply reads a byte slice into a GetCrtcGammaReply value.
+func getCrtcGammaReply(buf []byte) *GetCrtcGammaReply {
+ v := new(GetCrtcGammaReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Size = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 22 // padding
+
+ v.Red = make([]uint16, v.Size)
+ for i := 0; i < int(v.Size); i++ {
+ v.Red[i] = xgb.Get16(buf[b:])
+ b += 2
+ }
+
+ v.Green = make([]uint16, v.Size)
+ for i := 0; i < int(v.Size); i++ {
+ v.Green[i] = xgb.Get16(buf[b:])
+ b += 2
+ }
+
+ v.Blue = make([]uint16, v.Size)
+ for i := 0; i < int(v.Size); i++ {
+ v.Blue[i] = xgb.Get16(buf[b:])
+ b += 2
+ }
+
+ return v
+}
+
+// Write request to wire for GetCrtcGamma
+// getCrtcGammaRequest writes a GetCrtcGamma request to a byte slice.
+func getCrtcGammaRequest(c *xgb.Conn, Crtc Crtc) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 23 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ return buf
+}
+
+// GetCrtcGammaSizeCookie is a cookie used only for GetCrtcGammaSize requests.
+type GetCrtcGammaSizeCookie struct {
+ *xgb.Cookie
+}
+
+// GetCrtcGammaSize sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetCrtcGammaSizeCookie.Reply()
+func GetCrtcGammaSize(c *xgb.Conn, Crtc Crtc) GetCrtcGammaSizeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcGammaSize' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getCrtcGammaSizeRequest(c, Crtc), cookie)
+ return GetCrtcGammaSizeCookie{cookie}
+}
+
+// GetCrtcGammaSizeUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetCrtcGammaSizeUnchecked(c *xgb.Conn, Crtc Crtc) GetCrtcGammaSizeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcGammaSize' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getCrtcGammaSizeRequest(c, Crtc), cookie)
+ return GetCrtcGammaSizeCookie{cookie}
+}
+
+// GetCrtcGammaSizeReply represents the data returned from a GetCrtcGammaSize request.
+type GetCrtcGammaSizeReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Size uint16
+ // padding: 22 bytes
+}
+
+// Reply blocks and returns the reply data for a GetCrtcGammaSize request.
+func (cook GetCrtcGammaSizeCookie) Reply() (*GetCrtcGammaSizeReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getCrtcGammaSizeReply(buf), nil
+}
+
+// getCrtcGammaSizeReply reads a byte slice into a GetCrtcGammaSizeReply value.
+func getCrtcGammaSizeReply(buf []byte) *GetCrtcGammaSizeReply {
+ v := new(GetCrtcGammaSizeReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Size = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 22 // padding
+
+ return v
+}
+
+// Write request to wire for GetCrtcGammaSize
+// getCrtcGammaSizeRequest writes a GetCrtcGammaSize request to a byte slice.
+func getCrtcGammaSizeRequest(c *xgb.Conn, Crtc Crtc) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 22 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ return buf
+}
+
+// GetCrtcInfoCookie is a cookie used only for GetCrtcInfo requests.
+type GetCrtcInfoCookie struct {
+ *xgb.Cookie
+}
+
+// GetCrtcInfo sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetCrtcInfoCookie.Reply()
+func GetCrtcInfo(c *xgb.Conn, Crtc Crtc, ConfigTimestamp xproto.Timestamp) GetCrtcInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getCrtcInfoRequest(c, Crtc, ConfigTimestamp), cookie)
+ return GetCrtcInfoCookie{cookie}
+}
+
+// GetCrtcInfoUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetCrtcInfoUnchecked(c *xgb.Conn, Crtc Crtc, ConfigTimestamp xproto.Timestamp) GetCrtcInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getCrtcInfoRequest(c, Crtc, ConfigTimestamp), cookie)
+ return GetCrtcInfoCookie{cookie}
+}
+
+// GetCrtcInfoReply represents the data returned from a GetCrtcInfo request.
+type GetCrtcInfoReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ Timestamp xproto.Timestamp
+ X int16
+ Y int16
+ Width uint16
+ Height uint16
+ Mode Mode
+ Rotation uint16
+ Rotations uint16
+ NumOutputs uint16
+ NumPossibleOutputs uint16
+ Outputs []Output // size: xgb.Pad((int(NumOutputs) * 4))
+ Possible []Output // size: xgb.Pad((int(NumPossibleOutputs) * 4))
+}
+
+// Reply blocks and returns the reply data for a GetCrtcInfo request.
+func (cook GetCrtcInfoCookie) Reply() (*GetCrtcInfoReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getCrtcInfoReply(buf), nil
+}
+
+// getCrtcInfoReply reads a byte slice into a GetCrtcInfoReply value.
+func getCrtcInfoReply(buf []byte) *GetCrtcInfoReply {
+ v := new(GetCrtcInfoReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.X = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Y = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Mode = Mode(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Rotation = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Rotations = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumOutputs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumPossibleOutputs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Outputs = make([]Output, v.NumOutputs)
+ for i := 0; i < int(v.NumOutputs); i++ {
+ v.Outputs[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Possible = make([]Output, v.NumPossibleOutputs)
+ for i := 0; i < int(v.NumPossibleOutputs); i++ {
+ v.Possible[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for GetCrtcInfo
+// getCrtcInfoRequest writes a GetCrtcInfo request to a byte slice.
+func getCrtcInfoRequest(c *xgb.Conn, Crtc Crtc, ConfigTimestamp xproto.Timestamp) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 20 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ return buf
+}
+
+// GetCrtcTransformCookie is a cookie used only for GetCrtcTransform requests.
+type GetCrtcTransformCookie struct {
+ *xgb.Cookie
+}
+
+// GetCrtcTransform sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetCrtcTransformCookie.Reply()
+func GetCrtcTransform(c *xgb.Conn, Crtc Crtc) GetCrtcTransformCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcTransform' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getCrtcTransformRequest(c, Crtc), cookie)
+ return GetCrtcTransformCookie{cookie}
+}
+
+// GetCrtcTransformUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetCrtcTransformUnchecked(c *xgb.Conn, Crtc Crtc) GetCrtcTransformCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetCrtcTransform' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getCrtcTransformRequest(c, Crtc), cookie)
+ return GetCrtcTransformCookie{cookie}
+}
+
+// GetCrtcTransformReply represents the data returned from a GetCrtcTransform request.
+type GetCrtcTransformReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ PendingTransform render.Transform
+ HasTransforms bool
+ // padding: 3 bytes
+ CurrentTransform render.Transform
+ // padding: 4 bytes
+ PendingLen uint16
+ PendingNparams uint16
+ CurrentLen uint16
+ CurrentNparams uint16
+ PendingFilterName string // size: xgb.Pad((int(PendingLen) * 1))
+ // alignment gap to multiple of 4
+ PendingParams []render.Fixed // size: xgb.Pad((int(PendingNparams) * 4))
+ CurrentFilterName string // size: xgb.Pad((int(CurrentLen) * 1))
+ // alignment gap to multiple of 4
+ CurrentParams []render.Fixed // size: xgb.Pad((int(CurrentNparams) * 4))
+}
+
+// Reply blocks and returns the reply data for a GetCrtcTransform request.
+func (cook GetCrtcTransformCookie) Reply() (*GetCrtcTransformReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getCrtcTransformReply(buf), nil
+}
+
+// getCrtcTransformReply reads a byte slice into a GetCrtcTransformReply value.
+func getCrtcTransformReply(buf []byte) *GetCrtcTransformReply {
+ v := new(GetCrtcTransformReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.PendingTransform = render.Transform{}
+ b += render.TransformRead(buf[b:], &v.PendingTransform)
+
+ if buf[b] == 1 {
+ v.HasTransforms = true
+ } else {
+ v.HasTransforms = false
+ }
+ b += 1
+
+ b += 3 // padding
+
+ v.CurrentTransform = render.Transform{}
+ b += render.TransformRead(buf[b:], &v.CurrentTransform)
+
+ b += 4 // padding
+
+ v.PendingLen = xgb.Get16(buf[b:])
+ b += 2
+
+ v.PendingNparams = xgb.Get16(buf[b:])
+ b += 2
+
+ v.CurrentLen = xgb.Get16(buf[b:])
+ b += 2
+
+ v.CurrentNparams = xgb.Get16(buf[b:])
+ b += 2
+
+ {
+ byteString := make([]byte, v.PendingLen)
+ copy(byteString[:v.PendingLen], buf[b:])
+ v.PendingFilterName = string(byteString)
+ b += int(v.PendingLen)
+ }
+
+ b = (b + 3) & ^3 // alignment gap
+
+ v.PendingParams = make([]render.Fixed, v.PendingNparams)
+ for i := 0; i < int(v.PendingNparams); i++ {
+ v.PendingParams[i] = render.Fixed(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ {
+ byteString := make([]byte, v.CurrentLen)
+ copy(byteString[:v.CurrentLen], buf[b:])
+ v.CurrentFilterName = string(byteString)
+ b += int(v.CurrentLen)
+ }
+
+ b = (b + 3) & ^3 // alignment gap
+
+ v.CurrentParams = make([]render.Fixed, v.CurrentNparams)
+ for i := 0; i < int(v.CurrentNparams); i++ {
+ v.CurrentParams[i] = render.Fixed(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for GetCrtcTransform
+// getCrtcTransformRequest writes a GetCrtcTransform request to a byte slice.
+func getCrtcTransformRequest(c *xgb.Conn, Crtc Crtc) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 27 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ return buf
+}
+
+// GetMonitorsCookie is a cookie used only for GetMonitors requests.
+type GetMonitorsCookie struct {
+ *xgb.Cookie
+}
+
+// GetMonitors sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetMonitorsCookie.Reply()
+func GetMonitors(c *xgb.Conn, Window xproto.Window, GetActive bool) GetMonitorsCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetMonitors' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getMonitorsRequest(c, Window, GetActive), cookie)
+ return GetMonitorsCookie{cookie}
+}
+
+// GetMonitorsUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetMonitorsUnchecked(c *xgb.Conn, Window xproto.Window, GetActive bool) GetMonitorsCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetMonitors' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getMonitorsRequest(c, Window, GetActive), cookie)
+ return GetMonitorsCookie{cookie}
+}
+
+// GetMonitorsReply represents the data returned from a GetMonitors request.
+type GetMonitorsReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Timestamp xproto.Timestamp
+ NMonitors uint32
+ NOutputs uint32
+ // padding: 12 bytes
+ Monitors []MonitorInfo // size: MonitorInfoListSize(Monitors)
+}
+
+// Reply blocks and returns the reply data for a GetMonitors request.
+func (cook GetMonitorsCookie) Reply() (*GetMonitorsReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getMonitorsReply(buf), nil
+}
+
+// getMonitorsReply reads a byte slice into a GetMonitorsReply value.
+func getMonitorsReply(buf []byte) *GetMonitorsReply {
+ v := new(GetMonitorsReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.NMonitors = xgb.Get32(buf[b:])
+ b += 4
+
+ v.NOutputs = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 12 // padding
+
+ v.Monitors = make([]MonitorInfo, v.NMonitors)
+ b += MonitorInfoReadList(buf[b:], v.Monitors)
+
+ return v
+}
+
+// Write request to wire for GetMonitors
+// getMonitorsRequest writes a GetMonitors request to a byte slice.
+func getMonitorsRequest(c *xgb.Conn, Window xproto.Window, GetActive bool) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 42 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ if GetActive {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ return buf
+}
+
+// GetOutputInfoCookie is a cookie used only for GetOutputInfo requests.
+type GetOutputInfoCookie struct {
+ *xgb.Cookie
+}
+
+// GetOutputInfo sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetOutputInfoCookie.Reply()
+func GetOutputInfo(c *xgb.Conn, Output Output, ConfigTimestamp xproto.Timestamp) GetOutputInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetOutputInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getOutputInfoRequest(c, Output, ConfigTimestamp), cookie)
+ return GetOutputInfoCookie{cookie}
+}
+
+// GetOutputInfoUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetOutputInfoUnchecked(c *xgb.Conn, Output Output, ConfigTimestamp xproto.Timestamp) GetOutputInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetOutputInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getOutputInfoRequest(c, Output, ConfigTimestamp), cookie)
+ return GetOutputInfoCookie{cookie}
+}
+
+// GetOutputInfoReply represents the data returned from a GetOutputInfo request.
+type GetOutputInfoReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ Timestamp xproto.Timestamp
+ Crtc Crtc
+ MmWidth uint32
+ MmHeight uint32
+ Connection byte
+ SubpixelOrder byte
+ NumCrtcs uint16
+ NumModes uint16
+ NumPreferred uint16
+ NumClones uint16
+ NameLen uint16
+ Crtcs []Crtc // size: xgb.Pad((int(NumCrtcs) * 4))
+ Modes []Mode // size: xgb.Pad((int(NumModes) * 4))
+ Clones []Output // size: xgb.Pad((int(NumClones) * 4))
+ Name []byte // size: xgb.Pad((int(NameLen) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetOutputInfo request.
+func (cook GetOutputInfoCookie) Reply() (*GetOutputInfoReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getOutputInfoReply(buf), nil
+}
+
+// getOutputInfoReply reads a byte slice into a GetOutputInfoReply value.
+func getOutputInfoReply(buf []byte) *GetOutputInfoReply {
+ v := new(GetOutputInfoReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Crtc = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.MmWidth = xgb.Get32(buf[b:])
+ b += 4
+
+ v.MmHeight = xgb.Get32(buf[b:])
+ b += 4
+
+ v.Connection = buf[b]
+ b += 1
+
+ v.SubpixelOrder = buf[b]
+ b += 1
+
+ v.NumCrtcs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumModes = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumPreferred = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumClones = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NameLen = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Crtcs = make([]Crtc, v.NumCrtcs)
+ for i := 0; i < int(v.NumCrtcs); i++ {
+ v.Crtcs[i] = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Modes = make([]Mode, v.NumModes)
+ for i := 0; i < int(v.NumModes); i++ {
+ v.Modes[i] = Mode(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Clones = make([]Output, v.NumClones)
+ for i := 0; i < int(v.NumClones); i++ {
+ v.Clones[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Name = make([]byte, v.NameLen)
+ copy(v.Name[:v.NameLen], buf[b:])
+ b += int(v.NameLen)
+
+ return v
+}
+
+// Write request to wire for GetOutputInfo
+// getOutputInfoRequest writes a GetOutputInfo request to a byte slice.
+func getOutputInfoRequest(c *xgb.Conn, Output Output, ConfigTimestamp xproto.Timestamp) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 9 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ return buf
+}
+
+// GetOutputPrimaryCookie is a cookie used only for GetOutputPrimary requests.
+type GetOutputPrimaryCookie struct {
+ *xgb.Cookie
+}
+
+// GetOutputPrimary sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetOutputPrimaryCookie.Reply()
+func GetOutputPrimary(c *xgb.Conn, Window xproto.Window) GetOutputPrimaryCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetOutputPrimary' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getOutputPrimaryRequest(c, Window), cookie)
+ return GetOutputPrimaryCookie{cookie}
+}
+
+// GetOutputPrimaryUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetOutputPrimaryUnchecked(c *xgb.Conn, Window xproto.Window) GetOutputPrimaryCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetOutputPrimary' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getOutputPrimaryRequest(c, Window), cookie)
+ return GetOutputPrimaryCookie{cookie}
+}
+
+// GetOutputPrimaryReply represents the data returned from a GetOutputPrimary request.
+type GetOutputPrimaryReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Output Output
+}
+
+// Reply blocks and returns the reply data for a GetOutputPrimary request.
+func (cook GetOutputPrimaryCookie) Reply() (*GetOutputPrimaryReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getOutputPrimaryReply(buf), nil
+}
+
+// getOutputPrimaryReply reads a byte slice into a GetOutputPrimaryReply value.
+func getOutputPrimaryReply(buf []byte) *GetOutputPrimaryReply {
+ v := new(GetOutputPrimaryReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Output = Output(xgb.Get32(buf[b:]))
+ b += 4
+
+ return v
+}
+
+// Write request to wire for GetOutputPrimary
+// getOutputPrimaryRequest writes a GetOutputPrimary request to a byte slice.
+func getOutputPrimaryRequest(c *xgb.Conn, Window xproto.Window) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 31 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ return buf
+}
+
+// GetOutputPropertyCookie is a cookie used only for GetOutputProperty requests.
+type GetOutputPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// GetOutputProperty sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetOutputPropertyCookie.Reply()
+func GetOutputProperty(c *xgb.Conn, Output Output, Property xproto.Atom, Type xproto.Atom, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) GetOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getOutputPropertyRequest(c, Output, Property, Type, LongOffset, LongLength, Delete, Pending), cookie)
+ return GetOutputPropertyCookie{cookie}
+}
+
+// GetOutputPropertyUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetOutputPropertyUnchecked(c *xgb.Conn, Output Output, Property xproto.Atom, Type xproto.Atom, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) GetOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getOutputPropertyRequest(c, Output, Property, Type, LongOffset, LongLength, Delete, Pending), cookie)
+ return GetOutputPropertyCookie{cookie}
+}
+
+// GetOutputPropertyReply represents the data returned from a GetOutputProperty request.
+type GetOutputPropertyReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Format byte
+ Type xproto.Atom
+ BytesAfter uint32
+ NumItems uint32
+ // padding: 12 bytes
+ Data []byte // size: xgb.Pad(((int(NumItems) * (int(Format) / 8)) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetOutputProperty request.
+func (cook GetOutputPropertyCookie) Reply() (*GetOutputPropertyReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getOutputPropertyReply(buf), nil
+}
+
+// getOutputPropertyReply reads a byte slice into a GetOutputPropertyReply value.
+func getOutputPropertyReply(buf []byte) *GetOutputPropertyReply {
+ v := new(GetOutputPropertyReply)
+ b := 1 // skip reply determinant
+
+ v.Format = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Type = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.BytesAfter = xgb.Get32(buf[b:])
+ b += 4
+
+ v.NumItems = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 12 // padding
+
+ v.Data = make([]byte, (int(v.NumItems) * (int(v.Format) / 8)))
+ copy(v.Data[:(int(v.NumItems)*(int(v.Format)/8))], buf[b:])
+ b += int((int(v.NumItems) * (int(v.Format) / 8)))
+
+ return v
+}
+
+// Write request to wire for GetOutputProperty
+// getOutputPropertyRequest writes a GetOutputProperty request to a byte slice.
+func getOutputPropertyRequest(c *xgb.Conn, Output Output, Property xproto.Atom, Type xproto.Atom, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) []byte {
+ size := 28
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 15 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Type))
+ b += 4
+
+ xgb.Put32(buf[b:], LongOffset)
+ b += 4
+
+ xgb.Put32(buf[b:], LongLength)
+ b += 4
+
+ if Delete {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ if Pending {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ b += 2 // padding
+
+ return buf
+}
+
+// GetPanningCookie is a cookie used only for GetPanning requests.
+type GetPanningCookie struct {
+ *xgb.Cookie
+}
+
+// GetPanning sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetPanningCookie.Reply()
+func GetPanning(c *xgb.Conn, Crtc Crtc) GetPanningCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetPanning' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getPanningRequest(c, Crtc), cookie)
+ return GetPanningCookie{cookie}
+}
+
+// GetPanningUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetPanningUnchecked(c *xgb.Conn, Crtc Crtc) GetPanningCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetPanning' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getPanningRequest(c, Crtc), cookie)
+ return GetPanningCookie{cookie}
+}
+
+// GetPanningReply represents the data returned from a GetPanning request.
+type GetPanningReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ Timestamp xproto.Timestamp
+ Left uint16
+ Top uint16
+ Width uint16
+ Height uint16
+ TrackLeft uint16
+ TrackTop uint16
+ TrackWidth uint16
+ TrackHeight uint16
+ BorderLeft int16
+ BorderTop int16
+ BorderRight int16
+ BorderBottom int16
+}
+
+// Reply blocks and returns the reply data for a GetPanning request.
+func (cook GetPanningCookie) Reply() (*GetPanningReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getPanningReply(buf), nil
+}
+
+// getPanningReply reads a byte slice into a GetPanningReply value.
+func getPanningReply(buf []byte) *GetPanningReply {
+ v := new(GetPanningReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Left = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Top = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Width = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Height = xgb.Get16(buf[b:])
+ b += 2
+
+ v.TrackLeft = xgb.Get16(buf[b:])
+ b += 2
+
+ v.TrackTop = xgb.Get16(buf[b:])
+ b += 2
+
+ v.TrackWidth = xgb.Get16(buf[b:])
+ b += 2
+
+ v.TrackHeight = xgb.Get16(buf[b:])
+ b += 2
+
+ v.BorderLeft = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.BorderTop = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.BorderRight = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ v.BorderBottom = int16(xgb.Get16(buf[b:]))
+ b += 2
+
+ return v
+}
+
+// Write request to wire for GetPanning
+// getPanningRequest writes a GetPanning request to a byte slice.
+func getPanningRequest(c *xgb.Conn, Crtc Crtc) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 28 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ return buf
+}
+
+// GetProviderInfoCookie is a cookie used only for GetProviderInfo requests.
+type GetProviderInfoCookie struct {
+ *xgb.Cookie
+}
+
+// GetProviderInfo sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetProviderInfoCookie.Reply()
+func GetProviderInfo(c *xgb.Conn, Provider Provider, ConfigTimestamp xproto.Timestamp) GetProviderInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetProviderInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getProviderInfoRequest(c, Provider, ConfigTimestamp), cookie)
+ return GetProviderInfoCookie{cookie}
+}
+
+// GetProviderInfoUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetProviderInfoUnchecked(c *xgb.Conn, Provider Provider, ConfigTimestamp xproto.Timestamp) GetProviderInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetProviderInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getProviderInfoRequest(c, Provider, ConfigTimestamp), cookie)
+ return GetProviderInfoCookie{cookie}
+}
+
+// GetProviderInfoReply represents the data returned from a GetProviderInfo request.
+type GetProviderInfoReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ Timestamp xproto.Timestamp
+ Capabilities uint32
+ NumCrtcs uint16
+ NumOutputs uint16
+ NumAssociatedProviders uint16
+ NameLen uint16
+ // padding: 8 bytes
+ Crtcs []Crtc // size: xgb.Pad((int(NumCrtcs) * 4))
+ Outputs []Output // size: xgb.Pad((int(NumOutputs) * 4))
+ AssociatedProviders []Provider // size: xgb.Pad((int(NumAssociatedProviders) * 4))
+ AssociatedCapability []uint32 // size: xgb.Pad((int(NumAssociatedProviders) * 4))
+ Name string // size: xgb.Pad((int(NameLen) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetProviderInfo request.
+func (cook GetProviderInfoCookie) Reply() (*GetProviderInfoReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getProviderInfoReply(buf), nil
+}
+
+// getProviderInfoReply reads a byte slice into a GetProviderInfoReply value.
+func getProviderInfoReply(buf []byte) *GetProviderInfoReply {
+ v := new(GetProviderInfoReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Capabilities = xgb.Get32(buf[b:])
+ b += 4
+
+ v.NumCrtcs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumOutputs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumAssociatedProviders = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NameLen = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 8 // padding
+
+ v.Crtcs = make([]Crtc, v.NumCrtcs)
+ for i := 0; i < int(v.NumCrtcs); i++ {
+ v.Crtcs[i] = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Outputs = make([]Output, v.NumOutputs)
+ for i := 0; i < int(v.NumOutputs); i++ {
+ v.Outputs[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.AssociatedProviders = make([]Provider, v.NumAssociatedProviders)
+ for i := 0; i < int(v.NumAssociatedProviders); i++ {
+ v.AssociatedProviders[i] = Provider(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.AssociatedCapability = make([]uint32, v.NumAssociatedProviders)
+ for i := 0; i < int(v.NumAssociatedProviders); i++ {
+ v.AssociatedCapability[i] = xgb.Get32(buf[b:])
+ b += 4
+ }
+
+ {
+ byteString := make([]byte, v.NameLen)
+ copy(byteString[:v.NameLen], buf[b:])
+ v.Name = string(byteString)
+ b += int(v.NameLen)
+ }
+
+ return v
+}
+
+// Write request to wire for GetProviderInfo
+// getProviderInfoRequest writes a GetProviderInfo request to a byte slice.
+func getProviderInfoRequest(c *xgb.Conn, Provider Provider, ConfigTimestamp xproto.Timestamp) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 33 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ return buf
+}
+
+// GetProviderPropertyCookie is a cookie used only for GetProviderProperty requests.
+type GetProviderPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// GetProviderProperty sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetProviderPropertyCookie.Reply()
+func GetProviderProperty(c *xgb.Conn, Provider Provider, Property xproto.Atom, Type xproto.Atom, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) GetProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getProviderPropertyRequest(c, Provider, Property, Type, LongOffset, LongLength, Delete, Pending), cookie)
+ return GetProviderPropertyCookie{cookie}
+}
+
+// GetProviderPropertyUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetProviderPropertyUnchecked(c *xgb.Conn, Provider Provider, Property xproto.Atom, Type xproto.Atom, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) GetProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getProviderPropertyRequest(c, Provider, Property, Type, LongOffset, LongLength, Delete, Pending), cookie)
+ return GetProviderPropertyCookie{cookie}
+}
+
+// GetProviderPropertyReply represents the data returned from a GetProviderProperty request.
+type GetProviderPropertyReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Format byte
+ Type xproto.Atom
+ BytesAfter uint32
+ NumItems uint32
+ // padding: 12 bytes
+ Data []byte // size: xgb.Pad(((int(NumItems) * (int(Format) / 8)) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetProviderProperty request.
+func (cook GetProviderPropertyCookie) Reply() (*GetProviderPropertyReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getProviderPropertyReply(buf), nil
+}
+
+// getProviderPropertyReply reads a byte slice into a GetProviderPropertyReply value.
+func getProviderPropertyReply(buf []byte) *GetProviderPropertyReply {
+ v := new(GetProviderPropertyReply)
+ b := 1 // skip reply determinant
+
+ v.Format = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Type = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.BytesAfter = xgb.Get32(buf[b:])
+ b += 4
+
+ v.NumItems = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 12 // padding
+
+ v.Data = make([]byte, (int(v.NumItems) * (int(v.Format) / 8)))
+ copy(v.Data[:(int(v.NumItems)*(int(v.Format)/8))], buf[b:])
+ b += int((int(v.NumItems) * (int(v.Format) / 8)))
+
+ return v
+}
+
+// Write request to wire for GetProviderProperty
+// getProviderPropertyRequest writes a GetProviderProperty request to a byte slice.
+func getProviderPropertyRequest(c *xgb.Conn, Provider Provider, Property xproto.Atom, Type xproto.Atom, LongOffset uint32, LongLength uint32, Delete bool, Pending bool) []byte {
+ size := 28
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 41 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Type))
+ b += 4
+
+ xgb.Put32(buf[b:], LongOffset)
+ b += 4
+
+ xgb.Put32(buf[b:], LongLength)
+ b += 4
+
+ if Delete {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ if Pending {
+ buf[b] = 1
+ } else {
+ buf[b] = 0
+ }
+ b += 1
+
+ b += 2 // padding
+
+ return buf
+}
+
+// GetProvidersCookie is a cookie used only for GetProviders requests.
+type GetProvidersCookie struct {
+ *xgb.Cookie
+}
+
+// GetProviders sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetProvidersCookie.Reply()
+func GetProviders(c *xgb.Conn, Window xproto.Window) GetProvidersCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetProviders' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getProvidersRequest(c, Window), cookie)
+ return GetProvidersCookie{cookie}
+}
+
+// GetProvidersUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetProvidersUnchecked(c *xgb.Conn, Window xproto.Window) GetProvidersCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetProviders' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getProvidersRequest(c, Window), cookie)
+ return GetProvidersCookie{cookie}
+}
+
+// GetProvidersReply represents the data returned from a GetProviders request.
+type GetProvidersReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Timestamp xproto.Timestamp
+ NumProviders uint16
+ // padding: 18 bytes
+ Providers []Provider // size: xgb.Pad((int(NumProviders) * 4))
+}
+
+// Reply blocks and returns the reply data for a GetProviders request.
+func (cook GetProvidersCookie) Reply() (*GetProvidersReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getProvidersReply(buf), nil
+}
+
+// getProvidersReply reads a byte slice into a GetProvidersReply value.
+func getProvidersReply(buf []byte) *GetProvidersReply {
+ v := new(GetProvidersReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.NumProviders = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 18 // padding
+
+ v.Providers = make([]Provider, v.NumProviders)
+ for i := 0; i < int(v.NumProviders); i++ {
+ v.Providers[i] = Provider(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for GetProviders
+// getProvidersRequest writes a GetProviders request to a byte slice.
+func getProvidersRequest(c *xgb.Conn, Window xproto.Window) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 32 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ return buf
+}
+
+// GetScreenInfoCookie is a cookie used only for GetScreenInfo requests.
+type GetScreenInfoCookie struct {
+ *xgb.Cookie
+}
+
+// GetScreenInfo sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetScreenInfoCookie.Reply()
+func GetScreenInfo(c *xgb.Conn, Window xproto.Window) GetScreenInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getScreenInfoRequest(c, Window), cookie)
+ return GetScreenInfoCookie{cookie}
+}
+
+// GetScreenInfoUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetScreenInfoUnchecked(c *xgb.Conn, Window xproto.Window) GetScreenInfoCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenInfo' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getScreenInfoRequest(c, Window), cookie)
+ return GetScreenInfoCookie{cookie}
+}
+
+// GetScreenInfoReply represents the data returned from a GetScreenInfo request.
+type GetScreenInfoReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Rotations byte
+ Root xproto.Window
+ Timestamp xproto.Timestamp
+ ConfigTimestamp xproto.Timestamp
+ NSizes uint16
+ SizeID uint16
+ Rotation uint16
+ Rate uint16
+ NInfo uint16
+ // padding: 2 bytes
+ Sizes []ScreenSize // size: xgb.Pad((int(NSizes) * 8))
+ Rates []RefreshRates // size: RefreshRatesListSize(Rates)
+}
+
+// Reply blocks and returns the reply data for a GetScreenInfo request.
+func (cook GetScreenInfoCookie) Reply() (*GetScreenInfoReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getScreenInfoReply(buf), nil
+}
+
+// getScreenInfoReply reads a byte slice into a GetScreenInfoReply value.
+func getScreenInfoReply(buf []byte) *GetScreenInfoReply {
+ v := new(GetScreenInfoReply)
+ b := 1 // skip reply determinant
+
+ v.Rotations = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Root = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.ConfigTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.NSizes = xgb.Get16(buf[b:])
+ b += 2
+
+ v.SizeID = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Rotation = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Rate = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NInfo = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 2 // padding
+
+ v.Sizes = make([]ScreenSize, v.NSizes)
+ b += ScreenSizeReadList(buf[b:], v.Sizes)
+
+ v.Rates = make([]RefreshRates, (int(v.NInfo) - int(v.NSizes)))
+ b += RefreshRatesReadList(buf[b:], v.Rates)
+
+ return v
+}
+
+// Write request to wire for GetScreenInfo
+// getScreenInfoRequest writes a GetScreenInfo request to a byte slice.
+func getScreenInfoRequest(c *xgb.Conn, Window xproto.Window) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 5 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ return buf
+}
+
+// GetScreenResourcesCookie is a cookie used only for GetScreenResources requests.
+type GetScreenResourcesCookie struct {
+ *xgb.Cookie
+}
+
+// GetScreenResources sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetScreenResourcesCookie.Reply()
+func GetScreenResources(c *xgb.Conn, Window xproto.Window) GetScreenResourcesCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenResources' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getScreenResourcesRequest(c, Window), cookie)
+ return GetScreenResourcesCookie{cookie}
+}
+
+// GetScreenResourcesUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetScreenResourcesUnchecked(c *xgb.Conn, Window xproto.Window) GetScreenResourcesCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenResources' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getScreenResourcesRequest(c, Window), cookie)
+ return GetScreenResourcesCookie{cookie}
+}
+
+// GetScreenResourcesReply represents the data returned from a GetScreenResources request.
+type GetScreenResourcesReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Timestamp xproto.Timestamp
+ ConfigTimestamp xproto.Timestamp
+ NumCrtcs uint16
+ NumOutputs uint16
+ NumModes uint16
+ NamesLen uint16
+ // padding: 8 bytes
+ Crtcs []Crtc // size: xgb.Pad((int(NumCrtcs) * 4))
+ Outputs []Output // size: xgb.Pad((int(NumOutputs) * 4))
+ Modes []ModeInfo // size: xgb.Pad((int(NumModes) * 32))
+ Names []byte // size: xgb.Pad((int(NamesLen) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetScreenResources request.
+func (cook GetScreenResourcesCookie) Reply() (*GetScreenResourcesReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getScreenResourcesReply(buf), nil
+}
+
+// getScreenResourcesReply reads a byte slice into a GetScreenResourcesReply value.
+func getScreenResourcesReply(buf []byte) *GetScreenResourcesReply {
+ v := new(GetScreenResourcesReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.ConfigTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.NumCrtcs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumOutputs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumModes = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NamesLen = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 8 // padding
+
+ v.Crtcs = make([]Crtc, v.NumCrtcs)
+ for i := 0; i < int(v.NumCrtcs); i++ {
+ v.Crtcs[i] = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Outputs = make([]Output, v.NumOutputs)
+ for i := 0; i < int(v.NumOutputs); i++ {
+ v.Outputs[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Modes = make([]ModeInfo, v.NumModes)
+ b += ModeInfoReadList(buf[b:], v.Modes)
+
+ v.Names = make([]byte, v.NamesLen)
+ copy(v.Names[:v.NamesLen], buf[b:])
+ b += int(v.NamesLen)
+
+ return v
+}
+
+// Write request to wire for GetScreenResources
+// getScreenResourcesRequest writes a GetScreenResources request to a byte slice.
+func getScreenResourcesRequest(c *xgb.Conn, Window xproto.Window) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 8 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ return buf
+}
+
+// GetScreenResourcesCurrentCookie is a cookie used only for GetScreenResourcesCurrent requests.
+type GetScreenResourcesCurrentCookie struct {
+ *xgb.Cookie
+}
+
+// GetScreenResourcesCurrent sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetScreenResourcesCurrentCookie.Reply()
+func GetScreenResourcesCurrent(c *xgb.Conn, Window xproto.Window) GetScreenResourcesCurrentCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenResourcesCurrent' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getScreenResourcesCurrentRequest(c, Window), cookie)
+ return GetScreenResourcesCurrentCookie{cookie}
+}
+
+// GetScreenResourcesCurrentUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetScreenResourcesCurrentUnchecked(c *xgb.Conn, Window xproto.Window) GetScreenResourcesCurrentCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenResourcesCurrent' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getScreenResourcesCurrentRequest(c, Window), cookie)
+ return GetScreenResourcesCurrentCookie{cookie}
+}
+
+// GetScreenResourcesCurrentReply represents the data returned from a GetScreenResourcesCurrent request.
+type GetScreenResourcesCurrentReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Timestamp xproto.Timestamp
+ ConfigTimestamp xproto.Timestamp
+ NumCrtcs uint16
+ NumOutputs uint16
+ NumModes uint16
+ NamesLen uint16
+ // padding: 8 bytes
+ Crtcs []Crtc // size: xgb.Pad((int(NumCrtcs) * 4))
+ Outputs []Output // size: xgb.Pad((int(NumOutputs) * 4))
+ Modes []ModeInfo // size: xgb.Pad((int(NumModes) * 32))
+ Names []byte // size: xgb.Pad((int(NamesLen) * 1))
+}
+
+// Reply blocks and returns the reply data for a GetScreenResourcesCurrent request.
+func (cook GetScreenResourcesCurrentCookie) Reply() (*GetScreenResourcesCurrentReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getScreenResourcesCurrentReply(buf), nil
+}
+
+// getScreenResourcesCurrentReply reads a byte slice into a GetScreenResourcesCurrentReply value.
+func getScreenResourcesCurrentReply(buf []byte) *GetScreenResourcesCurrentReply {
+ v := new(GetScreenResourcesCurrentReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.ConfigTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.NumCrtcs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumOutputs = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NumModes = xgb.Get16(buf[b:])
+ b += 2
+
+ v.NamesLen = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 8 // padding
+
+ v.Crtcs = make([]Crtc, v.NumCrtcs)
+ for i := 0; i < int(v.NumCrtcs); i++ {
+ v.Crtcs[i] = Crtc(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Outputs = make([]Output, v.NumOutputs)
+ for i := 0; i < int(v.NumOutputs); i++ {
+ v.Outputs[i] = Output(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ v.Modes = make([]ModeInfo, v.NumModes)
+ b += ModeInfoReadList(buf[b:], v.Modes)
+
+ v.Names = make([]byte, v.NamesLen)
+ copy(v.Names[:v.NamesLen], buf[b:])
+ b += int(v.NamesLen)
+
+ return v
+}
+
+// Write request to wire for GetScreenResourcesCurrent
+// getScreenResourcesCurrentRequest writes a GetScreenResourcesCurrent request to a byte slice.
+func getScreenResourcesCurrentRequest(c *xgb.Conn, Window xproto.Window) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 25 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ return buf
+}
+
+// GetScreenSizeRangeCookie is a cookie used only for GetScreenSizeRange requests.
+type GetScreenSizeRangeCookie struct {
+ *xgb.Cookie
+}
+
+// GetScreenSizeRange sends a checked request.
+// If an error occurs, it will be returned with the reply by calling GetScreenSizeRangeCookie.Reply()
+func GetScreenSizeRange(c *xgb.Conn, Window xproto.Window) GetScreenSizeRangeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenSizeRange' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(getScreenSizeRangeRequest(c, Window), cookie)
+ return GetScreenSizeRangeCookie{cookie}
+}
+
+// GetScreenSizeRangeUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func GetScreenSizeRangeUnchecked(c *xgb.Conn, Window xproto.Window) GetScreenSizeRangeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'GetScreenSizeRange' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(getScreenSizeRangeRequest(c, Window), cookie)
+ return GetScreenSizeRangeCookie{cookie}
+}
+
+// GetScreenSizeRangeReply represents the data returned from a GetScreenSizeRange request.
+type GetScreenSizeRangeReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ MinWidth uint16
+ MinHeight uint16
+ MaxWidth uint16
+ MaxHeight uint16
+ // padding: 16 bytes
+}
+
+// Reply blocks and returns the reply data for a GetScreenSizeRange request.
+func (cook GetScreenSizeRangeCookie) Reply() (*GetScreenSizeRangeReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return getScreenSizeRangeReply(buf), nil
+}
+
+// getScreenSizeRangeReply reads a byte slice into a GetScreenSizeRangeReply value.
+func getScreenSizeRangeReply(buf []byte) *GetScreenSizeRangeReply {
+ v := new(GetScreenSizeRangeReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.MinWidth = xgb.Get16(buf[b:])
+ b += 2
+
+ v.MinHeight = xgb.Get16(buf[b:])
+ b += 2
+
+ v.MaxWidth = xgb.Get16(buf[b:])
+ b += 2
+
+ v.MaxHeight = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 16 // padding
+
+ return v
+}
+
+// Write request to wire for GetScreenSizeRange
+// getScreenSizeRangeRequest writes a GetScreenSizeRange request to a byte slice.
+func getScreenSizeRangeRequest(c *xgb.Conn, Window xproto.Window) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 6 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ return buf
+}
+
+// ListOutputPropertiesCookie is a cookie used only for ListOutputProperties requests.
+type ListOutputPropertiesCookie struct {
+ *xgb.Cookie
+}
+
+// ListOutputProperties sends a checked request.
+// If an error occurs, it will be returned with the reply by calling ListOutputPropertiesCookie.Reply()
+func ListOutputProperties(c *xgb.Conn, Output Output) ListOutputPropertiesCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ListOutputProperties' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(listOutputPropertiesRequest(c, Output), cookie)
+ return ListOutputPropertiesCookie{cookie}
+}
+
+// ListOutputPropertiesUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func ListOutputPropertiesUnchecked(c *xgb.Conn, Output Output) ListOutputPropertiesCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ListOutputProperties' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(listOutputPropertiesRequest(c, Output), cookie)
+ return ListOutputPropertiesCookie{cookie}
+}
+
+// ListOutputPropertiesReply represents the data returned from a ListOutputProperties request.
+type ListOutputPropertiesReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ NumAtoms uint16
+ // padding: 22 bytes
+ Atoms []xproto.Atom // size: xgb.Pad((int(NumAtoms) * 4))
+}
+
+// Reply blocks and returns the reply data for a ListOutputProperties request.
+func (cook ListOutputPropertiesCookie) Reply() (*ListOutputPropertiesReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return listOutputPropertiesReply(buf), nil
+}
+
+// listOutputPropertiesReply reads a byte slice into a ListOutputPropertiesReply value.
+func listOutputPropertiesReply(buf []byte) *ListOutputPropertiesReply {
+ v := new(ListOutputPropertiesReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.NumAtoms = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 22 // padding
+
+ v.Atoms = make([]xproto.Atom, v.NumAtoms)
+ for i := 0; i < int(v.NumAtoms); i++ {
+ v.Atoms[i] = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for ListOutputProperties
+// listOutputPropertiesRequest writes a ListOutputProperties request to a byte slice.
+func listOutputPropertiesRequest(c *xgb.Conn, Output Output) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 10 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ return buf
+}
+
+// ListProviderPropertiesCookie is a cookie used only for ListProviderProperties requests.
+type ListProviderPropertiesCookie struct {
+ *xgb.Cookie
+}
+
+// ListProviderProperties sends a checked request.
+// If an error occurs, it will be returned with the reply by calling ListProviderPropertiesCookie.Reply()
+func ListProviderProperties(c *xgb.Conn, Provider Provider) ListProviderPropertiesCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ListProviderProperties' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(listProviderPropertiesRequest(c, Provider), cookie)
+ return ListProviderPropertiesCookie{cookie}
+}
+
+// ListProviderPropertiesUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func ListProviderPropertiesUnchecked(c *xgb.Conn, Provider Provider) ListProviderPropertiesCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'ListProviderProperties' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(listProviderPropertiesRequest(c, Provider), cookie)
+ return ListProviderPropertiesCookie{cookie}
+}
+
+// ListProviderPropertiesReply represents the data returned from a ListProviderProperties request.
+type ListProviderPropertiesReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ NumAtoms uint16
+ // padding: 22 bytes
+ Atoms []xproto.Atom // size: xgb.Pad((int(NumAtoms) * 4))
+}
+
+// Reply blocks and returns the reply data for a ListProviderProperties request.
+func (cook ListProviderPropertiesCookie) Reply() (*ListProviderPropertiesReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return listProviderPropertiesReply(buf), nil
+}
+
+// listProviderPropertiesReply reads a byte slice into a ListProviderPropertiesReply value.
+func listProviderPropertiesReply(buf []byte) *ListProviderPropertiesReply {
+ v := new(ListProviderPropertiesReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.NumAtoms = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 22 // padding
+
+ v.Atoms = make([]xproto.Atom, v.NumAtoms)
+ for i := 0; i < int(v.NumAtoms); i++ {
+ v.Atoms[i] = xproto.Atom(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for ListProviderProperties
+// listProviderPropertiesRequest writes a ListProviderProperties request to a byte slice.
+func listProviderPropertiesRequest(c *xgb.Conn, Provider Provider) []byte {
+ size := 8
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 36 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ return buf
+}
+
+// QueryOutputPropertyCookie is a cookie used only for QueryOutputProperty requests.
+type QueryOutputPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// QueryOutputProperty sends a checked request.
+// If an error occurs, it will be returned with the reply by calling QueryOutputPropertyCookie.Reply()
+func QueryOutputProperty(c *xgb.Conn, Output Output, Property xproto.Atom) QueryOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'QueryOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(queryOutputPropertyRequest(c, Output, Property), cookie)
+ return QueryOutputPropertyCookie{cookie}
+}
+
+// QueryOutputPropertyUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func QueryOutputPropertyUnchecked(c *xgb.Conn, Output Output, Property xproto.Atom) QueryOutputPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'QueryOutputProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(queryOutputPropertyRequest(c, Output, Property), cookie)
+ return QueryOutputPropertyCookie{cookie}
+}
+
+// QueryOutputPropertyReply represents the data returned from a QueryOutputProperty request.
+type QueryOutputPropertyReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Pending bool
+ Range bool
+ Immutable bool
+ // padding: 21 bytes
+ ValidValues []int32 // size: xgb.Pad((int(Length) * 4))
+}
+
+// Reply blocks and returns the reply data for a QueryOutputProperty request.
+func (cook QueryOutputPropertyCookie) Reply() (*QueryOutputPropertyReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return queryOutputPropertyReply(buf), nil
+}
+
+// queryOutputPropertyReply reads a byte slice into a QueryOutputPropertyReply value.
+func queryOutputPropertyReply(buf []byte) *QueryOutputPropertyReply {
+ v := new(QueryOutputPropertyReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ if buf[b] == 1 {
+ v.Pending = true
+ } else {
+ v.Pending = false
+ }
+ b += 1
+
+ if buf[b] == 1 {
+ v.Range = true
+ } else {
+ v.Range = false
+ }
+ b += 1
+
+ if buf[b] == 1 {
+ v.Immutable = true
+ } else {
+ v.Immutable = false
+ }
+ b += 1
+
+ b += 21 // padding
+
+ v.ValidValues = make([]int32, v.Length)
+ for i := 0; i < int(v.Length); i++ {
+ v.ValidValues[i] = int32(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for QueryOutputProperty
+// queryOutputPropertyRequest writes a QueryOutputProperty request to a byte slice.
+func queryOutputPropertyRequest(c *xgb.Conn, Output Output, Property xproto.Atom) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 11 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ return buf
+}
+
+// QueryProviderPropertyCookie is a cookie used only for QueryProviderProperty requests.
+type QueryProviderPropertyCookie struct {
+ *xgb.Cookie
+}
+
+// QueryProviderProperty sends a checked request.
+// If an error occurs, it will be returned with the reply by calling QueryProviderPropertyCookie.Reply()
+func QueryProviderProperty(c *xgb.Conn, Provider Provider, Property xproto.Atom) QueryProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'QueryProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(queryProviderPropertyRequest(c, Provider, Property), cookie)
+ return QueryProviderPropertyCookie{cookie}
+}
+
+// QueryProviderPropertyUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func QueryProviderPropertyUnchecked(c *xgb.Conn, Provider Provider, Property xproto.Atom) QueryProviderPropertyCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'QueryProviderProperty' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(queryProviderPropertyRequest(c, Provider, Property), cookie)
+ return QueryProviderPropertyCookie{cookie}
+}
+
+// QueryProviderPropertyReply represents the data returned from a QueryProviderProperty request.
+type QueryProviderPropertyReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ Pending bool
+ Range bool
+ Immutable bool
+ // padding: 21 bytes
+ ValidValues []int32 // size: xgb.Pad((int(Length) * 4))
+}
+
+// Reply blocks and returns the reply data for a QueryProviderProperty request.
+func (cook QueryProviderPropertyCookie) Reply() (*QueryProviderPropertyReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return queryProviderPropertyReply(buf), nil
+}
+
+// queryProviderPropertyReply reads a byte slice into a QueryProviderPropertyReply value.
+func queryProviderPropertyReply(buf []byte) *QueryProviderPropertyReply {
+ v := new(QueryProviderPropertyReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ if buf[b] == 1 {
+ v.Pending = true
+ } else {
+ v.Pending = false
+ }
+ b += 1
+
+ if buf[b] == 1 {
+ v.Range = true
+ } else {
+ v.Range = false
+ }
+ b += 1
+
+ if buf[b] == 1 {
+ v.Immutable = true
+ } else {
+ v.Immutable = false
+ }
+ b += 1
+
+ b += 21 // padding
+
+ v.ValidValues = make([]int32, v.Length)
+ for i := 0; i < int(v.Length); i++ {
+ v.ValidValues[i] = int32(xgb.Get32(buf[b:]))
+ b += 4
+ }
+
+ return v
+}
+
+// Write request to wire for QueryProviderProperty
+// queryProviderPropertyRequest writes a QueryProviderProperty request to a byte slice.
+func queryProviderPropertyRequest(c *xgb.Conn, Provider Provider, Property xproto.Atom) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 37 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Property))
+ b += 4
+
+ return buf
+}
+
+// QueryVersionCookie is a cookie used only for QueryVersion requests.
+type QueryVersionCookie struct {
+ *xgb.Cookie
+}
+
+// QueryVersion sends a checked request.
+// If an error occurs, it will be returned with the reply by calling QueryVersionCookie.Reply()
+func QueryVersion(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie)
+ return QueryVersionCookie{cookie}
+}
+
+// QueryVersionUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func QueryVersionUnchecked(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) QueryVersionCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'QueryVersion' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(queryVersionRequest(c, MajorVersion, MinorVersion), cookie)
+ return QueryVersionCookie{cookie}
+}
+
+// QueryVersionReply represents the data returned from a QueryVersion request.
+type QueryVersionReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ // padding: 1 bytes
+ MajorVersion uint32
+ MinorVersion uint32
+ // padding: 16 bytes
+}
+
+// Reply blocks and returns the reply data for a QueryVersion request.
+func (cook QueryVersionCookie) Reply() (*QueryVersionReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return queryVersionReply(buf), nil
+}
+
+// queryVersionReply reads a byte slice into a QueryVersionReply value.
+func queryVersionReply(buf []byte) *QueryVersionReply {
+ v := new(QueryVersionReply)
+ b := 1 // skip reply determinant
+
+ b += 1 // padding
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.MajorVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ v.MinorVersion = xgb.Get32(buf[b:])
+ b += 4
+
+ b += 16 // padding
+
+ return v
+}
+
+// Write request to wire for QueryVersion
+// queryVersionRequest writes a QueryVersion request to a byte slice.
+func queryVersionRequest(c *xgb.Conn, MajorVersion uint32, MinorVersion uint32) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 0 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], MajorVersion)
+ b += 4
+
+ xgb.Put32(buf[b:], MinorVersion)
+ b += 4
+
+ return buf
+}
+
+// SelectInputCookie is a cookie used only for SelectInput requests.
+type SelectInputCookie struct {
+ *xgb.Cookie
+}
+
+// SelectInput sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SelectInput(c *xgb.Conn, Window xproto.Window, Enable uint16) SelectInputCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SelectInput' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(selectInputRequest(c, Window, Enable), cookie)
+ return SelectInputCookie{cookie}
+}
+
+// SelectInputChecked sends a checked request.
+// If an error occurs, it can be retrieved using SelectInputCookie.Check()
+func SelectInputChecked(c *xgb.Conn, Window xproto.Window, Enable uint16) SelectInputCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SelectInput' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(selectInputRequest(c, Window, Enable), cookie)
+ return SelectInputCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SelectInputCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SelectInput
+// selectInputRequest writes a SelectInput request to a byte slice.
+func selectInputRequest(c *xgb.Conn, Window xproto.Window, Enable uint16) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 4 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ xgb.Put16(buf[b:], Enable)
+ b += 2
+
+ b += 2 // padding
+
+ return buf
+}
+
+// SetCrtcConfigCookie is a cookie used only for SetCrtcConfig requests.
+type SetCrtcConfigCookie struct {
+ *xgb.Cookie
+}
+
+// SetCrtcConfig sends a checked request.
+// If an error occurs, it will be returned with the reply by calling SetCrtcConfigCookie.Reply()
+func SetCrtcConfig(c *xgb.Conn, Crtc Crtc, Timestamp xproto.Timestamp, ConfigTimestamp xproto.Timestamp, X int16, Y int16, Mode Mode, Rotation uint16, Outputs []Output) SetCrtcConfigCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetCrtcConfig' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(setCrtcConfigRequest(c, Crtc, Timestamp, ConfigTimestamp, X, Y, Mode, Rotation, Outputs), cookie)
+ return SetCrtcConfigCookie{cookie}
+}
+
+// SetCrtcConfigUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetCrtcConfigUnchecked(c *xgb.Conn, Crtc Crtc, Timestamp xproto.Timestamp, ConfigTimestamp xproto.Timestamp, X int16, Y int16, Mode Mode, Rotation uint16, Outputs []Output) SetCrtcConfigCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetCrtcConfig' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(setCrtcConfigRequest(c, Crtc, Timestamp, ConfigTimestamp, X, Y, Mode, Rotation, Outputs), cookie)
+ return SetCrtcConfigCookie{cookie}
+}
+
+// SetCrtcConfigReply represents the data returned from a SetCrtcConfig request.
+type SetCrtcConfigReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ Timestamp xproto.Timestamp
+ // padding: 20 bytes
+}
+
+// Reply blocks and returns the reply data for a SetCrtcConfig request.
+func (cook SetCrtcConfigCookie) Reply() (*SetCrtcConfigReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return setCrtcConfigReply(buf), nil
+}
+
+// setCrtcConfigReply reads a byte slice into a SetCrtcConfigReply value.
+func setCrtcConfigReply(buf []byte) *SetCrtcConfigReply {
+ v := new(SetCrtcConfigReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ b += 20 // padding
+
+ return v
+}
+
+// Write request to wire for SetCrtcConfig
+// setCrtcConfigRequest writes a SetCrtcConfig request to a byte slice.
+func setCrtcConfigRequest(c *xgb.Conn, Crtc Crtc, Timestamp xproto.Timestamp, ConfigTimestamp xproto.Timestamp, X int16, Y int16, Mode Mode, Rotation uint16, Outputs []Output) []byte {
+ size := xgb.Pad((28 + xgb.Pad((len(Outputs) * 4))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 21 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ xgb.Put16(buf[b:], uint16(X))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(Y))
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Mode))
+ b += 4
+
+ xgb.Put16(buf[b:], Rotation)
+ b += 2
+
+ b += 2 // padding
+
+ for i := 0; i < int(len(Outputs)); i++ {
+ xgb.Put32(buf[b:], uint32(Outputs[i]))
+ b += 4
+ }
+
+ return buf
+}
+
+// SetCrtcGammaCookie is a cookie used only for SetCrtcGamma requests.
+type SetCrtcGammaCookie struct {
+ *xgb.Cookie
+}
+
+// SetCrtcGamma sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetCrtcGamma(c *xgb.Conn, Crtc Crtc, Size uint16, Red []uint16, Green []uint16, Blue []uint16) SetCrtcGammaCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetCrtcGamma' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setCrtcGammaRequest(c, Crtc, Size, Red, Green, Blue), cookie)
+ return SetCrtcGammaCookie{cookie}
+}
+
+// SetCrtcGammaChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetCrtcGammaCookie.Check()
+func SetCrtcGammaChecked(c *xgb.Conn, Crtc Crtc, Size uint16, Red []uint16, Green []uint16, Blue []uint16) SetCrtcGammaCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetCrtcGamma' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setCrtcGammaRequest(c, Crtc, Size, Red, Green, Blue), cookie)
+ return SetCrtcGammaCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetCrtcGammaCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetCrtcGamma
+// setCrtcGammaRequest writes a SetCrtcGamma request to a byte slice.
+func setCrtcGammaRequest(c *xgb.Conn, Crtc Crtc, Size uint16, Red []uint16, Green []uint16, Blue []uint16) []byte {
+ size := xgb.Pad((((12 + xgb.Pad((int(Size) * 2))) + xgb.Pad((int(Size) * 2))) + xgb.Pad((int(Size) * 2))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 24 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ xgb.Put16(buf[b:], Size)
+ b += 2
+
+ b += 2 // padding
+
+ for i := 0; i < int(Size); i++ {
+ xgb.Put16(buf[b:], Red[i])
+ b += 2
+ }
+
+ for i := 0; i < int(Size); i++ {
+ xgb.Put16(buf[b:], Green[i])
+ b += 2
+ }
+
+ for i := 0; i < int(Size); i++ {
+ xgb.Put16(buf[b:], Blue[i])
+ b += 2
+ }
+
+ return buf
+}
+
+// SetCrtcTransformCookie is a cookie used only for SetCrtcTransform requests.
+type SetCrtcTransformCookie struct {
+ *xgb.Cookie
+}
+
+// SetCrtcTransform sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetCrtcTransform(c *xgb.Conn, Crtc Crtc, Transform render.Transform, FilterLen uint16, FilterName string, FilterParams []render.Fixed) SetCrtcTransformCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetCrtcTransform' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setCrtcTransformRequest(c, Crtc, Transform, FilterLen, FilterName, FilterParams), cookie)
+ return SetCrtcTransformCookie{cookie}
+}
+
+// SetCrtcTransformChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetCrtcTransformCookie.Check()
+func SetCrtcTransformChecked(c *xgb.Conn, Crtc Crtc, Transform render.Transform, FilterLen uint16, FilterName string, FilterParams []render.Fixed) SetCrtcTransformCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetCrtcTransform' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setCrtcTransformRequest(c, Crtc, Transform, FilterLen, FilterName, FilterParams), cookie)
+ return SetCrtcTransformCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetCrtcTransformCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetCrtcTransform
+// setCrtcTransformRequest writes a SetCrtcTransform request to a byte slice.
+func setCrtcTransformRequest(c *xgb.Conn, Crtc Crtc, Transform render.Transform, FilterLen uint16, FilterName string, FilterParams []render.Fixed) []byte {
+ size := xgb.Pad((((48 + xgb.Pad((int(FilterLen) * 1))) + 4) + xgb.Pad((len(FilterParams) * 4))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 26 // request opcode
+ b += 1
+
+ blen := b
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ {
+ structBytes := Transform.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ xgb.Put16(buf[b:], FilterLen)
+ b += 2
+
+ b += 2 // padding
+
+ copy(buf[b:], FilterName[:FilterLen])
+ b += int(FilterLen)
+
+ b = (b + 3) & ^3 // alignment gap
+
+ for i := 0; i < int(len(FilterParams)); i++ {
+ xgb.Put32(buf[b:], uint32(FilterParams[i]))
+ b += 4
+ }
+
+ b = xgb.Pad(b)
+ xgb.Put16(buf[blen:], uint16(b/4)) // write request size in 4-byte units
+ return buf[:b]
+}
+
+// SetMonitorCookie is a cookie used only for SetMonitor requests.
+type SetMonitorCookie struct {
+ *xgb.Cookie
+}
+
+// SetMonitor sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetMonitor(c *xgb.Conn, Window xproto.Window, Monitorinfo MonitorInfo) SetMonitorCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetMonitor' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setMonitorRequest(c, Window, Monitorinfo), cookie)
+ return SetMonitorCookie{cookie}
+}
+
+// SetMonitorChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetMonitorCookie.Check()
+func SetMonitorChecked(c *xgb.Conn, Window xproto.Window, Monitorinfo MonitorInfo) SetMonitorCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetMonitor' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setMonitorRequest(c, Window, Monitorinfo), cookie)
+ return SetMonitorCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetMonitorCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetMonitor
+// setMonitorRequest writes a SetMonitor request to a byte slice.
+func setMonitorRequest(c *xgb.Conn, Window xproto.Window, Monitorinfo MonitorInfo) []byte {
+ size := xgb.Pad((8 + (24 + xgb.Pad((int(Monitorinfo.NOutput) * 4)))))
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 43 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ {
+ structBytes := Monitorinfo.Bytes()
+ copy(buf[b:], structBytes)
+ b += len(structBytes)
+ }
+
+ return buf
+}
+
+// SetOutputPrimaryCookie is a cookie used only for SetOutputPrimary requests.
+type SetOutputPrimaryCookie struct {
+ *xgb.Cookie
+}
+
+// SetOutputPrimary sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetOutputPrimary(c *xgb.Conn, Window xproto.Window, Output Output) SetOutputPrimaryCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetOutputPrimary' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setOutputPrimaryRequest(c, Window, Output), cookie)
+ return SetOutputPrimaryCookie{cookie}
+}
+
+// SetOutputPrimaryChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetOutputPrimaryCookie.Check()
+func SetOutputPrimaryChecked(c *xgb.Conn, Window xproto.Window, Output Output) SetOutputPrimaryCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetOutputPrimary' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setOutputPrimaryRequest(c, Window, Output), cookie)
+ return SetOutputPrimaryCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetOutputPrimaryCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetOutputPrimary
+// setOutputPrimaryRequest writes a SetOutputPrimary request to a byte slice.
+func setOutputPrimaryRequest(c *xgb.Conn, Window xproto.Window, Output Output) []byte {
+ size := 12
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 30 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Output))
+ b += 4
+
+ return buf
+}
+
+// SetPanningCookie is a cookie used only for SetPanning requests.
+type SetPanningCookie struct {
+ *xgb.Cookie
+}
+
+// SetPanning sends a checked request.
+// If an error occurs, it will be returned with the reply by calling SetPanningCookie.Reply()
+func SetPanning(c *xgb.Conn, Crtc Crtc, Timestamp xproto.Timestamp, Left uint16, Top uint16, Width uint16, Height uint16, TrackLeft uint16, TrackTop uint16, TrackWidth uint16, TrackHeight uint16, BorderLeft int16, BorderTop int16, BorderRight int16, BorderBottom int16) SetPanningCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetPanning' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(setPanningRequest(c, Crtc, Timestamp, Left, Top, Width, Height, TrackLeft, TrackTop, TrackWidth, TrackHeight, BorderLeft, BorderTop, BorderRight, BorderBottom), cookie)
+ return SetPanningCookie{cookie}
+}
+
+// SetPanningUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetPanningUnchecked(c *xgb.Conn, Crtc Crtc, Timestamp xproto.Timestamp, Left uint16, Top uint16, Width uint16, Height uint16, TrackLeft uint16, TrackTop uint16, TrackWidth uint16, TrackHeight uint16, BorderLeft int16, BorderTop int16, BorderRight int16, BorderBottom int16) SetPanningCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetPanning' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(setPanningRequest(c, Crtc, Timestamp, Left, Top, Width, Height, TrackLeft, TrackTop, TrackWidth, TrackHeight, BorderLeft, BorderTop, BorderRight, BorderBottom), cookie)
+ return SetPanningCookie{cookie}
+}
+
+// SetPanningReply represents the data returned from a SetPanning request.
+type SetPanningReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ Timestamp xproto.Timestamp
+}
+
+// Reply blocks and returns the reply data for a SetPanning request.
+func (cook SetPanningCookie) Reply() (*SetPanningReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return setPanningReply(buf), nil
+}
+
+// setPanningReply reads a byte slice into a SetPanningReply value.
+func setPanningReply(buf []byte) *SetPanningReply {
+ v := new(SetPanningReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.Timestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ return v
+}
+
+// Write request to wire for SetPanning
+// setPanningRequest writes a SetPanning request to a byte slice.
+func setPanningRequest(c *xgb.Conn, Crtc Crtc, Timestamp xproto.Timestamp, Left uint16, Top uint16, Width uint16, Height uint16, TrackLeft uint16, TrackTop uint16, TrackWidth uint16, TrackHeight uint16, BorderLeft int16, BorderTop int16, BorderRight int16, BorderBottom int16) []byte {
+ size := 36
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 29 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Crtc))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Timestamp))
+ b += 4
+
+ xgb.Put16(buf[b:], Left)
+ b += 2
+
+ xgb.Put16(buf[b:], Top)
+ b += 2
+
+ xgb.Put16(buf[b:], Width)
+ b += 2
+
+ xgb.Put16(buf[b:], Height)
+ b += 2
+
+ xgb.Put16(buf[b:], TrackLeft)
+ b += 2
+
+ xgb.Put16(buf[b:], TrackTop)
+ b += 2
+
+ xgb.Put16(buf[b:], TrackWidth)
+ b += 2
+
+ xgb.Put16(buf[b:], TrackHeight)
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(BorderLeft))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(BorderTop))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(BorderRight))
+ b += 2
+
+ xgb.Put16(buf[b:], uint16(BorderBottom))
+ b += 2
+
+ return buf
+}
+
+// SetProviderOffloadSinkCookie is a cookie used only for SetProviderOffloadSink requests.
+type SetProviderOffloadSinkCookie struct {
+ *xgb.Cookie
+}
+
+// SetProviderOffloadSink sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetProviderOffloadSink(c *xgb.Conn, Provider Provider, SinkProvider Provider, ConfigTimestamp xproto.Timestamp) SetProviderOffloadSinkCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetProviderOffloadSink' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setProviderOffloadSinkRequest(c, Provider, SinkProvider, ConfigTimestamp), cookie)
+ return SetProviderOffloadSinkCookie{cookie}
+}
+
+// SetProviderOffloadSinkChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetProviderOffloadSinkCookie.Check()
+func SetProviderOffloadSinkChecked(c *xgb.Conn, Provider Provider, SinkProvider Provider, ConfigTimestamp xproto.Timestamp) SetProviderOffloadSinkCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetProviderOffloadSink' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setProviderOffloadSinkRequest(c, Provider, SinkProvider, ConfigTimestamp), cookie)
+ return SetProviderOffloadSinkCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetProviderOffloadSinkCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetProviderOffloadSink
+// setProviderOffloadSinkRequest writes a SetProviderOffloadSink request to a byte slice.
+func setProviderOffloadSinkRequest(c *xgb.Conn, Provider Provider, SinkProvider Provider, ConfigTimestamp xproto.Timestamp) []byte {
+ size := 16
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 34 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(SinkProvider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ return buf
+}
+
+// SetProviderOutputSourceCookie is a cookie used only for SetProviderOutputSource requests.
+type SetProviderOutputSourceCookie struct {
+ *xgb.Cookie
+}
+
+// SetProviderOutputSource sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetProviderOutputSource(c *xgb.Conn, Provider Provider, SourceProvider Provider, ConfigTimestamp xproto.Timestamp) SetProviderOutputSourceCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetProviderOutputSource' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setProviderOutputSourceRequest(c, Provider, SourceProvider, ConfigTimestamp), cookie)
+ return SetProviderOutputSourceCookie{cookie}
+}
+
+// SetProviderOutputSourceChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetProviderOutputSourceCookie.Check()
+func SetProviderOutputSourceChecked(c *xgb.Conn, Provider Provider, SourceProvider Provider, ConfigTimestamp xproto.Timestamp) SetProviderOutputSourceCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetProviderOutputSource' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setProviderOutputSourceRequest(c, Provider, SourceProvider, ConfigTimestamp), cookie)
+ return SetProviderOutputSourceCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetProviderOutputSourceCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetProviderOutputSource
+// setProviderOutputSourceRequest writes a SetProviderOutputSource request to a byte slice.
+func setProviderOutputSourceRequest(c *xgb.Conn, Provider Provider, SourceProvider Provider, ConfigTimestamp xproto.Timestamp) []byte {
+ size := 16
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 35 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Provider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(SourceProvider))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ return buf
+}
+
+// SetScreenConfigCookie is a cookie used only for SetScreenConfig requests.
+type SetScreenConfigCookie struct {
+ *xgb.Cookie
+}
+
+// SetScreenConfig sends a checked request.
+// If an error occurs, it will be returned with the reply by calling SetScreenConfigCookie.Reply()
+func SetScreenConfig(c *xgb.Conn, Window xproto.Window, Timestamp xproto.Timestamp, ConfigTimestamp xproto.Timestamp, SizeID uint16, Rotation uint16, Rate uint16) SetScreenConfigCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetScreenConfig' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, true)
+ c.NewRequest(setScreenConfigRequest(c, Window, Timestamp, ConfigTimestamp, SizeID, Rotation, Rate), cookie)
+ return SetScreenConfigCookie{cookie}
+}
+
+// SetScreenConfigUnchecked sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetScreenConfigUnchecked(c *xgb.Conn, Window xproto.Window, Timestamp xproto.Timestamp, ConfigTimestamp xproto.Timestamp, SizeID uint16, Rotation uint16, Rate uint16) SetScreenConfigCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetScreenConfig' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, true)
+ c.NewRequest(setScreenConfigRequest(c, Window, Timestamp, ConfigTimestamp, SizeID, Rotation, Rate), cookie)
+ return SetScreenConfigCookie{cookie}
+}
+
+// SetScreenConfigReply represents the data returned from a SetScreenConfig request.
+type SetScreenConfigReply struct {
+ Sequence uint16 // sequence number of the request for this reply
+ Length uint32 // number of bytes in this reply
+ Status byte
+ NewTimestamp xproto.Timestamp
+ ConfigTimestamp xproto.Timestamp
+ Root xproto.Window
+ SubpixelOrder uint16
+ // padding: 10 bytes
+}
+
+// Reply blocks and returns the reply data for a SetScreenConfig request.
+func (cook SetScreenConfigCookie) Reply() (*SetScreenConfigReply, error) {
+ buf, err := cook.Cookie.Reply()
+ if err != nil {
+ return nil, err
+ }
+ if buf == nil {
+ return nil, nil
+ }
+ return setScreenConfigReply(buf), nil
+}
+
+// setScreenConfigReply reads a byte slice into a SetScreenConfigReply value.
+func setScreenConfigReply(buf []byte) *SetScreenConfigReply {
+ v := new(SetScreenConfigReply)
+ b := 1 // skip reply determinant
+
+ v.Status = buf[b]
+ b += 1
+
+ v.Sequence = xgb.Get16(buf[b:])
+ b += 2
+
+ v.Length = xgb.Get32(buf[b:]) // 4-byte units
+ b += 4
+
+ v.NewTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.ConfigTimestamp = xproto.Timestamp(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.Root = xproto.Window(xgb.Get32(buf[b:]))
+ b += 4
+
+ v.SubpixelOrder = xgb.Get16(buf[b:])
+ b += 2
+
+ b += 10 // padding
+
+ return v
+}
+
+// Write request to wire for SetScreenConfig
+// setScreenConfigRequest writes a SetScreenConfig request to a byte slice.
+func setScreenConfigRequest(c *xgb.Conn, Window xproto.Window, Timestamp xproto.Timestamp, ConfigTimestamp xproto.Timestamp, SizeID uint16, Rotation uint16, Rate uint16) []byte {
+ size := 24
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 2 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(Timestamp))
+ b += 4
+
+ xgb.Put32(buf[b:], uint32(ConfigTimestamp))
+ b += 4
+
+ xgb.Put16(buf[b:], SizeID)
+ b += 2
+
+ xgb.Put16(buf[b:], Rotation)
+ b += 2
+
+ xgb.Put16(buf[b:], Rate)
+ b += 2
+
+ b += 2 // padding
+
+ return buf
+}
+
+// SetScreenSizeCookie is a cookie used only for SetScreenSize requests.
+type SetScreenSizeCookie struct {
+ *xgb.Cookie
+}
+
+// SetScreenSize sends an unchecked request.
+// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
+func SetScreenSize(c *xgb.Conn, Window xproto.Window, Width uint16, Height uint16, MmWidth uint32, MmHeight uint32) SetScreenSizeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetScreenSize' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(false, false)
+ c.NewRequest(setScreenSizeRequest(c, Window, Width, Height, MmWidth, MmHeight), cookie)
+ return SetScreenSizeCookie{cookie}
+}
+
+// SetScreenSizeChecked sends a checked request.
+// If an error occurs, it can be retrieved using SetScreenSizeCookie.Check()
+func SetScreenSizeChecked(c *xgb.Conn, Window xproto.Window, Width uint16, Height uint16, MmWidth uint32, MmHeight uint32) SetScreenSizeCookie {
+ c.ExtLock.RLock()
+ defer c.ExtLock.RUnlock()
+ if _, ok := c.Extensions["RANDR"]; !ok {
+ panic("Cannot issue request 'SetScreenSize' using the uninitialized extension 'RANDR'. randr.Init(connObj) must be called first.")
+ }
+ cookie := c.NewCookie(true, false)
+ c.NewRequest(setScreenSizeRequest(c, Window, Width, Height, MmWidth, MmHeight), cookie)
+ return SetScreenSizeCookie{cookie}
+}
+
+// Check returns an error if one occurred for checked requests that are not expecting a reply.
+// This cannot be called for requests expecting a reply, nor for unchecked requests.
+func (cook SetScreenSizeCookie) Check() error {
+ return cook.Cookie.Check()
+}
+
+// Write request to wire for SetScreenSize
+// setScreenSizeRequest writes a SetScreenSize request to a byte slice.
+func setScreenSizeRequest(c *xgb.Conn, Window xproto.Window, Width uint16, Height uint16, MmWidth uint32, MmHeight uint32) []byte {
+ size := 20
+ b := 0
+ buf := make([]byte, size)
+
+ c.ExtLock.RLock()
+ buf[b] = c.Extensions["RANDR"]
+ c.ExtLock.RUnlock()
+ b += 1
+
+ buf[b] = 7 // request opcode
+ b += 1
+
+ xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
+ b += 2
+
+ xgb.Put32(buf[b:], uint32(Window))
+ b += 4
+
+ xgb.Put16(buf[b:], Width)
+ b += 2
+
+ xgb.Put16(buf[b:], Height)
+ b += 2
+
+ xgb.Put32(buf[b:], MmWidth)
+ b += 4
+
+ xgb.Put32(buf[b:], MmHeight)
+ b += 4
+
+ return buf
+}