- unsigned int ret;
- pthread_mutex_lock(&c->iolock);
- /* FIXME: follow X meets Z architecture changes. */
- _xcb_in_read(c);
- ret = c->in.request_read;
- pthread_mutex_unlock(&c->iolock);
+ /* FIXME: this could hold the lock to avoid syncing unnecessarily, but
+ * that would require factoring the locking out of xcb_get_input_focus,
+ * xcb_get_input_focus_reply, and xcb_wait_for_reply. */
+ xcb_generic_error_t *ret;
+ void *reply;
+ if(c->has_error)
+ return 0;
+ if(XCB_SEQUENCE_COMPARE_32(cookie.sequence,>,c->in.request_expected)
+ && XCB_SEQUENCE_COMPARE_32(cookie.sequence,>,c->in.request_completed))
+ {
+ free(xcb_get_input_focus_reply(c, xcb_get_input_focus(c), &ret));
+ assert(!ret);
+ }
+ reply = xcb_wait_for_reply(c, cookie.sequence, &ret);
+ assert(!reply);