2012-05-11 02:06:22 +02:00
// Package composite is the X client API for the Composite extension.
2012-05-10 23:01:42 +02:00
package composite
2013-08-12 02:45:36 +02:00
// This file is automatically generated from composite.xml. Edit at your peril!
2012-05-10 23:01:42 +02:00
import (
2018-09-08 19:57:27 +02:00
xgb "janouch.name/haven/nexgb"
2012-05-10 23:01:42 +02:00
2018-09-08 19:57:27 +02:00
"janouch.name/haven/nexgb/xfixes"
"janouch.name/haven/nexgb/xproto"
2012-05-10 23:01:42 +02:00
)
// Init must be called before using the Composite extension.
func Init ( c * xgb . Conn ) error {
reply , err := xproto . QueryExtension ( c , 9 , "Composite" ) . Reply ( )
switch {
case err != nil :
return err
case ! reply . Present :
return xgb . Errorf ( "No extension named Composite could be found on on the server." )
}
2016-03-01 15:41:38 +01:00
c . ExtLock . Lock ( )
2012-05-10 23:01:42 +02:00
c . Extensions [ "Composite" ] = reply . MajorOpcode
2016-03-01 15:41:38 +01:00
c . ExtLock . Unlock ( )
2012-05-10 23:01:42 +02:00
for evNum , fun := range xgb . NewExtEventFuncs [ "Composite" ] {
xgb . NewEventFuncs [ int ( reply . FirstEvent ) + evNum ] = fun
}
for errNum , fun := range xgb . NewExtErrorFuncs [ "Composite" ] {
xgb . NewErrorFuncs [ int ( reply . FirstError ) + errNum ] = fun
}
return nil
}
func init ( ) {
xgb . NewExtEventFuncs [ "Composite" ] = make ( map [ int ] xgb . NewEventFun )
xgb . NewExtErrorFuncs [ "Composite" ] = make ( map [ int ] xgb . NewErrorFun )
}
2013-08-12 02:43:26 +02:00
const (
RedirectAutomatic = 0
RedirectManual = 1
)
2012-05-12 05:58:52 +02:00
2013-08-12 02:43:26 +02:00
// Skipping definition for base type 'Bool'
2012-05-12 05:58:52 +02:00
// Skipping definition for base type 'Byte'
2013-08-12 02:43:26 +02:00
// 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'
2012-05-12 05:58:52 +02:00
// Skipping definition for base type 'Int8'
2012-05-10 23:01:42 +02:00
// Skipping definition for base type 'Card16'
// Skipping definition for base type 'Card32'
2013-08-12 02:43:26 +02:00
// CreateRegionFromBorderClipCookie is a cookie used only for CreateRegionFromBorderClip requests.
type CreateRegionFromBorderClipCookie struct {
* xgb . Cookie
}
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
// CreateRegionFromBorderClip sends an unchecked request.
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
func CreateRegionFromBorderClip ( c * xgb . Conn , Region xfixes . Region , Window xproto . Window ) CreateRegionFromBorderClipCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'CreateRegionFromBorderClip' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
}
cookie := c . NewCookie ( false , false )
c . NewRequest ( createRegionFromBorderClipRequest ( c , Region , Window ) , cookie )
return CreateRegionFromBorderClipCookie { cookie }
}
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
// CreateRegionFromBorderClipChecked sends a checked request.
// If an error occurs, it can be retrieved using CreateRegionFromBorderClipCookie.Check()
func CreateRegionFromBorderClipChecked ( c * xgb . Conn , Region xfixes . Region , Window xproto . Window ) CreateRegionFromBorderClipCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'CreateRegionFromBorderClip' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
}
cookie := c . NewCookie ( true , false )
c . NewRequest ( createRegionFromBorderClipRequest ( c , Region , Window ) , cookie )
return CreateRegionFromBorderClipCookie { cookie }
}
2012-06-05 06:14:34 +02:00
2013-08-12 02:43:26 +02:00
// 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 CreateRegionFromBorderClipCookie ) Check ( ) error {
return cook . Cookie . Check ( )
}
2012-06-05 06:14:34 +02:00
2013-08-12 02:43:26 +02:00
// Write request to wire for CreateRegionFromBorderClip
// createRegionFromBorderClipRequest writes a CreateRegionFromBorderClip request to a byte slice.
func createRegionFromBorderClipRequest ( c * xgb . Conn , Region xfixes . Region , Window xproto . Window ) [ ] byte {
size := 12
b := 0
buf := make ( [ ] byte , size )
2012-06-05 06:14:34 +02:00
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2013-08-12 02:43:26 +02:00
b += 1
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
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 ( Region ) )
b += 4
xgb . Put32 ( buf [ b : ] , uint32 ( Window ) )
b += 4
return buf
}
// GetOverlayWindowCookie is a cookie used only for GetOverlayWindow requests.
type GetOverlayWindowCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// GetOverlayWindow sends a checked request.
// If an error occurs, it will be returned with the reply by calling GetOverlayWindowCookie.Reply()
func GetOverlayWindow ( c * xgb . Conn , Window xproto . Window ) GetOverlayWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'GetOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( true , true )
2013-08-12 02:43:26 +02:00
c . NewRequest ( getOverlayWindowRequest ( c , Window ) , cookie )
return GetOverlayWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// GetOverlayWindowUnchecked sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func GetOverlayWindowUnchecked ( c * xgb . Conn , Window xproto . Window ) GetOverlayWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'GetOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( false , true )
2013-08-12 02:43:26 +02:00
c . NewRequest ( getOverlayWindowRequest ( c , Window ) , cookie )
return GetOverlayWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// GetOverlayWindowReply represents the data returned from a GetOverlayWindow request.
type GetOverlayWindowReply struct {
2012-05-11 05:57:34 +02:00
Sequence uint16 // sequence number of the request for this reply
Length uint32 // number of bytes in this reply
2012-05-10 23:01:42 +02:00
// padding: 1 bytes
2013-08-12 02:43:26 +02:00
OverlayWin xproto . Window
// padding: 20 bytes
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// Reply blocks and returns the reply data for a GetOverlayWindow request.
func ( cook GetOverlayWindowCookie ) Reply ( ) ( * GetOverlayWindowReply , error ) {
2012-05-10 23:01:42 +02:00
buf , err := cook . Cookie . Reply ( )
if err != nil {
return nil , err
}
if buf == nil {
return nil , nil
}
2013-08-12 02:43:26 +02:00
return getOverlayWindowReply ( buf ) , nil
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// getOverlayWindowReply reads a byte slice into a GetOverlayWindowReply value.
func getOverlayWindowReply ( buf [ ] byte ) * GetOverlayWindowReply {
v := new ( GetOverlayWindowReply )
2012-05-10 23:01:42 +02:00
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
2013-08-12 02:43:26 +02:00
v . OverlayWin = xproto . Window ( xgb . Get32 ( buf [ b : ] ) )
2012-05-10 23:01:42 +02:00
b += 4
2013-08-12 02:43:26 +02:00
b += 20 // padding
2012-05-10 23:01:42 +02:00
return v
}
2013-08-12 02:43:26 +02:00
// Write request to wire for GetOverlayWindow
// getOverlayWindowRequest writes a GetOverlayWindow request to a byte slice.
func getOverlayWindowRequest ( c * xgb . Conn , Window xproto . Window ) [ ] byte {
size := 8
2012-05-10 23:01:42 +02:00
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 7 // request opcode
2012-05-10 23:01:42 +02:00
b += 1
xgb . Put16 ( buf [ b : ] , uint16 ( size / 4 ) ) // write request size in 4-byte units
b += 2
2013-08-12 02:43:26 +02:00
xgb . Put32 ( buf [ b : ] , uint32 ( Window ) )
2012-05-10 23:01:42 +02:00
b += 4
return buf
}
2013-08-12 02:43:26 +02:00
// NameWindowPixmapCookie is a cookie used only for NameWindowPixmap requests.
type NameWindowPixmapCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// NameWindowPixmap sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func NameWindowPixmap ( c * xgb . Conn , Window xproto . Window , Pixmap xproto . Pixmap ) NameWindowPixmapCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'NameWindowPixmap' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( false , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( nameWindowPixmapRequest ( c , Window , Pixmap ) , cookie )
return NameWindowPixmapCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// NameWindowPixmapChecked sends a checked request.
// If an error occurs, it can be retrieved using NameWindowPixmapCookie.Check()
func NameWindowPixmapChecked ( c * xgb . Conn , Window xproto . Window , Pixmap xproto . Pixmap ) NameWindowPixmapCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'NameWindowPixmap' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( true , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( nameWindowPixmapRequest ( c , Window , Pixmap ) , cookie )
return NameWindowPixmapCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2012-05-11 05:57:34 +02:00
// 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.
2013-08-12 02:43:26 +02:00
func ( cook NameWindowPixmapCookie ) Check ( ) error {
2012-05-10 23:01:42 +02:00
return cook . Cookie . Check ( )
}
2013-08-12 02:43:26 +02:00
// Write request to wire for NameWindowPixmap
// nameWindowPixmapRequest writes a NameWindowPixmap request to a byte slice.
func nameWindowPixmapRequest ( c * xgb . Conn , Window xproto . Window , Pixmap xproto . Pixmap ) [ ] byte {
2012-05-10 23:01:42 +02:00
size := 12
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 6 // request opcode
2012-05-10 23:01:42 +02:00
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
2013-08-12 02:43:26 +02:00
xgb . Put32 ( buf [ b : ] , uint32 ( Pixmap ) )
b += 4
2012-05-10 23:01:42 +02:00
return buf
}
2013-08-12 02:43:26 +02:00
// QueryVersionCookie is a cookie used only for QueryVersion requests.
type QueryVersionCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// 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 , ClientMajorVersion uint32 , ClientMinorVersion uint32 ) QueryVersionCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'QueryVersion' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2013-08-12 02:43:26 +02:00
cookie := c . NewCookie ( true , true )
c . NewRequest ( queryVersionRequest ( c , ClientMajorVersion , ClientMinorVersion ) , cookie )
return QueryVersionCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// 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 , ClientMajorVersion uint32 , ClientMinorVersion uint32 ) QueryVersionCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'QueryVersion' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2013-08-12 02:43:26 +02:00
cookie := c . NewCookie ( false , true )
c . NewRequest ( queryVersionRequest ( c , ClientMajorVersion , ClientMinorVersion ) , cookie )
return QueryVersionCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// 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
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// 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
}
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
// queryVersionReply reads a byte slice into a QueryVersionReply value.
func queryVersionReply ( buf [ ] byte ) * QueryVersionReply {
v := new ( QueryVersionReply )
b := 1 // skip reply determinant
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
b += 1 // padding
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
v . Sequence = xgb . Get16 ( buf [ b : ] )
2012-05-10 23:01:42 +02:00
b += 2
2013-08-12 02:43:26 +02:00
v . Length = xgb . Get32 ( buf [ b : ] ) // 4-byte units
2012-05-10 23:01:42 +02:00
b += 4
2013-08-12 02:43:26 +02:00
v . MajorVersion = xgb . Get32 ( buf [ b : ] )
b += 4
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
v . MinorVersion = xgb . Get32 ( buf [ b : ] )
b += 4
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
b += 16 // padding
2012-05-10 23:01:42 +02:00
2013-08-12 02:43:26 +02:00
return v
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// Write request to wire for QueryVersion
// queryVersionRequest writes a QueryVersion request to a byte slice.
func queryVersionRequest ( c * xgb . Conn , ClientMajorVersion uint32 , ClientMinorVersion uint32 ) [ ] byte {
2012-05-10 23:01:42 +02:00
size := 12
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 0 // request opcode
2012-05-10 23:01:42 +02:00
b += 1
xgb . Put16 ( buf [ b : ] , uint16 ( size / 4 ) ) // write request size in 4-byte units
b += 2
2013-08-12 02:43:26 +02:00
xgb . Put32 ( buf [ b : ] , ClientMajorVersion )
2012-05-10 23:01:42 +02:00
b += 4
2013-08-12 02:43:26 +02:00
xgb . Put32 ( buf [ b : ] , ClientMinorVersion )
b += 4
2012-05-10 23:01:42 +02:00
return buf
}
2013-08-12 02:43:26 +02:00
// RedirectSubwindowsCookie is a cookie used only for RedirectSubwindows requests.
type RedirectSubwindowsCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// RedirectSubwindows sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func RedirectSubwindows ( c * xgb . Conn , Window xproto . Window , Update byte ) RedirectSubwindowsCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'RedirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( false , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( redirectSubwindowsRequest ( c , Window , Update ) , cookie )
return RedirectSubwindowsCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// RedirectSubwindowsChecked sends a checked request.
// If an error occurs, it can be retrieved using RedirectSubwindowsCookie.Check()
func RedirectSubwindowsChecked ( c * xgb . Conn , Window xproto . Window , Update byte ) RedirectSubwindowsCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'RedirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( true , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( redirectSubwindowsRequest ( c , Window , Update ) , cookie )
return RedirectSubwindowsCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2012-05-11 05:57:34 +02:00
// 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.
2013-08-12 02:43:26 +02:00
func ( cook RedirectSubwindowsCookie ) Check ( ) error {
2012-05-10 23:01:42 +02:00
return cook . Cookie . Check ( )
}
2013-08-12 02:43:26 +02:00
// Write request to wire for RedirectSubwindows
// redirectSubwindowsRequest writes a RedirectSubwindows request to a byte slice.
func redirectSubwindowsRequest ( c * xgb . Conn , Window xproto . Window , Update byte ) [ ] byte {
2012-05-10 23:01:42 +02:00
size := 12
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 2 // request opcode
2012-05-10 23:01:42 +02:00
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
buf [ b ] = Update
b += 1
b += 3 // padding
return buf
}
2013-08-12 02:43:26 +02:00
// RedirectWindowCookie is a cookie used only for RedirectWindow requests.
type RedirectWindowCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// RedirectWindow sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func RedirectWindow ( c * xgb . Conn , Window xproto . Window , Update byte ) RedirectWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'RedirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( false , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( redirectWindowRequest ( c , Window , Update ) , cookie )
return RedirectWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// RedirectWindowChecked sends a checked request.
// If an error occurs, it can be retrieved using RedirectWindowCookie.Check()
func RedirectWindowChecked ( c * xgb . Conn , Window xproto . Window , Update byte ) RedirectWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'RedirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( true , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( redirectWindowRequest ( c , Window , Update ) , cookie )
return RedirectWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2012-05-11 05:57:34 +02:00
// 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.
2013-08-12 02:43:26 +02:00
func ( cook RedirectWindowCookie ) Check ( ) error {
2012-05-10 23:01:42 +02:00
return cook . Cookie . Check ( )
}
2013-08-12 02:43:26 +02:00
// Write request to wire for RedirectWindow
// redirectWindowRequest writes a RedirectWindow request to a byte slice.
func redirectWindowRequest ( c * xgb . Conn , Window xproto . Window , Update byte ) [ ] byte {
2012-05-10 23:01:42 +02:00
size := 12
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 1 // request opcode
2012-05-10 23:01:42 +02:00
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
2013-08-12 02:43:26 +02:00
buf [ b ] = Update
b += 1
b += 3 // padding
2012-05-10 23:01:42 +02:00
return buf
}
2013-08-12 02:43:26 +02:00
// ReleaseOverlayWindowCookie is a cookie used only for ReleaseOverlayWindow requests.
type ReleaseOverlayWindowCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// ReleaseOverlayWindow sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func ReleaseOverlayWindow ( c * xgb . Conn , Window xproto . Window ) ReleaseOverlayWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'ReleaseOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( false , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( releaseOverlayWindowRequest ( c , Window ) , cookie )
return ReleaseOverlayWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// ReleaseOverlayWindowChecked sends a checked request.
// If an error occurs, it can be retrieved using ReleaseOverlayWindowCookie.Check()
func ReleaseOverlayWindowChecked ( c * xgb . Conn , Window xproto . Window ) ReleaseOverlayWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'ReleaseOverlayWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( true , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( releaseOverlayWindowRequest ( c , Window ) , cookie )
return ReleaseOverlayWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2012-05-11 05:57:34 +02:00
// 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.
2013-08-12 02:43:26 +02:00
func ( cook ReleaseOverlayWindowCookie ) Check ( ) error {
2012-05-10 23:01:42 +02:00
return cook . Cookie . Check ( )
}
2013-08-12 02:43:26 +02:00
// Write request to wire for ReleaseOverlayWindow
// releaseOverlayWindowRequest writes a ReleaseOverlayWindow request to a byte slice.
func releaseOverlayWindowRequest ( c * xgb . Conn , Window xproto . Window ) [ ] byte {
size := 8
2012-05-10 23:01:42 +02:00
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 8 // request opcode
2012-05-10 23:01:42 +02:00
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
}
2013-08-12 02:43:26 +02:00
// UnredirectSubwindowsCookie is a cookie used only for UnredirectSubwindows requests.
type UnredirectSubwindowsCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// UnredirectSubwindows sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func UnredirectSubwindows ( c * xgb . Conn , Window xproto . Window , Update byte ) UnredirectSubwindowsCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'UnredirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2013-08-12 02:43:26 +02:00
cookie := c . NewCookie ( false , false )
c . NewRequest ( unredirectSubwindowsRequest ( c , Window , Update ) , cookie )
return UnredirectSubwindowsCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// UnredirectSubwindowsChecked sends a checked request.
// If an error occurs, it can be retrieved using UnredirectSubwindowsCookie.Check()
func UnredirectSubwindowsChecked ( c * xgb . Conn , Window xproto . Window , Update byte ) UnredirectSubwindowsCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'UnredirectSubwindows' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
cookie := c . NewCookie ( true , false )
c . NewRequest ( unredirectSubwindowsRequest ( c , Window , Update ) , cookie )
return UnredirectSubwindowsCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// 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 UnredirectSubwindowsCookie ) Check ( ) error {
return cook . Cookie . Check ( )
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// Write request to wire for UnredirectSubwindows
// unredirectSubwindowsRequest writes a UnredirectSubwindows request to a byte slice.
func unredirectSubwindowsRequest ( c * xgb . Conn , Window xproto . Window , Update byte ) [ ] byte {
size := 12
2012-05-10 23:01:42 +02:00
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 4 // request opcode
2012-05-10 23:01:42 +02:00
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
2013-08-12 02:43:26 +02:00
buf [ b ] = Update
b += 1
b += 3 // padding
2012-05-10 23:01:42 +02:00
return buf
}
2013-08-12 02:43:26 +02:00
// UnredirectWindowCookie is a cookie used only for UnredirectWindow requests.
type UnredirectWindowCookie struct {
2012-05-10 23:01:42 +02:00
* xgb . Cookie
}
2013-08-12 02:43:26 +02:00
// UnredirectWindow sends an unchecked request.
2012-05-11 05:57:34 +02:00
// If an error occurs, it can only be retrieved using xgb.WaitForEvent or xgb.PollForEvent.
2013-08-12 02:43:26 +02:00
func UnredirectWindow ( c * xgb . Conn , Window xproto . Window , Update byte ) UnredirectWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'UnredirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( false , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( unredirectWindowRequest ( c , Window , Update ) , cookie )
return UnredirectWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2013-08-12 02:43:26 +02:00
// UnredirectWindowChecked sends a checked request.
// If an error occurs, it can be retrieved using UnredirectWindowCookie.Check()
func UnredirectWindowChecked ( c * xgb . Conn , Window xproto . Window , Update byte ) UnredirectWindowCookie {
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
defer c . ExtLock . RUnlock ( )
2013-12-28 16:13:20 +01:00
if _ , ok := c . Extensions [ "Composite" ] ; ! ok {
2013-08-12 02:43:26 +02:00
panic ( "Cannot issue request 'UnredirectWindow' using the uninitialized extension 'Composite'. composite.Init(connObj) must be called first." )
2012-05-12 05:58:52 +02:00
}
2012-05-10 23:01:42 +02:00
cookie := c . NewCookie ( true , false )
2013-08-12 02:43:26 +02:00
c . NewRequest ( unredirectWindowRequest ( c , Window , Update ) , cookie )
return UnredirectWindowCookie { cookie }
2012-05-10 23:01:42 +02:00
}
2012-05-11 05:57:34 +02:00
// 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.
2013-08-12 02:43:26 +02:00
func ( cook UnredirectWindowCookie ) Check ( ) error {
2012-05-10 23:01:42 +02:00
return cook . Cookie . Check ( )
}
2013-08-12 02:43:26 +02:00
// Write request to wire for UnredirectWindow
// unredirectWindowRequest writes a UnredirectWindow request to a byte slice.
func unredirectWindowRequest ( c * xgb . Conn , Window xproto . Window , Update byte ) [ ] byte {
size := 12
2012-05-10 23:01:42 +02:00
b := 0
buf := make ( [ ] byte , size )
2016-03-01 15:41:38 +01:00
c . ExtLock . RLock ( )
2013-12-28 16:13:20 +01:00
buf [ b ] = c . Extensions [ "Composite" ]
2016-03-01 15:41:38 +01:00
c . ExtLock . RUnlock ( )
2012-05-10 23:01:42 +02:00
b += 1
2013-08-12 02:43:26 +02:00
buf [ b ] = 3 // request opcode
2012-05-10 23:01:42 +02:00
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
2013-08-12 02:43:26 +02:00
buf [ b ] = Update
b += 1
b += 3 // padding
2012-05-10 23:01:42 +02:00
return buf
}