diff options
| author | Andrew Gallant (Ocelot) <Andrew.Gallant@tufts.edu> | 2012-05-10 17:01:42 -0400 | 
|---|---|---|
| committer | Andrew Gallant (Ocelot) <Andrew.Gallant@tufts.edu> | 2012-05-10 17:01:42 -0400 | 
| commit | 0c50dc6241fa21712e041cfa2bfb9db4ccaef10a (patch) | |
| tree | 90a3200414c8ad6df8e7983a8e73fedfbe2b324e /nexgb/sync.go | |
| parent | e239bb3c68a4981a3916534203c2fbd6b96f593c (diff) | |
| download | haven-0c50dc6241fa21712e041cfa2bfb9db4ccaef10a.tar.gz haven-0c50dc6241fa21712e041cfa2bfb9db4ccaef10a.tar.xz haven-0c50dc6241fa21712e041cfa2bfb9db4ccaef10a.zip | |
a huge commit. splitting extensions into their own sub-packages.
Diffstat (limited to 'nexgb/sync.go')
| -rw-r--r-- | nexgb/sync.go | 29 | 
1 files changed, 29 insertions, 0 deletions
| diff --git a/nexgb/sync.go b/nexgb/sync.go new file mode 100644 index 0000000..d671e62 --- /dev/null +++ b/nexgb/sync.go @@ -0,0 +1,29 @@ +package xgb + +// Sync sends a round trip request and wait for the response. +// This forces all pending cookies to be dealt with. +// You actually shouldn't need to use this like you might with Xlib. Namely, +// buffers are automatically flushed using Go's channels and round trip requests +// are forced where appropriate automatically. +func (c *Conn) Sync() { +	cookie := c.NewCookie(true, true) +	c.NewRequest(c.getInputFocusRequest(), cookie) +	cookie.Reply() // wait for the buffer to clear +} + +// getInputFocusRequest writes the raw bytes to a buffer. +// It is duplicated from xproto/xproto.go. +func (c *Conn) getInputFocusRequest() []byte { +	size := 4 +	b := 0 +	buf := make([]byte, size) + +	buf[b] = 43 // request opcode +	b += 1 + +	b += 1                         // padding +	Put16(buf[b:], uint16(size/4)) // write request size in 4-byte units +	b += 2 + +	return buf +} | 
