aboutsummaryrefslogtreecommitdiff
path: root/nexgb/sync.go
diff options
context:
space:
mode:
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..59d0de1
--- /dev/null
+++ b/nexgb/sync.go
@@ -0,0 +1,29 @@
+package xgb
+
+// Sync sends a round trip request and waits 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
+}