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

     1  package xgb
     2  
     3  // Sync sends a round trip request and waits for the response.
     4  // This forces all pending cookies to be dealt with.
     5  // You actually shouldn't need to use this like you might with Xlib. Namely,
     6  // buffers are automatically flushed using Go's channels and round trip requests
     7  // are forced where appropriate automatically.
     8  func (c *Conn) Sync() {
     9  	cookie := c.NewCookie(true, true)
    10  	c.NewRequest(c.getInputFocusRequest(), cookie)
    11  	cookie.Reply() // wait for the buffer to clear
    12  }
    13  
    14  // getInputFocusRequest writes the raw bytes to a buffer.
    15  // It is duplicated from xproto/xproto.go.
    16  func (c *Conn) getInputFocusRequest() []byte {
    17  	size := 4
    18  	b := 0
    19  	buf := make([]byte, size)
    20  
    21  	buf[b] = 43 // request opcode
    22  	b += 1
    23  
    24  	b += 1                         // padding
    25  	Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units
    26  	b += 2
    27  
    28  	return buf
    29  }