diff options
| author | Andrew Gallant <jamslam@gmail.com> | 2013-08-11 20:43:26 -0400 | 
|---|---|---|
| committer | Přemysl Janouch <p@janouch.name> | 2018-09-08 16:49:17 +0200 | 
| commit | 0685fb57e14104ee4ad9f70ec94f787a9a22c028 (patch) | |
| tree | c52429c82379c154c95dbfafcfc52460ec9168c0 /nexgb/dpms | |
| parent | 4b20ffaf4f4cc756832a6d064d5dfe182f16b0e9 (diff) | |
| download | haven-0685fb57e14104ee4ad9f70ec94f787a9a22c028.tar.gz haven-0685fb57e14104ee4ad9f70ec94f787a9a22c028.tar.xz haven-0685fb57e14104ee4ad9f70ec94f787a9a22c028.zip | |
Update to latest xproto XML.
Diffstat (limited to 'nexgb/dpms')
| -rw-r--r-- | nexgb/dpms/dpms.go | 544 | 
1 files changed, 272 insertions, 272 deletions
| diff --git a/nexgb/dpms/dpms.go b/nexgb/dpms/dpms.go index f7d6ffe..96d82f0 100644 --- a/nexgb/dpms/dpms.go +++ b/nexgb/dpms/dpms.go @@ -2,7 +2,7 @@  package dpms  /* -	This file was generated by dpms.xml on Jun 5 2012 12:11:59am EDT. +	This file was generated by dpms.xml on Aug 11 2013 8:39:43pm EDT.  	This file is automatically generated. Edit at your peril!  */ @@ -40,30 +40,6 @@ func init() {  	xgb.NewExtErrorFuncs["DPMS"] = make(map[int]xgb.NewErrorFun)  } -// Skipping definition for base type 'Int8' - -// Skipping definition for base type 'Card16' - -// Skipping definition for base type 'Char' - -// Skipping definition for base type 'Card32' - -// Skipping definition for base type 'Double' - -// Skipping definition for base type 'Bool' - -// Skipping definition for base type 'Float' - -// Skipping definition for base type 'Card8' - -// Skipping definition for base type 'Int16' - -// Skipping definition for base type 'Int32' - -// Skipping definition for base type 'Void' - -// Skipping definition for base type 'Byte' -  const (  	DPMSModeOn      = 0  	DPMSModeStandby = 1 @@ -71,100 +47,29 @@ const (  	DPMSModeOff     = 3  ) -// GetVersionCookie is a cookie used only for GetVersion requests. -type GetVersionCookie struct { -	*xgb.Cookie -} - -// GetVersion sends a checked request. -// If an error occurs, it will be returned with the reply by calling GetVersionCookie.Reply() -func GetVersion(c *xgb.Conn, ClientMajorVersion uint16, ClientMinorVersion uint16) GetVersionCookie { -	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'GetVersion' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") -	} -	cookie := c.NewCookie(true, true) -	c.NewRequest(getVersionRequest(c, ClientMajorVersion, ClientMinorVersion), cookie) -	return GetVersionCookie{cookie} -} - -// GetVersionUnchecked sends an unchecked request. -// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func GetVersionUnchecked(c *xgb.Conn, ClientMajorVersion uint16, ClientMinorVersion uint16) GetVersionCookie { -	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'GetVersion' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") -	} -	cookie := c.NewCookie(false, true) -	c.NewRequest(getVersionRequest(c, ClientMajorVersion, ClientMinorVersion), cookie) -	return GetVersionCookie{cookie} -} - -// GetVersionReply represents the data returned from a GetVersion request. -type GetVersionReply struct { -	Sequence uint16 // sequence number of the request for this reply -	Length   uint32 // number of bytes in this reply -	// padding: 1 bytes -	ServerMajorVersion uint16 -	ServerMinorVersion uint16 -} - -// Reply blocks and returns the reply data for a GetVersion request. -func (cook GetVersionCookie) Reply() (*GetVersionReply, error) { -	buf, err := cook.Cookie.Reply() -	if err != nil { -		return nil, err -	} -	if buf == nil { -		return nil, nil -	} -	return getVersionReply(buf), nil -} - -// getVersionReply reads a byte slice into a GetVersionReply value. -func getVersionReply(buf []byte) *GetVersionReply { -	v := new(GetVersionReply) -	b := 1 // skip reply determinant - -	b += 1 // padding - -	v.Sequence = xgb.Get16(buf[b:]) -	b += 2 +// Skipping definition for base type 'Bool' -	v.Length = xgb.Get32(buf[b:]) // 4-byte units -	b += 4 +// Skipping definition for base type 'Byte' -	v.ServerMajorVersion = xgb.Get16(buf[b:]) -	b += 2 +// Skipping definition for base type 'Card8' -	v.ServerMinorVersion = xgb.Get16(buf[b:]) -	b += 2 +// Skipping definition for base type 'Char' -	return v -} +// Skipping definition for base type 'Void' -// Write request to wire for GetVersion -// getVersionRequest writes a GetVersion request to a byte slice. -func getVersionRequest(c *xgb.Conn, ClientMajorVersion uint16, ClientMinorVersion uint16) []byte { -	size := 8 -	b := 0 -	buf := make([]byte, size) +// Skipping definition for base type 'Double' -	buf[b] = c.Extensions["DPMS"] -	b += 1 +// Skipping definition for base type 'Float' -	buf[b] = 0 // request opcode -	b += 1 +// Skipping definition for base type 'Int16' -	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units -	b += 2 +// Skipping definition for base type 'Int32' -	xgb.Put16(buf[b:], ClientMajorVersion) -	b += 2 +// Skipping definition for base type 'Int8' -	xgb.Put16(buf[b:], ClientMinorVersion) -	b += 2 +// Skipping definition for base type 'Card16' -	return buf -} +// Skipping definition for base type 'Card32'  // CapableCookie is a cookie used only for Capable requests.  type CapableCookie struct { @@ -258,86 +163,42 @@ func capableRequest(c *xgb.Conn) []byte {  	return buf  } -// GetTimeoutsCookie is a cookie used only for GetTimeouts requests. -type GetTimeoutsCookie struct { +// DisableCookie is a cookie used only for Disable requests. +type DisableCookie struct {  	*xgb.Cookie  } -// GetTimeouts sends a checked request. -// If an error occurs, it will be returned with the reply by calling GetTimeoutsCookie.Reply() -func GetTimeouts(c *xgb.Conn) GetTimeoutsCookie { -	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'GetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") -	} -	cookie := c.NewCookie(true, true) -	c.NewRequest(getTimeoutsRequest(c), cookie) -	return GetTimeoutsCookie{cookie} -} - -// GetTimeoutsUnchecked sends an unchecked request. +// Disable sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func GetTimeoutsUnchecked(c *xgb.Conn) GetTimeoutsCookie { +func Disable(c *xgb.Conn) DisableCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'GetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'Disable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	} -	cookie := c.NewCookie(false, true) -	c.NewRequest(getTimeoutsRequest(c), cookie) -	return GetTimeoutsCookie{cookie} -} - -// GetTimeoutsReply represents the data returned from a GetTimeouts request. -type GetTimeoutsReply struct { -	Sequence uint16 // sequence number of the request for this reply -	Length   uint32 // number of bytes in this reply -	// padding: 1 bytes -	StandbyTimeout uint16 -	SuspendTimeout uint16 -	OffTimeout     uint16 -	// padding: 18 bytes +	cookie := c.NewCookie(false, false) +	c.NewRequest(disableRequest(c), cookie) +	return DisableCookie{cookie}  } -// Reply blocks and returns the reply data for a GetTimeouts request. -func (cook GetTimeoutsCookie) Reply() (*GetTimeoutsReply, error) { -	buf, err := cook.Cookie.Reply() -	if err != nil { -		return nil, err -	} -	if buf == nil { -		return nil, nil +// DisableChecked sends a checked request. +// If an error occurs, it can be retrieved using DisableCookie.Check() +func DisableChecked(c *xgb.Conn) DisableCookie { +	if _, ok := c.Extensions["DPMS"]; !ok { +		panic("Cannot issue request 'Disable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	} -	return getTimeoutsReply(buf), nil +	cookie := c.NewCookie(true, false) +	c.NewRequest(disableRequest(c), cookie) +	return DisableCookie{cookie}  } -// getTimeoutsReply reads a byte slice into a GetTimeoutsReply value. -func getTimeoutsReply(buf []byte) *GetTimeoutsReply { -	v := new(GetTimeoutsReply) -	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.StandbyTimeout = xgb.Get16(buf[b:]) -	b += 2 - -	v.SuspendTimeout = xgb.Get16(buf[b:]) -	b += 2 - -	v.OffTimeout = xgb.Get16(buf[b:]) -	b += 2 - -	b += 18 // padding - -	return v +// 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 DisableCookie) Check() error { +	return cook.Cookie.Check()  } -// Write request to wire for GetTimeouts -// getTimeoutsRequest writes a GetTimeouts request to a byte slice. -func getTimeoutsRequest(c *xgb.Conn) []byte { +// Write request to wire for Disable +// disableRequest writes a Disable request to a byte slice. +func disableRequest(c *xgb.Conn) []byte {  	size := 4  	b := 0  	buf := make([]byte, size) @@ -345,7 +206,7 @@ func getTimeoutsRequest(c *xgb.Conn) []byte {  	buf[b] = c.Extensions["DPMS"]  	b += 1 -	buf[b] = 2 // request opcode +	buf[b] = 5 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units @@ -354,155 +215,193 @@ func getTimeoutsRequest(c *xgb.Conn) []byte {  	return buf  } -// SetTimeoutsCookie is a cookie used only for SetTimeouts requests. -type SetTimeoutsCookie struct { +// EnableCookie is a cookie used only for Enable requests. +type EnableCookie struct {  	*xgb.Cookie  } -// SetTimeouts sends an unchecked request. +// Enable sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func SetTimeouts(c *xgb.Conn, StandbyTimeout uint16, SuspendTimeout uint16, OffTimeout uint16) SetTimeoutsCookie { +func Enable(c *xgb.Conn) EnableCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'SetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'Enable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(false, false) -	c.NewRequest(setTimeoutsRequest(c, StandbyTimeout, SuspendTimeout, OffTimeout), cookie) -	return SetTimeoutsCookie{cookie} +	c.NewRequest(enableRequest(c), cookie) +	return EnableCookie{cookie}  } -// SetTimeoutsChecked sends a checked request. -// If an error occurs, it can be retrieved using SetTimeoutsCookie.Check() -func SetTimeoutsChecked(c *xgb.Conn, StandbyTimeout uint16, SuspendTimeout uint16, OffTimeout uint16) SetTimeoutsCookie { +// EnableChecked sends a checked request. +// If an error occurs, it can be retrieved using EnableCookie.Check() +func EnableChecked(c *xgb.Conn) EnableCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'SetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'Enable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(true, false) -	c.NewRequest(setTimeoutsRequest(c, StandbyTimeout, SuspendTimeout, OffTimeout), cookie) -	return SetTimeoutsCookie{cookie} +	c.NewRequest(enableRequest(c), cookie) +	return EnableCookie{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 SetTimeoutsCookie) Check() error { +func (cook EnableCookie) Check() error {  	return cook.Cookie.Check()  } -// Write request to wire for SetTimeouts -// setTimeoutsRequest writes a SetTimeouts request to a byte slice. -func setTimeoutsRequest(c *xgb.Conn, StandbyTimeout uint16, SuspendTimeout uint16, OffTimeout uint16) []byte { -	size := 12 +// Write request to wire for Enable +// enableRequest writes a Enable request to a byte slice. +func enableRequest(c *xgb.Conn) []byte { +	size := 4  	b := 0  	buf := make([]byte, size)  	buf[b] = c.Extensions["DPMS"]  	b += 1 -	buf[b] = 3 // request opcode +	buf[b] = 4 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units  	b += 2 -	xgb.Put16(buf[b:], StandbyTimeout) -	b += 2 - -	xgb.Put16(buf[b:], SuspendTimeout) -	b += 2 - -	xgb.Put16(buf[b:], OffTimeout) -	b += 2 -  	return buf  } -// EnableCookie is a cookie used only for Enable requests. -type EnableCookie struct { +// ForceLevelCookie is a cookie used only for ForceLevel requests. +type ForceLevelCookie struct {  	*xgb.Cookie  } -// Enable sends an unchecked request. +// ForceLevel sends an unchecked request.  // If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func Enable(c *xgb.Conn) EnableCookie { +func ForceLevel(c *xgb.Conn, PowerLevel uint16) ForceLevelCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'Enable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'ForceLevel' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(false, false) -	c.NewRequest(enableRequest(c), cookie) -	return EnableCookie{cookie} +	c.NewRequest(forceLevelRequest(c, PowerLevel), cookie) +	return ForceLevelCookie{cookie}  } -// EnableChecked sends a checked request. -// If an error occurs, it can be retrieved using EnableCookie.Check() -func EnableChecked(c *xgb.Conn) EnableCookie { +// ForceLevelChecked sends a checked request. +// If an error occurs, it can be retrieved using ForceLevelCookie.Check() +func ForceLevelChecked(c *xgb.Conn, PowerLevel uint16) ForceLevelCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'Enable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'ForceLevel' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	}  	cookie := c.NewCookie(true, false) -	c.NewRequest(enableRequest(c), cookie) -	return EnableCookie{cookie} +	c.NewRequest(forceLevelRequest(c, PowerLevel), cookie) +	return ForceLevelCookie{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 EnableCookie) Check() error { +func (cook ForceLevelCookie) Check() error {  	return cook.Cookie.Check()  } -// Write request to wire for Enable -// enableRequest writes a Enable request to a byte slice. -func enableRequest(c *xgb.Conn) []byte { -	size := 4 +// Write request to wire for ForceLevel +// forceLevelRequest writes a ForceLevel request to a byte slice. +func forceLevelRequest(c *xgb.Conn, PowerLevel uint16) []byte { +	size := 8  	b := 0  	buf := make([]byte, size)  	buf[b] = c.Extensions["DPMS"]  	b += 1 -	buf[b] = 4 // request opcode +	buf[b] = 6 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units  	b += 2 +	xgb.Put16(buf[b:], PowerLevel) +	b += 2 +  	return buf  } -// DisableCookie is a cookie used only for Disable requests. -type DisableCookie struct { +// GetTimeoutsCookie is a cookie used only for GetTimeouts requests. +type GetTimeoutsCookie struct {  	*xgb.Cookie  } -// Disable sends an unchecked request. -// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func Disable(c *xgb.Conn) DisableCookie { +// GetTimeouts sends a checked request. +// If an error occurs, it will be returned with the reply by calling GetTimeoutsCookie.Reply() +func GetTimeouts(c *xgb.Conn) GetTimeoutsCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'Disable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	} -	cookie := c.NewCookie(false, false) -	c.NewRequest(disableRequest(c), cookie) -	return DisableCookie{cookie} +	cookie := c.NewCookie(true, true) +	c.NewRequest(getTimeoutsRequest(c), cookie) +	return GetTimeoutsCookie{cookie}  } -// DisableChecked sends a checked request. -// If an error occurs, it can be retrieved using DisableCookie.Check() -func DisableChecked(c *xgb.Conn) DisableCookie { +// GetTimeoutsUnchecked sends an unchecked request. +// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. +func GetTimeoutsUnchecked(c *xgb.Conn) GetTimeoutsCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'Disable' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	} -	cookie := c.NewCookie(true, false) -	c.NewRequest(disableRequest(c), cookie) -	return DisableCookie{cookie} +	cookie := c.NewCookie(false, true) +	c.NewRequest(getTimeoutsRequest(c), cookie) +	return GetTimeoutsCookie{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 DisableCookie) Check() error { -	return cook.Cookie.Check() +// GetTimeoutsReply represents the data returned from a GetTimeouts request. +type GetTimeoutsReply struct { +	Sequence uint16 // sequence number of the request for this reply +	Length   uint32 // number of bytes in this reply +	// padding: 1 bytes +	StandbyTimeout uint16 +	SuspendTimeout uint16 +	OffTimeout     uint16 +	// padding: 18 bytes  } -// Write request to wire for Disable -// disableRequest writes a Disable request to a byte slice. -func disableRequest(c *xgb.Conn) []byte { +// Reply blocks and returns the reply data for a GetTimeouts request. +func (cook GetTimeoutsCookie) Reply() (*GetTimeoutsReply, error) { +	buf, err := cook.Cookie.Reply() +	if err != nil { +		return nil, err +	} +	if buf == nil { +		return nil, nil +	} +	return getTimeoutsReply(buf), nil +} + +// getTimeoutsReply reads a byte slice into a GetTimeoutsReply value. +func getTimeoutsReply(buf []byte) *GetTimeoutsReply { +	v := new(GetTimeoutsReply) +	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.StandbyTimeout = xgb.Get16(buf[b:]) +	b += 2 + +	v.SuspendTimeout = xgb.Get16(buf[b:]) +	b += 2 + +	v.OffTimeout = xgb.Get16(buf[b:]) +	b += 2 + +	b += 18 // padding + +	return v +} + +// Write request to wire for GetTimeouts +// getTimeoutsRequest writes a GetTimeouts request to a byte slice. +func getTimeoutsRequest(c *xgb.Conn) []byte {  	size := 4  	b := 0  	buf := make([]byte, size) @@ -510,7 +409,7 @@ func disableRequest(c *xgb.Conn) []byte {  	buf[b] = c.Extensions["DPMS"]  	b += 1 -	buf[b] = 5 // request opcode +	buf[b] = 2 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units @@ -519,42 +418,79 @@ func disableRequest(c *xgb.Conn) []byte {  	return buf  } -// ForceLevelCookie is a cookie used only for ForceLevel requests. -type ForceLevelCookie struct { +// GetVersionCookie is a cookie used only for GetVersion requests. +type GetVersionCookie struct {  	*xgb.Cookie  } -// ForceLevel sends an unchecked request. -// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. -func ForceLevel(c *xgb.Conn, PowerLevel uint16) ForceLevelCookie { +// GetVersion sends a checked request. +// If an error occurs, it will be returned with the reply by calling GetVersionCookie.Reply() +func GetVersion(c *xgb.Conn, ClientMajorVersion uint16, ClientMinorVersion uint16) GetVersionCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'ForceLevel' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetVersion' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	} -	cookie := c.NewCookie(false, false) -	c.NewRequest(forceLevelRequest(c, PowerLevel), cookie) -	return ForceLevelCookie{cookie} +	cookie := c.NewCookie(true, true) +	c.NewRequest(getVersionRequest(c, ClientMajorVersion, ClientMinorVersion), cookie) +	return GetVersionCookie{cookie}  } -// ForceLevelChecked sends a checked request. -// If an error occurs, it can be retrieved using ForceLevelCookie.Check() -func ForceLevelChecked(c *xgb.Conn, PowerLevel uint16) ForceLevelCookie { +// GetVersionUnchecked sends an unchecked request. +// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. +func GetVersionUnchecked(c *xgb.Conn, ClientMajorVersion uint16, ClientMinorVersion uint16) GetVersionCookie {  	if _, ok := c.Extensions["DPMS"]; !ok { -		panic("Cannot issue request 'ForceLevel' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +		panic("Cannot issue request 'GetVersion' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.")  	} -	cookie := c.NewCookie(true, false) -	c.NewRequest(forceLevelRequest(c, PowerLevel), cookie) -	return ForceLevelCookie{cookie} +	cookie := c.NewCookie(false, true) +	c.NewRequest(getVersionRequest(c, ClientMajorVersion, ClientMinorVersion), cookie) +	return GetVersionCookie{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 ForceLevelCookie) Check() error { -	return cook.Cookie.Check() +// GetVersionReply represents the data returned from a GetVersion request. +type GetVersionReply struct { +	Sequence uint16 // sequence number of the request for this reply +	Length   uint32 // number of bytes in this reply +	// padding: 1 bytes +	ServerMajorVersion uint16 +	ServerMinorVersion uint16  } -// Write request to wire for ForceLevel -// forceLevelRequest writes a ForceLevel request to a byte slice. -func forceLevelRequest(c *xgb.Conn, PowerLevel uint16) []byte { +// Reply blocks and returns the reply data for a GetVersion request. +func (cook GetVersionCookie) Reply() (*GetVersionReply, error) { +	buf, err := cook.Cookie.Reply() +	if err != nil { +		return nil, err +	} +	if buf == nil { +		return nil, nil +	} +	return getVersionReply(buf), nil +} + +// getVersionReply reads a byte slice into a GetVersionReply value. +func getVersionReply(buf []byte) *GetVersionReply { +	v := new(GetVersionReply) +	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.ServerMajorVersion = xgb.Get16(buf[b:]) +	b += 2 + +	v.ServerMinorVersion = xgb.Get16(buf[b:]) +	b += 2 + +	return v +} + +// Write request to wire for GetVersion +// getVersionRequest writes a GetVersion request to a byte slice. +func getVersionRequest(c *xgb.Conn, ClientMajorVersion uint16, ClientMinorVersion uint16) []byte {  	size := 8  	b := 0  	buf := make([]byte, size) @@ -562,13 +498,16 @@ func forceLevelRequest(c *xgb.Conn, PowerLevel uint16) []byte {  	buf[b] = c.Extensions["DPMS"]  	b += 1 -	buf[b] = 6 // request opcode +	buf[b] = 0 // request opcode  	b += 1  	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units  	b += 2 -	xgb.Put16(buf[b:], PowerLevel) +	xgb.Put16(buf[b:], ClientMajorVersion) +	b += 2 + +	xgb.Put16(buf[b:], ClientMinorVersion)  	b += 2  	return buf @@ -669,3 +608,64 @@ func infoRequest(c *xgb.Conn) []byte {  	return buf  } + +// SetTimeoutsCookie is a cookie used only for SetTimeouts requests. +type SetTimeoutsCookie struct { +	*xgb.Cookie +} + +// SetTimeouts sends an unchecked request. +// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent. +func SetTimeouts(c *xgb.Conn, StandbyTimeout uint16, SuspendTimeout uint16, OffTimeout uint16) SetTimeoutsCookie { +	if _, ok := c.Extensions["DPMS"]; !ok { +		panic("Cannot issue request 'SetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +	} +	cookie := c.NewCookie(false, false) +	c.NewRequest(setTimeoutsRequest(c, StandbyTimeout, SuspendTimeout, OffTimeout), cookie) +	return SetTimeoutsCookie{cookie} +} + +// SetTimeoutsChecked sends a checked request. +// If an error occurs, it can be retrieved using SetTimeoutsCookie.Check() +func SetTimeoutsChecked(c *xgb.Conn, StandbyTimeout uint16, SuspendTimeout uint16, OffTimeout uint16) SetTimeoutsCookie { +	if _, ok := c.Extensions["DPMS"]; !ok { +		panic("Cannot issue request 'SetTimeouts' using the uninitialized extension 'DPMS'. dpms.Init(connObj) must be called first.") +	} +	cookie := c.NewCookie(true, false) +	c.NewRequest(setTimeoutsRequest(c, StandbyTimeout, SuspendTimeout, OffTimeout), cookie) +	return SetTimeoutsCookie{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 SetTimeoutsCookie) Check() error { +	return cook.Cookie.Check() +} + +// Write request to wire for SetTimeouts +// setTimeoutsRequest writes a SetTimeouts request to a byte slice. +func setTimeoutsRequest(c *xgb.Conn, StandbyTimeout uint16, SuspendTimeout uint16, OffTimeout uint16) []byte { +	size := 12 +	b := 0 +	buf := make([]byte, size) + +	buf[b] = c.Extensions["DPMS"] +	b += 1 + +	buf[b] = 3 // request opcode +	b += 1 + +	xgb.Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units +	b += 2 + +	xgb.Put16(buf[b:], StandbyTimeout) +	b += 2 + +	xgb.Put16(buf[b:], SuspendTimeout) +	b += 2 + +	xgb.Put16(buf[b:], OffTimeout) +	b += 2 + +	return buf +} | 
