aboutsummaryrefslogtreecommitdiff
path: root/nexgb/sync.go
diff options
context:
space:
mode:
authorAndrew Gallant (Ocelot) <Andrew.Gallant@tufts.edu>2012-05-10 17:01:42 -0400
committerAndrew Gallant (Ocelot) <Andrew.Gallant@tufts.edu>2012-05-10 17:01:42 -0400
commit0c50dc6241fa21712e041cfa2bfb9db4ccaef10a (patch)
tree90a3200414c8ad6df8e7983a8e73fedfbe2b324e /nexgb/sync.go
parente239bb3c68a4981a3916534203c2fbd6b96f593c (diff)
downloadhaven-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.go29
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
+}