xref: /netbsd-src/external/mit/xorg/lib/libxcb/files/xinput.c (revision 796c32c94f6e154afc9de0f63da35c91bb739b45)
1 /*
2  * This file generated automatically from xinput.xml by c_client.py.
3  * Edit at your peril.
4  */
5 
6 #ifdef HAVE_CONFIG_H
7 #include "config.h"
8 #endif
9 #include <stdlib.h>
10 #include <string.h>
11 #include <assert.h>
12 #include <stddef.h>  /* for offsetof() */
13 #include "xcbext.h"
14 #include "xinput.h"
15 
16 #define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
17 #include "xfixes.h"
18 
19 xcb_extension_t xcb_input_id = { "XInputExtension", 0 };
20 
21 void
22 xcb_input_event_class_next (xcb_input_event_class_iterator_t *i)
23 {
24     --i->rem;
25     ++i->data;
26     i->index += sizeof(xcb_input_event_class_t);
27 }
28 
29 xcb_generic_iterator_t
30 xcb_input_event_class_end (xcb_input_event_class_iterator_t i)
31 {
32     xcb_generic_iterator_t ret;
33     ret.data = i.data + i.rem;
34     ret.index = i.index + ((char *) ret.data - (char *) i.data);
35     ret.rem = 0;
36     return ret;
37 }
38 
39 void
40 xcb_input_key_code_next (xcb_input_key_code_iterator_t *i)
41 {
42     --i->rem;
43     ++i->data;
44     i->index += sizeof(xcb_input_key_code_t);
45 }
46 
47 xcb_generic_iterator_t
48 xcb_input_key_code_end (xcb_input_key_code_iterator_t i)
49 {
50     xcb_generic_iterator_t ret;
51     ret.data = i.data + i.rem;
52     ret.index = i.index + ((char *) ret.data - (char *) i.data);
53     ret.rem = 0;
54     return ret;
55 }
56 
57 void
58 xcb_input_device_id_next (xcb_input_device_id_iterator_t *i)
59 {
60     --i->rem;
61     ++i->data;
62     i->index += sizeof(xcb_input_device_id_t);
63 }
64 
65 xcb_generic_iterator_t
66 xcb_input_device_id_end (xcb_input_device_id_iterator_t i)
67 {
68     xcb_generic_iterator_t ret;
69     ret.data = i.data + i.rem;
70     ret.index = i.index + ((char *) ret.data - (char *) i.data);
71     ret.rem = 0;
72     return ret;
73 }
74 
75 void
76 xcb_input_fp1616_next (xcb_input_fp1616_iterator_t *i)
77 {
78     --i->rem;
79     ++i->data;
80     i->index += sizeof(xcb_input_fp1616_t);
81 }
82 
83 xcb_generic_iterator_t
84 xcb_input_fp1616_end (xcb_input_fp1616_iterator_t i)
85 {
86     xcb_generic_iterator_t ret;
87     ret.data = i.data + i.rem;
88     ret.index = i.index + ((char *) ret.data - (char *) i.data);
89     ret.rem = 0;
90     return ret;
91 }
92 
93 void
94 xcb_input_fp3232_next (xcb_input_fp3232_iterator_t *i)
95 {
96     --i->rem;
97     ++i->data;
98     i->index += sizeof(xcb_input_fp3232_t);
99 }
100 
101 xcb_generic_iterator_t
102 xcb_input_fp3232_end (xcb_input_fp3232_iterator_t i)
103 {
104     xcb_generic_iterator_t ret;
105     ret.data = i.data + i.rem;
106     ret.index = i.index + ((char *) ret.data - (char *) i.data);
107     ret.rem = 0;
108     return ret;
109 }
110 
111 int
112 xcb_input_get_extension_version_sizeof (const void  *_buffer)
113 {
114     char *xcb_tmp = (char *)_buffer;
115     const xcb_input_get_extension_version_request_t *_aux = (xcb_input_get_extension_version_request_t *)_buffer;
116     unsigned int xcb_buffer_len = 0;
117     unsigned int xcb_block_len = 0;
118     unsigned int xcb_pad = 0;
119     unsigned int xcb_align_to = 0;
120 
121 
122     xcb_block_len += sizeof(xcb_input_get_extension_version_request_t);
123     xcb_tmp += xcb_block_len;
124     xcb_buffer_len += xcb_block_len;
125     xcb_block_len = 0;
126     /* name */
127     xcb_block_len += _aux->name_len * sizeof(char);
128     xcb_tmp += xcb_block_len;
129     xcb_align_to = ALIGNOF(char);
130     /* insert padding */
131     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
132     xcb_buffer_len += xcb_block_len + xcb_pad;
133     if (0 != xcb_pad) {
134         xcb_tmp += xcb_pad;
135         xcb_pad = 0;
136     }
137     xcb_block_len = 0;
138 
139     return xcb_buffer_len;
140 }
141 
142 xcb_input_get_extension_version_cookie_t
143 xcb_input_get_extension_version (xcb_connection_t *c,
144                                  uint16_t          name_len,
145                                  const char       *name)
146 {
147     static const xcb_protocol_request_t xcb_req = {
148         .count = 4,
149         .ext = &xcb_input_id,
150         .opcode = XCB_INPUT_GET_EXTENSION_VERSION,
151         .isvoid = 0
152     };
153 
154     struct iovec xcb_parts[6];
155     xcb_input_get_extension_version_cookie_t xcb_ret;
156     xcb_input_get_extension_version_request_t xcb_out;
157 
158     xcb_out.name_len = name_len;
159     memset(xcb_out.pad0, 0, 2);
160 
161     xcb_parts[2].iov_base = (char *) &xcb_out;
162     xcb_parts[2].iov_len = sizeof(xcb_out);
163     xcb_parts[3].iov_base = 0;
164     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
165     /* char name */
166     xcb_parts[4].iov_base = (char *) name;
167     xcb_parts[4].iov_len = name_len * sizeof(char);
168     xcb_parts[5].iov_base = 0;
169     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
170 
171     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
172     return xcb_ret;
173 }
174 
175 xcb_input_get_extension_version_cookie_t
176 xcb_input_get_extension_version_unchecked (xcb_connection_t *c,
177                                            uint16_t          name_len,
178                                            const char       *name)
179 {
180     static const xcb_protocol_request_t xcb_req = {
181         .count = 4,
182         .ext = &xcb_input_id,
183         .opcode = XCB_INPUT_GET_EXTENSION_VERSION,
184         .isvoid = 0
185     };
186 
187     struct iovec xcb_parts[6];
188     xcb_input_get_extension_version_cookie_t xcb_ret;
189     xcb_input_get_extension_version_request_t xcb_out;
190 
191     xcb_out.name_len = name_len;
192     memset(xcb_out.pad0, 0, 2);
193 
194     xcb_parts[2].iov_base = (char *) &xcb_out;
195     xcb_parts[2].iov_len = sizeof(xcb_out);
196     xcb_parts[3].iov_base = 0;
197     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
198     /* char name */
199     xcb_parts[4].iov_base = (char *) name;
200     xcb_parts[4].iov_len = name_len * sizeof(char);
201     xcb_parts[5].iov_base = 0;
202     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
203 
204     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
205     return xcb_ret;
206 }
207 
208 xcb_input_get_extension_version_reply_t *
209 xcb_input_get_extension_version_reply (xcb_connection_t                          *c,
210                                        xcb_input_get_extension_version_cookie_t   cookie  /**< */,
211                                        xcb_generic_error_t                      **e)
212 {
213     return (xcb_input_get_extension_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
214 }
215 
216 void
217 xcb_input_device_info_next (xcb_input_device_info_iterator_t *i)
218 {
219     --i->rem;
220     ++i->data;
221     i->index += sizeof(xcb_input_device_info_t);
222 }
223 
224 xcb_generic_iterator_t
225 xcb_input_device_info_end (xcb_input_device_info_iterator_t i)
226 {
227     xcb_generic_iterator_t ret;
228     ret.data = i.data + i.rem;
229     ret.index = i.index + ((char *) ret.data - (char *) i.data);
230     ret.rem = 0;
231     return ret;
232 }
233 
234 void
235 xcb_input_key_info_next (xcb_input_key_info_iterator_t *i)
236 {
237     --i->rem;
238     ++i->data;
239     i->index += sizeof(xcb_input_key_info_t);
240 }
241 
242 xcb_generic_iterator_t
243 xcb_input_key_info_end (xcb_input_key_info_iterator_t i)
244 {
245     xcb_generic_iterator_t ret;
246     ret.data = i.data + i.rem;
247     ret.index = i.index + ((char *) ret.data - (char *) i.data);
248     ret.rem = 0;
249     return ret;
250 }
251 
252 void
253 xcb_input_button_info_next (xcb_input_button_info_iterator_t *i)
254 {
255     --i->rem;
256     ++i->data;
257     i->index += sizeof(xcb_input_button_info_t);
258 }
259 
260 xcb_generic_iterator_t
261 xcb_input_button_info_end (xcb_input_button_info_iterator_t i)
262 {
263     xcb_generic_iterator_t ret;
264     ret.data = i.data + i.rem;
265     ret.index = i.index + ((char *) ret.data - (char *) i.data);
266     ret.rem = 0;
267     return ret;
268 }
269 
270 void
271 xcb_input_axis_info_next (xcb_input_axis_info_iterator_t *i)
272 {
273     --i->rem;
274     ++i->data;
275     i->index += sizeof(xcb_input_axis_info_t);
276 }
277 
278 xcb_generic_iterator_t
279 xcb_input_axis_info_end (xcb_input_axis_info_iterator_t i)
280 {
281     xcb_generic_iterator_t ret;
282     ret.data = i.data + i.rem;
283     ret.index = i.index + ((char *) ret.data - (char *) i.data);
284     ret.rem = 0;
285     return ret;
286 }
287 
288 int
289 xcb_input_valuator_info_sizeof (const void  *_buffer)
290 {
291     char *xcb_tmp = (char *)_buffer;
292     const xcb_input_valuator_info_t *_aux = (xcb_input_valuator_info_t *)_buffer;
293     unsigned int xcb_buffer_len = 0;
294     unsigned int xcb_block_len = 0;
295     unsigned int xcb_pad = 0;
296     unsigned int xcb_align_to = 0;
297 
298 
299     xcb_block_len += sizeof(xcb_input_valuator_info_t);
300     xcb_tmp += xcb_block_len;
301     xcb_buffer_len += xcb_block_len;
302     xcb_block_len = 0;
303     /* axes */
304     xcb_block_len += _aux->axes_len * sizeof(xcb_input_axis_info_t);
305     xcb_tmp += xcb_block_len;
306     xcb_align_to = ALIGNOF(xcb_input_axis_info_t);
307     /* insert padding */
308     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
309     xcb_buffer_len += xcb_block_len + xcb_pad;
310     if (0 != xcb_pad) {
311         xcb_tmp += xcb_pad;
312         xcb_pad = 0;
313     }
314     xcb_block_len = 0;
315 
316     return xcb_buffer_len;
317 }
318 
319 xcb_input_axis_info_t *
320 xcb_input_valuator_info_axes (const xcb_input_valuator_info_t *R)
321 {
322     return (xcb_input_axis_info_t *) (R + 1);
323 }
324 
325 int
326 xcb_input_valuator_info_axes_length (const xcb_input_valuator_info_t *R)
327 {
328     return R->axes_len;
329 }
330 
331 xcb_input_axis_info_iterator_t
332 xcb_input_valuator_info_axes_iterator (const xcb_input_valuator_info_t *R)
333 {
334     xcb_input_axis_info_iterator_t i;
335     i.data = (xcb_input_axis_info_t *) (R + 1);
336     i.rem = R->axes_len;
337     i.index = (char *) i.data - (char *) R;
338     return i;
339 }
340 
341 void
342 xcb_input_valuator_info_next (xcb_input_valuator_info_iterator_t *i)
343 {
344     xcb_input_valuator_info_t *R = i->data;
345     xcb_generic_iterator_t child;
346     child.data = (xcb_input_valuator_info_t *)(((char *)R) + xcb_input_valuator_info_sizeof(R));
347     i->index = (char *) child.data - (char *) i->data;
348     --i->rem;
349     i->data = (xcb_input_valuator_info_t *) child.data;
350 }
351 
352 xcb_generic_iterator_t
353 xcb_input_valuator_info_end (xcb_input_valuator_info_iterator_t i)
354 {
355     xcb_generic_iterator_t ret;
356     while(i.rem > 0)
357         xcb_input_valuator_info_next(&i);
358     ret.data = i.data;
359     ret.rem = i.rem;
360     ret.index = i.index;
361     return ret;
362 }
363 
364 xcb_input_axis_info_t *
365 xcb_input_input_info_info_valuator_axes (const xcb_input_input_info_info_t *S)
366 {
367     return S->valuator.axes;
368 }
369 
370 int
371 xcb_input_input_info_info_valuator_axes_length (const xcb_input_input_info_t *R,
372                                                 const xcb_input_input_info_info_t *S)
373 {
374     return S->valuator.axes_len;
375 }
376 
377 xcb_input_axis_info_iterator_t
378 xcb_input_input_info_info_valuator_axes_iterator (const xcb_input_input_info_t *R,
379                                                   const xcb_input_input_info_info_t *S)
380 {
381     xcb_input_axis_info_iterator_t i;
382     i.data = S->valuator.axes;
383     i.rem = S->valuator.axes_len;
384     i.index = (char *) i.data - (char *) S;
385     return i;
386 }
387 
388 int
389 xcb_input_input_info_info_serialize (void                              **_buffer,
390                                      uint8_t                             class_id,
391                                      const xcb_input_input_info_info_t  *_aux)
392 {
393     char *xcb_out = *_buffer;
394     unsigned int xcb_buffer_len = 0;
395     unsigned int xcb_align_to = 0;
396     unsigned int xcb_padding_offset = 2;
397 
398     unsigned int xcb_pad = 0;
399     char xcb_pad0[3] = {0, 0, 0};
400     struct iovec xcb_parts[11];
401     unsigned int xcb_parts_idx = 0;
402     unsigned int xcb_block_len = 0;
403     unsigned int i;
404     char *xcb_tmp;
405 
406     if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
407         /* xcb_input_input_info_info_t.key.min_keycode */
408         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.min_keycode;
409         xcb_block_len += sizeof(xcb_input_key_code_t);
410         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_key_code_t);
411         xcb_parts_idx++;
412         xcb_align_to = ALIGNOF(xcb_input_key_code_t);
413         /* xcb_input_input_info_info_t.key.max_keycode */
414         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.max_keycode;
415         xcb_block_len += sizeof(xcb_input_key_code_t);
416         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_key_code_t);
417         xcb_parts_idx++;
418         xcb_align_to = ALIGNOF(xcb_input_key_code_t);
419         /* xcb_input_input_info_info_t.key.num_keys */
420         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.num_keys;
421         xcb_block_len += sizeof(uint16_t);
422         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
423         xcb_parts_idx++;
424         xcb_align_to = ALIGNOF(uint16_t);
425         /* xcb_input_input_info_info_t.key.pad0 */
426         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
427         xcb_block_len += sizeof(uint8_t)*2;
428         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
429         xcb_parts_idx++;
430         xcb_align_to = ALIGNOF(uint8_t);
431     }
432     if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
433         /* xcb_input_input_info_info_t.button.num_buttons */
434         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->button.num_buttons;
435         xcb_block_len += sizeof(uint16_t);
436         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
437         xcb_parts_idx++;
438         xcb_align_to = ALIGNOF(uint16_t);
439     }
440     if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
441         /* xcb_input_input_info_info_t.valuator.axes_len */
442         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.axes_len;
443         xcb_block_len += sizeof(uint8_t);
444         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
445         xcb_parts_idx++;
446         xcb_align_to = ALIGNOF(uint8_t);
447         /* xcb_input_input_info_info_t.valuator.mode */
448         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.mode;
449         xcb_block_len += sizeof(uint8_t);
450         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
451         xcb_parts_idx++;
452         xcb_align_to = ALIGNOF(uint8_t);
453         /* xcb_input_input_info_info_t.valuator.motion_size */
454         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.motion_size;
455         xcb_block_len += sizeof(uint32_t);
456         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
457         xcb_parts_idx++;
458         xcb_align_to = ALIGNOF(uint32_t);
459         /* insert padding */
460         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
461         xcb_buffer_len += xcb_block_len + xcb_pad;
462         if (0 != xcb_pad) {
463             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
464             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
465             xcb_parts_idx++;
466             xcb_pad = 0;
467         }
468         xcb_block_len = 0;
469         xcb_padding_offset = 0;
470         /* axes */
471         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->valuator.axes;
472         xcb_block_len += _aux->valuator.axes_len * sizeof(xcb_input_axis_info_t);
473         xcb_parts[xcb_parts_idx].iov_len = _aux->valuator.axes_len * sizeof(xcb_input_axis_info_t);
474         xcb_parts_idx++;
475         xcb_align_to = ALIGNOF(xcb_input_axis_info_t);
476     }
477     /* insert padding */
478     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
479     xcb_buffer_len += xcb_block_len + xcb_pad;
480     if (0 != xcb_pad) {
481         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
482         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
483         xcb_parts_idx++;
484         xcb_pad = 0;
485     }
486     xcb_block_len = 0;
487     xcb_padding_offset = 0;
488 
489     if (NULL == xcb_out) {
490         /* allocate memory */
491         xcb_out = malloc(xcb_buffer_len);
492         *_buffer = xcb_out;
493     }
494 
495     xcb_tmp = xcb_out;
496     for(i=0; i<xcb_parts_idx; i++) {
497         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
498             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
499         if (0 != xcb_parts[i].iov_len)
500             xcb_tmp += xcb_parts[i].iov_len;
501     }
502 
503     return xcb_buffer_len;
504 }
505 
506 int
507 xcb_input_input_info_info_unpack (const void                   *_buffer,
508                                   uint8_t                       class_id,
509                                   xcb_input_input_info_info_t  *_aux)
510 {
511     char *xcb_tmp = (char *)_buffer;
512     unsigned int xcb_buffer_len = 0;
513     unsigned int xcb_block_len = 0;
514     unsigned int xcb_pad = 0;
515     unsigned int xcb_align_to = 0;
516     unsigned int xcb_padding_offset = 2;
517 
518 
519     if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
520         /* xcb_input_input_info_info_t.key.min_keycode */
521         _aux->key.min_keycode = *(xcb_input_key_code_t *)xcb_tmp;
522         xcb_block_len += sizeof(xcb_input_key_code_t);
523         xcb_tmp += sizeof(xcb_input_key_code_t);
524         xcb_align_to = ALIGNOF(xcb_input_key_code_t);
525         /* xcb_input_input_info_info_t.key.max_keycode */
526         _aux->key.max_keycode = *(xcb_input_key_code_t *)xcb_tmp;
527         xcb_block_len += sizeof(xcb_input_key_code_t);
528         xcb_tmp += sizeof(xcb_input_key_code_t);
529         xcb_align_to = ALIGNOF(xcb_input_key_code_t);
530         /* xcb_input_input_info_info_t.key.num_keys */
531         _aux->key.num_keys = *(uint16_t *)xcb_tmp;
532         xcb_block_len += sizeof(uint16_t);
533         xcb_tmp += sizeof(uint16_t);
534         xcb_align_to = ALIGNOF(uint16_t);
535         /* xcb_input_input_info_info_t.key.pad0 */
536         _aux->key.pad0[0] = *(uint8_t *)xcb_tmp;
537         _aux->key.pad0[1] = *(uint8_t *)xcb_tmp;
538         xcb_block_len += sizeof(uint8_t) * 2;
539         xcb_tmp += sizeof(uint8_t) * 2;
540         xcb_align_to = ALIGNOF(uint8_t);
541     }
542     if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
543         /* xcb_input_input_info_info_t.button.num_buttons */
544         _aux->button.num_buttons = *(uint16_t *)xcb_tmp;
545         xcb_block_len += sizeof(uint16_t);
546         xcb_tmp += sizeof(uint16_t);
547         xcb_align_to = ALIGNOF(uint16_t);
548     }
549     if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
550         /* xcb_input_input_info_info_t.valuator.axes_len */
551         _aux->valuator.axes_len = *(uint8_t *)xcb_tmp;
552         xcb_block_len += sizeof(uint8_t);
553         xcb_tmp += sizeof(uint8_t);
554         xcb_align_to = ALIGNOF(uint8_t);
555         /* xcb_input_input_info_info_t.valuator.mode */
556         _aux->valuator.mode = *(uint8_t *)xcb_tmp;
557         xcb_block_len += sizeof(uint8_t);
558         xcb_tmp += sizeof(uint8_t);
559         xcb_align_to = ALIGNOF(uint8_t);
560         /* xcb_input_input_info_info_t.valuator.motion_size */
561         _aux->valuator.motion_size = *(uint32_t *)xcb_tmp;
562         xcb_block_len += sizeof(uint32_t);
563         xcb_tmp += sizeof(uint32_t);
564         xcb_align_to = ALIGNOF(uint32_t);
565         /* insert padding */
566         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
567         xcb_buffer_len += xcb_block_len + xcb_pad;
568         if (0 != xcb_pad) {
569             xcb_tmp += xcb_pad;
570             xcb_pad = 0;
571         }
572         xcb_block_len = 0;
573         xcb_padding_offset = 0;
574         /* axes */
575         _aux->valuator.axes = (xcb_input_axis_info_t *)xcb_tmp;
576         xcb_block_len += _aux->valuator.axes_len * sizeof(xcb_input_axis_info_t);
577         xcb_tmp += xcb_block_len;
578         xcb_align_to = ALIGNOF(xcb_input_axis_info_t);
579     }
580     /* insert padding */
581     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
582     xcb_buffer_len += xcb_block_len + xcb_pad;
583     if (0 != xcb_pad) {
584         xcb_tmp += xcb_pad;
585         xcb_pad = 0;
586     }
587     xcb_block_len = 0;
588     xcb_padding_offset = 0;
589 
590     return xcb_buffer_len;
591 }
592 
593 int
594 xcb_input_input_info_info_sizeof (const void  *_buffer,
595                                   uint8_t      class_id)
596 {
597     xcb_input_input_info_info_t _aux;
598     return xcb_input_input_info_info_unpack(_buffer, class_id, &_aux);
599 }
600 
601 int
602 xcb_input_input_info_sizeof (const void  *_buffer)
603 {
604     char *xcb_tmp = (char *)_buffer;
605     const xcb_input_input_info_t *_aux = (xcb_input_input_info_t *)_buffer;
606     unsigned int xcb_buffer_len = 0;
607     unsigned int xcb_block_len = 0;
608     unsigned int xcb_pad = 0;
609     unsigned int xcb_align_to = 0;
610 
611 
612     xcb_block_len += sizeof(xcb_input_input_info_t);
613     xcb_tmp += xcb_block_len;
614     xcb_buffer_len += xcb_block_len;
615     xcb_block_len = 0;
616     /* info */
617     xcb_block_len += xcb_input_input_info_info_sizeof(xcb_tmp, _aux->class_id);
618     xcb_tmp += xcb_block_len;
619     xcb_align_to = ALIGNOF(char);
620     /* insert padding */
621     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
622     xcb_buffer_len += xcb_block_len + xcb_pad;
623     if (0 != xcb_pad) {
624         xcb_tmp += xcb_pad;
625         xcb_pad = 0;
626     }
627     xcb_block_len = 0;
628 
629     return xcb_buffer_len;
630 }
631 
632 void *
633 xcb_input_input_info_info (const xcb_input_input_info_t *R)
634 {
635     return (void *) (R + 1);
636 }
637 
638 void
639 xcb_input_input_info_next (xcb_input_input_info_iterator_t *i)
640 {
641     xcb_input_input_info_t *R = i->data;
642     xcb_generic_iterator_t child;
643     child.data = (xcb_input_input_info_t *)(((char *)R) + xcb_input_input_info_sizeof(R));
644     i->index = (char *) child.data - (char *) i->data;
645     --i->rem;
646     i->data = (xcb_input_input_info_t *) child.data;
647 }
648 
649 xcb_generic_iterator_t
650 xcb_input_input_info_end (xcb_input_input_info_iterator_t i)
651 {
652     xcb_generic_iterator_t ret;
653     while(i.rem > 0)
654         xcb_input_input_info_next(&i);
655     ret.data = i.data;
656     ret.rem = i.rem;
657     ret.index = i.index;
658     return ret;
659 }
660 
661 int
662 xcb_input_device_name_sizeof (const void  *_buffer)
663 {
664     char *xcb_tmp = (char *)_buffer;
665     const xcb_input_device_name_t *_aux = (xcb_input_device_name_t *)_buffer;
666     unsigned int xcb_buffer_len = 0;
667     unsigned int xcb_block_len = 0;
668     unsigned int xcb_pad = 0;
669     unsigned int xcb_align_to = 0;
670 
671 
672     xcb_block_len += sizeof(xcb_input_device_name_t);
673     xcb_tmp += xcb_block_len;
674     xcb_buffer_len += xcb_block_len;
675     xcb_block_len = 0;
676     /* string */
677     xcb_block_len += _aux->len * sizeof(char);
678     xcb_tmp += xcb_block_len;
679     xcb_align_to = ALIGNOF(char);
680     /* insert padding */
681     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
682     xcb_buffer_len += xcb_block_len + xcb_pad;
683     if (0 != xcb_pad) {
684         xcb_tmp += xcb_pad;
685         xcb_pad = 0;
686     }
687     xcb_block_len = 0;
688 
689     return xcb_buffer_len;
690 }
691 
692 char *
693 xcb_input_device_name_string (const xcb_input_device_name_t *R)
694 {
695     return (char *) (R + 1);
696 }
697 
698 int
699 xcb_input_device_name_string_length (const xcb_input_device_name_t *R)
700 {
701     return R->len;
702 }
703 
704 xcb_generic_iterator_t
705 xcb_input_device_name_string_end (const xcb_input_device_name_t *R)
706 {
707     xcb_generic_iterator_t i;
708     i.data = ((char *) (R + 1)) + (R->len);
709     i.rem = 0;
710     i.index = (char *) i.data - (char *) R;
711     return i;
712 }
713 
714 void
715 xcb_input_device_name_next (xcb_input_device_name_iterator_t *i)
716 {
717     xcb_input_device_name_t *R = i->data;
718     xcb_generic_iterator_t child;
719     child.data = (xcb_input_device_name_t *)(((char *)R) + xcb_input_device_name_sizeof(R));
720     i->index = (char *) child.data - (char *) i->data;
721     --i->rem;
722     i->data = (xcb_input_device_name_t *) child.data;
723 }
724 
725 xcb_generic_iterator_t
726 xcb_input_device_name_end (xcb_input_device_name_iterator_t i)
727 {
728     xcb_generic_iterator_t ret;
729     while(i.rem > 0)
730         xcb_input_device_name_next(&i);
731     ret.data = i.data;
732     ret.rem = i.rem;
733     ret.index = i.index;
734     return ret;
735 }
736 
737 int
738 xcb_input_list_input_devices_sizeof (const void  *_buffer)
739 {
740     char *xcb_tmp = (char *)_buffer;
741     const xcb_input_list_input_devices_reply_t *_aux = (xcb_input_list_input_devices_reply_t *)_buffer;
742     unsigned int xcb_buffer_len = 0;
743     unsigned int xcb_block_len = 0;
744     unsigned int xcb_pad = 0;
745     unsigned int xcb_align_to = 0;
746 
747     int xcb_pre_tmp_1; /* sumof length */
748     int xcb_pre_tmp_2; /* sumof loop counter */
749     int64_t xcb_pre_tmp_3; /* sumof sum */
750     const xcb_input_device_info_t* xcb_pre_tmp_4; /* sumof list ptr */
751     unsigned int i;
752     unsigned int xcb_tmp_len;
753 
754     xcb_block_len += sizeof(xcb_input_list_input_devices_reply_t);
755     xcb_tmp += xcb_block_len;
756     xcb_buffer_len += xcb_block_len;
757     xcb_block_len = 0;
758     /* devices */
759     xcb_block_len += _aux->devices_len * sizeof(xcb_input_device_info_t);
760     xcb_tmp += xcb_block_len;
761     xcb_align_to = ALIGNOF(xcb_input_device_info_t);
762     /* insert padding */
763     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
764     xcb_buffer_len += xcb_block_len + xcb_pad;
765     if (0 != xcb_pad) {
766         xcb_tmp += xcb_pad;
767         xcb_pad = 0;
768     }
769     xcb_block_len = 0;
770     /* infos */
771     /* sumof start */
772     xcb_pre_tmp_1 = _aux->devices_len;
773     xcb_pre_tmp_3 = 0;
774     xcb_pre_tmp_4 = xcb_input_list_input_devices_devices(_aux);
775     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
776         xcb_pre_tmp_3 += xcb_pre_tmp_4->num_class_info;
777         xcb_pre_tmp_4++;
778     }
779     /* sumof end. Result is in xcb_pre_tmp_3 */
780     for(i=0; i<xcb_pre_tmp_3; i++) {
781         xcb_tmp_len = xcb_input_input_info_sizeof(xcb_tmp);
782         xcb_block_len += xcb_tmp_len;
783         xcb_tmp += xcb_tmp_len;
784     }
785     xcb_align_to = ALIGNOF(xcb_input_input_info_t);
786     /* insert padding */
787     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
788     xcb_buffer_len += xcb_block_len + xcb_pad;
789     if (0 != xcb_pad) {
790         xcb_tmp += xcb_pad;
791         xcb_pad = 0;
792     }
793     xcb_block_len = 0;
794     /* names */
795     for(i=0; i<_aux->devices_len; i++) {
796         xcb_tmp_len = xcb_str_sizeof(xcb_tmp);
797         xcb_block_len += xcb_tmp_len;
798         xcb_tmp += xcb_tmp_len;
799     }
800     xcb_align_to = ALIGNOF(xcb_str_t);
801     xcb_align_to = 4;
802     /* insert padding */
803     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
804     xcb_buffer_len += xcb_block_len + xcb_pad;
805     if (0 != xcb_pad) {
806         xcb_tmp += xcb_pad;
807         xcb_pad = 0;
808     }
809     xcb_block_len = 0;
810     /* insert padding */
811     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
812     xcb_buffer_len += xcb_block_len + xcb_pad;
813     if (0 != xcb_pad) {
814         xcb_tmp += xcb_pad;
815         xcb_pad = 0;
816     }
817     xcb_block_len = 0;
818 
819     return xcb_buffer_len;
820 }
821 
822 xcb_input_list_input_devices_cookie_t
823 xcb_input_list_input_devices (xcb_connection_t *c)
824 {
825     static const xcb_protocol_request_t xcb_req = {
826         .count = 2,
827         .ext = &xcb_input_id,
828         .opcode = XCB_INPUT_LIST_INPUT_DEVICES,
829         .isvoid = 0
830     };
831 
832     struct iovec xcb_parts[4];
833     xcb_input_list_input_devices_cookie_t xcb_ret;
834     xcb_input_list_input_devices_request_t xcb_out;
835 
836 
837     xcb_parts[2].iov_base = (char *) &xcb_out;
838     xcb_parts[2].iov_len = sizeof(xcb_out);
839     xcb_parts[3].iov_base = 0;
840     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
841 
842     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
843     return xcb_ret;
844 }
845 
846 xcb_input_list_input_devices_cookie_t
847 xcb_input_list_input_devices_unchecked (xcb_connection_t *c)
848 {
849     static const xcb_protocol_request_t xcb_req = {
850         .count = 2,
851         .ext = &xcb_input_id,
852         .opcode = XCB_INPUT_LIST_INPUT_DEVICES,
853         .isvoid = 0
854     };
855 
856     struct iovec xcb_parts[4];
857     xcb_input_list_input_devices_cookie_t xcb_ret;
858     xcb_input_list_input_devices_request_t xcb_out;
859 
860 
861     xcb_parts[2].iov_base = (char *) &xcb_out;
862     xcb_parts[2].iov_len = sizeof(xcb_out);
863     xcb_parts[3].iov_base = 0;
864     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
865 
866     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
867     return xcb_ret;
868 }
869 
870 xcb_input_device_info_t *
871 xcb_input_list_input_devices_devices (const xcb_input_list_input_devices_reply_t *R)
872 {
873     return (xcb_input_device_info_t *) (R + 1);
874 }
875 
876 int
877 xcb_input_list_input_devices_devices_length (const xcb_input_list_input_devices_reply_t *R)
878 {
879     return R->devices_len;
880 }
881 
882 xcb_input_device_info_iterator_t
883 xcb_input_list_input_devices_devices_iterator (const xcb_input_list_input_devices_reply_t *R)
884 {
885     xcb_input_device_info_iterator_t i;
886     i.data = (xcb_input_device_info_t *) (R + 1);
887     i.rem = R->devices_len;
888     i.index = (char *) i.data - (char *) R;
889     return i;
890 }
891 
892 int
893 xcb_input_list_input_devices_infos_length (const xcb_input_list_input_devices_reply_t *R)
894 {
895     int xcb_pre_tmp_5; /* sumof length */
896     int xcb_pre_tmp_6; /* sumof loop counter */
897     int64_t xcb_pre_tmp_7; /* sumof sum */
898     const xcb_input_device_info_t* xcb_pre_tmp_8; /* sumof list ptr */
899     /* sumof start */
900     xcb_pre_tmp_5 = R->devices_len;
901     xcb_pre_tmp_7 = 0;
902     xcb_pre_tmp_8 = xcb_input_list_input_devices_devices(R);
903     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
904         xcb_pre_tmp_7 += xcb_pre_tmp_8->num_class_info;
905         xcb_pre_tmp_8++;
906     }
907     /* sumof end. Result is in xcb_pre_tmp_7 */
908     return xcb_pre_tmp_7;
909 }
910 
911 xcb_input_input_info_iterator_t
912 xcb_input_list_input_devices_infos_iterator (const xcb_input_list_input_devices_reply_t *R)
913 {
914     xcb_input_input_info_iterator_t i;
915     xcb_generic_iterator_t prev = xcb_input_device_info_end(xcb_input_list_input_devices_devices_iterator(R));
916     int xcb_pre_tmp_9; /* sumof length */
917     int xcb_pre_tmp_10; /* sumof loop counter */
918     int64_t xcb_pre_tmp_11; /* sumof sum */
919     const xcb_input_device_info_t* xcb_pre_tmp_12; /* sumof list ptr */
920     /* sumof start */
921     xcb_pre_tmp_9 = R->devices_len;
922     xcb_pre_tmp_11 = 0;
923     xcb_pre_tmp_12 = xcb_input_list_input_devices_devices(R);
924     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
925         xcb_pre_tmp_11 += xcb_pre_tmp_12->num_class_info;
926         xcb_pre_tmp_12++;
927     }
928     /* sumof end. Result is in xcb_pre_tmp_11 */
929     i.data = (xcb_input_input_info_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_input_info_t, prev.index));
930     i.rem = xcb_pre_tmp_11;
931     i.index = (char *) i.data - (char *) R;
932     return i;
933 }
934 
935 int
936 xcb_input_list_input_devices_names_length (const xcb_input_list_input_devices_reply_t *R)
937 {
938     return R->devices_len;
939 }
940 
941 xcb_str_iterator_t
942 xcb_input_list_input_devices_names_iterator (const xcb_input_list_input_devices_reply_t *R)
943 {
944     xcb_str_iterator_t i;
945     xcb_generic_iterator_t prev = xcb_input_input_info_end(xcb_input_list_input_devices_infos_iterator(R));
946     i.data = (xcb_str_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_str_t, prev.index));
947     i.rem = R->devices_len;
948     i.index = (char *) i.data - (char *) R;
949     return i;
950 }
951 
952 xcb_input_list_input_devices_reply_t *
953 xcb_input_list_input_devices_reply (xcb_connection_t                       *c,
954                                     xcb_input_list_input_devices_cookie_t   cookie  /**< */,
955                                     xcb_generic_error_t                   **e)
956 {
957     return (xcb_input_list_input_devices_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
958 }
959 
960 void
961 xcb_input_input_class_info_next (xcb_input_input_class_info_iterator_t *i)
962 {
963     --i->rem;
964     ++i->data;
965     i->index += sizeof(xcb_input_input_class_info_t);
966 }
967 
968 xcb_generic_iterator_t
969 xcb_input_input_class_info_end (xcb_input_input_class_info_iterator_t i)
970 {
971     xcb_generic_iterator_t ret;
972     ret.data = i.data + i.rem;
973     ret.index = i.index + ((char *) ret.data - (char *) i.data);
974     ret.rem = 0;
975     return ret;
976 }
977 
978 int
979 xcb_input_open_device_sizeof (const void  *_buffer)
980 {
981     char *xcb_tmp = (char *)_buffer;
982     const xcb_input_open_device_reply_t *_aux = (xcb_input_open_device_reply_t *)_buffer;
983     unsigned int xcb_buffer_len = 0;
984     unsigned int xcb_block_len = 0;
985     unsigned int xcb_pad = 0;
986     unsigned int xcb_align_to = 0;
987 
988 
989     xcb_block_len += sizeof(xcb_input_open_device_reply_t);
990     xcb_tmp += xcb_block_len;
991     xcb_buffer_len += xcb_block_len;
992     xcb_block_len = 0;
993     /* class_info */
994     xcb_block_len += _aux->num_classes * sizeof(xcb_input_input_class_info_t);
995     xcb_tmp += xcb_block_len;
996     xcb_align_to = ALIGNOF(xcb_input_input_class_info_t);
997     xcb_align_to = 4;
998     /* insert padding */
999     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1000     xcb_buffer_len += xcb_block_len + xcb_pad;
1001     if (0 != xcb_pad) {
1002         xcb_tmp += xcb_pad;
1003         xcb_pad = 0;
1004     }
1005     xcb_block_len = 0;
1006     /* insert padding */
1007     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1008     xcb_buffer_len += xcb_block_len + xcb_pad;
1009     if (0 != xcb_pad) {
1010         xcb_tmp += xcb_pad;
1011         xcb_pad = 0;
1012     }
1013     xcb_block_len = 0;
1014 
1015     return xcb_buffer_len;
1016 }
1017 
1018 xcb_input_open_device_cookie_t
1019 xcb_input_open_device (xcb_connection_t *c,
1020                        uint8_t           device_id)
1021 {
1022     static const xcb_protocol_request_t xcb_req = {
1023         .count = 2,
1024         .ext = &xcb_input_id,
1025         .opcode = XCB_INPUT_OPEN_DEVICE,
1026         .isvoid = 0
1027     };
1028 
1029     struct iovec xcb_parts[4];
1030     xcb_input_open_device_cookie_t xcb_ret;
1031     xcb_input_open_device_request_t xcb_out;
1032 
1033     xcb_out.device_id = device_id;
1034     memset(xcb_out.pad0, 0, 3);
1035 
1036     xcb_parts[2].iov_base = (char *) &xcb_out;
1037     xcb_parts[2].iov_len = sizeof(xcb_out);
1038     xcb_parts[3].iov_base = 0;
1039     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1040 
1041     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1042     return xcb_ret;
1043 }
1044 
1045 xcb_input_open_device_cookie_t
1046 xcb_input_open_device_unchecked (xcb_connection_t *c,
1047                                  uint8_t           device_id)
1048 {
1049     static const xcb_protocol_request_t xcb_req = {
1050         .count = 2,
1051         .ext = &xcb_input_id,
1052         .opcode = XCB_INPUT_OPEN_DEVICE,
1053         .isvoid = 0
1054     };
1055 
1056     struct iovec xcb_parts[4];
1057     xcb_input_open_device_cookie_t xcb_ret;
1058     xcb_input_open_device_request_t xcb_out;
1059 
1060     xcb_out.device_id = device_id;
1061     memset(xcb_out.pad0, 0, 3);
1062 
1063     xcb_parts[2].iov_base = (char *) &xcb_out;
1064     xcb_parts[2].iov_len = sizeof(xcb_out);
1065     xcb_parts[3].iov_base = 0;
1066     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1067 
1068     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1069     return xcb_ret;
1070 }
1071 
1072 xcb_input_input_class_info_t *
1073 xcb_input_open_device_class_info (const xcb_input_open_device_reply_t *R)
1074 {
1075     return (xcb_input_input_class_info_t *) (R + 1);
1076 }
1077 
1078 int
1079 xcb_input_open_device_class_info_length (const xcb_input_open_device_reply_t *R)
1080 {
1081     return R->num_classes;
1082 }
1083 
1084 xcb_input_input_class_info_iterator_t
1085 xcb_input_open_device_class_info_iterator (const xcb_input_open_device_reply_t *R)
1086 {
1087     xcb_input_input_class_info_iterator_t i;
1088     i.data = (xcb_input_input_class_info_t *) (R + 1);
1089     i.rem = R->num_classes;
1090     i.index = (char *) i.data - (char *) R;
1091     return i;
1092 }
1093 
1094 xcb_input_open_device_reply_t *
1095 xcb_input_open_device_reply (xcb_connection_t                *c,
1096                              xcb_input_open_device_cookie_t   cookie  /**< */,
1097                              xcb_generic_error_t            **e)
1098 {
1099     return (xcb_input_open_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1100 }
1101 
1102 xcb_void_cookie_t
1103 xcb_input_close_device_checked (xcb_connection_t *c,
1104                                 uint8_t           device_id)
1105 {
1106     static const xcb_protocol_request_t xcb_req = {
1107         .count = 2,
1108         .ext = &xcb_input_id,
1109         .opcode = XCB_INPUT_CLOSE_DEVICE,
1110         .isvoid = 1
1111     };
1112 
1113     struct iovec xcb_parts[4];
1114     xcb_void_cookie_t xcb_ret;
1115     xcb_input_close_device_request_t xcb_out;
1116 
1117     xcb_out.device_id = device_id;
1118     memset(xcb_out.pad0, 0, 3);
1119 
1120     xcb_parts[2].iov_base = (char *) &xcb_out;
1121     xcb_parts[2].iov_len = sizeof(xcb_out);
1122     xcb_parts[3].iov_base = 0;
1123     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1124 
1125     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1126     return xcb_ret;
1127 }
1128 
1129 xcb_void_cookie_t
1130 xcb_input_close_device (xcb_connection_t *c,
1131                         uint8_t           device_id)
1132 {
1133     static const xcb_protocol_request_t xcb_req = {
1134         .count = 2,
1135         .ext = &xcb_input_id,
1136         .opcode = XCB_INPUT_CLOSE_DEVICE,
1137         .isvoid = 1
1138     };
1139 
1140     struct iovec xcb_parts[4];
1141     xcb_void_cookie_t xcb_ret;
1142     xcb_input_close_device_request_t xcb_out;
1143 
1144     xcb_out.device_id = device_id;
1145     memset(xcb_out.pad0, 0, 3);
1146 
1147     xcb_parts[2].iov_base = (char *) &xcb_out;
1148     xcb_parts[2].iov_len = sizeof(xcb_out);
1149     xcb_parts[3].iov_base = 0;
1150     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1151 
1152     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1153     return xcb_ret;
1154 }
1155 
1156 xcb_input_set_device_mode_cookie_t
1157 xcb_input_set_device_mode (xcb_connection_t *c,
1158                            uint8_t           device_id,
1159                            uint8_t           mode)
1160 {
1161     static const xcb_protocol_request_t xcb_req = {
1162         .count = 2,
1163         .ext = &xcb_input_id,
1164         .opcode = XCB_INPUT_SET_DEVICE_MODE,
1165         .isvoid = 0
1166     };
1167 
1168     struct iovec xcb_parts[4];
1169     xcb_input_set_device_mode_cookie_t xcb_ret;
1170     xcb_input_set_device_mode_request_t xcb_out;
1171 
1172     xcb_out.device_id = device_id;
1173     xcb_out.mode = mode;
1174     memset(xcb_out.pad0, 0, 2);
1175 
1176     xcb_parts[2].iov_base = (char *) &xcb_out;
1177     xcb_parts[2].iov_len = sizeof(xcb_out);
1178     xcb_parts[3].iov_base = 0;
1179     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1180 
1181     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1182     return xcb_ret;
1183 }
1184 
1185 xcb_input_set_device_mode_cookie_t
1186 xcb_input_set_device_mode_unchecked (xcb_connection_t *c,
1187                                      uint8_t           device_id,
1188                                      uint8_t           mode)
1189 {
1190     static const xcb_protocol_request_t xcb_req = {
1191         .count = 2,
1192         .ext = &xcb_input_id,
1193         .opcode = XCB_INPUT_SET_DEVICE_MODE,
1194         .isvoid = 0
1195     };
1196 
1197     struct iovec xcb_parts[4];
1198     xcb_input_set_device_mode_cookie_t xcb_ret;
1199     xcb_input_set_device_mode_request_t xcb_out;
1200 
1201     xcb_out.device_id = device_id;
1202     xcb_out.mode = mode;
1203     memset(xcb_out.pad0, 0, 2);
1204 
1205     xcb_parts[2].iov_base = (char *) &xcb_out;
1206     xcb_parts[2].iov_len = sizeof(xcb_out);
1207     xcb_parts[3].iov_base = 0;
1208     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1209 
1210     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1211     return xcb_ret;
1212 }
1213 
1214 xcb_input_set_device_mode_reply_t *
1215 xcb_input_set_device_mode_reply (xcb_connection_t                    *c,
1216                                  xcb_input_set_device_mode_cookie_t   cookie  /**< */,
1217                                  xcb_generic_error_t                **e)
1218 {
1219     return (xcb_input_set_device_mode_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1220 }
1221 
1222 int
1223 xcb_input_select_extension_event_sizeof (const void  *_buffer)
1224 {
1225     char *xcb_tmp = (char *)_buffer;
1226     const xcb_input_select_extension_event_request_t *_aux = (xcb_input_select_extension_event_request_t *)_buffer;
1227     unsigned int xcb_buffer_len = 0;
1228     unsigned int xcb_block_len = 0;
1229     unsigned int xcb_pad = 0;
1230     unsigned int xcb_align_to = 0;
1231 
1232 
1233     xcb_block_len += sizeof(xcb_input_select_extension_event_request_t);
1234     xcb_tmp += xcb_block_len;
1235     xcb_buffer_len += xcb_block_len;
1236     xcb_block_len = 0;
1237     /* classes */
1238     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
1239     xcb_tmp += xcb_block_len;
1240     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
1241     /* insert padding */
1242     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1243     xcb_buffer_len += xcb_block_len + xcb_pad;
1244     if (0 != xcb_pad) {
1245         xcb_tmp += xcb_pad;
1246         xcb_pad = 0;
1247     }
1248     xcb_block_len = 0;
1249 
1250     return xcb_buffer_len;
1251 }
1252 
1253 xcb_void_cookie_t
1254 xcb_input_select_extension_event_checked (xcb_connection_t              *c,
1255                                           xcb_window_t                   window,
1256                                           uint16_t                       num_classes,
1257                                           const xcb_input_event_class_t *classes)
1258 {
1259     static const xcb_protocol_request_t xcb_req = {
1260         .count = 4,
1261         .ext = &xcb_input_id,
1262         .opcode = XCB_INPUT_SELECT_EXTENSION_EVENT,
1263         .isvoid = 1
1264     };
1265 
1266     struct iovec xcb_parts[6];
1267     xcb_void_cookie_t xcb_ret;
1268     xcb_input_select_extension_event_request_t xcb_out;
1269 
1270     xcb_out.window = window;
1271     xcb_out.num_classes = num_classes;
1272     memset(xcb_out.pad0, 0, 2);
1273 
1274     xcb_parts[2].iov_base = (char *) &xcb_out;
1275     xcb_parts[2].iov_len = sizeof(xcb_out);
1276     xcb_parts[3].iov_base = 0;
1277     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1278     /* xcb_input_event_class_t classes */
1279     xcb_parts[4].iov_base = (char *) classes;
1280     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
1281     xcb_parts[5].iov_base = 0;
1282     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
1283 
1284     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1285     return xcb_ret;
1286 }
1287 
1288 xcb_void_cookie_t
1289 xcb_input_select_extension_event (xcb_connection_t              *c,
1290                                   xcb_window_t                   window,
1291                                   uint16_t                       num_classes,
1292                                   const xcb_input_event_class_t *classes)
1293 {
1294     static const xcb_protocol_request_t xcb_req = {
1295         .count = 4,
1296         .ext = &xcb_input_id,
1297         .opcode = XCB_INPUT_SELECT_EXTENSION_EVENT,
1298         .isvoid = 1
1299     };
1300 
1301     struct iovec xcb_parts[6];
1302     xcb_void_cookie_t xcb_ret;
1303     xcb_input_select_extension_event_request_t xcb_out;
1304 
1305     xcb_out.window = window;
1306     xcb_out.num_classes = num_classes;
1307     memset(xcb_out.pad0, 0, 2);
1308 
1309     xcb_parts[2].iov_base = (char *) &xcb_out;
1310     xcb_parts[2].iov_len = sizeof(xcb_out);
1311     xcb_parts[3].iov_base = 0;
1312     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1313     /* xcb_input_event_class_t classes */
1314     xcb_parts[4].iov_base = (char *) classes;
1315     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
1316     xcb_parts[5].iov_base = 0;
1317     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
1318 
1319     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1320     return xcb_ret;
1321 }
1322 
1323 xcb_input_event_class_t *
1324 xcb_input_select_extension_event_classes (const xcb_input_select_extension_event_request_t *R)
1325 {
1326     return (xcb_input_event_class_t *) (R + 1);
1327 }
1328 
1329 int
1330 xcb_input_select_extension_event_classes_length (const xcb_input_select_extension_event_request_t *R)
1331 {
1332     return R->num_classes;
1333 }
1334 
1335 xcb_generic_iterator_t
1336 xcb_input_select_extension_event_classes_end (const xcb_input_select_extension_event_request_t *R)
1337 {
1338     xcb_generic_iterator_t i;
1339     i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
1340     i.rem = 0;
1341     i.index = (char *) i.data - (char *) R;
1342     return i;
1343 }
1344 
1345 int
1346 xcb_input_get_selected_extension_events_sizeof (const void  *_buffer)
1347 {
1348     char *xcb_tmp = (char *)_buffer;
1349     const xcb_input_get_selected_extension_events_reply_t *_aux = (xcb_input_get_selected_extension_events_reply_t *)_buffer;
1350     unsigned int xcb_buffer_len = 0;
1351     unsigned int xcb_block_len = 0;
1352     unsigned int xcb_pad = 0;
1353     unsigned int xcb_align_to = 0;
1354 
1355 
1356     xcb_block_len += sizeof(xcb_input_get_selected_extension_events_reply_t);
1357     xcb_tmp += xcb_block_len;
1358     xcb_buffer_len += xcb_block_len;
1359     xcb_block_len = 0;
1360     /* this_classes */
1361     xcb_block_len += _aux->num_this_classes * sizeof(xcb_input_event_class_t);
1362     xcb_tmp += xcb_block_len;
1363     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
1364     /* insert padding */
1365     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1366     xcb_buffer_len += xcb_block_len + xcb_pad;
1367     if (0 != xcb_pad) {
1368         xcb_tmp += xcb_pad;
1369         xcb_pad = 0;
1370     }
1371     xcb_block_len = 0;
1372     /* all_classes */
1373     xcb_block_len += _aux->num_all_classes * sizeof(xcb_input_event_class_t);
1374     xcb_tmp += xcb_block_len;
1375     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
1376     /* insert padding */
1377     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1378     xcb_buffer_len += xcb_block_len + xcb_pad;
1379     if (0 != xcb_pad) {
1380         xcb_tmp += xcb_pad;
1381         xcb_pad = 0;
1382     }
1383     xcb_block_len = 0;
1384 
1385     return xcb_buffer_len;
1386 }
1387 
1388 xcb_input_get_selected_extension_events_cookie_t
1389 xcb_input_get_selected_extension_events (xcb_connection_t *c,
1390                                          xcb_window_t      window)
1391 {
1392     static const xcb_protocol_request_t xcb_req = {
1393         .count = 2,
1394         .ext = &xcb_input_id,
1395         .opcode = XCB_INPUT_GET_SELECTED_EXTENSION_EVENTS,
1396         .isvoid = 0
1397     };
1398 
1399     struct iovec xcb_parts[4];
1400     xcb_input_get_selected_extension_events_cookie_t xcb_ret;
1401     xcb_input_get_selected_extension_events_request_t xcb_out;
1402 
1403     xcb_out.window = window;
1404 
1405     xcb_parts[2].iov_base = (char *) &xcb_out;
1406     xcb_parts[2].iov_len = sizeof(xcb_out);
1407     xcb_parts[3].iov_base = 0;
1408     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1409 
1410     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1411     return xcb_ret;
1412 }
1413 
1414 xcb_input_get_selected_extension_events_cookie_t
1415 xcb_input_get_selected_extension_events_unchecked (xcb_connection_t *c,
1416                                                    xcb_window_t      window)
1417 {
1418     static const xcb_protocol_request_t xcb_req = {
1419         .count = 2,
1420         .ext = &xcb_input_id,
1421         .opcode = XCB_INPUT_GET_SELECTED_EXTENSION_EVENTS,
1422         .isvoid = 0
1423     };
1424 
1425     struct iovec xcb_parts[4];
1426     xcb_input_get_selected_extension_events_cookie_t xcb_ret;
1427     xcb_input_get_selected_extension_events_request_t xcb_out;
1428 
1429     xcb_out.window = window;
1430 
1431     xcb_parts[2].iov_base = (char *) &xcb_out;
1432     xcb_parts[2].iov_len = sizeof(xcb_out);
1433     xcb_parts[3].iov_base = 0;
1434     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1435 
1436     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1437     return xcb_ret;
1438 }
1439 
1440 xcb_input_event_class_t *
1441 xcb_input_get_selected_extension_events_this_classes (const xcb_input_get_selected_extension_events_reply_t *R)
1442 {
1443     return (xcb_input_event_class_t *) (R + 1);
1444 }
1445 
1446 int
1447 xcb_input_get_selected_extension_events_this_classes_length (const xcb_input_get_selected_extension_events_reply_t *R)
1448 {
1449     return R->num_this_classes;
1450 }
1451 
1452 xcb_generic_iterator_t
1453 xcb_input_get_selected_extension_events_this_classes_end (const xcb_input_get_selected_extension_events_reply_t *R)
1454 {
1455     xcb_generic_iterator_t i;
1456     i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_this_classes);
1457     i.rem = 0;
1458     i.index = (char *) i.data - (char *) R;
1459     return i;
1460 }
1461 
1462 xcb_input_event_class_t *
1463 xcb_input_get_selected_extension_events_all_classes (const xcb_input_get_selected_extension_events_reply_t *R)
1464 {
1465     xcb_generic_iterator_t prev = xcb_input_get_selected_extension_events_this_classes_end(R);
1466     return (xcb_input_event_class_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index) + 0);
1467 }
1468 
1469 int
1470 xcb_input_get_selected_extension_events_all_classes_length (const xcb_input_get_selected_extension_events_reply_t *R)
1471 {
1472     return R->num_all_classes;
1473 }
1474 
1475 xcb_generic_iterator_t
1476 xcb_input_get_selected_extension_events_all_classes_end (const xcb_input_get_selected_extension_events_reply_t *R)
1477 {
1478     xcb_generic_iterator_t i;
1479     xcb_generic_iterator_t prev = xcb_input_get_selected_extension_events_this_classes_end(R);
1480     i.data = ((xcb_input_event_class_t *) ((char*) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index))) + (R->num_all_classes);
1481     i.rem = 0;
1482     i.index = (char *) i.data - (char *) R;
1483     return i;
1484 }
1485 
1486 xcb_input_get_selected_extension_events_reply_t *
1487 xcb_input_get_selected_extension_events_reply (xcb_connection_t                                  *c,
1488                                                xcb_input_get_selected_extension_events_cookie_t   cookie  /**< */,
1489                                                xcb_generic_error_t                              **e)
1490 {
1491     return (xcb_input_get_selected_extension_events_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1492 }
1493 
1494 int
1495 xcb_input_change_device_dont_propagate_list_sizeof (const void  *_buffer)
1496 {
1497     char *xcb_tmp = (char *)_buffer;
1498     const xcb_input_change_device_dont_propagate_list_request_t *_aux = (xcb_input_change_device_dont_propagate_list_request_t *)_buffer;
1499     unsigned int xcb_buffer_len = 0;
1500     unsigned int xcb_block_len = 0;
1501     unsigned int xcb_pad = 0;
1502     unsigned int xcb_align_to = 0;
1503 
1504 
1505     xcb_block_len += sizeof(xcb_input_change_device_dont_propagate_list_request_t);
1506     xcb_tmp += xcb_block_len;
1507     xcb_buffer_len += xcb_block_len;
1508     xcb_block_len = 0;
1509     /* classes */
1510     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
1511     xcb_tmp += xcb_block_len;
1512     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
1513     /* insert padding */
1514     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1515     xcb_buffer_len += xcb_block_len + xcb_pad;
1516     if (0 != xcb_pad) {
1517         xcb_tmp += xcb_pad;
1518         xcb_pad = 0;
1519     }
1520     xcb_block_len = 0;
1521 
1522     return xcb_buffer_len;
1523 }
1524 
1525 xcb_void_cookie_t
1526 xcb_input_change_device_dont_propagate_list_checked (xcb_connection_t              *c,
1527                                                      xcb_window_t                   window,
1528                                                      uint16_t                       num_classes,
1529                                                      uint8_t                        mode,
1530                                                      const xcb_input_event_class_t *classes)
1531 {
1532     static const xcb_protocol_request_t xcb_req = {
1533         .count = 4,
1534         .ext = &xcb_input_id,
1535         .opcode = XCB_INPUT_CHANGE_DEVICE_DONT_PROPAGATE_LIST,
1536         .isvoid = 1
1537     };
1538 
1539     struct iovec xcb_parts[6];
1540     xcb_void_cookie_t xcb_ret;
1541     xcb_input_change_device_dont_propagate_list_request_t xcb_out;
1542 
1543     xcb_out.window = window;
1544     xcb_out.num_classes = num_classes;
1545     xcb_out.mode = mode;
1546     xcb_out.pad0 = 0;
1547 
1548     xcb_parts[2].iov_base = (char *) &xcb_out;
1549     xcb_parts[2].iov_len = sizeof(xcb_out);
1550     xcb_parts[3].iov_base = 0;
1551     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1552     /* xcb_input_event_class_t classes */
1553     xcb_parts[4].iov_base = (char *) classes;
1554     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
1555     xcb_parts[5].iov_base = 0;
1556     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
1557 
1558     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1559     return xcb_ret;
1560 }
1561 
1562 xcb_void_cookie_t
1563 xcb_input_change_device_dont_propagate_list (xcb_connection_t              *c,
1564                                              xcb_window_t                   window,
1565                                              uint16_t                       num_classes,
1566                                              uint8_t                        mode,
1567                                              const xcb_input_event_class_t *classes)
1568 {
1569     static const xcb_protocol_request_t xcb_req = {
1570         .count = 4,
1571         .ext = &xcb_input_id,
1572         .opcode = XCB_INPUT_CHANGE_DEVICE_DONT_PROPAGATE_LIST,
1573         .isvoid = 1
1574     };
1575 
1576     struct iovec xcb_parts[6];
1577     xcb_void_cookie_t xcb_ret;
1578     xcb_input_change_device_dont_propagate_list_request_t xcb_out;
1579 
1580     xcb_out.window = window;
1581     xcb_out.num_classes = num_classes;
1582     xcb_out.mode = mode;
1583     xcb_out.pad0 = 0;
1584 
1585     xcb_parts[2].iov_base = (char *) &xcb_out;
1586     xcb_parts[2].iov_len = sizeof(xcb_out);
1587     xcb_parts[3].iov_base = 0;
1588     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1589     /* xcb_input_event_class_t classes */
1590     xcb_parts[4].iov_base = (char *) classes;
1591     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
1592     xcb_parts[5].iov_base = 0;
1593     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
1594 
1595     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1596     return xcb_ret;
1597 }
1598 
1599 xcb_input_event_class_t *
1600 xcb_input_change_device_dont_propagate_list_classes (const xcb_input_change_device_dont_propagate_list_request_t *R)
1601 {
1602     return (xcb_input_event_class_t *) (R + 1);
1603 }
1604 
1605 int
1606 xcb_input_change_device_dont_propagate_list_classes_length (const xcb_input_change_device_dont_propagate_list_request_t *R)
1607 {
1608     return R->num_classes;
1609 }
1610 
1611 xcb_generic_iterator_t
1612 xcb_input_change_device_dont_propagate_list_classes_end (const xcb_input_change_device_dont_propagate_list_request_t *R)
1613 {
1614     xcb_generic_iterator_t i;
1615     i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
1616     i.rem = 0;
1617     i.index = (char *) i.data - (char *) R;
1618     return i;
1619 }
1620 
1621 int
1622 xcb_input_get_device_dont_propagate_list_sizeof (const void  *_buffer)
1623 {
1624     char *xcb_tmp = (char *)_buffer;
1625     const xcb_input_get_device_dont_propagate_list_reply_t *_aux = (xcb_input_get_device_dont_propagate_list_reply_t *)_buffer;
1626     unsigned int xcb_buffer_len = 0;
1627     unsigned int xcb_block_len = 0;
1628     unsigned int xcb_pad = 0;
1629     unsigned int xcb_align_to = 0;
1630 
1631 
1632     xcb_block_len += sizeof(xcb_input_get_device_dont_propagate_list_reply_t);
1633     xcb_tmp += xcb_block_len;
1634     xcb_buffer_len += xcb_block_len;
1635     xcb_block_len = 0;
1636     /* classes */
1637     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
1638     xcb_tmp += xcb_block_len;
1639     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
1640     /* insert padding */
1641     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1642     xcb_buffer_len += xcb_block_len + xcb_pad;
1643     if (0 != xcb_pad) {
1644         xcb_tmp += xcb_pad;
1645         xcb_pad = 0;
1646     }
1647     xcb_block_len = 0;
1648 
1649     return xcb_buffer_len;
1650 }
1651 
1652 xcb_input_get_device_dont_propagate_list_cookie_t
1653 xcb_input_get_device_dont_propagate_list (xcb_connection_t *c,
1654                                           xcb_window_t      window)
1655 {
1656     static const xcb_protocol_request_t xcb_req = {
1657         .count = 2,
1658         .ext = &xcb_input_id,
1659         .opcode = XCB_INPUT_GET_DEVICE_DONT_PROPAGATE_LIST,
1660         .isvoid = 0
1661     };
1662 
1663     struct iovec xcb_parts[4];
1664     xcb_input_get_device_dont_propagate_list_cookie_t xcb_ret;
1665     xcb_input_get_device_dont_propagate_list_request_t xcb_out;
1666 
1667     xcb_out.window = window;
1668 
1669     xcb_parts[2].iov_base = (char *) &xcb_out;
1670     xcb_parts[2].iov_len = sizeof(xcb_out);
1671     xcb_parts[3].iov_base = 0;
1672     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1673 
1674     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1675     return xcb_ret;
1676 }
1677 
1678 xcb_input_get_device_dont_propagate_list_cookie_t
1679 xcb_input_get_device_dont_propagate_list_unchecked (xcb_connection_t *c,
1680                                                     xcb_window_t      window)
1681 {
1682     static const xcb_protocol_request_t xcb_req = {
1683         .count = 2,
1684         .ext = &xcb_input_id,
1685         .opcode = XCB_INPUT_GET_DEVICE_DONT_PROPAGATE_LIST,
1686         .isvoid = 0
1687     };
1688 
1689     struct iovec xcb_parts[4];
1690     xcb_input_get_device_dont_propagate_list_cookie_t xcb_ret;
1691     xcb_input_get_device_dont_propagate_list_request_t xcb_out;
1692 
1693     xcb_out.window = window;
1694 
1695     xcb_parts[2].iov_base = (char *) &xcb_out;
1696     xcb_parts[2].iov_len = sizeof(xcb_out);
1697     xcb_parts[3].iov_base = 0;
1698     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1699 
1700     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1701     return xcb_ret;
1702 }
1703 
1704 xcb_input_event_class_t *
1705 xcb_input_get_device_dont_propagate_list_classes (const xcb_input_get_device_dont_propagate_list_reply_t *R)
1706 {
1707     return (xcb_input_event_class_t *) (R + 1);
1708 }
1709 
1710 int
1711 xcb_input_get_device_dont_propagate_list_classes_length (const xcb_input_get_device_dont_propagate_list_reply_t *R)
1712 {
1713     return R->num_classes;
1714 }
1715 
1716 xcb_generic_iterator_t
1717 xcb_input_get_device_dont_propagate_list_classes_end (const xcb_input_get_device_dont_propagate_list_reply_t *R)
1718 {
1719     xcb_generic_iterator_t i;
1720     i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
1721     i.rem = 0;
1722     i.index = (char *) i.data - (char *) R;
1723     return i;
1724 }
1725 
1726 xcb_input_get_device_dont_propagate_list_reply_t *
1727 xcb_input_get_device_dont_propagate_list_reply (xcb_connection_t                                   *c,
1728                                                 xcb_input_get_device_dont_propagate_list_cookie_t   cookie  /**< */,
1729                                                 xcb_generic_error_t                               **e)
1730 {
1731     return (xcb_input_get_device_dont_propagate_list_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1732 }
1733 
1734 int
1735 xcb_input_device_time_coord_sizeof (const void  *_buffer,
1736                                     uint8_t      num_axes)
1737 {
1738     char *xcb_tmp = (char *)_buffer;
1739     unsigned int xcb_buffer_len = 0;
1740     unsigned int xcb_block_len = 0;
1741     unsigned int xcb_pad = 0;
1742     unsigned int xcb_align_to = 0;
1743 
1744 
1745     xcb_block_len += sizeof(xcb_input_device_time_coord_t);
1746     xcb_tmp += xcb_block_len;
1747     xcb_buffer_len += xcb_block_len;
1748     xcb_block_len = 0;
1749     /* axisvalues */
1750     xcb_block_len += num_axes * sizeof(int32_t);
1751     xcb_tmp += xcb_block_len;
1752     xcb_align_to = ALIGNOF(int32_t);
1753     /* insert padding */
1754     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1755     xcb_buffer_len += xcb_block_len + xcb_pad;
1756     if (0 != xcb_pad) {
1757         xcb_tmp += xcb_pad;
1758         xcb_pad = 0;
1759     }
1760     xcb_block_len = 0;
1761 
1762     return xcb_buffer_len;
1763 }
1764 
1765 int32_t *
1766 xcb_input_device_time_coord_axisvalues (const xcb_input_device_time_coord_t *R)
1767 {
1768     return (int32_t *) (R + 1);
1769 }
1770 
1771 int
1772 xcb_input_device_time_coord_axisvalues_length (const xcb_input_device_time_coord_t *R,
1773                                                uint8_t num_axes)
1774 {
1775     return num_axes;
1776 }
1777 
1778 xcb_generic_iterator_t
1779 xcb_input_device_time_coord_axisvalues_end (const xcb_input_device_time_coord_t *R,
1780                                             uint8_t num_axes)
1781 {
1782     xcb_generic_iterator_t i;
1783     i.data = ((int32_t *) (R + 1)) + (num_axes);
1784     i.rem = 0;
1785     i.index = (char *) i.data - (char *) R;
1786     return i;
1787 }
1788 
1789 void
1790 xcb_input_device_time_coord_next (xcb_input_device_time_coord_iterator_t *i)
1791 {
1792     xcb_input_device_time_coord_t *R = i->data;
1793     xcb_generic_iterator_t child;
1794     child.data = (xcb_input_device_time_coord_t *)(((char *)R) + xcb_input_device_time_coord_sizeof(R, i->num_axes));
1795     i->index = (char *) child.data - (char *) i->data;
1796     --i->rem;
1797     i->data = (xcb_input_device_time_coord_t *) child.data;
1798 }
1799 
1800 xcb_generic_iterator_t
1801 xcb_input_device_time_coord_end (xcb_input_device_time_coord_iterator_t i)
1802 {
1803     xcb_generic_iterator_t ret;
1804     while(i.rem > 0)
1805         xcb_input_device_time_coord_next(&i);
1806     ret.data = i.data;
1807     ret.rem = i.rem;
1808     ret.index = i.index;
1809     return ret;
1810 }
1811 
1812 int
1813 xcb_input_get_device_motion_events_sizeof (const void  *_buffer)
1814 {
1815     char *xcb_tmp = (char *)_buffer;
1816     const xcb_input_get_device_motion_events_reply_t *_aux = (xcb_input_get_device_motion_events_reply_t *)_buffer;
1817     unsigned int xcb_buffer_len = 0;
1818     unsigned int xcb_block_len = 0;
1819     unsigned int xcb_pad = 0;
1820     unsigned int xcb_align_to = 0;
1821 
1822     unsigned int i;
1823     unsigned int xcb_tmp_len;
1824 
1825     xcb_block_len += sizeof(xcb_input_get_device_motion_events_reply_t);
1826     xcb_tmp += xcb_block_len;
1827     xcb_buffer_len += xcb_block_len;
1828     xcb_block_len = 0;
1829     /* events */
1830     for(i=0; i<_aux->num_events; i++) {
1831         xcb_tmp_len = xcb_input_device_time_coord_sizeof(xcb_tmp, _aux->num_axes);
1832         xcb_block_len += xcb_tmp_len;
1833         xcb_tmp += xcb_tmp_len;
1834     }
1835     xcb_align_to = ALIGNOF(xcb_input_device_time_coord_t);
1836     /* insert padding */
1837     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
1838     xcb_buffer_len += xcb_block_len + xcb_pad;
1839     if (0 != xcb_pad) {
1840         xcb_tmp += xcb_pad;
1841         xcb_pad = 0;
1842     }
1843     xcb_block_len = 0;
1844 
1845     return xcb_buffer_len;
1846 }
1847 
1848 xcb_input_get_device_motion_events_cookie_t
1849 xcb_input_get_device_motion_events (xcb_connection_t *c,
1850                                     xcb_timestamp_t   start,
1851                                     xcb_timestamp_t   stop,
1852                                     uint8_t           device_id)
1853 {
1854     static const xcb_protocol_request_t xcb_req = {
1855         .count = 2,
1856         .ext = &xcb_input_id,
1857         .opcode = XCB_INPUT_GET_DEVICE_MOTION_EVENTS,
1858         .isvoid = 0
1859     };
1860 
1861     struct iovec xcb_parts[4];
1862     xcb_input_get_device_motion_events_cookie_t xcb_ret;
1863     xcb_input_get_device_motion_events_request_t xcb_out;
1864 
1865     xcb_out.start = start;
1866     xcb_out.stop = stop;
1867     xcb_out.device_id = device_id;
1868     memset(xcb_out.pad0, 0, 3);
1869 
1870     xcb_parts[2].iov_base = (char *) &xcb_out;
1871     xcb_parts[2].iov_len = sizeof(xcb_out);
1872     xcb_parts[3].iov_base = 0;
1873     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1874 
1875     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1876     return xcb_ret;
1877 }
1878 
1879 xcb_input_get_device_motion_events_cookie_t
1880 xcb_input_get_device_motion_events_unchecked (xcb_connection_t *c,
1881                                               xcb_timestamp_t   start,
1882                                               xcb_timestamp_t   stop,
1883                                               uint8_t           device_id)
1884 {
1885     static const xcb_protocol_request_t xcb_req = {
1886         .count = 2,
1887         .ext = &xcb_input_id,
1888         .opcode = XCB_INPUT_GET_DEVICE_MOTION_EVENTS,
1889         .isvoid = 0
1890     };
1891 
1892     struct iovec xcb_parts[4];
1893     xcb_input_get_device_motion_events_cookie_t xcb_ret;
1894     xcb_input_get_device_motion_events_request_t xcb_out;
1895 
1896     xcb_out.start = start;
1897     xcb_out.stop = stop;
1898     xcb_out.device_id = device_id;
1899     memset(xcb_out.pad0, 0, 3);
1900 
1901     xcb_parts[2].iov_base = (char *) &xcb_out;
1902     xcb_parts[2].iov_len = sizeof(xcb_out);
1903     xcb_parts[3].iov_base = 0;
1904     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1905 
1906     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1907     return xcb_ret;
1908 }
1909 
1910 int
1911 xcb_input_get_device_motion_events_events_length (const xcb_input_get_device_motion_events_reply_t *R)
1912 {
1913     return R->num_events;
1914 }
1915 
1916 xcb_input_device_time_coord_iterator_t
1917 xcb_input_get_device_motion_events_events_iterator (const xcb_input_get_device_motion_events_reply_t *R)
1918 {
1919     xcb_input_device_time_coord_iterator_t i;
1920     i.data = (xcb_input_device_time_coord_t *) (R + 1);
1921     i.rem = R->num_events;
1922     i.index = (char *) i.data - (char *) R;
1923     i.num_axes = R->num_axes;
1924     return i;
1925 }
1926 
1927 xcb_input_get_device_motion_events_reply_t *
1928 xcb_input_get_device_motion_events_reply (xcb_connection_t                             *c,
1929                                           xcb_input_get_device_motion_events_cookie_t   cookie  /**< */,
1930                                           xcb_generic_error_t                         **e)
1931 {
1932     return (xcb_input_get_device_motion_events_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1933 }
1934 
1935 xcb_input_change_keyboard_device_cookie_t
1936 xcb_input_change_keyboard_device (xcb_connection_t *c,
1937                                   uint8_t           device_id)
1938 {
1939     static const xcb_protocol_request_t xcb_req = {
1940         .count = 2,
1941         .ext = &xcb_input_id,
1942         .opcode = XCB_INPUT_CHANGE_KEYBOARD_DEVICE,
1943         .isvoid = 0
1944     };
1945 
1946     struct iovec xcb_parts[4];
1947     xcb_input_change_keyboard_device_cookie_t xcb_ret;
1948     xcb_input_change_keyboard_device_request_t xcb_out;
1949 
1950     xcb_out.device_id = device_id;
1951     memset(xcb_out.pad0, 0, 3);
1952 
1953     xcb_parts[2].iov_base = (char *) &xcb_out;
1954     xcb_parts[2].iov_len = sizeof(xcb_out);
1955     xcb_parts[3].iov_base = 0;
1956     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1957 
1958     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
1959     return xcb_ret;
1960 }
1961 
1962 xcb_input_change_keyboard_device_cookie_t
1963 xcb_input_change_keyboard_device_unchecked (xcb_connection_t *c,
1964                                             uint8_t           device_id)
1965 {
1966     static const xcb_protocol_request_t xcb_req = {
1967         .count = 2,
1968         .ext = &xcb_input_id,
1969         .opcode = XCB_INPUT_CHANGE_KEYBOARD_DEVICE,
1970         .isvoid = 0
1971     };
1972 
1973     struct iovec xcb_parts[4];
1974     xcb_input_change_keyboard_device_cookie_t xcb_ret;
1975     xcb_input_change_keyboard_device_request_t xcb_out;
1976 
1977     xcb_out.device_id = device_id;
1978     memset(xcb_out.pad0, 0, 3);
1979 
1980     xcb_parts[2].iov_base = (char *) &xcb_out;
1981     xcb_parts[2].iov_len = sizeof(xcb_out);
1982     xcb_parts[3].iov_base = 0;
1983     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
1984 
1985     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
1986     return xcb_ret;
1987 }
1988 
1989 xcb_input_change_keyboard_device_reply_t *
1990 xcb_input_change_keyboard_device_reply (xcb_connection_t                           *c,
1991                                         xcb_input_change_keyboard_device_cookie_t   cookie  /**< */,
1992                                         xcb_generic_error_t                       **e)
1993 {
1994     return (xcb_input_change_keyboard_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
1995 }
1996 
1997 xcb_input_change_pointer_device_cookie_t
1998 xcb_input_change_pointer_device (xcb_connection_t *c,
1999                                  uint8_t           x_axis,
2000                                  uint8_t           y_axis,
2001                                  uint8_t           device_id)
2002 {
2003     static const xcb_protocol_request_t xcb_req = {
2004         .count = 2,
2005         .ext = &xcb_input_id,
2006         .opcode = XCB_INPUT_CHANGE_POINTER_DEVICE,
2007         .isvoid = 0
2008     };
2009 
2010     struct iovec xcb_parts[4];
2011     xcb_input_change_pointer_device_cookie_t xcb_ret;
2012     xcb_input_change_pointer_device_request_t xcb_out;
2013 
2014     xcb_out.x_axis = x_axis;
2015     xcb_out.y_axis = y_axis;
2016     xcb_out.device_id = device_id;
2017     xcb_out.pad0 = 0;
2018 
2019     xcb_parts[2].iov_base = (char *) &xcb_out;
2020     xcb_parts[2].iov_len = sizeof(xcb_out);
2021     xcb_parts[3].iov_base = 0;
2022     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2023 
2024     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2025     return xcb_ret;
2026 }
2027 
2028 xcb_input_change_pointer_device_cookie_t
2029 xcb_input_change_pointer_device_unchecked (xcb_connection_t *c,
2030                                            uint8_t           x_axis,
2031                                            uint8_t           y_axis,
2032                                            uint8_t           device_id)
2033 {
2034     static const xcb_protocol_request_t xcb_req = {
2035         .count = 2,
2036         .ext = &xcb_input_id,
2037         .opcode = XCB_INPUT_CHANGE_POINTER_DEVICE,
2038         .isvoid = 0
2039     };
2040 
2041     struct iovec xcb_parts[4];
2042     xcb_input_change_pointer_device_cookie_t xcb_ret;
2043     xcb_input_change_pointer_device_request_t xcb_out;
2044 
2045     xcb_out.x_axis = x_axis;
2046     xcb_out.y_axis = y_axis;
2047     xcb_out.device_id = device_id;
2048     xcb_out.pad0 = 0;
2049 
2050     xcb_parts[2].iov_base = (char *) &xcb_out;
2051     xcb_parts[2].iov_len = sizeof(xcb_out);
2052     xcb_parts[3].iov_base = 0;
2053     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2054 
2055     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2056     return xcb_ret;
2057 }
2058 
2059 xcb_input_change_pointer_device_reply_t *
2060 xcb_input_change_pointer_device_reply (xcb_connection_t                          *c,
2061                                        xcb_input_change_pointer_device_cookie_t   cookie  /**< */,
2062                                        xcb_generic_error_t                      **e)
2063 {
2064     return (xcb_input_change_pointer_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
2065 }
2066 
2067 int
2068 xcb_input_grab_device_sizeof (const void  *_buffer)
2069 {
2070     char *xcb_tmp = (char *)_buffer;
2071     const xcb_input_grab_device_request_t *_aux = (xcb_input_grab_device_request_t *)_buffer;
2072     unsigned int xcb_buffer_len = 0;
2073     unsigned int xcb_block_len = 0;
2074     unsigned int xcb_pad = 0;
2075     unsigned int xcb_align_to = 0;
2076 
2077 
2078     xcb_block_len += sizeof(xcb_input_grab_device_request_t);
2079     xcb_tmp += xcb_block_len;
2080     xcb_buffer_len += xcb_block_len;
2081     xcb_block_len = 0;
2082     /* classes */
2083     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
2084     xcb_tmp += xcb_block_len;
2085     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
2086     /* insert padding */
2087     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
2088     xcb_buffer_len += xcb_block_len + xcb_pad;
2089     if (0 != xcb_pad) {
2090         xcb_tmp += xcb_pad;
2091         xcb_pad = 0;
2092     }
2093     xcb_block_len = 0;
2094 
2095     return xcb_buffer_len;
2096 }
2097 
2098 xcb_input_grab_device_cookie_t
2099 xcb_input_grab_device (xcb_connection_t              *c,
2100                        xcb_window_t                   grab_window,
2101                        xcb_timestamp_t                time,
2102                        uint16_t                       num_classes,
2103                        uint8_t                        this_device_mode,
2104                        uint8_t                        other_device_mode,
2105                        uint8_t                        owner_events,
2106                        uint8_t                        device_id,
2107                        const xcb_input_event_class_t *classes)
2108 {
2109     static const xcb_protocol_request_t xcb_req = {
2110         .count = 4,
2111         .ext = &xcb_input_id,
2112         .opcode = XCB_INPUT_GRAB_DEVICE,
2113         .isvoid = 0
2114     };
2115 
2116     struct iovec xcb_parts[6];
2117     xcb_input_grab_device_cookie_t xcb_ret;
2118     xcb_input_grab_device_request_t xcb_out;
2119 
2120     xcb_out.grab_window = grab_window;
2121     xcb_out.time = time;
2122     xcb_out.num_classes = num_classes;
2123     xcb_out.this_device_mode = this_device_mode;
2124     xcb_out.other_device_mode = other_device_mode;
2125     xcb_out.owner_events = owner_events;
2126     xcb_out.device_id = device_id;
2127     memset(xcb_out.pad0, 0, 2);
2128 
2129     xcb_parts[2].iov_base = (char *) &xcb_out;
2130     xcb_parts[2].iov_len = sizeof(xcb_out);
2131     xcb_parts[3].iov_base = 0;
2132     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2133     /* xcb_input_event_class_t classes */
2134     xcb_parts[4].iov_base = (char *) classes;
2135     xcb_parts[4].iov_len = num_classes * sizeof(uint32_t);
2136     xcb_parts[5].iov_base = 0;
2137     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
2138 
2139     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2140     return xcb_ret;
2141 }
2142 
2143 xcb_input_grab_device_cookie_t
2144 xcb_input_grab_device_unchecked (xcb_connection_t              *c,
2145                                  xcb_window_t                   grab_window,
2146                                  xcb_timestamp_t                time,
2147                                  uint16_t                       num_classes,
2148                                  uint8_t                        this_device_mode,
2149                                  uint8_t                        other_device_mode,
2150                                  uint8_t                        owner_events,
2151                                  uint8_t                        device_id,
2152                                  const xcb_input_event_class_t *classes)
2153 {
2154     static const xcb_protocol_request_t xcb_req = {
2155         .count = 4,
2156         .ext = &xcb_input_id,
2157         .opcode = XCB_INPUT_GRAB_DEVICE,
2158         .isvoid = 0
2159     };
2160 
2161     struct iovec xcb_parts[6];
2162     xcb_input_grab_device_cookie_t xcb_ret;
2163     xcb_input_grab_device_request_t xcb_out;
2164 
2165     xcb_out.grab_window = grab_window;
2166     xcb_out.time = time;
2167     xcb_out.num_classes = num_classes;
2168     xcb_out.this_device_mode = this_device_mode;
2169     xcb_out.other_device_mode = other_device_mode;
2170     xcb_out.owner_events = owner_events;
2171     xcb_out.device_id = device_id;
2172     memset(xcb_out.pad0, 0, 2);
2173 
2174     xcb_parts[2].iov_base = (char *) &xcb_out;
2175     xcb_parts[2].iov_len = sizeof(xcb_out);
2176     xcb_parts[3].iov_base = 0;
2177     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2178     /* xcb_input_event_class_t classes */
2179     xcb_parts[4].iov_base = (char *) classes;
2180     xcb_parts[4].iov_len = num_classes * sizeof(uint32_t);
2181     xcb_parts[5].iov_base = 0;
2182     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
2183 
2184     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2185     return xcb_ret;
2186 }
2187 
2188 xcb_input_grab_device_reply_t *
2189 xcb_input_grab_device_reply (xcb_connection_t                *c,
2190                              xcb_input_grab_device_cookie_t   cookie  /**< */,
2191                              xcb_generic_error_t            **e)
2192 {
2193     return (xcb_input_grab_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
2194 }
2195 
2196 xcb_void_cookie_t
2197 xcb_input_ungrab_device_checked (xcb_connection_t *c,
2198                                  xcb_timestamp_t   time,
2199                                  uint8_t           device_id)
2200 {
2201     static const xcb_protocol_request_t xcb_req = {
2202         .count = 2,
2203         .ext = &xcb_input_id,
2204         .opcode = XCB_INPUT_UNGRAB_DEVICE,
2205         .isvoid = 1
2206     };
2207 
2208     struct iovec xcb_parts[4];
2209     xcb_void_cookie_t xcb_ret;
2210     xcb_input_ungrab_device_request_t xcb_out;
2211 
2212     xcb_out.time = time;
2213     xcb_out.device_id = device_id;
2214     memset(xcb_out.pad0, 0, 3);
2215 
2216     xcb_parts[2].iov_base = (char *) &xcb_out;
2217     xcb_parts[2].iov_len = sizeof(xcb_out);
2218     xcb_parts[3].iov_base = 0;
2219     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2220 
2221     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2222     return xcb_ret;
2223 }
2224 
2225 xcb_void_cookie_t
2226 xcb_input_ungrab_device (xcb_connection_t *c,
2227                          xcb_timestamp_t   time,
2228                          uint8_t           device_id)
2229 {
2230     static const xcb_protocol_request_t xcb_req = {
2231         .count = 2,
2232         .ext = &xcb_input_id,
2233         .opcode = XCB_INPUT_UNGRAB_DEVICE,
2234         .isvoid = 1
2235     };
2236 
2237     struct iovec xcb_parts[4];
2238     xcb_void_cookie_t xcb_ret;
2239     xcb_input_ungrab_device_request_t xcb_out;
2240 
2241     xcb_out.time = time;
2242     xcb_out.device_id = device_id;
2243     memset(xcb_out.pad0, 0, 3);
2244 
2245     xcb_parts[2].iov_base = (char *) &xcb_out;
2246     xcb_parts[2].iov_len = sizeof(xcb_out);
2247     xcb_parts[3].iov_base = 0;
2248     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2249 
2250     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2251     return xcb_ret;
2252 }
2253 
2254 int
2255 xcb_input_grab_device_key_sizeof (const void  *_buffer)
2256 {
2257     char *xcb_tmp = (char *)_buffer;
2258     const xcb_input_grab_device_key_request_t *_aux = (xcb_input_grab_device_key_request_t *)_buffer;
2259     unsigned int xcb_buffer_len = 0;
2260     unsigned int xcb_block_len = 0;
2261     unsigned int xcb_pad = 0;
2262     unsigned int xcb_align_to = 0;
2263 
2264 
2265     xcb_block_len += sizeof(xcb_input_grab_device_key_request_t);
2266     xcb_tmp += xcb_block_len;
2267     xcb_buffer_len += xcb_block_len;
2268     xcb_block_len = 0;
2269     /* classes */
2270     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
2271     xcb_tmp += xcb_block_len;
2272     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
2273     /* insert padding */
2274     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
2275     xcb_buffer_len += xcb_block_len + xcb_pad;
2276     if (0 != xcb_pad) {
2277         xcb_tmp += xcb_pad;
2278         xcb_pad = 0;
2279     }
2280     xcb_block_len = 0;
2281 
2282     return xcb_buffer_len;
2283 }
2284 
2285 xcb_void_cookie_t
2286 xcb_input_grab_device_key_checked (xcb_connection_t              *c,
2287                                    xcb_window_t                   grab_window,
2288                                    uint16_t                       num_classes,
2289                                    uint16_t                       modifiers,
2290                                    uint8_t                        modifier_device,
2291                                    uint8_t                        grabbed_device,
2292                                    uint8_t                        key,
2293                                    uint8_t                        this_device_mode,
2294                                    uint8_t                        other_device_mode,
2295                                    uint8_t                        owner_events,
2296                                    const xcb_input_event_class_t *classes)
2297 {
2298     static const xcb_protocol_request_t xcb_req = {
2299         .count = 4,
2300         .ext = &xcb_input_id,
2301         .opcode = XCB_INPUT_GRAB_DEVICE_KEY,
2302         .isvoid = 1
2303     };
2304 
2305     struct iovec xcb_parts[6];
2306     xcb_void_cookie_t xcb_ret;
2307     xcb_input_grab_device_key_request_t xcb_out;
2308 
2309     xcb_out.grab_window = grab_window;
2310     xcb_out.num_classes = num_classes;
2311     xcb_out.modifiers = modifiers;
2312     xcb_out.modifier_device = modifier_device;
2313     xcb_out.grabbed_device = grabbed_device;
2314     xcb_out.key = key;
2315     xcb_out.this_device_mode = this_device_mode;
2316     xcb_out.other_device_mode = other_device_mode;
2317     xcb_out.owner_events = owner_events;
2318     memset(xcb_out.pad0, 0, 2);
2319 
2320     xcb_parts[2].iov_base = (char *) &xcb_out;
2321     xcb_parts[2].iov_len = sizeof(xcb_out);
2322     xcb_parts[3].iov_base = 0;
2323     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2324     /* xcb_input_event_class_t classes */
2325     xcb_parts[4].iov_base = (char *) classes;
2326     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
2327     xcb_parts[5].iov_base = 0;
2328     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
2329 
2330     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2331     return xcb_ret;
2332 }
2333 
2334 xcb_void_cookie_t
2335 xcb_input_grab_device_key (xcb_connection_t              *c,
2336                            xcb_window_t                   grab_window,
2337                            uint16_t                       num_classes,
2338                            uint16_t                       modifiers,
2339                            uint8_t                        modifier_device,
2340                            uint8_t                        grabbed_device,
2341                            uint8_t                        key,
2342                            uint8_t                        this_device_mode,
2343                            uint8_t                        other_device_mode,
2344                            uint8_t                        owner_events,
2345                            const xcb_input_event_class_t *classes)
2346 {
2347     static const xcb_protocol_request_t xcb_req = {
2348         .count = 4,
2349         .ext = &xcb_input_id,
2350         .opcode = XCB_INPUT_GRAB_DEVICE_KEY,
2351         .isvoid = 1
2352     };
2353 
2354     struct iovec xcb_parts[6];
2355     xcb_void_cookie_t xcb_ret;
2356     xcb_input_grab_device_key_request_t xcb_out;
2357 
2358     xcb_out.grab_window = grab_window;
2359     xcb_out.num_classes = num_classes;
2360     xcb_out.modifiers = modifiers;
2361     xcb_out.modifier_device = modifier_device;
2362     xcb_out.grabbed_device = grabbed_device;
2363     xcb_out.key = key;
2364     xcb_out.this_device_mode = this_device_mode;
2365     xcb_out.other_device_mode = other_device_mode;
2366     xcb_out.owner_events = owner_events;
2367     memset(xcb_out.pad0, 0, 2);
2368 
2369     xcb_parts[2].iov_base = (char *) &xcb_out;
2370     xcb_parts[2].iov_len = sizeof(xcb_out);
2371     xcb_parts[3].iov_base = 0;
2372     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2373     /* xcb_input_event_class_t classes */
2374     xcb_parts[4].iov_base = (char *) classes;
2375     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
2376     xcb_parts[5].iov_base = 0;
2377     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
2378 
2379     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2380     return xcb_ret;
2381 }
2382 
2383 xcb_input_event_class_t *
2384 xcb_input_grab_device_key_classes (const xcb_input_grab_device_key_request_t *R)
2385 {
2386     return (xcb_input_event_class_t *) (R + 1);
2387 }
2388 
2389 int
2390 xcb_input_grab_device_key_classes_length (const xcb_input_grab_device_key_request_t *R)
2391 {
2392     return R->num_classes;
2393 }
2394 
2395 xcb_generic_iterator_t
2396 xcb_input_grab_device_key_classes_end (const xcb_input_grab_device_key_request_t *R)
2397 {
2398     xcb_generic_iterator_t i;
2399     i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
2400     i.rem = 0;
2401     i.index = (char *) i.data - (char *) R;
2402     return i;
2403 }
2404 
2405 xcb_void_cookie_t
2406 xcb_input_ungrab_device_key_checked (xcb_connection_t *c,
2407                                      xcb_window_t      grabWindow,
2408                                      uint16_t          modifiers,
2409                                      uint8_t           modifier_device,
2410                                      uint8_t           key,
2411                                      uint8_t           grabbed_device)
2412 {
2413     static const xcb_protocol_request_t xcb_req = {
2414         .count = 2,
2415         .ext = &xcb_input_id,
2416         .opcode = XCB_INPUT_UNGRAB_DEVICE_KEY,
2417         .isvoid = 1
2418     };
2419 
2420     struct iovec xcb_parts[4];
2421     xcb_void_cookie_t xcb_ret;
2422     xcb_input_ungrab_device_key_request_t xcb_out;
2423 
2424     xcb_out.grabWindow = grabWindow;
2425     xcb_out.modifiers = modifiers;
2426     xcb_out.modifier_device = modifier_device;
2427     xcb_out.key = key;
2428     xcb_out.grabbed_device = grabbed_device;
2429 
2430     xcb_parts[2].iov_base = (char *) &xcb_out;
2431     xcb_parts[2].iov_len = sizeof(xcb_out);
2432     xcb_parts[3].iov_base = 0;
2433     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2434 
2435     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2436     return xcb_ret;
2437 }
2438 
2439 xcb_void_cookie_t
2440 xcb_input_ungrab_device_key (xcb_connection_t *c,
2441                              xcb_window_t      grabWindow,
2442                              uint16_t          modifiers,
2443                              uint8_t           modifier_device,
2444                              uint8_t           key,
2445                              uint8_t           grabbed_device)
2446 {
2447     static const xcb_protocol_request_t xcb_req = {
2448         .count = 2,
2449         .ext = &xcb_input_id,
2450         .opcode = XCB_INPUT_UNGRAB_DEVICE_KEY,
2451         .isvoid = 1
2452     };
2453 
2454     struct iovec xcb_parts[4];
2455     xcb_void_cookie_t xcb_ret;
2456     xcb_input_ungrab_device_key_request_t xcb_out;
2457 
2458     xcb_out.grabWindow = grabWindow;
2459     xcb_out.modifiers = modifiers;
2460     xcb_out.modifier_device = modifier_device;
2461     xcb_out.key = key;
2462     xcb_out.grabbed_device = grabbed_device;
2463 
2464     xcb_parts[2].iov_base = (char *) &xcb_out;
2465     xcb_parts[2].iov_len = sizeof(xcb_out);
2466     xcb_parts[3].iov_base = 0;
2467     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2468 
2469     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2470     return xcb_ret;
2471 }
2472 
2473 int
2474 xcb_input_grab_device_button_sizeof (const void  *_buffer)
2475 {
2476     char *xcb_tmp = (char *)_buffer;
2477     const xcb_input_grab_device_button_request_t *_aux = (xcb_input_grab_device_button_request_t *)_buffer;
2478     unsigned int xcb_buffer_len = 0;
2479     unsigned int xcb_block_len = 0;
2480     unsigned int xcb_pad = 0;
2481     unsigned int xcb_align_to = 0;
2482 
2483 
2484     xcb_block_len += sizeof(xcb_input_grab_device_button_request_t);
2485     xcb_tmp += xcb_block_len;
2486     xcb_buffer_len += xcb_block_len;
2487     xcb_block_len = 0;
2488     /* classes */
2489     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
2490     xcb_tmp += xcb_block_len;
2491     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
2492     /* insert padding */
2493     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
2494     xcb_buffer_len += xcb_block_len + xcb_pad;
2495     if (0 != xcb_pad) {
2496         xcb_tmp += xcb_pad;
2497         xcb_pad = 0;
2498     }
2499     xcb_block_len = 0;
2500 
2501     return xcb_buffer_len;
2502 }
2503 
2504 xcb_void_cookie_t
2505 xcb_input_grab_device_button_checked (xcb_connection_t              *c,
2506                                       xcb_window_t                   grab_window,
2507                                       uint8_t                        grabbed_device,
2508                                       uint8_t                        modifier_device,
2509                                       uint16_t                       num_classes,
2510                                       uint16_t                       modifiers,
2511                                       uint8_t                        this_device_mode,
2512                                       uint8_t                        other_device_mode,
2513                                       uint8_t                        button,
2514                                       uint8_t                        owner_events,
2515                                       const xcb_input_event_class_t *classes)
2516 {
2517     static const xcb_protocol_request_t xcb_req = {
2518         .count = 4,
2519         .ext = &xcb_input_id,
2520         .opcode = XCB_INPUT_GRAB_DEVICE_BUTTON,
2521         .isvoid = 1
2522     };
2523 
2524     struct iovec xcb_parts[6];
2525     xcb_void_cookie_t xcb_ret;
2526     xcb_input_grab_device_button_request_t xcb_out;
2527 
2528     xcb_out.grab_window = grab_window;
2529     xcb_out.grabbed_device = grabbed_device;
2530     xcb_out.modifier_device = modifier_device;
2531     xcb_out.num_classes = num_classes;
2532     xcb_out.modifiers = modifiers;
2533     xcb_out.this_device_mode = this_device_mode;
2534     xcb_out.other_device_mode = other_device_mode;
2535     xcb_out.button = button;
2536     xcb_out.owner_events = owner_events;
2537     memset(xcb_out.pad0, 0, 2);
2538 
2539     xcb_parts[2].iov_base = (char *) &xcb_out;
2540     xcb_parts[2].iov_len = sizeof(xcb_out);
2541     xcb_parts[3].iov_base = 0;
2542     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2543     /* xcb_input_event_class_t classes */
2544     xcb_parts[4].iov_base = (char *) classes;
2545     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
2546     xcb_parts[5].iov_base = 0;
2547     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
2548 
2549     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2550     return xcb_ret;
2551 }
2552 
2553 xcb_void_cookie_t
2554 xcb_input_grab_device_button (xcb_connection_t              *c,
2555                               xcb_window_t                   grab_window,
2556                               uint8_t                        grabbed_device,
2557                               uint8_t                        modifier_device,
2558                               uint16_t                       num_classes,
2559                               uint16_t                       modifiers,
2560                               uint8_t                        this_device_mode,
2561                               uint8_t                        other_device_mode,
2562                               uint8_t                        button,
2563                               uint8_t                        owner_events,
2564                               const xcb_input_event_class_t *classes)
2565 {
2566     static const xcb_protocol_request_t xcb_req = {
2567         .count = 4,
2568         .ext = &xcb_input_id,
2569         .opcode = XCB_INPUT_GRAB_DEVICE_BUTTON,
2570         .isvoid = 1
2571     };
2572 
2573     struct iovec xcb_parts[6];
2574     xcb_void_cookie_t xcb_ret;
2575     xcb_input_grab_device_button_request_t xcb_out;
2576 
2577     xcb_out.grab_window = grab_window;
2578     xcb_out.grabbed_device = grabbed_device;
2579     xcb_out.modifier_device = modifier_device;
2580     xcb_out.num_classes = num_classes;
2581     xcb_out.modifiers = modifiers;
2582     xcb_out.this_device_mode = this_device_mode;
2583     xcb_out.other_device_mode = other_device_mode;
2584     xcb_out.button = button;
2585     xcb_out.owner_events = owner_events;
2586     memset(xcb_out.pad0, 0, 2);
2587 
2588     xcb_parts[2].iov_base = (char *) &xcb_out;
2589     xcb_parts[2].iov_len = sizeof(xcb_out);
2590     xcb_parts[3].iov_base = 0;
2591     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2592     /* xcb_input_event_class_t classes */
2593     xcb_parts[4].iov_base = (char *) classes;
2594     xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
2595     xcb_parts[5].iov_base = 0;
2596     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
2597 
2598     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2599     return xcb_ret;
2600 }
2601 
2602 xcb_input_event_class_t *
2603 xcb_input_grab_device_button_classes (const xcb_input_grab_device_button_request_t *R)
2604 {
2605     return (xcb_input_event_class_t *) (R + 1);
2606 }
2607 
2608 int
2609 xcb_input_grab_device_button_classes_length (const xcb_input_grab_device_button_request_t *R)
2610 {
2611     return R->num_classes;
2612 }
2613 
2614 xcb_generic_iterator_t
2615 xcb_input_grab_device_button_classes_end (const xcb_input_grab_device_button_request_t *R)
2616 {
2617     xcb_generic_iterator_t i;
2618     i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
2619     i.rem = 0;
2620     i.index = (char *) i.data - (char *) R;
2621     return i;
2622 }
2623 
2624 xcb_void_cookie_t
2625 xcb_input_ungrab_device_button_checked (xcb_connection_t *c,
2626                                         xcb_window_t      grab_window,
2627                                         uint16_t          modifiers,
2628                                         uint8_t           modifier_device,
2629                                         uint8_t           button,
2630                                         uint8_t           grabbed_device)
2631 {
2632     static const xcb_protocol_request_t xcb_req = {
2633         .count = 2,
2634         .ext = &xcb_input_id,
2635         .opcode = XCB_INPUT_UNGRAB_DEVICE_BUTTON,
2636         .isvoid = 1
2637     };
2638 
2639     struct iovec xcb_parts[4];
2640     xcb_void_cookie_t xcb_ret;
2641     xcb_input_ungrab_device_button_request_t xcb_out;
2642 
2643     xcb_out.grab_window = grab_window;
2644     xcb_out.modifiers = modifiers;
2645     xcb_out.modifier_device = modifier_device;
2646     xcb_out.button = button;
2647     xcb_out.grabbed_device = grabbed_device;
2648     memset(xcb_out.pad0, 0, 3);
2649 
2650     xcb_parts[2].iov_base = (char *) &xcb_out;
2651     xcb_parts[2].iov_len = sizeof(xcb_out);
2652     xcb_parts[3].iov_base = 0;
2653     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2654 
2655     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2656     return xcb_ret;
2657 }
2658 
2659 xcb_void_cookie_t
2660 xcb_input_ungrab_device_button (xcb_connection_t *c,
2661                                 xcb_window_t      grab_window,
2662                                 uint16_t          modifiers,
2663                                 uint8_t           modifier_device,
2664                                 uint8_t           button,
2665                                 uint8_t           grabbed_device)
2666 {
2667     static const xcb_protocol_request_t xcb_req = {
2668         .count = 2,
2669         .ext = &xcb_input_id,
2670         .opcode = XCB_INPUT_UNGRAB_DEVICE_BUTTON,
2671         .isvoid = 1
2672     };
2673 
2674     struct iovec xcb_parts[4];
2675     xcb_void_cookie_t xcb_ret;
2676     xcb_input_ungrab_device_button_request_t xcb_out;
2677 
2678     xcb_out.grab_window = grab_window;
2679     xcb_out.modifiers = modifiers;
2680     xcb_out.modifier_device = modifier_device;
2681     xcb_out.button = button;
2682     xcb_out.grabbed_device = grabbed_device;
2683     memset(xcb_out.pad0, 0, 3);
2684 
2685     xcb_parts[2].iov_base = (char *) &xcb_out;
2686     xcb_parts[2].iov_len = sizeof(xcb_out);
2687     xcb_parts[3].iov_base = 0;
2688     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2689 
2690     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2691     return xcb_ret;
2692 }
2693 
2694 xcb_void_cookie_t
2695 xcb_input_allow_device_events_checked (xcb_connection_t *c,
2696                                        xcb_timestamp_t   time,
2697                                        uint8_t           mode,
2698                                        uint8_t           device_id)
2699 {
2700     static const xcb_protocol_request_t xcb_req = {
2701         .count = 2,
2702         .ext = &xcb_input_id,
2703         .opcode = XCB_INPUT_ALLOW_DEVICE_EVENTS,
2704         .isvoid = 1
2705     };
2706 
2707     struct iovec xcb_parts[4];
2708     xcb_void_cookie_t xcb_ret;
2709     xcb_input_allow_device_events_request_t xcb_out;
2710 
2711     xcb_out.time = time;
2712     xcb_out.mode = mode;
2713     xcb_out.device_id = device_id;
2714     memset(xcb_out.pad0, 0, 2);
2715 
2716     xcb_parts[2].iov_base = (char *) &xcb_out;
2717     xcb_parts[2].iov_len = sizeof(xcb_out);
2718     xcb_parts[3].iov_base = 0;
2719     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2720 
2721     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2722     return xcb_ret;
2723 }
2724 
2725 xcb_void_cookie_t
2726 xcb_input_allow_device_events (xcb_connection_t *c,
2727                                xcb_timestamp_t   time,
2728                                uint8_t           mode,
2729                                uint8_t           device_id)
2730 {
2731     static const xcb_protocol_request_t xcb_req = {
2732         .count = 2,
2733         .ext = &xcb_input_id,
2734         .opcode = XCB_INPUT_ALLOW_DEVICE_EVENTS,
2735         .isvoid = 1
2736     };
2737 
2738     struct iovec xcb_parts[4];
2739     xcb_void_cookie_t xcb_ret;
2740     xcb_input_allow_device_events_request_t xcb_out;
2741 
2742     xcb_out.time = time;
2743     xcb_out.mode = mode;
2744     xcb_out.device_id = device_id;
2745     memset(xcb_out.pad0, 0, 2);
2746 
2747     xcb_parts[2].iov_base = (char *) &xcb_out;
2748     xcb_parts[2].iov_len = sizeof(xcb_out);
2749     xcb_parts[3].iov_base = 0;
2750     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2751 
2752     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2753     return xcb_ret;
2754 }
2755 
2756 xcb_input_get_device_focus_cookie_t
2757 xcb_input_get_device_focus (xcb_connection_t *c,
2758                             uint8_t           device_id)
2759 {
2760     static const xcb_protocol_request_t xcb_req = {
2761         .count = 2,
2762         .ext = &xcb_input_id,
2763         .opcode = XCB_INPUT_GET_DEVICE_FOCUS,
2764         .isvoid = 0
2765     };
2766 
2767     struct iovec xcb_parts[4];
2768     xcb_input_get_device_focus_cookie_t xcb_ret;
2769     xcb_input_get_device_focus_request_t xcb_out;
2770 
2771     xcb_out.device_id = device_id;
2772     memset(xcb_out.pad0, 0, 3);
2773 
2774     xcb_parts[2].iov_base = (char *) &xcb_out;
2775     xcb_parts[2].iov_len = sizeof(xcb_out);
2776     xcb_parts[3].iov_base = 0;
2777     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2778 
2779     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2780     return xcb_ret;
2781 }
2782 
2783 xcb_input_get_device_focus_cookie_t
2784 xcb_input_get_device_focus_unchecked (xcb_connection_t *c,
2785                                       uint8_t           device_id)
2786 {
2787     static const xcb_protocol_request_t xcb_req = {
2788         .count = 2,
2789         .ext = &xcb_input_id,
2790         .opcode = XCB_INPUT_GET_DEVICE_FOCUS,
2791         .isvoid = 0
2792     };
2793 
2794     struct iovec xcb_parts[4];
2795     xcb_input_get_device_focus_cookie_t xcb_ret;
2796     xcb_input_get_device_focus_request_t xcb_out;
2797 
2798     xcb_out.device_id = device_id;
2799     memset(xcb_out.pad0, 0, 3);
2800 
2801     xcb_parts[2].iov_base = (char *) &xcb_out;
2802     xcb_parts[2].iov_len = sizeof(xcb_out);
2803     xcb_parts[3].iov_base = 0;
2804     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2805 
2806     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2807     return xcb_ret;
2808 }
2809 
2810 xcb_input_get_device_focus_reply_t *
2811 xcb_input_get_device_focus_reply (xcb_connection_t                     *c,
2812                                   xcb_input_get_device_focus_cookie_t   cookie  /**< */,
2813                                   xcb_generic_error_t                 **e)
2814 {
2815     return (xcb_input_get_device_focus_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
2816 }
2817 
2818 xcb_void_cookie_t
2819 xcb_input_set_device_focus_checked (xcb_connection_t *c,
2820                                     xcb_window_t      focus,
2821                                     xcb_timestamp_t   time,
2822                                     uint8_t           revert_to,
2823                                     uint8_t           device_id)
2824 {
2825     static const xcb_protocol_request_t xcb_req = {
2826         .count = 2,
2827         .ext = &xcb_input_id,
2828         .opcode = XCB_INPUT_SET_DEVICE_FOCUS,
2829         .isvoid = 1
2830     };
2831 
2832     struct iovec xcb_parts[4];
2833     xcb_void_cookie_t xcb_ret;
2834     xcb_input_set_device_focus_request_t xcb_out;
2835 
2836     xcb_out.focus = focus;
2837     xcb_out.time = time;
2838     xcb_out.revert_to = revert_to;
2839     xcb_out.device_id = device_id;
2840     memset(xcb_out.pad0, 0, 2);
2841 
2842     xcb_parts[2].iov_base = (char *) &xcb_out;
2843     xcb_parts[2].iov_len = sizeof(xcb_out);
2844     xcb_parts[3].iov_base = 0;
2845     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2846 
2847     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
2848     return xcb_ret;
2849 }
2850 
2851 xcb_void_cookie_t
2852 xcb_input_set_device_focus (xcb_connection_t *c,
2853                             xcb_window_t      focus,
2854                             xcb_timestamp_t   time,
2855                             uint8_t           revert_to,
2856                             uint8_t           device_id)
2857 {
2858     static const xcb_protocol_request_t xcb_req = {
2859         .count = 2,
2860         .ext = &xcb_input_id,
2861         .opcode = XCB_INPUT_SET_DEVICE_FOCUS,
2862         .isvoid = 1
2863     };
2864 
2865     struct iovec xcb_parts[4];
2866     xcb_void_cookie_t xcb_ret;
2867     xcb_input_set_device_focus_request_t xcb_out;
2868 
2869     xcb_out.focus = focus;
2870     xcb_out.time = time;
2871     xcb_out.revert_to = revert_to;
2872     xcb_out.device_id = device_id;
2873     memset(xcb_out.pad0, 0, 2);
2874 
2875     xcb_parts[2].iov_base = (char *) &xcb_out;
2876     xcb_parts[2].iov_len = sizeof(xcb_out);
2877     xcb_parts[3].iov_base = 0;
2878     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
2879 
2880     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
2881     return xcb_ret;
2882 }
2883 
2884 void
2885 xcb_input_kbd_feedback_state_next (xcb_input_kbd_feedback_state_iterator_t *i)
2886 {
2887     --i->rem;
2888     ++i->data;
2889     i->index += sizeof(xcb_input_kbd_feedback_state_t);
2890 }
2891 
2892 xcb_generic_iterator_t
2893 xcb_input_kbd_feedback_state_end (xcb_input_kbd_feedback_state_iterator_t i)
2894 {
2895     xcb_generic_iterator_t ret;
2896     ret.data = i.data + i.rem;
2897     ret.index = i.index + ((char *) ret.data - (char *) i.data);
2898     ret.rem = 0;
2899     return ret;
2900 }
2901 
2902 void
2903 xcb_input_ptr_feedback_state_next (xcb_input_ptr_feedback_state_iterator_t *i)
2904 {
2905     --i->rem;
2906     ++i->data;
2907     i->index += sizeof(xcb_input_ptr_feedback_state_t);
2908 }
2909 
2910 xcb_generic_iterator_t
2911 xcb_input_ptr_feedback_state_end (xcb_input_ptr_feedback_state_iterator_t i)
2912 {
2913     xcb_generic_iterator_t ret;
2914     ret.data = i.data + i.rem;
2915     ret.index = i.index + ((char *) ret.data - (char *) i.data);
2916     ret.rem = 0;
2917     return ret;
2918 }
2919 
2920 void
2921 xcb_input_integer_feedback_state_next (xcb_input_integer_feedback_state_iterator_t *i)
2922 {
2923     --i->rem;
2924     ++i->data;
2925     i->index += sizeof(xcb_input_integer_feedback_state_t);
2926 }
2927 
2928 xcb_generic_iterator_t
2929 xcb_input_integer_feedback_state_end (xcb_input_integer_feedback_state_iterator_t i)
2930 {
2931     xcb_generic_iterator_t ret;
2932     ret.data = i.data + i.rem;
2933     ret.index = i.index + ((char *) ret.data - (char *) i.data);
2934     ret.rem = 0;
2935     return ret;
2936 }
2937 
2938 int
2939 xcb_input_string_feedback_state_sizeof (const void  *_buffer)
2940 {
2941     char *xcb_tmp = (char *)_buffer;
2942     const xcb_input_string_feedback_state_t *_aux = (xcb_input_string_feedback_state_t *)_buffer;
2943     unsigned int xcb_buffer_len = 0;
2944     unsigned int xcb_block_len = 0;
2945     unsigned int xcb_pad = 0;
2946     unsigned int xcb_align_to = 0;
2947 
2948 
2949     xcb_block_len += sizeof(xcb_input_string_feedback_state_t);
2950     xcb_tmp += xcb_block_len;
2951     xcb_buffer_len += xcb_block_len;
2952     xcb_block_len = 0;
2953     /* keysyms */
2954     xcb_block_len += _aux->num_keysyms * sizeof(xcb_keysym_t);
2955     xcb_tmp += xcb_block_len;
2956     xcb_align_to = ALIGNOF(xcb_keysym_t);
2957     /* insert padding */
2958     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
2959     xcb_buffer_len += xcb_block_len + xcb_pad;
2960     if (0 != xcb_pad) {
2961         xcb_tmp += xcb_pad;
2962         xcb_pad = 0;
2963     }
2964     xcb_block_len = 0;
2965 
2966     return xcb_buffer_len;
2967 }
2968 
2969 xcb_keysym_t *
2970 xcb_input_string_feedback_state_keysyms (const xcb_input_string_feedback_state_t *R)
2971 {
2972     return (xcb_keysym_t *) (R + 1);
2973 }
2974 
2975 int
2976 xcb_input_string_feedback_state_keysyms_length (const xcb_input_string_feedback_state_t *R)
2977 {
2978     return R->num_keysyms;
2979 }
2980 
2981 xcb_generic_iterator_t
2982 xcb_input_string_feedback_state_keysyms_end (const xcb_input_string_feedback_state_t *R)
2983 {
2984     xcb_generic_iterator_t i;
2985     i.data = ((xcb_keysym_t *) (R + 1)) + (R->num_keysyms);
2986     i.rem = 0;
2987     i.index = (char *) i.data - (char *) R;
2988     return i;
2989 }
2990 
2991 void
2992 xcb_input_string_feedback_state_next (xcb_input_string_feedback_state_iterator_t *i)
2993 {
2994     xcb_input_string_feedback_state_t *R = i->data;
2995     xcb_generic_iterator_t child;
2996     child.data = (xcb_input_string_feedback_state_t *)(((char *)R) + xcb_input_string_feedback_state_sizeof(R));
2997     i->index = (char *) child.data - (char *) i->data;
2998     --i->rem;
2999     i->data = (xcb_input_string_feedback_state_t *) child.data;
3000 }
3001 
3002 xcb_generic_iterator_t
3003 xcb_input_string_feedback_state_end (xcb_input_string_feedback_state_iterator_t i)
3004 {
3005     xcb_generic_iterator_t ret;
3006     while(i.rem > 0)
3007         xcb_input_string_feedback_state_next(&i);
3008     ret.data = i.data;
3009     ret.rem = i.rem;
3010     ret.index = i.index;
3011     return ret;
3012 }
3013 
3014 void
3015 xcb_input_bell_feedback_state_next (xcb_input_bell_feedback_state_iterator_t *i)
3016 {
3017     --i->rem;
3018     ++i->data;
3019     i->index += sizeof(xcb_input_bell_feedback_state_t);
3020 }
3021 
3022 xcb_generic_iterator_t
3023 xcb_input_bell_feedback_state_end (xcb_input_bell_feedback_state_iterator_t i)
3024 {
3025     xcb_generic_iterator_t ret;
3026     ret.data = i.data + i.rem;
3027     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3028     ret.rem = 0;
3029     return ret;
3030 }
3031 
3032 void
3033 xcb_input_led_feedback_state_next (xcb_input_led_feedback_state_iterator_t *i)
3034 {
3035     --i->rem;
3036     ++i->data;
3037     i->index += sizeof(xcb_input_led_feedback_state_t);
3038 }
3039 
3040 xcb_generic_iterator_t
3041 xcb_input_led_feedback_state_end (xcb_input_led_feedback_state_iterator_t i)
3042 {
3043     xcb_generic_iterator_t ret;
3044     ret.data = i.data + i.rem;
3045     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3046     ret.rem = 0;
3047     return ret;
3048 }
3049 
3050 xcb_keysym_t *
3051 xcb_input_feedback_state_data_string_keysyms (const xcb_input_feedback_state_data_t *S)
3052 {
3053     return S->string.keysyms;
3054 }
3055 
3056 int
3057 xcb_input_feedback_state_data_string_keysyms_length (const xcb_input_feedback_state_t *R,
3058                                                      const xcb_input_feedback_state_data_t *S)
3059 {
3060     return S->string.num_keysyms;
3061 }
3062 
3063 xcb_generic_iterator_t
3064 xcb_input_feedback_state_data_string_keysyms_end (const xcb_input_feedback_state_t *R,
3065                                                   const xcb_input_feedback_state_data_t *S)
3066 {
3067     xcb_generic_iterator_t i;
3068     i.data = S->string.keysyms + S->string.num_keysyms;
3069     i.rem = 0;
3070     i.index = (char *) i.data - (char *) S;
3071     return i;
3072 }
3073 
3074 int
3075 xcb_input_feedback_state_data_serialize (void                                  **_buffer,
3076                                          uint8_t                                 class_id,
3077                                          const xcb_input_feedback_state_data_t  *_aux)
3078 {
3079     char *xcb_out = *_buffer;
3080     unsigned int xcb_buffer_len = 0;
3081     unsigned int xcb_align_to = 0;
3082     unsigned int xcb_padding_offset = 0;
3083 
3084     unsigned int xcb_pad = 0;
3085     char xcb_pad0[3] = {0, 0, 0};
3086     struct iovec xcb_parts[27];
3087     unsigned int xcb_parts_idx = 0;
3088     unsigned int xcb_block_len = 0;
3089     unsigned int i;
3090     char *xcb_tmp;
3091 
3092     if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
3093         /* xcb_input_feedback_state_data_t.keyboard.pitch */
3094         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.pitch;
3095         xcb_block_len += sizeof(uint16_t);
3096         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3097         xcb_parts_idx++;
3098         xcb_align_to = ALIGNOF(uint16_t);
3099         /* xcb_input_feedback_state_data_t.keyboard.duration */
3100         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.duration;
3101         xcb_block_len += sizeof(uint16_t);
3102         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3103         xcb_parts_idx++;
3104         xcb_align_to = ALIGNOF(uint16_t);
3105         /* xcb_input_feedback_state_data_t.keyboard.led_mask */
3106         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_mask;
3107         xcb_block_len += sizeof(uint32_t);
3108         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3109         xcb_parts_idx++;
3110         xcb_align_to = ALIGNOF(uint32_t);
3111         /* xcb_input_feedback_state_data_t.keyboard.led_values */
3112         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_values;
3113         xcb_block_len += sizeof(uint32_t);
3114         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3115         xcb_parts_idx++;
3116         xcb_align_to = ALIGNOF(uint32_t);
3117         /* xcb_input_feedback_state_data_t.keyboard.global_auto_repeat */
3118         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.global_auto_repeat;
3119         xcb_block_len += sizeof(uint8_t);
3120         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
3121         xcb_parts_idx++;
3122         xcb_align_to = ALIGNOF(uint8_t);
3123         /* xcb_input_feedback_state_data_t.keyboard.click */
3124         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.click;
3125         xcb_block_len += sizeof(uint8_t);
3126         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
3127         xcb_parts_idx++;
3128         xcb_align_to = ALIGNOF(uint8_t);
3129         /* xcb_input_feedback_state_data_t.keyboard.percent */
3130         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.percent;
3131         xcb_block_len += sizeof(uint8_t);
3132         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
3133         xcb_parts_idx++;
3134         xcb_align_to = ALIGNOF(uint8_t);
3135         /* xcb_input_feedback_state_data_t.keyboard.pad0 */
3136         xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
3137         xcb_block_len += sizeof(uint8_t);
3138         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
3139         xcb_parts_idx++;
3140         xcb_align_to = ALIGNOF(uint8_t);
3141         /* xcb_input_feedback_state_data_t.keyboard.auto_repeats */
3142         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->keyboard.auto_repeats;
3143         xcb_block_len += 32;
3144         xcb_parts[xcb_parts_idx].iov_len = 32;
3145         xcb_parts_idx++;
3146         xcb_align_to = ALIGNOF(uint8_t);
3147     }
3148     if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
3149         /* xcb_input_feedback_state_data_t.pointer.pad1 */
3150         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3151         xcb_block_len += sizeof(uint8_t)*2;
3152         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
3153         xcb_parts_idx++;
3154         xcb_align_to = ALIGNOF(uint8_t);
3155         /* xcb_input_feedback_state_data_t.pointer.accel_num */
3156         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.accel_num;
3157         xcb_block_len += sizeof(uint16_t);
3158         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3159         xcb_parts_idx++;
3160         xcb_align_to = ALIGNOF(uint16_t);
3161         /* xcb_input_feedback_state_data_t.pointer.accel_denom */
3162         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.accel_denom;
3163         xcb_block_len += sizeof(uint16_t);
3164         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3165         xcb_parts_idx++;
3166         xcb_align_to = ALIGNOF(uint16_t);
3167         /* xcb_input_feedback_state_data_t.pointer.threshold */
3168         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.threshold;
3169         xcb_block_len += sizeof(uint16_t);
3170         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3171         xcb_parts_idx++;
3172         xcb_align_to = ALIGNOF(uint16_t);
3173     }
3174     if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
3175         /* xcb_input_feedback_state_data_t.string.max_symbols */
3176         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->string.max_symbols;
3177         xcb_block_len += sizeof(uint16_t);
3178         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3179         xcb_parts_idx++;
3180         xcb_align_to = ALIGNOF(uint16_t);
3181         /* xcb_input_feedback_state_data_t.string.num_keysyms */
3182         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->string.num_keysyms;
3183         xcb_block_len += sizeof(uint16_t);
3184         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3185         xcb_parts_idx++;
3186         xcb_align_to = ALIGNOF(uint16_t);
3187         /* insert padding */
3188         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
3189         xcb_buffer_len += xcb_block_len + xcb_pad;
3190         if (0 != xcb_pad) {
3191             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3192             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
3193             xcb_parts_idx++;
3194             xcb_pad = 0;
3195         }
3196         xcb_block_len = 0;
3197         xcb_padding_offset = 0;
3198         /* keysyms */
3199         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->string.keysyms;
3200         xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
3201         xcb_parts[xcb_parts_idx].iov_len = _aux->string.num_keysyms * sizeof(uint32_t);
3202         xcb_parts_idx++;
3203         xcb_align_to = ALIGNOF(xcb_keysym_t);
3204     }
3205     if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
3206         /* xcb_input_feedback_state_data_t.integer.resolution */
3207         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.resolution;
3208         xcb_block_len += sizeof(uint32_t);
3209         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3210         xcb_parts_idx++;
3211         xcb_align_to = ALIGNOF(uint32_t);
3212         /* xcb_input_feedback_state_data_t.integer.min_value */
3213         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.min_value;
3214         xcb_block_len += sizeof(int32_t);
3215         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
3216         xcb_parts_idx++;
3217         xcb_align_to = ALIGNOF(int32_t);
3218         /* xcb_input_feedback_state_data_t.integer.max_value */
3219         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.max_value;
3220         xcb_block_len += sizeof(int32_t);
3221         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
3222         xcb_parts_idx++;
3223         xcb_align_to = ALIGNOF(int32_t);
3224     }
3225     if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
3226         /* xcb_input_feedback_state_data_t.led.led_mask */
3227         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_mask;
3228         xcb_block_len += sizeof(uint32_t);
3229         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3230         xcb_parts_idx++;
3231         xcb_align_to = ALIGNOF(uint32_t);
3232         /* xcb_input_feedback_state_data_t.led.led_values */
3233         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_values;
3234         xcb_block_len += sizeof(uint32_t);
3235         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3236         xcb_parts_idx++;
3237         xcb_align_to = ALIGNOF(uint32_t);
3238     }
3239     if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
3240         /* xcb_input_feedback_state_data_t.bell.percent */
3241         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.percent;
3242         xcb_block_len += sizeof(uint8_t);
3243         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
3244         xcb_parts_idx++;
3245         xcb_align_to = ALIGNOF(uint8_t);
3246         /* xcb_input_feedback_state_data_t.bell.pad2 */
3247         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3248         xcb_block_len += sizeof(uint8_t)*3;
3249         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
3250         xcb_parts_idx++;
3251         xcb_align_to = ALIGNOF(uint8_t);
3252         /* xcb_input_feedback_state_data_t.bell.pitch */
3253         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.pitch;
3254         xcb_block_len += sizeof(uint16_t);
3255         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3256         xcb_parts_idx++;
3257         xcb_align_to = ALIGNOF(uint16_t);
3258         /* xcb_input_feedback_state_data_t.bell.duration */
3259         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.duration;
3260         xcb_block_len += sizeof(uint16_t);
3261         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3262         xcb_parts_idx++;
3263         xcb_align_to = ALIGNOF(uint16_t);
3264     }
3265     /* insert padding */
3266     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
3267     xcb_buffer_len += xcb_block_len + xcb_pad;
3268     if (0 != xcb_pad) {
3269         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3270         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
3271         xcb_parts_idx++;
3272         xcb_pad = 0;
3273     }
3274     xcb_block_len = 0;
3275     xcb_padding_offset = 0;
3276 
3277     if (NULL == xcb_out) {
3278         /* allocate memory */
3279         xcb_out = malloc(xcb_buffer_len);
3280         *_buffer = xcb_out;
3281     }
3282 
3283     xcb_tmp = xcb_out;
3284     for(i=0; i<xcb_parts_idx; i++) {
3285         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
3286             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
3287         if (0 != xcb_parts[i].iov_len)
3288             xcb_tmp += xcb_parts[i].iov_len;
3289     }
3290 
3291     return xcb_buffer_len;
3292 }
3293 
3294 int
3295 xcb_input_feedback_state_data_unpack (const void                       *_buffer,
3296                                       uint8_t                           class_id,
3297                                       xcb_input_feedback_state_data_t  *_aux)
3298 {
3299     char *xcb_tmp = (char *)_buffer;
3300     unsigned int xcb_buffer_len = 0;
3301     unsigned int xcb_block_len = 0;
3302     unsigned int xcb_pad = 0;
3303     unsigned int xcb_align_to = 0;
3304     unsigned int xcb_padding_offset = 0;
3305 
3306 
3307     if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
3308         /* xcb_input_feedback_state_data_t.keyboard.pitch */
3309         _aux->keyboard.pitch = *(uint16_t *)xcb_tmp;
3310         xcb_block_len += sizeof(uint16_t);
3311         xcb_tmp += sizeof(uint16_t);
3312         xcb_align_to = ALIGNOF(uint16_t);
3313         /* xcb_input_feedback_state_data_t.keyboard.duration */
3314         _aux->keyboard.duration = *(uint16_t *)xcb_tmp;
3315         xcb_block_len += sizeof(uint16_t);
3316         xcb_tmp += sizeof(uint16_t);
3317         xcb_align_to = ALIGNOF(uint16_t);
3318         /* xcb_input_feedback_state_data_t.keyboard.led_mask */
3319         _aux->keyboard.led_mask = *(uint32_t *)xcb_tmp;
3320         xcb_block_len += sizeof(uint32_t);
3321         xcb_tmp += sizeof(uint32_t);
3322         xcb_align_to = ALIGNOF(uint32_t);
3323         /* xcb_input_feedback_state_data_t.keyboard.led_values */
3324         _aux->keyboard.led_values = *(uint32_t *)xcb_tmp;
3325         xcb_block_len += sizeof(uint32_t);
3326         xcb_tmp += sizeof(uint32_t);
3327         xcb_align_to = ALIGNOF(uint32_t);
3328         /* xcb_input_feedback_state_data_t.keyboard.global_auto_repeat */
3329         _aux->keyboard.global_auto_repeat = *(uint8_t *)xcb_tmp;
3330         xcb_block_len += sizeof(uint8_t);
3331         xcb_tmp += sizeof(uint8_t);
3332         xcb_align_to = ALIGNOF(uint8_t);
3333         /* xcb_input_feedback_state_data_t.keyboard.click */
3334         _aux->keyboard.click = *(uint8_t *)xcb_tmp;
3335         xcb_block_len += sizeof(uint8_t);
3336         xcb_tmp += sizeof(uint8_t);
3337         xcb_align_to = ALIGNOF(uint8_t);
3338         /* xcb_input_feedback_state_data_t.keyboard.percent */
3339         _aux->keyboard.percent = *(uint8_t *)xcb_tmp;
3340         xcb_block_len += sizeof(uint8_t);
3341         xcb_tmp += sizeof(uint8_t);
3342         xcb_align_to = ALIGNOF(uint8_t);
3343         /* xcb_input_feedback_state_data_t.keyboard.pad0 */
3344         _aux->keyboard.pad0 = *(uint8_t *)xcb_tmp;
3345         xcb_block_len += sizeof(uint8_t);
3346         xcb_tmp += sizeof(uint8_t);
3347         xcb_align_to = ALIGNOF(uint8_t);
3348         /* xcb_input_feedback_state_data_t.keyboard.auto_repeats */
3349         memcpy(_aux->keyboard.auto_repeats, xcb_tmp, sizeof(uint8_t) * 32);
3350         xcb_block_len += sizeof(uint8_t) * 32;
3351         xcb_tmp += sizeof(uint8_t) * 32;
3352         xcb_align_to = ALIGNOF(uint8_t);
3353     }
3354     if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
3355         /* xcb_input_feedback_state_data_t.pointer.pad1 */
3356         _aux->pointer.pad1[0] = *(uint8_t *)xcb_tmp;
3357         _aux->pointer.pad1[1] = *(uint8_t *)xcb_tmp;
3358         xcb_block_len += sizeof(uint8_t) * 2;
3359         xcb_tmp += sizeof(uint8_t) * 2;
3360         xcb_align_to = ALIGNOF(uint8_t);
3361         /* xcb_input_feedback_state_data_t.pointer.accel_num */
3362         _aux->pointer.accel_num = *(uint16_t *)xcb_tmp;
3363         xcb_block_len += sizeof(uint16_t);
3364         xcb_tmp += sizeof(uint16_t);
3365         xcb_align_to = ALIGNOF(uint16_t);
3366         /* xcb_input_feedback_state_data_t.pointer.accel_denom */
3367         _aux->pointer.accel_denom = *(uint16_t *)xcb_tmp;
3368         xcb_block_len += sizeof(uint16_t);
3369         xcb_tmp += sizeof(uint16_t);
3370         xcb_align_to = ALIGNOF(uint16_t);
3371         /* xcb_input_feedback_state_data_t.pointer.threshold */
3372         _aux->pointer.threshold = *(uint16_t *)xcb_tmp;
3373         xcb_block_len += sizeof(uint16_t);
3374         xcb_tmp += sizeof(uint16_t);
3375         xcb_align_to = ALIGNOF(uint16_t);
3376     }
3377     if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
3378         /* xcb_input_feedback_state_data_t.string.max_symbols */
3379         _aux->string.max_symbols = *(uint16_t *)xcb_tmp;
3380         xcb_block_len += sizeof(uint16_t);
3381         xcb_tmp += sizeof(uint16_t);
3382         xcb_align_to = ALIGNOF(uint16_t);
3383         /* xcb_input_feedback_state_data_t.string.num_keysyms */
3384         _aux->string.num_keysyms = *(uint16_t *)xcb_tmp;
3385         xcb_block_len += sizeof(uint16_t);
3386         xcb_tmp += sizeof(uint16_t);
3387         xcb_align_to = ALIGNOF(uint16_t);
3388         /* insert padding */
3389         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
3390         xcb_buffer_len += xcb_block_len + xcb_pad;
3391         if (0 != xcb_pad) {
3392             xcb_tmp += xcb_pad;
3393             xcb_pad = 0;
3394         }
3395         xcb_block_len = 0;
3396         xcb_padding_offset = 0;
3397         /* keysyms */
3398         _aux->string.keysyms = (xcb_keysym_t *)xcb_tmp;
3399         xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
3400         xcb_tmp += xcb_block_len;
3401         xcb_align_to = ALIGNOF(xcb_keysym_t);
3402     }
3403     if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
3404         /* xcb_input_feedback_state_data_t.integer.resolution */
3405         _aux->integer.resolution = *(uint32_t *)xcb_tmp;
3406         xcb_block_len += sizeof(uint32_t);
3407         xcb_tmp += sizeof(uint32_t);
3408         xcb_align_to = ALIGNOF(uint32_t);
3409         /* xcb_input_feedback_state_data_t.integer.min_value */
3410         _aux->integer.min_value = *(int32_t *)xcb_tmp;
3411         xcb_block_len += sizeof(int32_t);
3412         xcb_tmp += sizeof(int32_t);
3413         xcb_align_to = ALIGNOF(int32_t);
3414         /* xcb_input_feedback_state_data_t.integer.max_value */
3415         _aux->integer.max_value = *(int32_t *)xcb_tmp;
3416         xcb_block_len += sizeof(int32_t);
3417         xcb_tmp += sizeof(int32_t);
3418         xcb_align_to = ALIGNOF(int32_t);
3419     }
3420     if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
3421         /* xcb_input_feedback_state_data_t.led.led_mask */
3422         _aux->led.led_mask = *(uint32_t *)xcb_tmp;
3423         xcb_block_len += sizeof(uint32_t);
3424         xcb_tmp += sizeof(uint32_t);
3425         xcb_align_to = ALIGNOF(uint32_t);
3426         /* xcb_input_feedback_state_data_t.led.led_values */
3427         _aux->led.led_values = *(uint32_t *)xcb_tmp;
3428         xcb_block_len += sizeof(uint32_t);
3429         xcb_tmp += sizeof(uint32_t);
3430         xcb_align_to = ALIGNOF(uint32_t);
3431     }
3432     if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
3433         /* xcb_input_feedback_state_data_t.bell.percent */
3434         _aux->bell.percent = *(uint8_t *)xcb_tmp;
3435         xcb_block_len += sizeof(uint8_t);
3436         xcb_tmp += sizeof(uint8_t);
3437         xcb_align_to = ALIGNOF(uint8_t);
3438         /* xcb_input_feedback_state_data_t.bell.pad2 */
3439         _aux->bell.pad2[0] = *(uint8_t *)xcb_tmp;
3440         _aux->bell.pad2[1] = *(uint8_t *)xcb_tmp;
3441         _aux->bell.pad2[2] = *(uint8_t *)xcb_tmp;
3442         xcb_block_len += sizeof(uint8_t) * 3;
3443         xcb_tmp += sizeof(uint8_t) * 3;
3444         xcb_align_to = ALIGNOF(uint8_t);
3445         /* xcb_input_feedback_state_data_t.bell.pitch */
3446         _aux->bell.pitch = *(uint16_t *)xcb_tmp;
3447         xcb_block_len += sizeof(uint16_t);
3448         xcb_tmp += sizeof(uint16_t);
3449         xcb_align_to = ALIGNOF(uint16_t);
3450         /* xcb_input_feedback_state_data_t.bell.duration */
3451         _aux->bell.duration = *(uint16_t *)xcb_tmp;
3452         xcb_block_len += sizeof(uint16_t);
3453         xcb_tmp += sizeof(uint16_t);
3454         xcb_align_to = ALIGNOF(uint16_t);
3455     }
3456     /* insert padding */
3457     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
3458     xcb_buffer_len += xcb_block_len + xcb_pad;
3459     if (0 != xcb_pad) {
3460         xcb_tmp += xcb_pad;
3461         xcb_pad = 0;
3462     }
3463     xcb_block_len = 0;
3464     xcb_padding_offset = 0;
3465 
3466     return xcb_buffer_len;
3467 }
3468 
3469 int
3470 xcb_input_feedback_state_data_sizeof (const void  *_buffer,
3471                                       uint8_t      class_id)
3472 {
3473     xcb_input_feedback_state_data_t _aux;
3474     return xcb_input_feedback_state_data_unpack(_buffer, class_id, &_aux);
3475 }
3476 
3477 int
3478 xcb_input_feedback_state_sizeof (const void  *_buffer)
3479 {
3480     char *xcb_tmp = (char *)_buffer;
3481     const xcb_input_feedback_state_t *_aux = (xcb_input_feedback_state_t *)_buffer;
3482     unsigned int xcb_buffer_len = 0;
3483     unsigned int xcb_block_len = 0;
3484     unsigned int xcb_pad = 0;
3485     unsigned int xcb_align_to = 0;
3486 
3487 
3488     xcb_block_len += sizeof(xcb_input_feedback_state_t);
3489     xcb_tmp += xcb_block_len;
3490     xcb_buffer_len += xcb_block_len;
3491     xcb_block_len = 0;
3492     /* data */
3493     xcb_block_len += xcb_input_feedback_state_data_sizeof(xcb_tmp, _aux->class_id);
3494     xcb_tmp += xcb_block_len;
3495     xcb_align_to = ALIGNOF(char);
3496     /* insert padding */
3497     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
3498     xcb_buffer_len += xcb_block_len + xcb_pad;
3499     if (0 != xcb_pad) {
3500         xcb_tmp += xcb_pad;
3501         xcb_pad = 0;
3502     }
3503     xcb_block_len = 0;
3504 
3505     return xcb_buffer_len;
3506 }
3507 
3508 void *
3509 xcb_input_feedback_state_data (const xcb_input_feedback_state_t *R)
3510 {
3511     return (void *) (R + 1);
3512 }
3513 
3514 void
3515 xcb_input_feedback_state_next (xcb_input_feedback_state_iterator_t *i)
3516 {
3517     xcb_input_feedback_state_t *R = i->data;
3518     xcb_generic_iterator_t child;
3519     child.data = (xcb_input_feedback_state_t *)(((char *)R) + xcb_input_feedback_state_sizeof(R));
3520     i->index = (char *) child.data - (char *) i->data;
3521     --i->rem;
3522     i->data = (xcb_input_feedback_state_t *) child.data;
3523 }
3524 
3525 xcb_generic_iterator_t
3526 xcb_input_feedback_state_end (xcb_input_feedback_state_iterator_t i)
3527 {
3528     xcb_generic_iterator_t ret;
3529     while(i.rem > 0)
3530         xcb_input_feedback_state_next(&i);
3531     ret.data = i.data;
3532     ret.rem = i.rem;
3533     ret.index = i.index;
3534     return ret;
3535 }
3536 
3537 int
3538 xcb_input_get_feedback_control_sizeof (const void  *_buffer)
3539 {
3540     char *xcb_tmp = (char *)_buffer;
3541     const xcb_input_get_feedback_control_reply_t *_aux = (xcb_input_get_feedback_control_reply_t *)_buffer;
3542     unsigned int xcb_buffer_len = 0;
3543     unsigned int xcb_block_len = 0;
3544     unsigned int xcb_pad = 0;
3545     unsigned int xcb_align_to = 0;
3546 
3547     unsigned int i;
3548     unsigned int xcb_tmp_len;
3549 
3550     xcb_block_len += sizeof(xcb_input_get_feedback_control_reply_t);
3551     xcb_tmp += xcb_block_len;
3552     xcb_buffer_len += xcb_block_len;
3553     xcb_block_len = 0;
3554     /* feedbacks */
3555     for(i=0; i<_aux->num_feedbacks; i++) {
3556         xcb_tmp_len = xcb_input_feedback_state_sizeof(xcb_tmp);
3557         xcb_block_len += xcb_tmp_len;
3558         xcb_tmp += xcb_tmp_len;
3559     }
3560     xcb_align_to = ALIGNOF(xcb_input_feedback_state_t);
3561     /* insert padding */
3562     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
3563     xcb_buffer_len += xcb_block_len + xcb_pad;
3564     if (0 != xcb_pad) {
3565         xcb_tmp += xcb_pad;
3566         xcb_pad = 0;
3567     }
3568     xcb_block_len = 0;
3569 
3570     return xcb_buffer_len;
3571 }
3572 
3573 xcb_input_get_feedback_control_cookie_t
3574 xcb_input_get_feedback_control (xcb_connection_t *c,
3575                                 uint8_t           device_id)
3576 {
3577     static const xcb_protocol_request_t xcb_req = {
3578         .count = 2,
3579         .ext = &xcb_input_id,
3580         .opcode = XCB_INPUT_GET_FEEDBACK_CONTROL,
3581         .isvoid = 0
3582     };
3583 
3584     struct iovec xcb_parts[4];
3585     xcb_input_get_feedback_control_cookie_t xcb_ret;
3586     xcb_input_get_feedback_control_request_t xcb_out;
3587 
3588     xcb_out.device_id = device_id;
3589     memset(xcb_out.pad0, 0, 3);
3590 
3591     xcb_parts[2].iov_base = (char *) &xcb_out;
3592     xcb_parts[2].iov_len = sizeof(xcb_out);
3593     xcb_parts[3].iov_base = 0;
3594     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
3595 
3596     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
3597     return xcb_ret;
3598 }
3599 
3600 xcb_input_get_feedback_control_cookie_t
3601 xcb_input_get_feedback_control_unchecked (xcb_connection_t *c,
3602                                           uint8_t           device_id)
3603 {
3604     static const xcb_protocol_request_t xcb_req = {
3605         .count = 2,
3606         .ext = &xcb_input_id,
3607         .opcode = XCB_INPUT_GET_FEEDBACK_CONTROL,
3608         .isvoid = 0
3609     };
3610 
3611     struct iovec xcb_parts[4];
3612     xcb_input_get_feedback_control_cookie_t xcb_ret;
3613     xcb_input_get_feedback_control_request_t xcb_out;
3614 
3615     xcb_out.device_id = device_id;
3616     memset(xcb_out.pad0, 0, 3);
3617 
3618     xcb_parts[2].iov_base = (char *) &xcb_out;
3619     xcb_parts[2].iov_len = sizeof(xcb_out);
3620     xcb_parts[3].iov_base = 0;
3621     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
3622 
3623     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
3624     return xcb_ret;
3625 }
3626 
3627 int
3628 xcb_input_get_feedback_control_feedbacks_length (const xcb_input_get_feedback_control_reply_t *R)
3629 {
3630     return R->num_feedbacks;
3631 }
3632 
3633 xcb_input_feedback_state_iterator_t
3634 xcb_input_get_feedback_control_feedbacks_iterator (const xcb_input_get_feedback_control_reply_t *R)
3635 {
3636     xcb_input_feedback_state_iterator_t i;
3637     i.data = (xcb_input_feedback_state_t *) (R + 1);
3638     i.rem = R->num_feedbacks;
3639     i.index = (char *) i.data - (char *) R;
3640     return i;
3641 }
3642 
3643 xcb_input_get_feedback_control_reply_t *
3644 xcb_input_get_feedback_control_reply (xcb_connection_t                         *c,
3645                                       xcb_input_get_feedback_control_cookie_t   cookie  /**< */,
3646                                       xcb_generic_error_t                     **e)
3647 {
3648     return (xcb_input_get_feedback_control_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
3649 }
3650 
3651 void
3652 xcb_input_kbd_feedback_ctl_next (xcb_input_kbd_feedback_ctl_iterator_t *i)
3653 {
3654     --i->rem;
3655     ++i->data;
3656     i->index += sizeof(xcb_input_kbd_feedback_ctl_t);
3657 }
3658 
3659 xcb_generic_iterator_t
3660 xcb_input_kbd_feedback_ctl_end (xcb_input_kbd_feedback_ctl_iterator_t i)
3661 {
3662     xcb_generic_iterator_t ret;
3663     ret.data = i.data + i.rem;
3664     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3665     ret.rem = 0;
3666     return ret;
3667 }
3668 
3669 void
3670 xcb_input_ptr_feedback_ctl_next (xcb_input_ptr_feedback_ctl_iterator_t *i)
3671 {
3672     --i->rem;
3673     ++i->data;
3674     i->index += sizeof(xcb_input_ptr_feedback_ctl_t);
3675 }
3676 
3677 xcb_generic_iterator_t
3678 xcb_input_ptr_feedback_ctl_end (xcb_input_ptr_feedback_ctl_iterator_t i)
3679 {
3680     xcb_generic_iterator_t ret;
3681     ret.data = i.data + i.rem;
3682     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3683     ret.rem = 0;
3684     return ret;
3685 }
3686 
3687 void
3688 xcb_input_integer_feedback_ctl_next (xcb_input_integer_feedback_ctl_iterator_t *i)
3689 {
3690     --i->rem;
3691     ++i->data;
3692     i->index += sizeof(xcb_input_integer_feedback_ctl_t);
3693 }
3694 
3695 xcb_generic_iterator_t
3696 xcb_input_integer_feedback_ctl_end (xcb_input_integer_feedback_ctl_iterator_t i)
3697 {
3698     xcb_generic_iterator_t ret;
3699     ret.data = i.data + i.rem;
3700     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3701     ret.rem = 0;
3702     return ret;
3703 }
3704 
3705 int
3706 xcb_input_string_feedback_ctl_sizeof (const void  *_buffer)
3707 {
3708     char *xcb_tmp = (char *)_buffer;
3709     const xcb_input_string_feedback_ctl_t *_aux = (xcb_input_string_feedback_ctl_t *)_buffer;
3710     unsigned int xcb_buffer_len = 0;
3711     unsigned int xcb_block_len = 0;
3712     unsigned int xcb_pad = 0;
3713     unsigned int xcb_align_to = 0;
3714 
3715 
3716     xcb_block_len += sizeof(xcb_input_string_feedback_ctl_t);
3717     xcb_tmp += xcb_block_len;
3718     xcb_buffer_len += xcb_block_len;
3719     xcb_block_len = 0;
3720     /* keysyms */
3721     xcb_block_len += _aux->num_keysyms * sizeof(xcb_keysym_t);
3722     xcb_tmp += xcb_block_len;
3723     xcb_align_to = ALIGNOF(xcb_keysym_t);
3724     /* insert padding */
3725     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
3726     xcb_buffer_len += xcb_block_len + xcb_pad;
3727     if (0 != xcb_pad) {
3728         xcb_tmp += xcb_pad;
3729         xcb_pad = 0;
3730     }
3731     xcb_block_len = 0;
3732 
3733     return xcb_buffer_len;
3734 }
3735 
3736 xcb_keysym_t *
3737 xcb_input_string_feedback_ctl_keysyms (const xcb_input_string_feedback_ctl_t *R)
3738 {
3739     return (xcb_keysym_t *) (R + 1);
3740 }
3741 
3742 int
3743 xcb_input_string_feedback_ctl_keysyms_length (const xcb_input_string_feedback_ctl_t *R)
3744 {
3745     return R->num_keysyms;
3746 }
3747 
3748 xcb_generic_iterator_t
3749 xcb_input_string_feedback_ctl_keysyms_end (const xcb_input_string_feedback_ctl_t *R)
3750 {
3751     xcb_generic_iterator_t i;
3752     i.data = ((xcb_keysym_t *) (R + 1)) + (R->num_keysyms);
3753     i.rem = 0;
3754     i.index = (char *) i.data - (char *) R;
3755     return i;
3756 }
3757 
3758 void
3759 xcb_input_string_feedback_ctl_next (xcb_input_string_feedback_ctl_iterator_t *i)
3760 {
3761     xcb_input_string_feedback_ctl_t *R = i->data;
3762     xcb_generic_iterator_t child;
3763     child.data = (xcb_input_string_feedback_ctl_t *)(((char *)R) + xcb_input_string_feedback_ctl_sizeof(R));
3764     i->index = (char *) child.data - (char *) i->data;
3765     --i->rem;
3766     i->data = (xcb_input_string_feedback_ctl_t *) child.data;
3767 }
3768 
3769 xcb_generic_iterator_t
3770 xcb_input_string_feedback_ctl_end (xcb_input_string_feedback_ctl_iterator_t i)
3771 {
3772     xcb_generic_iterator_t ret;
3773     while(i.rem > 0)
3774         xcb_input_string_feedback_ctl_next(&i);
3775     ret.data = i.data;
3776     ret.rem = i.rem;
3777     ret.index = i.index;
3778     return ret;
3779 }
3780 
3781 void
3782 xcb_input_bell_feedback_ctl_next (xcb_input_bell_feedback_ctl_iterator_t *i)
3783 {
3784     --i->rem;
3785     ++i->data;
3786     i->index += sizeof(xcb_input_bell_feedback_ctl_t);
3787 }
3788 
3789 xcb_generic_iterator_t
3790 xcb_input_bell_feedback_ctl_end (xcb_input_bell_feedback_ctl_iterator_t i)
3791 {
3792     xcb_generic_iterator_t ret;
3793     ret.data = i.data + i.rem;
3794     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3795     ret.rem = 0;
3796     return ret;
3797 }
3798 
3799 void
3800 xcb_input_led_feedback_ctl_next (xcb_input_led_feedback_ctl_iterator_t *i)
3801 {
3802     --i->rem;
3803     ++i->data;
3804     i->index += sizeof(xcb_input_led_feedback_ctl_t);
3805 }
3806 
3807 xcb_generic_iterator_t
3808 xcb_input_led_feedback_ctl_end (xcb_input_led_feedback_ctl_iterator_t i)
3809 {
3810     xcb_generic_iterator_t ret;
3811     ret.data = i.data + i.rem;
3812     ret.index = i.index + ((char *) ret.data - (char *) i.data);
3813     ret.rem = 0;
3814     return ret;
3815 }
3816 
3817 xcb_keysym_t *
3818 xcb_input_feedback_ctl_data_string_keysyms (const xcb_input_feedback_ctl_data_t *S)
3819 {
3820     return S->string.keysyms;
3821 }
3822 
3823 int
3824 xcb_input_feedback_ctl_data_string_keysyms_length (const xcb_input_feedback_ctl_t *R,
3825                                                    const xcb_input_feedback_ctl_data_t *S)
3826 {
3827     return S->string.num_keysyms;
3828 }
3829 
3830 xcb_generic_iterator_t
3831 xcb_input_feedback_ctl_data_string_keysyms_end (const xcb_input_feedback_ctl_t *R,
3832                                                 const xcb_input_feedback_ctl_data_t *S)
3833 {
3834     xcb_generic_iterator_t i;
3835     i.data = S->string.keysyms + S->string.num_keysyms;
3836     i.rem = 0;
3837     i.index = (char *) i.data - (char *) S;
3838     return i;
3839 }
3840 
3841 int
3842 xcb_input_feedback_ctl_data_serialize (void                                **_buffer,
3843                                        uint8_t                               class_id,
3844                                        const xcb_input_feedback_ctl_data_t  *_aux)
3845 {
3846     char *xcb_out = *_buffer;
3847     unsigned int xcb_buffer_len = 0;
3848     unsigned int xcb_align_to = 0;
3849     unsigned int xcb_padding_offset = 0;
3850 
3851     unsigned int xcb_pad = 0;
3852     char xcb_pad0[3] = {0, 0, 0};
3853     struct iovec xcb_parts[24];
3854     unsigned int xcb_parts_idx = 0;
3855     unsigned int xcb_block_len = 0;
3856     unsigned int i;
3857     char *xcb_tmp;
3858 
3859     if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
3860         /* xcb_input_feedback_ctl_data_t.keyboard.key */
3861         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.key;
3862         xcb_block_len += sizeof(xcb_input_key_code_t);
3863         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_key_code_t);
3864         xcb_parts_idx++;
3865         xcb_align_to = ALIGNOF(xcb_input_key_code_t);
3866         /* xcb_input_feedback_ctl_data_t.keyboard.auto_repeat_mode */
3867         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.auto_repeat_mode;
3868         xcb_block_len += sizeof(uint8_t);
3869         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
3870         xcb_parts_idx++;
3871         xcb_align_to = ALIGNOF(uint8_t);
3872         /* xcb_input_feedback_ctl_data_t.keyboard.key_click_percent */
3873         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.key_click_percent;
3874         xcb_block_len += sizeof(int8_t);
3875         xcb_parts[xcb_parts_idx].iov_len = sizeof(int8_t);
3876         xcb_parts_idx++;
3877         xcb_align_to = ALIGNOF(int8_t);
3878         /* xcb_input_feedback_ctl_data_t.keyboard.bell_percent */
3879         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.bell_percent;
3880         xcb_block_len += sizeof(int8_t);
3881         xcb_parts[xcb_parts_idx].iov_len = sizeof(int8_t);
3882         xcb_parts_idx++;
3883         xcb_align_to = ALIGNOF(int8_t);
3884         /* xcb_input_feedback_ctl_data_t.keyboard.bell_pitch */
3885         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.bell_pitch;
3886         xcb_block_len += sizeof(int16_t);
3887         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
3888         xcb_parts_idx++;
3889         xcb_align_to = ALIGNOF(int16_t);
3890         /* xcb_input_feedback_ctl_data_t.keyboard.bell_duration */
3891         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.bell_duration;
3892         xcb_block_len += sizeof(int16_t);
3893         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
3894         xcb_parts_idx++;
3895         xcb_align_to = ALIGNOF(int16_t);
3896         /* xcb_input_feedback_ctl_data_t.keyboard.led_mask */
3897         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_mask;
3898         xcb_block_len += sizeof(uint32_t);
3899         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3900         xcb_parts_idx++;
3901         xcb_align_to = ALIGNOF(uint32_t);
3902         /* xcb_input_feedback_ctl_data_t.keyboard.led_values */
3903         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_values;
3904         xcb_block_len += sizeof(uint32_t);
3905         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3906         xcb_parts_idx++;
3907         xcb_align_to = ALIGNOF(uint32_t);
3908     }
3909     if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
3910         /* xcb_input_feedback_ctl_data_t.pointer.pad0 */
3911         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3912         xcb_block_len += sizeof(uint8_t)*2;
3913         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
3914         xcb_parts_idx++;
3915         xcb_align_to = ALIGNOF(uint8_t);
3916         /* xcb_input_feedback_ctl_data_t.pointer.num */
3917         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.num;
3918         xcb_block_len += sizeof(int16_t);
3919         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
3920         xcb_parts_idx++;
3921         xcb_align_to = ALIGNOF(int16_t);
3922         /* xcb_input_feedback_ctl_data_t.pointer.denom */
3923         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.denom;
3924         xcb_block_len += sizeof(int16_t);
3925         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
3926         xcb_parts_idx++;
3927         xcb_align_to = ALIGNOF(int16_t);
3928         /* xcb_input_feedback_ctl_data_t.pointer.threshold */
3929         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.threshold;
3930         xcb_block_len += sizeof(int16_t);
3931         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
3932         xcb_parts_idx++;
3933         xcb_align_to = ALIGNOF(int16_t);
3934     }
3935     if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
3936         /* xcb_input_feedback_ctl_data_t.string.pad1 */
3937         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3938         xcb_block_len += sizeof(uint8_t)*2;
3939         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
3940         xcb_parts_idx++;
3941         xcb_align_to = ALIGNOF(uint8_t);
3942         /* xcb_input_feedback_ctl_data_t.string.num_keysyms */
3943         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->string.num_keysyms;
3944         xcb_block_len += sizeof(uint16_t);
3945         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
3946         xcb_parts_idx++;
3947         xcb_align_to = ALIGNOF(uint16_t);
3948         /* insert padding */
3949         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
3950         xcb_buffer_len += xcb_block_len + xcb_pad;
3951         if (0 != xcb_pad) {
3952             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3953             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
3954             xcb_parts_idx++;
3955             xcb_pad = 0;
3956         }
3957         xcb_block_len = 0;
3958         xcb_padding_offset = 0;
3959         /* keysyms */
3960         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->string.keysyms;
3961         xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
3962         xcb_parts[xcb_parts_idx].iov_len = _aux->string.num_keysyms * sizeof(uint32_t);
3963         xcb_parts_idx++;
3964         xcb_align_to = ALIGNOF(xcb_keysym_t);
3965     }
3966     if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
3967         /* xcb_input_feedback_ctl_data_t.integer.int_to_display */
3968         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.int_to_display;
3969         xcb_block_len += sizeof(int32_t);
3970         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
3971         xcb_parts_idx++;
3972         xcb_align_to = ALIGNOF(int32_t);
3973     }
3974     if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
3975         /* xcb_input_feedback_ctl_data_t.led.led_mask */
3976         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_mask;
3977         xcb_block_len += sizeof(uint32_t);
3978         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3979         xcb_parts_idx++;
3980         xcb_align_to = ALIGNOF(uint32_t);
3981         /* xcb_input_feedback_ctl_data_t.led.led_values */
3982         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_values;
3983         xcb_block_len += sizeof(uint32_t);
3984         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
3985         xcb_parts_idx++;
3986         xcb_align_to = ALIGNOF(uint32_t);
3987     }
3988     if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
3989         /* xcb_input_feedback_ctl_data_t.bell.percent */
3990         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.percent;
3991         xcb_block_len += sizeof(int8_t);
3992         xcb_parts[xcb_parts_idx].iov_len = sizeof(int8_t);
3993         xcb_parts_idx++;
3994         xcb_align_to = ALIGNOF(int8_t);
3995         /* xcb_input_feedback_ctl_data_t.bell.pad2 */
3996         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
3997         xcb_block_len += sizeof(uint8_t)*3;
3998         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
3999         xcb_parts_idx++;
4000         xcb_align_to = ALIGNOF(uint8_t);
4001         /* xcb_input_feedback_ctl_data_t.bell.pitch */
4002         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.pitch;
4003         xcb_block_len += sizeof(int16_t);
4004         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
4005         xcb_parts_idx++;
4006         xcb_align_to = ALIGNOF(int16_t);
4007         /* xcb_input_feedback_ctl_data_t.bell.duration */
4008         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.duration;
4009         xcb_block_len += sizeof(int16_t);
4010         xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
4011         xcb_parts_idx++;
4012         xcb_align_to = ALIGNOF(int16_t);
4013     }
4014     /* insert padding */
4015     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
4016     xcb_buffer_len += xcb_block_len + xcb_pad;
4017     if (0 != xcb_pad) {
4018         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
4019         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
4020         xcb_parts_idx++;
4021         xcb_pad = 0;
4022     }
4023     xcb_block_len = 0;
4024     xcb_padding_offset = 0;
4025 
4026     if (NULL == xcb_out) {
4027         /* allocate memory */
4028         xcb_out = malloc(xcb_buffer_len);
4029         *_buffer = xcb_out;
4030     }
4031 
4032     xcb_tmp = xcb_out;
4033     for(i=0; i<xcb_parts_idx; i++) {
4034         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
4035             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
4036         if (0 != xcb_parts[i].iov_len)
4037             xcb_tmp += xcb_parts[i].iov_len;
4038     }
4039 
4040     return xcb_buffer_len;
4041 }
4042 
4043 int
4044 xcb_input_feedback_ctl_data_unpack (const void                     *_buffer,
4045                                     uint8_t                         class_id,
4046                                     xcb_input_feedback_ctl_data_t  *_aux)
4047 {
4048     char *xcb_tmp = (char *)_buffer;
4049     unsigned int xcb_buffer_len = 0;
4050     unsigned int xcb_block_len = 0;
4051     unsigned int xcb_pad = 0;
4052     unsigned int xcb_align_to = 0;
4053     unsigned int xcb_padding_offset = 0;
4054 
4055 
4056     if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
4057         /* xcb_input_feedback_ctl_data_t.keyboard.key */
4058         _aux->keyboard.key = *(xcb_input_key_code_t *)xcb_tmp;
4059         xcb_block_len += sizeof(xcb_input_key_code_t);
4060         xcb_tmp += sizeof(xcb_input_key_code_t);
4061         xcb_align_to = ALIGNOF(xcb_input_key_code_t);
4062         /* xcb_input_feedback_ctl_data_t.keyboard.auto_repeat_mode */
4063         _aux->keyboard.auto_repeat_mode = *(uint8_t *)xcb_tmp;
4064         xcb_block_len += sizeof(uint8_t);
4065         xcb_tmp += sizeof(uint8_t);
4066         xcb_align_to = ALIGNOF(uint8_t);
4067         /* xcb_input_feedback_ctl_data_t.keyboard.key_click_percent */
4068         _aux->keyboard.key_click_percent = *(int8_t *)xcb_tmp;
4069         xcb_block_len += sizeof(int8_t);
4070         xcb_tmp += sizeof(int8_t);
4071         xcb_align_to = ALIGNOF(int8_t);
4072         /* xcb_input_feedback_ctl_data_t.keyboard.bell_percent */
4073         _aux->keyboard.bell_percent = *(int8_t *)xcb_tmp;
4074         xcb_block_len += sizeof(int8_t);
4075         xcb_tmp += sizeof(int8_t);
4076         xcb_align_to = ALIGNOF(int8_t);
4077         /* xcb_input_feedback_ctl_data_t.keyboard.bell_pitch */
4078         _aux->keyboard.bell_pitch = *(int16_t *)xcb_tmp;
4079         xcb_block_len += sizeof(int16_t);
4080         xcb_tmp += sizeof(int16_t);
4081         xcb_align_to = ALIGNOF(int16_t);
4082         /* xcb_input_feedback_ctl_data_t.keyboard.bell_duration */
4083         _aux->keyboard.bell_duration = *(int16_t *)xcb_tmp;
4084         xcb_block_len += sizeof(int16_t);
4085         xcb_tmp += sizeof(int16_t);
4086         xcb_align_to = ALIGNOF(int16_t);
4087         /* xcb_input_feedback_ctl_data_t.keyboard.led_mask */
4088         _aux->keyboard.led_mask = *(uint32_t *)xcb_tmp;
4089         xcb_block_len += sizeof(uint32_t);
4090         xcb_tmp += sizeof(uint32_t);
4091         xcb_align_to = ALIGNOF(uint32_t);
4092         /* xcb_input_feedback_ctl_data_t.keyboard.led_values */
4093         _aux->keyboard.led_values = *(uint32_t *)xcb_tmp;
4094         xcb_block_len += sizeof(uint32_t);
4095         xcb_tmp += sizeof(uint32_t);
4096         xcb_align_to = ALIGNOF(uint32_t);
4097     }
4098     if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
4099         /* xcb_input_feedback_ctl_data_t.pointer.pad0 */
4100         _aux->pointer.pad0[0] = *(uint8_t *)xcb_tmp;
4101         _aux->pointer.pad0[1] = *(uint8_t *)xcb_tmp;
4102         xcb_block_len += sizeof(uint8_t) * 2;
4103         xcb_tmp += sizeof(uint8_t) * 2;
4104         xcb_align_to = ALIGNOF(uint8_t);
4105         /* xcb_input_feedback_ctl_data_t.pointer.num */
4106         _aux->pointer.num = *(int16_t *)xcb_tmp;
4107         xcb_block_len += sizeof(int16_t);
4108         xcb_tmp += sizeof(int16_t);
4109         xcb_align_to = ALIGNOF(int16_t);
4110         /* xcb_input_feedback_ctl_data_t.pointer.denom */
4111         _aux->pointer.denom = *(int16_t *)xcb_tmp;
4112         xcb_block_len += sizeof(int16_t);
4113         xcb_tmp += sizeof(int16_t);
4114         xcb_align_to = ALIGNOF(int16_t);
4115         /* xcb_input_feedback_ctl_data_t.pointer.threshold */
4116         _aux->pointer.threshold = *(int16_t *)xcb_tmp;
4117         xcb_block_len += sizeof(int16_t);
4118         xcb_tmp += sizeof(int16_t);
4119         xcb_align_to = ALIGNOF(int16_t);
4120     }
4121     if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
4122         /* xcb_input_feedback_ctl_data_t.string.pad1 */
4123         _aux->string.pad1[0] = *(uint8_t *)xcb_tmp;
4124         _aux->string.pad1[1] = *(uint8_t *)xcb_tmp;
4125         xcb_block_len += sizeof(uint8_t) * 2;
4126         xcb_tmp += sizeof(uint8_t) * 2;
4127         xcb_align_to = ALIGNOF(uint8_t);
4128         /* xcb_input_feedback_ctl_data_t.string.num_keysyms */
4129         _aux->string.num_keysyms = *(uint16_t *)xcb_tmp;
4130         xcb_block_len += sizeof(uint16_t);
4131         xcb_tmp += sizeof(uint16_t);
4132         xcb_align_to = ALIGNOF(uint16_t);
4133         /* insert padding */
4134         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
4135         xcb_buffer_len += xcb_block_len + xcb_pad;
4136         if (0 != xcb_pad) {
4137             xcb_tmp += xcb_pad;
4138             xcb_pad = 0;
4139         }
4140         xcb_block_len = 0;
4141         xcb_padding_offset = 0;
4142         /* keysyms */
4143         _aux->string.keysyms = (xcb_keysym_t *)xcb_tmp;
4144         xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
4145         xcb_tmp += xcb_block_len;
4146         xcb_align_to = ALIGNOF(xcb_keysym_t);
4147     }
4148     if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
4149         /* xcb_input_feedback_ctl_data_t.integer.int_to_display */
4150         _aux->integer.int_to_display = *(int32_t *)xcb_tmp;
4151         xcb_block_len += sizeof(int32_t);
4152         xcb_tmp += sizeof(int32_t);
4153         xcb_align_to = ALIGNOF(int32_t);
4154     }
4155     if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
4156         /* xcb_input_feedback_ctl_data_t.led.led_mask */
4157         _aux->led.led_mask = *(uint32_t *)xcb_tmp;
4158         xcb_block_len += sizeof(uint32_t);
4159         xcb_tmp += sizeof(uint32_t);
4160         xcb_align_to = ALIGNOF(uint32_t);
4161         /* xcb_input_feedback_ctl_data_t.led.led_values */
4162         _aux->led.led_values = *(uint32_t *)xcb_tmp;
4163         xcb_block_len += sizeof(uint32_t);
4164         xcb_tmp += sizeof(uint32_t);
4165         xcb_align_to = ALIGNOF(uint32_t);
4166     }
4167     if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
4168         /* xcb_input_feedback_ctl_data_t.bell.percent */
4169         _aux->bell.percent = *(int8_t *)xcb_tmp;
4170         xcb_block_len += sizeof(int8_t);
4171         xcb_tmp += sizeof(int8_t);
4172         xcb_align_to = ALIGNOF(int8_t);
4173         /* xcb_input_feedback_ctl_data_t.bell.pad2 */
4174         _aux->bell.pad2[0] = *(uint8_t *)xcb_tmp;
4175         _aux->bell.pad2[1] = *(uint8_t *)xcb_tmp;
4176         _aux->bell.pad2[2] = *(uint8_t *)xcb_tmp;
4177         xcb_block_len += sizeof(uint8_t) * 3;
4178         xcb_tmp += sizeof(uint8_t) * 3;
4179         xcb_align_to = ALIGNOF(uint8_t);
4180         /* xcb_input_feedback_ctl_data_t.bell.pitch */
4181         _aux->bell.pitch = *(int16_t *)xcb_tmp;
4182         xcb_block_len += sizeof(int16_t);
4183         xcb_tmp += sizeof(int16_t);
4184         xcb_align_to = ALIGNOF(int16_t);
4185         /* xcb_input_feedback_ctl_data_t.bell.duration */
4186         _aux->bell.duration = *(int16_t *)xcb_tmp;
4187         xcb_block_len += sizeof(int16_t);
4188         xcb_tmp += sizeof(int16_t);
4189         xcb_align_to = ALIGNOF(int16_t);
4190     }
4191     /* insert padding */
4192     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
4193     xcb_buffer_len += xcb_block_len + xcb_pad;
4194     if (0 != xcb_pad) {
4195         xcb_tmp += xcb_pad;
4196         xcb_pad = 0;
4197     }
4198     xcb_block_len = 0;
4199     xcb_padding_offset = 0;
4200 
4201     return xcb_buffer_len;
4202 }
4203 
4204 int
4205 xcb_input_feedback_ctl_data_sizeof (const void  *_buffer,
4206                                     uint8_t      class_id)
4207 {
4208     xcb_input_feedback_ctl_data_t _aux;
4209     return xcb_input_feedback_ctl_data_unpack(_buffer, class_id, &_aux);
4210 }
4211 
4212 int
4213 xcb_input_feedback_ctl_sizeof (const void  *_buffer)
4214 {
4215     char *xcb_tmp = (char *)_buffer;
4216     const xcb_input_feedback_ctl_t *_aux = (xcb_input_feedback_ctl_t *)_buffer;
4217     unsigned int xcb_buffer_len = 0;
4218     unsigned int xcb_block_len = 0;
4219     unsigned int xcb_pad = 0;
4220     unsigned int xcb_align_to = 0;
4221 
4222 
4223     xcb_block_len += sizeof(xcb_input_feedback_ctl_t);
4224     xcb_tmp += xcb_block_len;
4225     xcb_buffer_len += xcb_block_len;
4226     xcb_block_len = 0;
4227     /* data */
4228     xcb_block_len += xcb_input_feedback_ctl_data_sizeof(xcb_tmp, _aux->class_id);
4229     xcb_tmp += xcb_block_len;
4230     xcb_align_to = ALIGNOF(char);
4231     /* insert padding */
4232     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4233     xcb_buffer_len += xcb_block_len + xcb_pad;
4234     if (0 != xcb_pad) {
4235         xcb_tmp += xcb_pad;
4236         xcb_pad = 0;
4237     }
4238     xcb_block_len = 0;
4239 
4240     return xcb_buffer_len;
4241 }
4242 
4243 void *
4244 xcb_input_feedback_ctl_data (const xcb_input_feedback_ctl_t *R)
4245 {
4246     return (void *) (R + 1);
4247 }
4248 
4249 void
4250 xcb_input_feedback_ctl_next (xcb_input_feedback_ctl_iterator_t *i)
4251 {
4252     xcb_input_feedback_ctl_t *R = i->data;
4253     xcb_generic_iterator_t child;
4254     child.data = (xcb_input_feedback_ctl_t *)(((char *)R) + xcb_input_feedback_ctl_sizeof(R));
4255     i->index = (char *) child.data - (char *) i->data;
4256     --i->rem;
4257     i->data = (xcb_input_feedback_ctl_t *) child.data;
4258 }
4259 
4260 xcb_generic_iterator_t
4261 xcb_input_feedback_ctl_end (xcb_input_feedback_ctl_iterator_t i)
4262 {
4263     xcb_generic_iterator_t ret;
4264     while(i.rem > 0)
4265         xcb_input_feedback_ctl_next(&i);
4266     ret.data = i.data;
4267     ret.rem = i.rem;
4268     ret.index = i.index;
4269     return ret;
4270 }
4271 
4272 int
4273 xcb_input_change_feedback_control_sizeof (const void  *_buffer)
4274 {
4275     char *xcb_tmp = (char *)_buffer;
4276     unsigned int xcb_buffer_len = 0;
4277     unsigned int xcb_block_len = 0;
4278     unsigned int xcb_pad = 0;
4279     unsigned int xcb_align_to = 0;
4280 
4281 
4282     xcb_block_len += sizeof(xcb_input_change_feedback_control_request_t);
4283     xcb_tmp += xcb_block_len;
4284     xcb_buffer_len += xcb_block_len;
4285     xcb_block_len = 0;
4286     /* feedback */
4287     xcb_block_len += xcb_input_feedback_ctl_sizeof(xcb_tmp);
4288     xcb_tmp += xcb_block_len;
4289     xcb_align_to = ALIGNOF(xcb_input_feedback_ctl_t);
4290     /* insert padding */
4291     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4292     xcb_buffer_len += xcb_block_len + xcb_pad;
4293     if (0 != xcb_pad) {
4294         xcb_tmp += xcb_pad;
4295         xcb_pad = 0;
4296     }
4297     xcb_block_len = 0;
4298 
4299     return xcb_buffer_len;
4300 }
4301 
4302 xcb_void_cookie_t
4303 xcb_input_change_feedback_control_checked (xcb_connection_t         *c,
4304                                            uint32_t                  mask,
4305                                            uint8_t                   device_id,
4306                                            uint8_t                   feedback_id,
4307                                            xcb_input_feedback_ctl_t *feedback)
4308 {
4309     static const xcb_protocol_request_t xcb_req = {
4310         .count = 4,
4311         .ext = &xcb_input_id,
4312         .opcode = XCB_INPUT_CHANGE_FEEDBACK_CONTROL,
4313         .isvoid = 1
4314     };
4315 
4316     struct iovec xcb_parts[6];
4317     xcb_void_cookie_t xcb_ret;
4318     xcb_input_change_feedback_control_request_t xcb_out;
4319 
4320     xcb_out.mask = mask;
4321     xcb_out.device_id = device_id;
4322     xcb_out.feedback_id = feedback_id;
4323     memset(xcb_out.pad0, 0, 2);
4324 
4325     xcb_parts[2].iov_base = (char *) &xcb_out;
4326     xcb_parts[2].iov_len = sizeof(xcb_out);
4327     xcb_parts[3].iov_base = 0;
4328     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4329     /* xcb_input_feedback_ctl_t feedback */
4330     xcb_parts[4].iov_base = (char *) feedback;
4331     xcb_parts[4].iov_len =
4332       xcb_input_feedback_ctl_sizeof (feedback);
4333 
4334     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4335     return xcb_ret;
4336 }
4337 
4338 xcb_void_cookie_t
4339 xcb_input_change_feedback_control (xcb_connection_t         *c,
4340                                    uint32_t                  mask,
4341                                    uint8_t                   device_id,
4342                                    uint8_t                   feedback_id,
4343                                    xcb_input_feedback_ctl_t *feedback)
4344 {
4345     static const xcb_protocol_request_t xcb_req = {
4346         .count = 4,
4347         .ext = &xcb_input_id,
4348         .opcode = XCB_INPUT_CHANGE_FEEDBACK_CONTROL,
4349         .isvoid = 1
4350     };
4351 
4352     struct iovec xcb_parts[6];
4353     xcb_void_cookie_t xcb_ret;
4354     xcb_input_change_feedback_control_request_t xcb_out;
4355 
4356     xcb_out.mask = mask;
4357     xcb_out.device_id = device_id;
4358     xcb_out.feedback_id = feedback_id;
4359     memset(xcb_out.pad0, 0, 2);
4360 
4361     xcb_parts[2].iov_base = (char *) &xcb_out;
4362     xcb_parts[2].iov_len = sizeof(xcb_out);
4363     xcb_parts[3].iov_base = 0;
4364     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4365     /* xcb_input_feedback_ctl_t feedback */
4366     xcb_parts[4].iov_base = (char *) feedback;
4367     xcb_parts[4].iov_len =
4368       xcb_input_feedback_ctl_sizeof (feedback);
4369 
4370     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4371     return xcb_ret;
4372 }
4373 
4374 xcb_input_feedback_ctl_t *
4375 xcb_input_change_feedback_control_feedback (const xcb_input_change_feedback_control_request_t *R)
4376 {
4377     return (xcb_input_feedback_ctl_t *) (R + 1);
4378 }
4379 
4380 int
4381 xcb_input_get_device_key_mapping_sizeof (const void  *_buffer)
4382 {
4383     char *xcb_tmp = (char *)_buffer;
4384     const xcb_input_get_device_key_mapping_reply_t *_aux = (xcb_input_get_device_key_mapping_reply_t *)_buffer;
4385     unsigned int xcb_buffer_len = 0;
4386     unsigned int xcb_block_len = 0;
4387     unsigned int xcb_pad = 0;
4388     unsigned int xcb_align_to = 0;
4389 
4390 
4391     xcb_block_len += sizeof(xcb_input_get_device_key_mapping_reply_t);
4392     xcb_tmp += xcb_block_len;
4393     xcb_buffer_len += xcb_block_len;
4394     xcb_block_len = 0;
4395     /* keysyms */
4396     xcb_block_len += _aux->length * sizeof(xcb_keysym_t);
4397     xcb_tmp += xcb_block_len;
4398     xcb_align_to = ALIGNOF(xcb_keysym_t);
4399     /* insert padding */
4400     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4401     xcb_buffer_len += xcb_block_len + xcb_pad;
4402     if (0 != xcb_pad) {
4403         xcb_tmp += xcb_pad;
4404         xcb_pad = 0;
4405     }
4406     xcb_block_len = 0;
4407 
4408     return xcb_buffer_len;
4409 }
4410 
4411 xcb_input_get_device_key_mapping_cookie_t
4412 xcb_input_get_device_key_mapping (xcb_connection_t     *c,
4413                                   uint8_t               device_id,
4414                                   xcb_input_key_code_t  first_keycode,
4415                                   uint8_t               count)
4416 {
4417     static const xcb_protocol_request_t xcb_req = {
4418         .count = 2,
4419         .ext = &xcb_input_id,
4420         .opcode = XCB_INPUT_GET_DEVICE_KEY_MAPPING,
4421         .isvoid = 0
4422     };
4423 
4424     struct iovec xcb_parts[4];
4425     xcb_input_get_device_key_mapping_cookie_t xcb_ret;
4426     xcb_input_get_device_key_mapping_request_t xcb_out;
4427 
4428     xcb_out.device_id = device_id;
4429     xcb_out.first_keycode = first_keycode;
4430     xcb_out.count = count;
4431     xcb_out.pad0 = 0;
4432 
4433     xcb_parts[2].iov_base = (char *) &xcb_out;
4434     xcb_parts[2].iov_len = sizeof(xcb_out);
4435     xcb_parts[3].iov_base = 0;
4436     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4437 
4438     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4439     return xcb_ret;
4440 }
4441 
4442 xcb_input_get_device_key_mapping_cookie_t
4443 xcb_input_get_device_key_mapping_unchecked (xcb_connection_t     *c,
4444                                             uint8_t               device_id,
4445                                             xcb_input_key_code_t  first_keycode,
4446                                             uint8_t               count)
4447 {
4448     static const xcb_protocol_request_t xcb_req = {
4449         .count = 2,
4450         .ext = &xcb_input_id,
4451         .opcode = XCB_INPUT_GET_DEVICE_KEY_MAPPING,
4452         .isvoid = 0
4453     };
4454 
4455     struct iovec xcb_parts[4];
4456     xcb_input_get_device_key_mapping_cookie_t xcb_ret;
4457     xcb_input_get_device_key_mapping_request_t xcb_out;
4458 
4459     xcb_out.device_id = device_id;
4460     xcb_out.first_keycode = first_keycode;
4461     xcb_out.count = count;
4462     xcb_out.pad0 = 0;
4463 
4464     xcb_parts[2].iov_base = (char *) &xcb_out;
4465     xcb_parts[2].iov_len = sizeof(xcb_out);
4466     xcb_parts[3].iov_base = 0;
4467     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4468 
4469     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4470     return xcb_ret;
4471 }
4472 
4473 xcb_keysym_t *
4474 xcb_input_get_device_key_mapping_keysyms (const xcb_input_get_device_key_mapping_reply_t *R)
4475 {
4476     return (xcb_keysym_t *) (R + 1);
4477 }
4478 
4479 int
4480 xcb_input_get_device_key_mapping_keysyms_length (const xcb_input_get_device_key_mapping_reply_t *R)
4481 {
4482     return R->length;
4483 }
4484 
4485 xcb_generic_iterator_t
4486 xcb_input_get_device_key_mapping_keysyms_end (const xcb_input_get_device_key_mapping_reply_t *R)
4487 {
4488     xcb_generic_iterator_t i;
4489     i.data = ((xcb_keysym_t *) (R + 1)) + (R->length);
4490     i.rem = 0;
4491     i.index = (char *) i.data - (char *) R;
4492     return i;
4493 }
4494 
4495 xcb_input_get_device_key_mapping_reply_t *
4496 xcb_input_get_device_key_mapping_reply (xcb_connection_t                           *c,
4497                                         xcb_input_get_device_key_mapping_cookie_t   cookie  /**< */,
4498                                         xcb_generic_error_t                       **e)
4499 {
4500     return (xcb_input_get_device_key_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
4501 }
4502 
4503 int
4504 xcb_input_change_device_key_mapping_sizeof (const void  *_buffer)
4505 {
4506     char *xcb_tmp = (char *)_buffer;
4507     const xcb_input_change_device_key_mapping_request_t *_aux = (xcb_input_change_device_key_mapping_request_t *)_buffer;
4508     unsigned int xcb_buffer_len = 0;
4509     unsigned int xcb_block_len = 0;
4510     unsigned int xcb_pad = 0;
4511     unsigned int xcb_align_to = 0;
4512 
4513 
4514     xcb_block_len += sizeof(xcb_input_change_device_key_mapping_request_t);
4515     xcb_tmp += xcb_block_len;
4516     xcb_buffer_len += xcb_block_len;
4517     xcb_block_len = 0;
4518     /* keysyms */
4519     xcb_block_len += (_aux->keycode_count * _aux->keysyms_per_keycode) * sizeof(xcb_keysym_t);
4520     xcb_tmp += xcb_block_len;
4521     xcb_align_to = ALIGNOF(xcb_keysym_t);
4522     /* insert padding */
4523     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4524     xcb_buffer_len += xcb_block_len + xcb_pad;
4525     if (0 != xcb_pad) {
4526         xcb_tmp += xcb_pad;
4527         xcb_pad = 0;
4528     }
4529     xcb_block_len = 0;
4530 
4531     return xcb_buffer_len;
4532 }
4533 
4534 xcb_void_cookie_t
4535 xcb_input_change_device_key_mapping_checked (xcb_connection_t     *c,
4536                                              uint8_t               device_id,
4537                                              xcb_input_key_code_t  first_keycode,
4538                                              uint8_t               keysyms_per_keycode,
4539                                              uint8_t               keycode_count,
4540                                              const xcb_keysym_t   *keysyms)
4541 {
4542     static const xcb_protocol_request_t xcb_req = {
4543         .count = 4,
4544         .ext = &xcb_input_id,
4545         .opcode = XCB_INPUT_CHANGE_DEVICE_KEY_MAPPING,
4546         .isvoid = 1
4547     };
4548 
4549     struct iovec xcb_parts[6];
4550     xcb_void_cookie_t xcb_ret;
4551     xcb_input_change_device_key_mapping_request_t xcb_out;
4552 
4553     xcb_out.device_id = device_id;
4554     xcb_out.first_keycode = first_keycode;
4555     xcb_out.keysyms_per_keycode = keysyms_per_keycode;
4556     xcb_out.keycode_count = keycode_count;
4557 
4558     xcb_parts[2].iov_base = (char *) &xcb_out;
4559     xcb_parts[2].iov_len = sizeof(xcb_out);
4560     xcb_parts[3].iov_base = 0;
4561     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4562     /* xcb_keysym_t keysyms */
4563     xcb_parts[4].iov_base = (char *) keysyms;
4564     xcb_parts[4].iov_len = (keycode_count * keysyms_per_keycode) * sizeof(xcb_keysym_t);
4565     xcb_parts[5].iov_base = 0;
4566     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
4567 
4568     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4569     return xcb_ret;
4570 }
4571 
4572 xcb_void_cookie_t
4573 xcb_input_change_device_key_mapping (xcb_connection_t     *c,
4574                                      uint8_t               device_id,
4575                                      xcb_input_key_code_t  first_keycode,
4576                                      uint8_t               keysyms_per_keycode,
4577                                      uint8_t               keycode_count,
4578                                      const xcb_keysym_t   *keysyms)
4579 {
4580     static const xcb_protocol_request_t xcb_req = {
4581         .count = 4,
4582         .ext = &xcb_input_id,
4583         .opcode = XCB_INPUT_CHANGE_DEVICE_KEY_MAPPING,
4584         .isvoid = 1
4585     };
4586 
4587     struct iovec xcb_parts[6];
4588     xcb_void_cookie_t xcb_ret;
4589     xcb_input_change_device_key_mapping_request_t xcb_out;
4590 
4591     xcb_out.device_id = device_id;
4592     xcb_out.first_keycode = first_keycode;
4593     xcb_out.keysyms_per_keycode = keysyms_per_keycode;
4594     xcb_out.keycode_count = keycode_count;
4595 
4596     xcb_parts[2].iov_base = (char *) &xcb_out;
4597     xcb_parts[2].iov_len = sizeof(xcb_out);
4598     xcb_parts[3].iov_base = 0;
4599     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4600     /* xcb_keysym_t keysyms */
4601     xcb_parts[4].iov_base = (char *) keysyms;
4602     xcb_parts[4].iov_len = (keycode_count * keysyms_per_keycode) * sizeof(xcb_keysym_t);
4603     xcb_parts[5].iov_base = 0;
4604     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
4605 
4606     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4607     return xcb_ret;
4608 }
4609 
4610 xcb_keysym_t *
4611 xcb_input_change_device_key_mapping_keysyms (const xcb_input_change_device_key_mapping_request_t *R)
4612 {
4613     return (xcb_keysym_t *) (R + 1);
4614 }
4615 
4616 int
4617 xcb_input_change_device_key_mapping_keysyms_length (const xcb_input_change_device_key_mapping_request_t *R)
4618 {
4619     return (R->keycode_count * R->keysyms_per_keycode);
4620 }
4621 
4622 xcb_generic_iterator_t
4623 xcb_input_change_device_key_mapping_keysyms_end (const xcb_input_change_device_key_mapping_request_t *R)
4624 {
4625     xcb_generic_iterator_t i;
4626     i.data = ((xcb_keysym_t *) (R + 1)) + ((R->keycode_count * R->keysyms_per_keycode));
4627     i.rem = 0;
4628     i.index = (char *) i.data - (char *) R;
4629     return i;
4630 }
4631 
4632 int
4633 xcb_input_get_device_modifier_mapping_sizeof (const void  *_buffer)
4634 {
4635     char *xcb_tmp = (char *)_buffer;
4636     const xcb_input_get_device_modifier_mapping_reply_t *_aux = (xcb_input_get_device_modifier_mapping_reply_t *)_buffer;
4637     unsigned int xcb_buffer_len = 0;
4638     unsigned int xcb_block_len = 0;
4639     unsigned int xcb_pad = 0;
4640     unsigned int xcb_align_to = 0;
4641 
4642 
4643     xcb_block_len += sizeof(xcb_input_get_device_modifier_mapping_reply_t);
4644     xcb_tmp += xcb_block_len;
4645     xcb_buffer_len += xcb_block_len;
4646     xcb_block_len = 0;
4647     /* keymaps */
4648     xcb_block_len += (_aux->keycodes_per_modifier * 8) * sizeof(uint8_t);
4649     xcb_tmp += xcb_block_len;
4650     xcb_align_to = ALIGNOF(uint8_t);
4651     /* insert padding */
4652     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4653     xcb_buffer_len += xcb_block_len + xcb_pad;
4654     if (0 != xcb_pad) {
4655         xcb_tmp += xcb_pad;
4656         xcb_pad = 0;
4657     }
4658     xcb_block_len = 0;
4659 
4660     return xcb_buffer_len;
4661 }
4662 
4663 xcb_input_get_device_modifier_mapping_cookie_t
4664 xcb_input_get_device_modifier_mapping (xcb_connection_t *c,
4665                                        uint8_t           device_id)
4666 {
4667     static const xcb_protocol_request_t xcb_req = {
4668         .count = 2,
4669         .ext = &xcb_input_id,
4670         .opcode = XCB_INPUT_GET_DEVICE_MODIFIER_MAPPING,
4671         .isvoid = 0
4672     };
4673 
4674     struct iovec xcb_parts[4];
4675     xcb_input_get_device_modifier_mapping_cookie_t xcb_ret;
4676     xcb_input_get_device_modifier_mapping_request_t xcb_out;
4677 
4678     xcb_out.device_id = device_id;
4679     memset(xcb_out.pad0, 0, 3);
4680 
4681     xcb_parts[2].iov_base = (char *) &xcb_out;
4682     xcb_parts[2].iov_len = sizeof(xcb_out);
4683     xcb_parts[3].iov_base = 0;
4684     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4685 
4686     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4687     return xcb_ret;
4688 }
4689 
4690 xcb_input_get_device_modifier_mapping_cookie_t
4691 xcb_input_get_device_modifier_mapping_unchecked (xcb_connection_t *c,
4692                                                  uint8_t           device_id)
4693 {
4694     static const xcb_protocol_request_t xcb_req = {
4695         .count = 2,
4696         .ext = &xcb_input_id,
4697         .opcode = XCB_INPUT_GET_DEVICE_MODIFIER_MAPPING,
4698         .isvoid = 0
4699     };
4700 
4701     struct iovec xcb_parts[4];
4702     xcb_input_get_device_modifier_mapping_cookie_t xcb_ret;
4703     xcb_input_get_device_modifier_mapping_request_t xcb_out;
4704 
4705     xcb_out.device_id = device_id;
4706     memset(xcb_out.pad0, 0, 3);
4707 
4708     xcb_parts[2].iov_base = (char *) &xcb_out;
4709     xcb_parts[2].iov_len = sizeof(xcb_out);
4710     xcb_parts[3].iov_base = 0;
4711     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4712 
4713     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4714     return xcb_ret;
4715 }
4716 
4717 uint8_t *
4718 xcb_input_get_device_modifier_mapping_keymaps (const xcb_input_get_device_modifier_mapping_reply_t *R)
4719 {
4720     return (uint8_t *) (R + 1);
4721 }
4722 
4723 int
4724 xcb_input_get_device_modifier_mapping_keymaps_length (const xcb_input_get_device_modifier_mapping_reply_t *R)
4725 {
4726     return (R->keycodes_per_modifier * 8);
4727 }
4728 
4729 xcb_generic_iterator_t
4730 xcb_input_get_device_modifier_mapping_keymaps_end (const xcb_input_get_device_modifier_mapping_reply_t *R)
4731 {
4732     xcb_generic_iterator_t i;
4733     i.data = ((uint8_t *) (R + 1)) + ((R->keycodes_per_modifier * 8));
4734     i.rem = 0;
4735     i.index = (char *) i.data - (char *) R;
4736     return i;
4737 }
4738 
4739 xcb_input_get_device_modifier_mapping_reply_t *
4740 xcb_input_get_device_modifier_mapping_reply (xcb_connection_t                                *c,
4741                                              xcb_input_get_device_modifier_mapping_cookie_t   cookie  /**< */,
4742                                              xcb_generic_error_t                            **e)
4743 {
4744     return (xcb_input_get_device_modifier_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
4745 }
4746 
4747 int
4748 xcb_input_set_device_modifier_mapping_sizeof (const void  *_buffer)
4749 {
4750     char *xcb_tmp = (char *)_buffer;
4751     const xcb_input_set_device_modifier_mapping_request_t *_aux = (xcb_input_set_device_modifier_mapping_request_t *)_buffer;
4752     unsigned int xcb_buffer_len = 0;
4753     unsigned int xcb_block_len = 0;
4754     unsigned int xcb_pad = 0;
4755     unsigned int xcb_align_to = 0;
4756 
4757 
4758     xcb_block_len += sizeof(xcb_input_set_device_modifier_mapping_request_t);
4759     xcb_tmp += xcb_block_len;
4760     xcb_buffer_len += xcb_block_len;
4761     xcb_block_len = 0;
4762     /* keymaps */
4763     xcb_block_len += (_aux->keycodes_per_modifier * 8) * sizeof(uint8_t);
4764     xcb_tmp += xcb_block_len;
4765     xcb_align_to = ALIGNOF(uint8_t);
4766     /* insert padding */
4767     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4768     xcb_buffer_len += xcb_block_len + xcb_pad;
4769     if (0 != xcb_pad) {
4770         xcb_tmp += xcb_pad;
4771         xcb_pad = 0;
4772     }
4773     xcb_block_len = 0;
4774 
4775     return xcb_buffer_len;
4776 }
4777 
4778 xcb_input_set_device_modifier_mapping_cookie_t
4779 xcb_input_set_device_modifier_mapping (xcb_connection_t *c,
4780                                        uint8_t           device_id,
4781                                        uint8_t           keycodes_per_modifier,
4782                                        const uint8_t    *keymaps)
4783 {
4784     static const xcb_protocol_request_t xcb_req = {
4785         .count = 4,
4786         .ext = &xcb_input_id,
4787         .opcode = XCB_INPUT_SET_DEVICE_MODIFIER_MAPPING,
4788         .isvoid = 0
4789     };
4790 
4791     struct iovec xcb_parts[6];
4792     xcb_input_set_device_modifier_mapping_cookie_t xcb_ret;
4793     xcb_input_set_device_modifier_mapping_request_t xcb_out;
4794 
4795     xcb_out.device_id = device_id;
4796     xcb_out.keycodes_per_modifier = keycodes_per_modifier;
4797     memset(xcb_out.pad0, 0, 2);
4798 
4799     xcb_parts[2].iov_base = (char *) &xcb_out;
4800     xcb_parts[2].iov_len = sizeof(xcb_out);
4801     xcb_parts[3].iov_base = 0;
4802     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4803     /* uint8_t keymaps */
4804     xcb_parts[4].iov_base = (char *) keymaps;
4805     xcb_parts[4].iov_len = (keycodes_per_modifier * 8) * sizeof(uint8_t);
4806     xcb_parts[5].iov_base = 0;
4807     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
4808 
4809     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4810     return xcb_ret;
4811 }
4812 
4813 xcb_input_set_device_modifier_mapping_cookie_t
4814 xcb_input_set_device_modifier_mapping_unchecked (xcb_connection_t *c,
4815                                                  uint8_t           device_id,
4816                                                  uint8_t           keycodes_per_modifier,
4817                                                  const uint8_t    *keymaps)
4818 {
4819     static const xcb_protocol_request_t xcb_req = {
4820         .count = 4,
4821         .ext = &xcb_input_id,
4822         .opcode = XCB_INPUT_SET_DEVICE_MODIFIER_MAPPING,
4823         .isvoid = 0
4824     };
4825 
4826     struct iovec xcb_parts[6];
4827     xcb_input_set_device_modifier_mapping_cookie_t xcb_ret;
4828     xcb_input_set_device_modifier_mapping_request_t xcb_out;
4829 
4830     xcb_out.device_id = device_id;
4831     xcb_out.keycodes_per_modifier = keycodes_per_modifier;
4832     memset(xcb_out.pad0, 0, 2);
4833 
4834     xcb_parts[2].iov_base = (char *) &xcb_out;
4835     xcb_parts[2].iov_len = sizeof(xcb_out);
4836     xcb_parts[3].iov_base = 0;
4837     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4838     /* uint8_t keymaps */
4839     xcb_parts[4].iov_base = (char *) keymaps;
4840     xcb_parts[4].iov_len = (keycodes_per_modifier * 8) * sizeof(uint8_t);
4841     xcb_parts[5].iov_base = 0;
4842     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
4843 
4844     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4845     return xcb_ret;
4846 }
4847 
4848 xcb_input_set_device_modifier_mapping_reply_t *
4849 xcb_input_set_device_modifier_mapping_reply (xcb_connection_t                                *c,
4850                                              xcb_input_set_device_modifier_mapping_cookie_t   cookie  /**< */,
4851                                              xcb_generic_error_t                            **e)
4852 {
4853     return (xcb_input_set_device_modifier_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
4854 }
4855 
4856 int
4857 xcb_input_get_device_button_mapping_sizeof (const void  *_buffer)
4858 {
4859     char *xcb_tmp = (char *)_buffer;
4860     const xcb_input_get_device_button_mapping_reply_t *_aux = (xcb_input_get_device_button_mapping_reply_t *)_buffer;
4861     unsigned int xcb_buffer_len = 0;
4862     unsigned int xcb_block_len = 0;
4863     unsigned int xcb_pad = 0;
4864     unsigned int xcb_align_to = 0;
4865 
4866 
4867     xcb_block_len += sizeof(xcb_input_get_device_button_mapping_reply_t);
4868     xcb_tmp += xcb_block_len;
4869     xcb_buffer_len += xcb_block_len;
4870     xcb_block_len = 0;
4871     /* map */
4872     xcb_block_len += _aux->map_size * sizeof(uint8_t);
4873     xcb_tmp += xcb_block_len;
4874     xcb_align_to = ALIGNOF(uint8_t);
4875     xcb_align_to = 4;
4876     /* insert padding */
4877     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4878     xcb_buffer_len += xcb_block_len + xcb_pad;
4879     if (0 != xcb_pad) {
4880         xcb_tmp += xcb_pad;
4881         xcb_pad = 0;
4882     }
4883     xcb_block_len = 0;
4884     /* insert padding */
4885     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
4886     xcb_buffer_len += xcb_block_len + xcb_pad;
4887     if (0 != xcb_pad) {
4888         xcb_tmp += xcb_pad;
4889         xcb_pad = 0;
4890     }
4891     xcb_block_len = 0;
4892 
4893     return xcb_buffer_len;
4894 }
4895 
4896 xcb_input_get_device_button_mapping_cookie_t
4897 xcb_input_get_device_button_mapping (xcb_connection_t *c,
4898                                      uint8_t           device_id)
4899 {
4900     static const xcb_protocol_request_t xcb_req = {
4901         .count = 2,
4902         .ext = &xcb_input_id,
4903         .opcode = XCB_INPUT_GET_DEVICE_BUTTON_MAPPING,
4904         .isvoid = 0
4905     };
4906 
4907     struct iovec xcb_parts[4];
4908     xcb_input_get_device_button_mapping_cookie_t xcb_ret;
4909     xcb_input_get_device_button_mapping_request_t xcb_out;
4910 
4911     xcb_out.device_id = device_id;
4912     memset(xcb_out.pad0, 0, 3);
4913 
4914     xcb_parts[2].iov_base = (char *) &xcb_out;
4915     xcb_parts[2].iov_len = sizeof(xcb_out);
4916     xcb_parts[3].iov_base = 0;
4917     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4918 
4919     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
4920     return xcb_ret;
4921 }
4922 
4923 xcb_input_get_device_button_mapping_cookie_t
4924 xcb_input_get_device_button_mapping_unchecked (xcb_connection_t *c,
4925                                                uint8_t           device_id)
4926 {
4927     static const xcb_protocol_request_t xcb_req = {
4928         .count = 2,
4929         .ext = &xcb_input_id,
4930         .opcode = XCB_INPUT_GET_DEVICE_BUTTON_MAPPING,
4931         .isvoid = 0
4932     };
4933 
4934     struct iovec xcb_parts[4];
4935     xcb_input_get_device_button_mapping_cookie_t xcb_ret;
4936     xcb_input_get_device_button_mapping_request_t xcb_out;
4937 
4938     xcb_out.device_id = device_id;
4939     memset(xcb_out.pad0, 0, 3);
4940 
4941     xcb_parts[2].iov_base = (char *) &xcb_out;
4942     xcb_parts[2].iov_len = sizeof(xcb_out);
4943     xcb_parts[3].iov_base = 0;
4944     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
4945 
4946     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
4947     return xcb_ret;
4948 }
4949 
4950 uint8_t *
4951 xcb_input_get_device_button_mapping_map (const xcb_input_get_device_button_mapping_reply_t *R)
4952 {
4953     return (uint8_t *) (R + 1);
4954 }
4955 
4956 int
4957 xcb_input_get_device_button_mapping_map_length (const xcb_input_get_device_button_mapping_reply_t *R)
4958 {
4959     return R->map_size;
4960 }
4961 
4962 xcb_generic_iterator_t
4963 xcb_input_get_device_button_mapping_map_end (const xcb_input_get_device_button_mapping_reply_t *R)
4964 {
4965     xcb_generic_iterator_t i;
4966     i.data = ((uint8_t *) (R + 1)) + (R->map_size);
4967     i.rem = 0;
4968     i.index = (char *) i.data - (char *) R;
4969     return i;
4970 }
4971 
4972 xcb_input_get_device_button_mapping_reply_t *
4973 xcb_input_get_device_button_mapping_reply (xcb_connection_t                              *c,
4974                                            xcb_input_get_device_button_mapping_cookie_t   cookie  /**< */,
4975                                            xcb_generic_error_t                          **e)
4976 {
4977     return (xcb_input_get_device_button_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
4978 }
4979 
4980 int
4981 xcb_input_set_device_button_mapping_sizeof (const void  *_buffer)
4982 {
4983     char *xcb_tmp = (char *)_buffer;
4984     const xcb_input_set_device_button_mapping_request_t *_aux = (xcb_input_set_device_button_mapping_request_t *)_buffer;
4985     unsigned int xcb_buffer_len = 0;
4986     unsigned int xcb_block_len = 0;
4987     unsigned int xcb_pad = 0;
4988     unsigned int xcb_align_to = 0;
4989 
4990 
4991     xcb_block_len += sizeof(xcb_input_set_device_button_mapping_request_t);
4992     xcb_tmp += xcb_block_len;
4993     xcb_buffer_len += xcb_block_len;
4994     xcb_block_len = 0;
4995     /* map */
4996     xcb_block_len += _aux->map_size * sizeof(uint8_t);
4997     xcb_tmp += xcb_block_len;
4998     xcb_align_to = ALIGNOF(uint8_t);
4999     /* insert padding */
5000     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5001     xcb_buffer_len += xcb_block_len + xcb_pad;
5002     if (0 != xcb_pad) {
5003         xcb_tmp += xcb_pad;
5004         xcb_pad = 0;
5005     }
5006     xcb_block_len = 0;
5007 
5008     return xcb_buffer_len;
5009 }
5010 
5011 xcb_input_set_device_button_mapping_cookie_t
5012 xcb_input_set_device_button_mapping (xcb_connection_t *c,
5013                                      uint8_t           device_id,
5014                                      uint8_t           map_size,
5015                                      const uint8_t    *map)
5016 {
5017     static const xcb_protocol_request_t xcb_req = {
5018         .count = 4,
5019         .ext = &xcb_input_id,
5020         .opcode = XCB_INPUT_SET_DEVICE_BUTTON_MAPPING,
5021         .isvoid = 0
5022     };
5023 
5024     struct iovec xcb_parts[6];
5025     xcb_input_set_device_button_mapping_cookie_t xcb_ret;
5026     xcb_input_set_device_button_mapping_request_t xcb_out;
5027 
5028     xcb_out.device_id = device_id;
5029     xcb_out.map_size = map_size;
5030     memset(xcb_out.pad0, 0, 2);
5031 
5032     xcb_parts[2].iov_base = (char *) &xcb_out;
5033     xcb_parts[2].iov_len = sizeof(xcb_out);
5034     xcb_parts[3].iov_base = 0;
5035     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5036     /* uint8_t map */
5037     xcb_parts[4].iov_base = (char *) map;
5038     xcb_parts[4].iov_len = map_size * sizeof(uint8_t);
5039     xcb_parts[5].iov_base = 0;
5040     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
5041 
5042     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
5043     return xcb_ret;
5044 }
5045 
5046 xcb_input_set_device_button_mapping_cookie_t
5047 xcb_input_set_device_button_mapping_unchecked (xcb_connection_t *c,
5048                                                uint8_t           device_id,
5049                                                uint8_t           map_size,
5050                                                const uint8_t    *map)
5051 {
5052     static const xcb_protocol_request_t xcb_req = {
5053         .count = 4,
5054         .ext = &xcb_input_id,
5055         .opcode = XCB_INPUT_SET_DEVICE_BUTTON_MAPPING,
5056         .isvoid = 0
5057     };
5058 
5059     struct iovec xcb_parts[6];
5060     xcb_input_set_device_button_mapping_cookie_t xcb_ret;
5061     xcb_input_set_device_button_mapping_request_t xcb_out;
5062 
5063     xcb_out.device_id = device_id;
5064     xcb_out.map_size = map_size;
5065     memset(xcb_out.pad0, 0, 2);
5066 
5067     xcb_parts[2].iov_base = (char *) &xcb_out;
5068     xcb_parts[2].iov_len = sizeof(xcb_out);
5069     xcb_parts[3].iov_base = 0;
5070     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5071     /* uint8_t map */
5072     xcb_parts[4].iov_base = (char *) map;
5073     xcb_parts[4].iov_len = map_size * sizeof(uint8_t);
5074     xcb_parts[5].iov_base = 0;
5075     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
5076 
5077     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
5078     return xcb_ret;
5079 }
5080 
5081 xcb_input_set_device_button_mapping_reply_t *
5082 xcb_input_set_device_button_mapping_reply (xcb_connection_t                              *c,
5083                                            xcb_input_set_device_button_mapping_cookie_t   cookie  /**< */,
5084                                            xcb_generic_error_t                          **e)
5085 {
5086     return (xcb_input_set_device_button_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
5087 }
5088 
5089 void
5090 xcb_input_key_state_next (xcb_input_key_state_iterator_t *i)
5091 {
5092     --i->rem;
5093     ++i->data;
5094     i->index += sizeof(xcb_input_key_state_t);
5095 }
5096 
5097 xcb_generic_iterator_t
5098 xcb_input_key_state_end (xcb_input_key_state_iterator_t i)
5099 {
5100     xcb_generic_iterator_t ret;
5101     ret.data = i.data + i.rem;
5102     ret.index = i.index + ((char *) ret.data - (char *) i.data);
5103     ret.rem = 0;
5104     return ret;
5105 }
5106 
5107 void
5108 xcb_input_button_state_next (xcb_input_button_state_iterator_t *i)
5109 {
5110     --i->rem;
5111     ++i->data;
5112     i->index += sizeof(xcb_input_button_state_t);
5113 }
5114 
5115 xcb_generic_iterator_t
5116 xcb_input_button_state_end (xcb_input_button_state_iterator_t i)
5117 {
5118     xcb_generic_iterator_t ret;
5119     ret.data = i.data + i.rem;
5120     ret.index = i.index + ((char *) ret.data - (char *) i.data);
5121     ret.rem = 0;
5122     return ret;
5123 }
5124 
5125 int
5126 xcb_input_valuator_state_sizeof (const void  *_buffer)
5127 {
5128     char *xcb_tmp = (char *)_buffer;
5129     const xcb_input_valuator_state_t *_aux = (xcb_input_valuator_state_t *)_buffer;
5130     unsigned int xcb_buffer_len = 0;
5131     unsigned int xcb_block_len = 0;
5132     unsigned int xcb_pad = 0;
5133     unsigned int xcb_align_to = 0;
5134 
5135 
5136     xcb_block_len += sizeof(xcb_input_valuator_state_t);
5137     xcb_tmp += xcb_block_len;
5138     xcb_buffer_len += xcb_block_len;
5139     xcb_block_len = 0;
5140     /* valuators */
5141     xcb_block_len += _aux->num_valuators * sizeof(int32_t);
5142     xcb_tmp += xcb_block_len;
5143     xcb_align_to = ALIGNOF(int32_t);
5144     /* insert padding */
5145     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5146     xcb_buffer_len += xcb_block_len + xcb_pad;
5147     if (0 != xcb_pad) {
5148         xcb_tmp += xcb_pad;
5149         xcb_pad = 0;
5150     }
5151     xcb_block_len = 0;
5152 
5153     return xcb_buffer_len;
5154 }
5155 
5156 int32_t *
5157 xcb_input_valuator_state_valuators (const xcb_input_valuator_state_t *R)
5158 {
5159     return (int32_t *) (R + 1);
5160 }
5161 
5162 int
5163 xcb_input_valuator_state_valuators_length (const xcb_input_valuator_state_t *R)
5164 {
5165     return R->num_valuators;
5166 }
5167 
5168 xcb_generic_iterator_t
5169 xcb_input_valuator_state_valuators_end (const xcb_input_valuator_state_t *R)
5170 {
5171     xcb_generic_iterator_t i;
5172     i.data = ((int32_t *) (R + 1)) + (R->num_valuators);
5173     i.rem = 0;
5174     i.index = (char *) i.data - (char *) R;
5175     return i;
5176 }
5177 
5178 void
5179 xcb_input_valuator_state_next (xcb_input_valuator_state_iterator_t *i)
5180 {
5181     xcb_input_valuator_state_t *R = i->data;
5182     xcb_generic_iterator_t child;
5183     child.data = (xcb_input_valuator_state_t *)(((char *)R) + xcb_input_valuator_state_sizeof(R));
5184     i->index = (char *) child.data - (char *) i->data;
5185     --i->rem;
5186     i->data = (xcb_input_valuator_state_t *) child.data;
5187 }
5188 
5189 xcb_generic_iterator_t
5190 xcb_input_valuator_state_end (xcb_input_valuator_state_iterator_t i)
5191 {
5192     xcb_generic_iterator_t ret;
5193     while(i.rem > 0)
5194         xcb_input_valuator_state_next(&i);
5195     ret.data = i.data;
5196     ret.rem = i.rem;
5197     ret.index = i.index;
5198     return ret;
5199 }
5200 
5201 int32_t *
5202 xcb_input_input_state_data_valuator_valuators (const xcb_input_input_state_data_t *S)
5203 {
5204     return S->valuator.valuators;
5205 }
5206 
5207 int
5208 xcb_input_input_state_data_valuator_valuators_length (const xcb_input_input_state_t *R,
5209                                                       const xcb_input_input_state_data_t *S)
5210 {
5211     return S->valuator.num_valuators;
5212 }
5213 
5214 xcb_generic_iterator_t
5215 xcb_input_input_state_data_valuator_valuators_end (const xcb_input_input_state_t *R,
5216                                                    const xcb_input_input_state_data_t *S)
5217 {
5218     xcb_generic_iterator_t i;
5219     i.data = S->valuator.valuators + S->valuator.num_valuators;
5220     i.rem = 0;
5221     i.index = (char *) i.data - (char *) S;
5222     return i;
5223 }
5224 
5225 int
5226 xcb_input_input_state_data_serialize (void                               **_buffer,
5227                                       uint8_t                              class_id,
5228                                       const xcb_input_input_state_data_t  *_aux)
5229 {
5230     char *xcb_out = *_buffer;
5231     unsigned int xcb_buffer_len = 0;
5232     unsigned int xcb_align_to = 0;
5233     unsigned int xcb_padding_offset = 2;
5234 
5235     unsigned int xcb_pad = 0;
5236     char xcb_pad0[3] = {0, 0, 0};
5237     struct iovec xcb_parts[11];
5238     unsigned int xcb_parts_idx = 0;
5239     unsigned int xcb_block_len = 0;
5240     unsigned int i;
5241     char *xcb_tmp;
5242 
5243     if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
5244         /* xcb_input_input_state_data_t.key.num_keys */
5245         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.num_keys;
5246         xcb_block_len += sizeof(uint8_t);
5247         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
5248         xcb_parts_idx++;
5249         xcb_align_to = ALIGNOF(uint8_t);
5250         /* xcb_input_input_state_data_t.key.pad0 */
5251         xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
5252         xcb_block_len += sizeof(uint8_t);
5253         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
5254         xcb_parts_idx++;
5255         xcb_align_to = ALIGNOF(uint8_t);
5256         /* xcb_input_input_state_data_t.key.keys */
5257         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->key.keys;
5258         xcb_block_len += 32;
5259         xcb_parts[xcb_parts_idx].iov_len = 32;
5260         xcb_parts_idx++;
5261         xcb_align_to = ALIGNOF(uint8_t);
5262     }
5263     if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
5264         /* xcb_input_input_state_data_t.button.num_buttons */
5265         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->button.num_buttons;
5266         xcb_block_len += sizeof(uint8_t);
5267         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
5268         xcb_parts_idx++;
5269         xcb_align_to = ALIGNOF(uint8_t);
5270         /* xcb_input_input_state_data_t.button.pad1 */
5271         xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
5272         xcb_block_len += sizeof(uint8_t);
5273         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
5274         xcb_parts_idx++;
5275         xcb_align_to = ALIGNOF(uint8_t);
5276         /* xcb_input_input_state_data_t.button.buttons */
5277         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->button.buttons;
5278         xcb_block_len += 32;
5279         xcb_parts[xcb_parts_idx].iov_len = 32;
5280         xcb_parts_idx++;
5281         xcb_align_to = ALIGNOF(uint8_t);
5282     }
5283     if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
5284         /* xcb_input_input_state_data_t.valuator.num_valuators */
5285         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.num_valuators;
5286         xcb_block_len += sizeof(uint8_t);
5287         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
5288         xcb_parts_idx++;
5289         xcb_align_to = ALIGNOF(uint8_t);
5290         /* xcb_input_input_state_data_t.valuator.mode */
5291         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.mode;
5292         xcb_block_len += sizeof(uint8_t);
5293         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
5294         xcb_parts_idx++;
5295         xcb_align_to = ALIGNOF(uint8_t);
5296         /* insert padding */
5297         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
5298         xcb_buffer_len += xcb_block_len + xcb_pad;
5299         if (0 != xcb_pad) {
5300             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
5301             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
5302             xcb_parts_idx++;
5303             xcb_pad = 0;
5304         }
5305         xcb_block_len = 0;
5306         xcb_padding_offset = 0;
5307         /* valuators */
5308         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->valuator.valuators;
5309         xcb_block_len += _aux->valuator.num_valuators * sizeof(int32_t);
5310         xcb_parts[xcb_parts_idx].iov_len = _aux->valuator.num_valuators * sizeof(int32_t);
5311         xcb_parts_idx++;
5312         xcb_align_to = ALIGNOF(int32_t);
5313     }
5314     /* insert padding */
5315     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
5316     xcb_buffer_len += xcb_block_len + xcb_pad;
5317     if (0 != xcb_pad) {
5318         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
5319         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
5320         xcb_parts_idx++;
5321         xcb_pad = 0;
5322     }
5323     xcb_block_len = 0;
5324     xcb_padding_offset = 0;
5325 
5326     if (NULL == xcb_out) {
5327         /* allocate memory */
5328         xcb_out = malloc(xcb_buffer_len);
5329         *_buffer = xcb_out;
5330     }
5331 
5332     xcb_tmp = xcb_out;
5333     for(i=0; i<xcb_parts_idx; i++) {
5334         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
5335             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
5336         if (0 != xcb_parts[i].iov_len)
5337             xcb_tmp += xcb_parts[i].iov_len;
5338     }
5339 
5340     return xcb_buffer_len;
5341 }
5342 
5343 int
5344 xcb_input_input_state_data_unpack (const void                    *_buffer,
5345                                    uint8_t                        class_id,
5346                                    xcb_input_input_state_data_t  *_aux)
5347 {
5348     char *xcb_tmp = (char *)_buffer;
5349     unsigned int xcb_buffer_len = 0;
5350     unsigned int xcb_block_len = 0;
5351     unsigned int xcb_pad = 0;
5352     unsigned int xcb_align_to = 0;
5353     unsigned int xcb_padding_offset = 2;
5354 
5355 
5356     if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
5357         /* xcb_input_input_state_data_t.key.num_keys */
5358         _aux->key.num_keys = *(uint8_t *)xcb_tmp;
5359         xcb_block_len += sizeof(uint8_t);
5360         xcb_tmp += sizeof(uint8_t);
5361         xcb_align_to = ALIGNOF(uint8_t);
5362         /* xcb_input_input_state_data_t.key.pad0 */
5363         _aux->key.pad0 = *(uint8_t *)xcb_tmp;
5364         xcb_block_len += sizeof(uint8_t);
5365         xcb_tmp += sizeof(uint8_t);
5366         xcb_align_to = ALIGNOF(uint8_t);
5367         /* xcb_input_input_state_data_t.key.keys */
5368         memcpy(_aux->key.keys, xcb_tmp, sizeof(uint8_t) * 32);
5369         xcb_block_len += sizeof(uint8_t) * 32;
5370         xcb_tmp += sizeof(uint8_t) * 32;
5371         xcb_align_to = ALIGNOF(uint8_t);
5372     }
5373     if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
5374         /* xcb_input_input_state_data_t.button.num_buttons */
5375         _aux->button.num_buttons = *(uint8_t *)xcb_tmp;
5376         xcb_block_len += sizeof(uint8_t);
5377         xcb_tmp += sizeof(uint8_t);
5378         xcb_align_to = ALIGNOF(uint8_t);
5379         /* xcb_input_input_state_data_t.button.pad1 */
5380         _aux->button.pad1 = *(uint8_t *)xcb_tmp;
5381         xcb_block_len += sizeof(uint8_t);
5382         xcb_tmp += sizeof(uint8_t);
5383         xcb_align_to = ALIGNOF(uint8_t);
5384         /* xcb_input_input_state_data_t.button.buttons */
5385         memcpy(_aux->button.buttons, xcb_tmp, sizeof(uint8_t) * 32);
5386         xcb_block_len += sizeof(uint8_t) * 32;
5387         xcb_tmp += sizeof(uint8_t) * 32;
5388         xcb_align_to = ALIGNOF(uint8_t);
5389     }
5390     if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
5391         /* xcb_input_input_state_data_t.valuator.num_valuators */
5392         _aux->valuator.num_valuators = *(uint8_t *)xcb_tmp;
5393         xcb_block_len += sizeof(uint8_t);
5394         xcb_tmp += sizeof(uint8_t);
5395         xcb_align_to = ALIGNOF(uint8_t);
5396         /* xcb_input_input_state_data_t.valuator.mode */
5397         _aux->valuator.mode = *(uint8_t *)xcb_tmp;
5398         xcb_block_len += sizeof(uint8_t);
5399         xcb_tmp += sizeof(uint8_t);
5400         xcb_align_to = ALIGNOF(uint8_t);
5401         /* insert padding */
5402         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
5403         xcb_buffer_len += xcb_block_len + xcb_pad;
5404         if (0 != xcb_pad) {
5405             xcb_tmp += xcb_pad;
5406             xcb_pad = 0;
5407         }
5408         xcb_block_len = 0;
5409         xcb_padding_offset = 0;
5410         /* valuators */
5411         _aux->valuator.valuators = (int32_t *)xcb_tmp;
5412         xcb_block_len += _aux->valuator.num_valuators * sizeof(int32_t);
5413         xcb_tmp += xcb_block_len;
5414         xcb_align_to = ALIGNOF(int32_t);
5415     }
5416     /* insert padding */
5417     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
5418     xcb_buffer_len += xcb_block_len + xcb_pad;
5419     if (0 != xcb_pad) {
5420         xcb_tmp += xcb_pad;
5421         xcb_pad = 0;
5422     }
5423     xcb_block_len = 0;
5424     xcb_padding_offset = 0;
5425 
5426     return xcb_buffer_len;
5427 }
5428 
5429 int
5430 xcb_input_input_state_data_sizeof (const void  *_buffer,
5431                                    uint8_t      class_id)
5432 {
5433     xcb_input_input_state_data_t _aux;
5434     return xcb_input_input_state_data_unpack(_buffer, class_id, &_aux);
5435 }
5436 
5437 int
5438 xcb_input_input_state_sizeof (const void  *_buffer)
5439 {
5440     char *xcb_tmp = (char *)_buffer;
5441     const xcb_input_input_state_t *_aux = (xcb_input_input_state_t *)_buffer;
5442     unsigned int xcb_buffer_len = 0;
5443     unsigned int xcb_block_len = 0;
5444     unsigned int xcb_pad = 0;
5445     unsigned int xcb_align_to = 0;
5446 
5447 
5448     xcb_block_len += sizeof(xcb_input_input_state_t);
5449     xcb_tmp += xcb_block_len;
5450     xcb_buffer_len += xcb_block_len;
5451     xcb_block_len = 0;
5452     /* data */
5453     xcb_block_len += xcb_input_input_state_data_sizeof(xcb_tmp, _aux->class_id);
5454     xcb_tmp += xcb_block_len;
5455     xcb_align_to = ALIGNOF(char);
5456     /* insert padding */
5457     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5458     xcb_buffer_len += xcb_block_len + xcb_pad;
5459     if (0 != xcb_pad) {
5460         xcb_tmp += xcb_pad;
5461         xcb_pad = 0;
5462     }
5463     xcb_block_len = 0;
5464 
5465     return xcb_buffer_len;
5466 }
5467 
5468 void *
5469 xcb_input_input_state_data (const xcb_input_input_state_t *R)
5470 {
5471     return (void *) (R + 1);
5472 }
5473 
5474 void
5475 xcb_input_input_state_next (xcb_input_input_state_iterator_t *i)
5476 {
5477     xcb_input_input_state_t *R = i->data;
5478     xcb_generic_iterator_t child;
5479     child.data = (xcb_input_input_state_t *)(((char *)R) + xcb_input_input_state_sizeof(R));
5480     i->index = (char *) child.data - (char *) i->data;
5481     --i->rem;
5482     i->data = (xcb_input_input_state_t *) child.data;
5483 }
5484 
5485 xcb_generic_iterator_t
5486 xcb_input_input_state_end (xcb_input_input_state_iterator_t i)
5487 {
5488     xcb_generic_iterator_t ret;
5489     while(i.rem > 0)
5490         xcb_input_input_state_next(&i);
5491     ret.data = i.data;
5492     ret.rem = i.rem;
5493     ret.index = i.index;
5494     return ret;
5495 }
5496 
5497 int
5498 xcb_input_query_device_state_sizeof (const void  *_buffer)
5499 {
5500     char *xcb_tmp = (char *)_buffer;
5501     const xcb_input_query_device_state_reply_t *_aux = (xcb_input_query_device_state_reply_t *)_buffer;
5502     unsigned int xcb_buffer_len = 0;
5503     unsigned int xcb_block_len = 0;
5504     unsigned int xcb_pad = 0;
5505     unsigned int xcb_align_to = 0;
5506 
5507     unsigned int i;
5508     unsigned int xcb_tmp_len;
5509 
5510     xcb_block_len += sizeof(xcb_input_query_device_state_reply_t);
5511     xcb_tmp += xcb_block_len;
5512     xcb_buffer_len += xcb_block_len;
5513     xcb_block_len = 0;
5514     /* classes */
5515     for(i=0; i<_aux->num_classes; i++) {
5516         xcb_tmp_len = xcb_input_input_state_sizeof(xcb_tmp);
5517         xcb_block_len += xcb_tmp_len;
5518         xcb_tmp += xcb_tmp_len;
5519     }
5520     xcb_align_to = ALIGNOF(xcb_input_input_state_t);
5521     /* insert padding */
5522     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5523     xcb_buffer_len += xcb_block_len + xcb_pad;
5524     if (0 != xcb_pad) {
5525         xcb_tmp += xcb_pad;
5526         xcb_pad = 0;
5527     }
5528     xcb_block_len = 0;
5529 
5530     return xcb_buffer_len;
5531 }
5532 
5533 xcb_input_query_device_state_cookie_t
5534 xcb_input_query_device_state (xcb_connection_t *c,
5535                               uint8_t           device_id)
5536 {
5537     static const xcb_protocol_request_t xcb_req = {
5538         .count = 2,
5539         .ext = &xcb_input_id,
5540         .opcode = XCB_INPUT_QUERY_DEVICE_STATE,
5541         .isvoid = 0
5542     };
5543 
5544     struct iovec xcb_parts[4];
5545     xcb_input_query_device_state_cookie_t xcb_ret;
5546     xcb_input_query_device_state_request_t xcb_out;
5547 
5548     xcb_out.device_id = device_id;
5549     memset(xcb_out.pad0, 0, 3);
5550 
5551     xcb_parts[2].iov_base = (char *) &xcb_out;
5552     xcb_parts[2].iov_len = sizeof(xcb_out);
5553     xcb_parts[3].iov_base = 0;
5554     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5555 
5556     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
5557     return xcb_ret;
5558 }
5559 
5560 xcb_input_query_device_state_cookie_t
5561 xcb_input_query_device_state_unchecked (xcb_connection_t *c,
5562                                         uint8_t           device_id)
5563 {
5564     static const xcb_protocol_request_t xcb_req = {
5565         .count = 2,
5566         .ext = &xcb_input_id,
5567         .opcode = XCB_INPUT_QUERY_DEVICE_STATE,
5568         .isvoid = 0
5569     };
5570 
5571     struct iovec xcb_parts[4];
5572     xcb_input_query_device_state_cookie_t xcb_ret;
5573     xcb_input_query_device_state_request_t xcb_out;
5574 
5575     xcb_out.device_id = device_id;
5576     memset(xcb_out.pad0, 0, 3);
5577 
5578     xcb_parts[2].iov_base = (char *) &xcb_out;
5579     xcb_parts[2].iov_len = sizeof(xcb_out);
5580     xcb_parts[3].iov_base = 0;
5581     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5582 
5583     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
5584     return xcb_ret;
5585 }
5586 
5587 int
5588 xcb_input_query_device_state_classes_length (const xcb_input_query_device_state_reply_t *R)
5589 {
5590     return R->num_classes;
5591 }
5592 
5593 xcb_input_input_state_iterator_t
5594 xcb_input_query_device_state_classes_iterator (const xcb_input_query_device_state_reply_t *R)
5595 {
5596     xcb_input_input_state_iterator_t i;
5597     i.data = (xcb_input_input_state_t *) (R + 1);
5598     i.rem = R->num_classes;
5599     i.index = (char *) i.data - (char *) R;
5600     return i;
5601 }
5602 
5603 xcb_input_query_device_state_reply_t *
5604 xcb_input_query_device_state_reply (xcb_connection_t                       *c,
5605                                     xcb_input_query_device_state_cookie_t   cookie  /**< */,
5606                                     xcb_generic_error_t                   **e)
5607 {
5608     return (xcb_input_query_device_state_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
5609 }
5610 
5611 int
5612 xcb_input_send_extension_event_sizeof (const void  *_buffer)
5613 {
5614     char *xcb_tmp = (char *)_buffer;
5615     const xcb_input_send_extension_event_request_t *_aux = (xcb_input_send_extension_event_request_t *)_buffer;
5616     unsigned int xcb_buffer_len = 0;
5617     unsigned int xcb_block_len = 0;
5618     unsigned int xcb_pad = 0;
5619     unsigned int xcb_align_to = 0;
5620 
5621 
5622     xcb_block_len += sizeof(xcb_input_send_extension_event_request_t);
5623     xcb_tmp += xcb_block_len;
5624     xcb_buffer_len += xcb_block_len;
5625     xcb_block_len = 0;
5626     /* events */
5627     xcb_block_len += (_aux->num_events * 32) * sizeof(uint8_t);
5628     xcb_tmp += xcb_block_len;
5629     xcb_align_to = ALIGNOF(uint8_t);
5630     /* insert padding */
5631     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5632     xcb_buffer_len += xcb_block_len + xcb_pad;
5633     if (0 != xcb_pad) {
5634         xcb_tmp += xcb_pad;
5635         xcb_pad = 0;
5636     }
5637     xcb_block_len = 0;
5638     /* classes */
5639     xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
5640     xcb_tmp += xcb_block_len;
5641     xcb_align_to = ALIGNOF(xcb_input_event_class_t);
5642     /* insert padding */
5643     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5644     xcb_buffer_len += xcb_block_len + xcb_pad;
5645     if (0 != xcb_pad) {
5646         xcb_tmp += xcb_pad;
5647         xcb_pad = 0;
5648     }
5649     xcb_block_len = 0;
5650 
5651     return xcb_buffer_len;
5652 }
5653 
5654 xcb_void_cookie_t
5655 xcb_input_send_extension_event_checked (xcb_connection_t              *c,
5656                                         xcb_window_t                   destination,
5657                                         uint8_t                        device_id,
5658                                         uint8_t                        propagate,
5659                                         uint16_t                       num_classes,
5660                                         uint8_t                        num_events,
5661                                         const uint8_t                 *events,
5662                                         const xcb_input_event_class_t *classes)
5663 {
5664     static const xcb_protocol_request_t xcb_req = {
5665         .count = 6,
5666         .ext = &xcb_input_id,
5667         .opcode = XCB_INPUT_SEND_EXTENSION_EVENT,
5668         .isvoid = 1
5669     };
5670 
5671     struct iovec xcb_parts[8];
5672     xcb_void_cookie_t xcb_ret;
5673     xcb_input_send_extension_event_request_t xcb_out;
5674 
5675     xcb_out.destination = destination;
5676     xcb_out.device_id = device_id;
5677     xcb_out.propagate = propagate;
5678     xcb_out.num_classes = num_classes;
5679     xcb_out.num_events = num_events;
5680     memset(xcb_out.pad0, 0, 3);
5681 
5682     xcb_parts[2].iov_base = (char *) &xcb_out;
5683     xcb_parts[2].iov_len = sizeof(xcb_out);
5684     xcb_parts[3].iov_base = 0;
5685     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5686     /* uint8_t events */
5687     xcb_parts[4].iov_base = (char *) events;
5688     xcb_parts[4].iov_len = (num_events * 32) * sizeof(uint8_t);
5689     xcb_parts[5].iov_base = 0;
5690     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
5691     /* xcb_input_event_class_t classes */
5692     xcb_parts[6].iov_base = (char *) classes;
5693     xcb_parts[6].iov_len = num_classes * sizeof(xcb_input_event_class_t);
5694     xcb_parts[7].iov_base = 0;
5695     xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;
5696 
5697     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
5698     return xcb_ret;
5699 }
5700 
5701 xcb_void_cookie_t
5702 xcb_input_send_extension_event (xcb_connection_t              *c,
5703                                 xcb_window_t                   destination,
5704                                 uint8_t                        device_id,
5705                                 uint8_t                        propagate,
5706                                 uint16_t                       num_classes,
5707                                 uint8_t                        num_events,
5708                                 const uint8_t                 *events,
5709                                 const xcb_input_event_class_t *classes)
5710 {
5711     static const xcb_protocol_request_t xcb_req = {
5712         .count = 6,
5713         .ext = &xcb_input_id,
5714         .opcode = XCB_INPUT_SEND_EXTENSION_EVENT,
5715         .isvoid = 1
5716     };
5717 
5718     struct iovec xcb_parts[8];
5719     xcb_void_cookie_t xcb_ret;
5720     xcb_input_send_extension_event_request_t xcb_out;
5721 
5722     xcb_out.destination = destination;
5723     xcb_out.device_id = device_id;
5724     xcb_out.propagate = propagate;
5725     xcb_out.num_classes = num_classes;
5726     xcb_out.num_events = num_events;
5727     memset(xcb_out.pad0, 0, 3);
5728 
5729     xcb_parts[2].iov_base = (char *) &xcb_out;
5730     xcb_parts[2].iov_len = sizeof(xcb_out);
5731     xcb_parts[3].iov_base = 0;
5732     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5733     /* uint8_t events */
5734     xcb_parts[4].iov_base = (char *) events;
5735     xcb_parts[4].iov_len = (num_events * 32) * sizeof(uint8_t);
5736     xcb_parts[5].iov_base = 0;
5737     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
5738     /* xcb_input_event_class_t classes */
5739     xcb_parts[6].iov_base = (char *) classes;
5740     xcb_parts[6].iov_len = num_classes * sizeof(xcb_input_event_class_t);
5741     xcb_parts[7].iov_base = 0;
5742     xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;
5743 
5744     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
5745     return xcb_ret;
5746 }
5747 
5748 uint8_t *
5749 xcb_input_send_extension_event_events (const xcb_input_send_extension_event_request_t *R)
5750 {
5751     return (uint8_t *) (R + 1);
5752 }
5753 
5754 int
5755 xcb_input_send_extension_event_events_length (const xcb_input_send_extension_event_request_t *R)
5756 {
5757     return (R->num_events * 32);
5758 }
5759 
5760 xcb_generic_iterator_t
5761 xcb_input_send_extension_event_events_end (const xcb_input_send_extension_event_request_t *R)
5762 {
5763     xcb_generic_iterator_t i;
5764     i.data = ((uint8_t *) (R + 1)) + ((R->num_events * 32));
5765     i.rem = 0;
5766     i.index = (char *) i.data - (char *) R;
5767     return i;
5768 }
5769 
5770 xcb_input_event_class_t *
5771 xcb_input_send_extension_event_classes (const xcb_input_send_extension_event_request_t *R)
5772 {
5773     xcb_generic_iterator_t prev = xcb_input_send_extension_event_events_end(R);
5774     return (xcb_input_event_class_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index) + 0);
5775 }
5776 
5777 int
5778 xcb_input_send_extension_event_classes_length (const xcb_input_send_extension_event_request_t *R)
5779 {
5780     return R->num_classes;
5781 }
5782 
5783 xcb_generic_iterator_t
5784 xcb_input_send_extension_event_classes_end (const xcb_input_send_extension_event_request_t *R)
5785 {
5786     xcb_generic_iterator_t i;
5787     xcb_generic_iterator_t prev = xcb_input_send_extension_event_events_end(R);
5788     i.data = ((xcb_input_event_class_t *) ((char*) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index))) + (R->num_classes);
5789     i.rem = 0;
5790     i.index = (char *) i.data - (char *) R;
5791     return i;
5792 }
5793 
5794 xcb_void_cookie_t
5795 xcb_input_device_bell_checked (xcb_connection_t *c,
5796                                uint8_t           device_id,
5797                                uint8_t           feedback_id,
5798                                uint8_t           feedback_class,
5799                                int8_t            percent)
5800 {
5801     static const xcb_protocol_request_t xcb_req = {
5802         .count = 2,
5803         .ext = &xcb_input_id,
5804         .opcode = XCB_INPUT_DEVICE_BELL,
5805         .isvoid = 1
5806     };
5807 
5808     struct iovec xcb_parts[4];
5809     xcb_void_cookie_t xcb_ret;
5810     xcb_input_device_bell_request_t xcb_out;
5811 
5812     xcb_out.device_id = device_id;
5813     xcb_out.feedback_id = feedback_id;
5814     xcb_out.feedback_class = feedback_class;
5815     xcb_out.percent = percent;
5816 
5817     xcb_parts[2].iov_base = (char *) &xcb_out;
5818     xcb_parts[2].iov_len = sizeof(xcb_out);
5819     xcb_parts[3].iov_base = 0;
5820     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5821 
5822     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
5823     return xcb_ret;
5824 }
5825 
5826 xcb_void_cookie_t
5827 xcb_input_device_bell (xcb_connection_t *c,
5828                        uint8_t           device_id,
5829                        uint8_t           feedback_id,
5830                        uint8_t           feedback_class,
5831                        int8_t            percent)
5832 {
5833     static const xcb_protocol_request_t xcb_req = {
5834         .count = 2,
5835         .ext = &xcb_input_id,
5836         .opcode = XCB_INPUT_DEVICE_BELL,
5837         .isvoid = 1
5838     };
5839 
5840     struct iovec xcb_parts[4];
5841     xcb_void_cookie_t xcb_ret;
5842     xcb_input_device_bell_request_t xcb_out;
5843 
5844     xcb_out.device_id = device_id;
5845     xcb_out.feedback_id = feedback_id;
5846     xcb_out.feedback_class = feedback_class;
5847     xcb_out.percent = percent;
5848 
5849     xcb_parts[2].iov_base = (char *) &xcb_out;
5850     xcb_parts[2].iov_len = sizeof(xcb_out);
5851     xcb_parts[3].iov_base = 0;
5852     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5853 
5854     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
5855     return xcb_ret;
5856 }
5857 
5858 int
5859 xcb_input_set_device_valuators_sizeof (const void  *_buffer)
5860 {
5861     char *xcb_tmp = (char *)_buffer;
5862     const xcb_input_set_device_valuators_request_t *_aux = (xcb_input_set_device_valuators_request_t *)_buffer;
5863     unsigned int xcb_buffer_len = 0;
5864     unsigned int xcb_block_len = 0;
5865     unsigned int xcb_pad = 0;
5866     unsigned int xcb_align_to = 0;
5867 
5868 
5869     xcb_block_len += sizeof(xcb_input_set_device_valuators_request_t);
5870     xcb_tmp += xcb_block_len;
5871     xcb_buffer_len += xcb_block_len;
5872     xcb_block_len = 0;
5873     /* valuators */
5874     xcb_block_len += _aux->num_valuators * sizeof(int32_t);
5875     xcb_tmp += xcb_block_len;
5876     xcb_align_to = ALIGNOF(int32_t);
5877     /* insert padding */
5878     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5879     xcb_buffer_len += xcb_block_len + xcb_pad;
5880     if (0 != xcb_pad) {
5881         xcb_tmp += xcb_pad;
5882         xcb_pad = 0;
5883     }
5884     xcb_block_len = 0;
5885 
5886     return xcb_buffer_len;
5887 }
5888 
5889 xcb_input_set_device_valuators_cookie_t
5890 xcb_input_set_device_valuators (xcb_connection_t *c,
5891                                 uint8_t           device_id,
5892                                 uint8_t           first_valuator,
5893                                 uint8_t           num_valuators,
5894                                 const int32_t    *valuators)
5895 {
5896     static const xcb_protocol_request_t xcb_req = {
5897         .count = 4,
5898         .ext = &xcb_input_id,
5899         .opcode = XCB_INPUT_SET_DEVICE_VALUATORS,
5900         .isvoid = 0
5901     };
5902 
5903     struct iovec xcb_parts[6];
5904     xcb_input_set_device_valuators_cookie_t xcb_ret;
5905     xcb_input_set_device_valuators_request_t xcb_out;
5906 
5907     xcb_out.device_id = device_id;
5908     xcb_out.first_valuator = first_valuator;
5909     xcb_out.num_valuators = num_valuators;
5910     xcb_out.pad0 = 0;
5911 
5912     xcb_parts[2].iov_base = (char *) &xcb_out;
5913     xcb_parts[2].iov_len = sizeof(xcb_out);
5914     xcb_parts[3].iov_base = 0;
5915     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5916     /* int32_t valuators */
5917     xcb_parts[4].iov_base = (char *) valuators;
5918     xcb_parts[4].iov_len = num_valuators * sizeof(int32_t);
5919     xcb_parts[5].iov_base = 0;
5920     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
5921 
5922     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
5923     return xcb_ret;
5924 }
5925 
5926 xcb_input_set_device_valuators_cookie_t
5927 xcb_input_set_device_valuators_unchecked (xcb_connection_t *c,
5928                                           uint8_t           device_id,
5929                                           uint8_t           first_valuator,
5930                                           uint8_t           num_valuators,
5931                                           const int32_t    *valuators)
5932 {
5933     static const xcb_protocol_request_t xcb_req = {
5934         .count = 4,
5935         .ext = &xcb_input_id,
5936         .opcode = XCB_INPUT_SET_DEVICE_VALUATORS,
5937         .isvoid = 0
5938     };
5939 
5940     struct iovec xcb_parts[6];
5941     xcb_input_set_device_valuators_cookie_t xcb_ret;
5942     xcb_input_set_device_valuators_request_t xcb_out;
5943 
5944     xcb_out.device_id = device_id;
5945     xcb_out.first_valuator = first_valuator;
5946     xcb_out.num_valuators = num_valuators;
5947     xcb_out.pad0 = 0;
5948 
5949     xcb_parts[2].iov_base = (char *) &xcb_out;
5950     xcb_parts[2].iov_len = sizeof(xcb_out);
5951     xcb_parts[3].iov_base = 0;
5952     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
5953     /* int32_t valuators */
5954     xcb_parts[4].iov_base = (char *) valuators;
5955     xcb_parts[4].iov_len = num_valuators * sizeof(int32_t);
5956     xcb_parts[5].iov_base = 0;
5957     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
5958 
5959     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
5960     return xcb_ret;
5961 }
5962 
5963 xcb_input_set_device_valuators_reply_t *
5964 xcb_input_set_device_valuators_reply (xcb_connection_t                         *c,
5965                                       xcb_input_set_device_valuators_cookie_t   cookie  /**< */,
5966                                       xcb_generic_error_t                     **e)
5967 {
5968     return (xcb_input_set_device_valuators_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
5969 }
5970 
5971 int
5972 xcb_input_device_resolution_state_sizeof (const void  *_buffer)
5973 {
5974     char *xcb_tmp = (char *)_buffer;
5975     const xcb_input_device_resolution_state_t *_aux = (xcb_input_device_resolution_state_t *)_buffer;
5976     unsigned int xcb_buffer_len = 0;
5977     unsigned int xcb_block_len = 0;
5978     unsigned int xcb_pad = 0;
5979     unsigned int xcb_align_to = 0;
5980 
5981 
5982     xcb_block_len += sizeof(xcb_input_device_resolution_state_t);
5983     xcb_tmp += xcb_block_len;
5984     xcb_buffer_len += xcb_block_len;
5985     xcb_block_len = 0;
5986     /* resolution_values */
5987     xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
5988     xcb_tmp += xcb_block_len;
5989     xcb_align_to = ALIGNOF(uint32_t);
5990     /* insert padding */
5991     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
5992     xcb_buffer_len += xcb_block_len + xcb_pad;
5993     if (0 != xcb_pad) {
5994         xcb_tmp += xcb_pad;
5995         xcb_pad = 0;
5996     }
5997     xcb_block_len = 0;
5998     /* resolution_min */
5999     xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
6000     xcb_tmp += xcb_block_len;
6001     xcb_align_to = ALIGNOF(uint32_t);
6002     /* insert padding */
6003     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
6004     xcb_buffer_len += xcb_block_len + xcb_pad;
6005     if (0 != xcb_pad) {
6006         xcb_tmp += xcb_pad;
6007         xcb_pad = 0;
6008     }
6009     xcb_block_len = 0;
6010     /* resolution_max */
6011     xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
6012     xcb_tmp += xcb_block_len;
6013     xcb_align_to = ALIGNOF(uint32_t);
6014     /* insert padding */
6015     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
6016     xcb_buffer_len += xcb_block_len + xcb_pad;
6017     if (0 != xcb_pad) {
6018         xcb_tmp += xcb_pad;
6019         xcb_pad = 0;
6020     }
6021     xcb_block_len = 0;
6022 
6023     return xcb_buffer_len;
6024 }
6025 
6026 uint32_t *
6027 xcb_input_device_resolution_state_resolution_values (const xcb_input_device_resolution_state_t *R)
6028 {
6029     return (uint32_t *) (R + 1);
6030 }
6031 
6032 int
6033 xcb_input_device_resolution_state_resolution_values_length (const xcb_input_device_resolution_state_t *R)
6034 {
6035     return R->num_valuators;
6036 }
6037 
6038 xcb_generic_iterator_t
6039 xcb_input_device_resolution_state_resolution_values_end (const xcb_input_device_resolution_state_t *R)
6040 {
6041     xcb_generic_iterator_t i;
6042     i.data = ((uint32_t *) (R + 1)) + (R->num_valuators);
6043     i.rem = 0;
6044     i.index = (char *) i.data - (char *) R;
6045     return i;
6046 }
6047 
6048 uint32_t *
6049 xcb_input_device_resolution_state_resolution_min (const xcb_input_device_resolution_state_t *R)
6050 {
6051     xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_values_end(R);
6052     return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
6053 }
6054 
6055 int
6056 xcb_input_device_resolution_state_resolution_min_length (const xcb_input_device_resolution_state_t *R)
6057 {
6058     return R->num_valuators;
6059 }
6060 
6061 xcb_generic_iterator_t
6062 xcb_input_device_resolution_state_resolution_min_end (const xcb_input_device_resolution_state_t *R)
6063 {
6064     xcb_generic_iterator_t i;
6065     xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_values_end(R);
6066     i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->num_valuators);
6067     i.rem = 0;
6068     i.index = (char *) i.data - (char *) R;
6069     return i;
6070 }
6071 
6072 uint32_t *
6073 xcb_input_device_resolution_state_resolution_max (const xcb_input_device_resolution_state_t *R)
6074 {
6075     xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_min_end(R);
6076     return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
6077 }
6078 
6079 int
6080 xcb_input_device_resolution_state_resolution_max_length (const xcb_input_device_resolution_state_t *R)
6081 {
6082     return R->num_valuators;
6083 }
6084 
6085 xcb_generic_iterator_t
6086 xcb_input_device_resolution_state_resolution_max_end (const xcb_input_device_resolution_state_t *R)
6087 {
6088     xcb_generic_iterator_t i;
6089     xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_min_end(R);
6090     i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->num_valuators);
6091     i.rem = 0;
6092     i.index = (char *) i.data - (char *) R;
6093     return i;
6094 }
6095 
6096 void
6097 xcb_input_device_resolution_state_next (xcb_input_device_resolution_state_iterator_t *i)
6098 {
6099     xcb_input_device_resolution_state_t *R = i->data;
6100     xcb_generic_iterator_t child;
6101     child.data = (xcb_input_device_resolution_state_t *)(((char *)R) + xcb_input_device_resolution_state_sizeof(R));
6102     i->index = (char *) child.data - (char *) i->data;
6103     --i->rem;
6104     i->data = (xcb_input_device_resolution_state_t *) child.data;
6105 }
6106 
6107 xcb_generic_iterator_t
6108 xcb_input_device_resolution_state_end (xcb_input_device_resolution_state_iterator_t i)
6109 {
6110     xcb_generic_iterator_t ret;
6111     while(i.rem > 0)
6112         xcb_input_device_resolution_state_next(&i);
6113     ret.data = i.data;
6114     ret.rem = i.rem;
6115     ret.index = i.index;
6116     return ret;
6117 }
6118 
6119 void
6120 xcb_input_device_abs_calib_state_next (xcb_input_device_abs_calib_state_iterator_t *i)
6121 {
6122     --i->rem;
6123     ++i->data;
6124     i->index += sizeof(xcb_input_device_abs_calib_state_t);
6125 }
6126 
6127 xcb_generic_iterator_t
6128 xcb_input_device_abs_calib_state_end (xcb_input_device_abs_calib_state_iterator_t i)
6129 {
6130     xcb_generic_iterator_t ret;
6131     ret.data = i.data + i.rem;
6132     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6133     ret.rem = 0;
6134     return ret;
6135 }
6136 
6137 void
6138 xcb_input_device_abs_area_state_next (xcb_input_device_abs_area_state_iterator_t *i)
6139 {
6140     --i->rem;
6141     ++i->data;
6142     i->index += sizeof(xcb_input_device_abs_area_state_t);
6143 }
6144 
6145 xcb_generic_iterator_t
6146 xcb_input_device_abs_area_state_end (xcb_input_device_abs_area_state_iterator_t i)
6147 {
6148     xcb_generic_iterator_t ret;
6149     ret.data = i.data + i.rem;
6150     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6151     ret.rem = 0;
6152     return ret;
6153 }
6154 
6155 void
6156 xcb_input_device_core_state_next (xcb_input_device_core_state_iterator_t *i)
6157 {
6158     --i->rem;
6159     ++i->data;
6160     i->index += sizeof(xcb_input_device_core_state_t);
6161 }
6162 
6163 xcb_generic_iterator_t
6164 xcb_input_device_core_state_end (xcb_input_device_core_state_iterator_t i)
6165 {
6166     xcb_generic_iterator_t ret;
6167     ret.data = i.data + i.rem;
6168     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6169     ret.rem = 0;
6170     return ret;
6171 }
6172 
6173 void
6174 xcb_input_device_enable_state_next (xcb_input_device_enable_state_iterator_t *i)
6175 {
6176     --i->rem;
6177     ++i->data;
6178     i->index += sizeof(xcb_input_device_enable_state_t);
6179 }
6180 
6181 xcb_generic_iterator_t
6182 xcb_input_device_enable_state_end (xcb_input_device_enable_state_iterator_t i)
6183 {
6184     xcb_generic_iterator_t ret;
6185     ret.data = i.data + i.rem;
6186     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6187     ret.rem = 0;
6188     return ret;
6189 }
6190 
6191 uint32_t *
6192 xcb_input_device_state_data_resolution_resolution_values (const xcb_input_device_state_data_t *S)
6193 {
6194     return S->resolution.resolution_values;
6195 }
6196 
6197 int
6198 xcb_input_device_state_data_resolution_resolution_values_length (const xcb_input_device_state_t *R,
6199                                                                  const xcb_input_device_state_data_t *S)
6200 {
6201     return S->resolution.num_valuators;
6202 }
6203 
6204 xcb_generic_iterator_t
6205 xcb_input_device_state_data_resolution_resolution_values_end (const xcb_input_device_state_t *R,
6206                                                               const xcb_input_device_state_data_t *S)
6207 {
6208     xcb_generic_iterator_t i;
6209     i.data = S->resolution.resolution_values + S->resolution.num_valuators;
6210     i.rem = 0;
6211     i.index = (char *) i.data - (char *) S;
6212     return i;
6213 }
6214 
6215 uint32_t *
6216 xcb_input_device_state_data_resolution_resolution_min (const xcb_input_device_state_data_t *S)
6217 {
6218     return S->resolution.resolution_min;
6219 }
6220 
6221 int
6222 xcb_input_device_state_data_resolution_resolution_min_length (const xcb_input_device_state_t *R,
6223                                                               const xcb_input_device_state_data_t *S)
6224 {
6225     return S->resolution.num_valuators;
6226 }
6227 
6228 xcb_generic_iterator_t
6229 xcb_input_device_state_data_resolution_resolution_min_end (const xcb_input_device_state_t *R,
6230                                                            const xcb_input_device_state_data_t *S)
6231 {
6232     xcb_generic_iterator_t i;
6233     i.data = S->resolution.resolution_min + S->resolution.num_valuators;
6234     i.rem = 0;
6235     i.index = (char *) i.data - (char *) S;
6236     return i;
6237 }
6238 
6239 uint32_t *
6240 xcb_input_device_state_data_resolution_resolution_max (const xcb_input_device_state_data_t *S)
6241 {
6242     return S->resolution.resolution_max;
6243 }
6244 
6245 int
6246 xcb_input_device_state_data_resolution_resolution_max_length (const xcb_input_device_state_t *R,
6247                                                               const xcb_input_device_state_data_t *S)
6248 {
6249     return S->resolution.num_valuators;
6250 }
6251 
6252 xcb_generic_iterator_t
6253 xcb_input_device_state_data_resolution_resolution_max_end (const xcb_input_device_state_t *R,
6254                                                            const xcb_input_device_state_data_t *S)
6255 {
6256     xcb_generic_iterator_t i;
6257     i.data = S->resolution.resolution_max + S->resolution.num_valuators;
6258     i.rem = 0;
6259     i.index = (char *) i.data - (char *) S;
6260     return i;
6261 }
6262 
6263 int
6264 xcb_input_device_state_data_serialize (void                                **_buffer,
6265                                        uint16_t                              control_id,
6266                                        const xcb_input_device_state_data_t  *_aux)
6267 {
6268     char *xcb_out = *_buffer;
6269     unsigned int xcb_buffer_len = 0;
6270     unsigned int xcb_align_to = 0;
6271     unsigned int xcb_padding_offset = 0;
6272 
6273     unsigned int xcb_pad = 0;
6274     char xcb_pad0[3] = {0, 0, 0};
6275     struct iovec xcb_parts[27];
6276     unsigned int xcb_parts_idx = 0;
6277     unsigned int xcb_block_len = 0;
6278     unsigned int i;
6279     char *xcb_tmp;
6280 
6281     if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
6282         /* xcb_input_device_state_data_t.resolution.num_valuators */
6283         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->resolution.num_valuators;
6284         xcb_block_len += sizeof(uint32_t);
6285         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6286         xcb_parts_idx++;
6287         xcb_align_to = ALIGNOF(uint32_t);
6288         /* insert padding */
6289         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6290         xcb_buffer_len += xcb_block_len + xcb_pad;
6291         if (0 != xcb_pad) {
6292             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
6293             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
6294             xcb_parts_idx++;
6295             xcb_pad = 0;
6296         }
6297         xcb_block_len = 0;
6298         xcb_padding_offset = 0;
6299         /* resolution_values */
6300         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_values;
6301         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
6302         xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
6303         xcb_parts_idx++;
6304         xcb_align_to = ALIGNOF(uint32_t);
6305         /* insert padding */
6306         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6307         xcb_buffer_len += xcb_block_len + xcb_pad;
6308         if (0 != xcb_pad) {
6309             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
6310             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
6311             xcb_parts_idx++;
6312             xcb_pad = 0;
6313         }
6314         xcb_block_len = 0;
6315         xcb_padding_offset = 0;
6316         /* resolution_min */
6317         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_min;
6318         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
6319         xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
6320         xcb_parts_idx++;
6321         xcb_align_to = ALIGNOF(uint32_t);
6322         /* insert padding */
6323         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6324         xcb_buffer_len += xcb_block_len + xcb_pad;
6325         if (0 != xcb_pad) {
6326             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
6327             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
6328             xcb_parts_idx++;
6329             xcb_pad = 0;
6330         }
6331         xcb_block_len = 0;
6332         xcb_padding_offset = 0;
6333         /* resolution_max */
6334         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_max;
6335         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
6336         xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
6337         xcb_parts_idx++;
6338         xcb_align_to = ALIGNOF(uint32_t);
6339     }
6340     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
6341         /* xcb_input_device_state_data_t.abs_calib.min_x */
6342         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_x;
6343         xcb_block_len += sizeof(int32_t);
6344         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
6345         xcb_parts_idx++;
6346         xcb_align_to = ALIGNOF(int32_t);
6347         /* xcb_input_device_state_data_t.abs_calib.max_x */
6348         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_x;
6349         xcb_block_len += sizeof(int32_t);
6350         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
6351         xcb_parts_idx++;
6352         xcb_align_to = ALIGNOF(int32_t);
6353         /* xcb_input_device_state_data_t.abs_calib.min_y */
6354         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_y;
6355         xcb_block_len += sizeof(int32_t);
6356         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
6357         xcb_parts_idx++;
6358         xcb_align_to = ALIGNOF(int32_t);
6359         /* xcb_input_device_state_data_t.abs_calib.max_y */
6360         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_y;
6361         xcb_block_len += sizeof(int32_t);
6362         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
6363         xcb_parts_idx++;
6364         xcb_align_to = ALIGNOF(int32_t);
6365         /* xcb_input_device_state_data_t.abs_calib.flip_x */
6366         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_x;
6367         xcb_block_len += sizeof(uint32_t);
6368         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6369         xcb_parts_idx++;
6370         xcb_align_to = ALIGNOF(uint32_t);
6371         /* xcb_input_device_state_data_t.abs_calib.flip_y */
6372         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_y;
6373         xcb_block_len += sizeof(uint32_t);
6374         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6375         xcb_parts_idx++;
6376         xcb_align_to = ALIGNOF(uint32_t);
6377         /* xcb_input_device_state_data_t.abs_calib.rotation */
6378         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.rotation;
6379         xcb_block_len += sizeof(uint32_t);
6380         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6381         xcb_parts_idx++;
6382         xcb_align_to = ALIGNOF(uint32_t);
6383         /* xcb_input_device_state_data_t.abs_calib.button_threshold */
6384         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.button_threshold;
6385         xcb_block_len += sizeof(uint32_t);
6386         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6387         xcb_parts_idx++;
6388         xcb_align_to = ALIGNOF(uint32_t);
6389     }
6390     if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
6391         /* xcb_input_device_state_data_t.core.status */
6392         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->core.status;
6393         xcb_block_len += sizeof(uint8_t);
6394         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
6395         xcb_parts_idx++;
6396         xcb_align_to = ALIGNOF(uint8_t);
6397         /* xcb_input_device_state_data_t.core.iscore */
6398         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->core.iscore;
6399         xcb_block_len += sizeof(uint8_t);
6400         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
6401         xcb_parts_idx++;
6402         xcb_align_to = ALIGNOF(uint8_t);
6403         /* xcb_input_device_state_data_t.core.pad0 */
6404         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
6405         xcb_block_len += sizeof(uint8_t)*2;
6406         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
6407         xcb_parts_idx++;
6408         xcb_align_to = ALIGNOF(uint8_t);
6409     }
6410     if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
6411         /* xcb_input_device_state_data_t.enable.enable */
6412         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->enable.enable;
6413         xcb_block_len += sizeof(uint8_t);
6414         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
6415         xcb_parts_idx++;
6416         xcb_align_to = ALIGNOF(uint8_t);
6417         /* xcb_input_device_state_data_t.enable.pad1 */
6418         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
6419         xcb_block_len += sizeof(uint8_t)*3;
6420         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
6421         xcb_parts_idx++;
6422         xcb_align_to = ALIGNOF(uint8_t);
6423     }
6424     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
6425         /* xcb_input_device_state_data_t.abs_area.offset_x */
6426         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_x;
6427         xcb_block_len += sizeof(uint32_t);
6428         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6429         xcb_parts_idx++;
6430         xcb_align_to = ALIGNOF(uint32_t);
6431         /* xcb_input_device_state_data_t.abs_area.offset_y */
6432         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_y;
6433         xcb_block_len += sizeof(uint32_t);
6434         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6435         xcb_parts_idx++;
6436         xcb_align_to = ALIGNOF(uint32_t);
6437         /* xcb_input_device_state_data_t.abs_area.width */
6438         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.width;
6439         xcb_block_len += sizeof(uint32_t);
6440         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6441         xcb_parts_idx++;
6442         xcb_align_to = ALIGNOF(uint32_t);
6443         /* xcb_input_device_state_data_t.abs_area.height */
6444         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.height;
6445         xcb_block_len += sizeof(uint32_t);
6446         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6447         xcb_parts_idx++;
6448         xcb_align_to = ALIGNOF(uint32_t);
6449         /* xcb_input_device_state_data_t.abs_area.screen */
6450         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.screen;
6451         xcb_block_len += sizeof(uint32_t);
6452         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6453         xcb_parts_idx++;
6454         xcb_align_to = ALIGNOF(uint32_t);
6455         /* xcb_input_device_state_data_t.abs_area.following */
6456         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.following;
6457         xcb_block_len += sizeof(uint32_t);
6458         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
6459         xcb_parts_idx++;
6460         xcb_align_to = ALIGNOF(uint32_t);
6461     }
6462     /* insert padding */
6463     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6464     xcb_buffer_len += xcb_block_len + xcb_pad;
6465     if (0 != xcb_pad) {
6466         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
6467         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
6468         xcb_parts_idx++;
6469         xcb_pad = 0;
6470     }
6471     xcb_block_len = 0;
6472     xcb_padding_offset = 0;
6473 
6474     if (NULL == xcb_out) {
6475         /* allocate memory */
6476         xcb_out = malloc(xcb_buffer_len);
6477         *_buffer = xcb_out;
6478     }
6479 
6480     xcb_tmp = xcb_out;
6481     for(i=0; i<xcb_parts_idx; i++) {
6482         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
6483             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
6484         if (0 != xcb_parts[i].iov_len)
6485             xcb_tmp += xcb_parts[i].iov_len;
6486     }
6487 
6488     return xcb_buffer_len;
6489 }
6490 
6491 int
6492 xcb_input_device_state_data_unpack (const void                     *_buffer,
6493                                     uint16_t                        control_id,
6494                                     xcb_input_device_state_data_t  *_aux)
6495 {
6496     char *xcb_tmp = (char *)_buffer;
6497     unsigned int xcb_buffer_len = 0;
6498     unsigned int xcb_block_len = 0;
6499     unsigned int xcb_pad = 0;
6500     unsigned int xcb_align_to = 0;
6501     unsigned int xcb_padding_offset = 0;
6502 
6503 
6504     if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
6505         /* xcb_input_device_state_data_t.resolution.num_valuators */
6506         _aux->resolution.num_valuators = *(uint32_t *)xcb_tmp;
6507         xcb_block_len += sizeof(uint32_t);
6508         xcb_tmp += sizeof(uint32_t);
6509         xcb_align_to = ALIGNOF(uint32_t);
6510         /* insert padding */
6511         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6512         xcb_buffer_len += xcb_block_len + xcb_pad;
6513         if (0 != xcb_pad) {
6514             xcb_tmp += xcb_pad;
6515             xcb_pad = 0;
6516         }
6517         xcb_block_len = 0;
6518         xcb_padding_offset = 0;
6519         /* resolution_values */
6520         _aux->resolution.resolution_values = (uint32_t *)xcb_tmp;
6521         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
6522         xcb_tmp += xcb_block_len;
6523         xcb_align_to = ALIGNOF(uint32_t);
6524         /* insert padding */
6525         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6526         xcb_buffer_len += xcb_block_len + xcb_pad;
6527         if (0 != xcb_pad) {
6528             xcb_tmp += xcb_pad;
6529             xcb_pad = 0;
6530         }
6531         xcb_block_len = 0;
6532         xcb_padding_offset = 0;
6533         /* resolution_min */
6534         _aux->resolution.resolution_min = (uint32_t *)xcb_tmp;
6535         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
6536         xcb_tmp += xcb_block_len;
6537         xcb_align_to = ALIGNOF(uint32_t);
6538         /* insert padding */
6539         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6540         xcb_buffer_len += xcb_block_len + xcb_pad;
6541         if (0 != xcb_pad) {
6542             xcb_tmp += xcb_pad;
6543             xcb_pad = 0;
6544         }
6545         xcb_block_len = 0;
6546         xcb_padding_offset = 0;
6547         /* resolution_max */
6548         _aux->resolution.resolution_max = (uint32_t *)xcb_tmp;
6549         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
6550         xcb_tmp += xcb_block_len;
6551         xcb_align_to = ALIGNOF(uint32_t);
6552     }
6553     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
6554         /* xcb_input_device_state_data_t.abs_calib.min_x */
6555         _aux->abs_calib.min_x = *(int32_t *)xcb_tmp;
6556         xcb_block_len += sizeof(int32_t);
6557         xcb_tmp += sizeof(int32_t);
6558         xcb_align_to = ALIGNOF(int32_t);
6559         /* xcb_input_device_state_data_t.abs_calib.max_x */
6560         _aux->abs_calib.max_x = *(int32_t *)xcb_tmp;
6561         xcb_block_len += sizeof(int32_t);
6562         xcb_tmp += sizeof(int32_t);
6563         xcb_align_to = ALIGNOF(int32_t);
6564         /* xcb_input_device_state_data_t.abs_calib.min_y */
6565         _aux->abs_calib.min_y = *(int32_t *)xcb_tmp;
6566         xcb_block_len += sizeof(int32_t);
6567         xcb_tmp += sizeof(int32_t);
6568         xcb_align_to = ALIGNOF(int32_t);
6569         /* xcb_input_device_state_data_t.abs_calib.max_y */
6570         _aux->abs_calib.max_y = *(int32_t *)xcb_tmp;
6571         xcb_block_len += sizeof(int32_t);
6572         xcb_tmp += sizeof(int32_t);
6573         xcb_align_to = ALIGNOF(int32_t);
6574         /* xcb_input_device_state_data_t.abs_calib.flip_x */
6575         _aux->abs_calib.flip_x = *(uint32_t *)xcb_tmp;
6576         xcb_block_len += sizeof(uint32_t);
6577         xcb_tmp += sizeof(uint32_t);
6578         xcb_align_to = ALIGNOF(uint32_t);
6579         /* xcb_input_device_state_data_t.abs_calib.flip_y */
6580         _aux->abs_calib.flip_y = *(uint32_t *)xcb_tmp;
6581         xcb_block_len += sizeof(uint32_t);
6582         xcb_tmp += sizeof(uint32_t);
6583         xcb_align_to = ALIGNOF(uint32_t);
6584         /* xcb_input_device_state_data_t.abs_calib.rotation */
6585         _aux->abs_calib.rotation = *(uint32_t *)xcb_tmp;
6586         xcb_block_len += sizeof(uint32_t);
6587         xcb_tmp += sizeof(uint32_t);
6588         xcb_align_to = ALIGNOF(uint32_t);
6589         /* xcb_input_device_state_data_t.abs_calib.button_threshold */
6590         _aux->abs_calib.button_threshold = *(uint32_t *)xcb_tmp;
6591         xcb_block_len += sizeof(uint32_t);
6592         xcb_tmp += sizeof(uint32_t);
6593         xcb_align_to = ALIGNOF(uint32_t);
6594     }
6595     if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
6596         /* xcb_input_device_state_data_t.core.status */
6597         _aux->core.status = *(uint8_t *)xcb_tmp;
6598         xcb_block_len += sizeof(uint8_t);
6599         xcb_tmp += sizeof(uint8_t);
6600         xcb_align_to = ALIGNOF(uint8_t);
6601         /* xcb_input_device_state_data_t.core.iscore */
6602         _aux->core.iscore = *(uint8_t *)xcb_tmp;
6603         xcb_block_len += sizeof(uint8_t);
6604         xcb_tmp += sizeof(uint8_t);
6605         xcb_align_to = ALIGNOF(uint8_t);
6606         /* xcb_input_device_state_data_t.core.pad0 */
6607         _aux->core.pad0[0] = *(uint8_t *)xcb_tmp;
6608         _aux->core.pad0[1] = *(uint8_t *)xcb_tmp;
6609         xcb_block_len += sizeof(uint8_t) * 2;
6610         xcb_tmp += sizeof(uint8_t) * 2;
6611         xcb_align_to = ALIGNOF(uint8_t);
6612     }
6613     if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
6614         /* xcb_input_device_state_data_t.enable.enable */
6615         _aux->enable.enable = *(uint8_t *)xcb_tmp;
6616         xcb_block_len += sizeof(uint8_t);
6617         xcb_tmp += sizeof(uint8_t);
6618         xcb_align_to = ALIGNOF(uint8_t);
6619         /* xcb_input_device_state_data_t.enable.pad1 */
6620         _aux->enable.pad1[0] = *(uint8_t *)xcb_tmp;
6621         _aux->enable.pad1[1] = *(uint8_t *)xcb_tmp;
6622         _aux->enable.pad1[2] = *(uint8_t *)xcb_tmp;
6623         xcb_block_len += sizeof(uint8_t) * 3;
6624         xcb_tmp += sizeof(uint8_t) * 3;
6625         xcb_align_to = ALIGNOF(uint8_t);
6626     }
6627     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
6628         /* xcb_input_device_state_data_t.abs_area.offset_x */
6629         _aux->abs_area.offset_x = *(uint32_t *)xcb_tmp;
6630         xcb_block_len += sizeof(uint32_t);
6631         xcb_tmp += sizeof(uint32_t);
6632         xcb_align_to = ALIGNOF(uint32_t);
6633         /* xcb_input_device_state_data_t.abs_area.offset_y */
6634         _aux->abs_area.offset_y = *(uint32_t *)xcb_tmp;
6635         xcb_block_len += sizeof(uint32_t);
6636         xcb_tmp += sizeof(uint32_t);
6637         xcb_align_to = ALIGNOF(uint32_t);
6638         /* xcb_input_device_state_data_t.abs_area.width */
6639         _aux->abs_area.width = *(uint32_t *)xcb_tmp;
6640         xcb_block_len += sizeof(uint32_t);
6641         xcb_tmp += sizeof(uint32_t);
6642         xcb_align_to = ALIGNOF(uint32_t);
6643         /* xcb_input_device_state_data_t.abs_area.height */
6644         _aux->abs_area.height = *(uint32_t *)xcb_tmp;
6645         xcb_block_len += sizeof(uint32_t);
6646         xcb_tmp += sizeof(uint32_t);
6647         xcb_align_to = ALIGNOF(uint32_t);
6648         /* xcb_input_device_state_data_t.abs_area.screen */
6649         _aux->abs_area.screen = *(uint32_t *)xcb_tmp;
6650         xcb_block_len += sizeof(uint32_t);
6651         xcb_tmp += sizeof(uint32_t);
6652         xcb_align_to = ALIGNOF(uint32_t);
6653         /* xcb_input_device_state_data_t.abs_area.following */
6654         _aux->abs_area.following = *(uint32_t *)xcb_tmp;
6655         xcb_block_len += sizeof(uint32_t);
6656         xcb_tmp += sizeof(uint32_t);
6657         xcb_align_to = ALIGNOF(uint32_t);
6658     }
6659     /* insert padding */
6660     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
6661     xcb_buffer_len += xcb_block_len + xcb_pad;
6662     if (0 != xcb_pad) {
6663         xcb_tmp += xcb_pad;
6664         xcb_pad = 0;
6665     }
6666     xcb_block_len = 0;
6667     xcb_padding_offset = 0;
6668 
6669     return xcb_buffer_len;
6670 }
6671 
6672 int
6673 xcb_input_device_state_data_sizeof (const void  *_buffer,
6674                                     uint16_t     control_id)
6675 {
6676     xcb_input_device_state_data_t _aux;
6677     return xcb_input_device_state_data_unpack(_buffer, control_id, &_aux);
6678 }
6679 
6680 int
6681 xcb_input_device_state_sizeof (const void  *_buffer)
6682 {
6683     char *xcb_tmp = (char *)_buffer;
6684     const xcb_input_device_state_t *_aux = (xcb_input_device_state_t *)_buffer;
6685     unsigned int xcb_buffer_len = 0;
6686     unsigned int xcb_block_len = 0;
6687     unsigned int xcb_pad = 0;
6688     unsigned int xcb_align_to = 0;
6689 
6690 
6691     xcb_block_len += sizeof(xcb_input_device_state_t);
6692     xcb_tmp += xcb_block_len;
6693     xcb_buffer_len += xcb_block_len;
6694     xcb_block_len = 0;
6695     /* data */
6696     xcb_block_len += xcb_input_device_state_data_sizeof(xcb_tmp, _aux->control_id);
6697     xcb_tmp += xcb_block_len;
6698     xcb_align_to = ALIGNOF(char);
6699     /* insert padding */
6700     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
6701     xcb_buffer_len += xcb_block_len + xcb_pad;
6702     if (0 != xcb_pad) {
6703         xcb_tmp += xcb_pad;
6704         xcb_pad = 0;
6705     }
6706     xcb_block_len = 0;
6707 
6708     return xcb_buffer_len;
6709 }
6710 
6711 void *
6712 xcb_input_device_state_data (const xcb_input_device_state_t *R)
6713 {
6714     return (void *) (R + 1);
6715 }
6716 
6717 void
6718 xcb_input_device_state_next (xcb_input_device_state_iterator_t *i)
6719 {
6720     xcb_input_device_state_t *R = i->data;
6721     xcb_generic_iterator_t child;
6722     child.data = (xcb_input_device_state_t *)(((char *)R) + xcb_input_device_state_sizeof(R));
6723     i->index = (char *) child.data - (char *) i->data;
6724     --i->rem;
6725     i->data = (xcb_input_device_state_t *) child.data;
6726 }
6727 
6728 xcb_generic_iterator_t
6729 xcb_input_device_state_end (xcb_input_device_state_iterator_t i)
6730 {
6731     xcb_generic_iterator_t ret;
6732     while(i.rem > 0)
6733         xcb_input_device_state_next(&i);
6734     ret.data = i.data;
6735     ret.rem = i.rem;
6736     ret.index = i.index;
6737     return ret;
6738 }
6739 
6740 int
6741 xcb_input_get_device_control_sizeof (const void  *_buffer)
6742 {
6743     char *xcb_tmp = (char *)_buffer;
6744     unsigned int xcb_buffer_len = 0;
6745     unsigned int xcb_block_len = 0;
6746     unsigned int xcb_pad = 0;
6747     unsigned int xcb_align_to = 0;
6748 
6749 
6750     xcb_block_len += sizeof(xcb_input_get_device_control_reply_t);
6751     xcb_tmp += xcb_block_len;
6752     xcb_buffer_len += xcb_block_len;
6753     xcb_block_len = 0;
6754     /* control */
6755     xcb_block_len += xcb_input_device_state_sizeof(xcb_tmp);
6756     xcb_tmp += xcb_block_len;
6757     xcb_align_to = ALIGNOF(xcb_input_device_state_t);
6758     /* insert padding */
6759     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
6760     xcb_buffer_len += xcb_block_len + xcb_pad;
6761     if (0 != xcb_pad) {
6762         xcb_tmp += xcb_pad;
6763         xcb_pad = 0;
6764     }
6765     xcb_block_len = 0;
6766 
6767     return xcb_buffer_len;
6768 }
6769 
6770 xcb_input_get_device_control_cookie_t
6771 xcb_input_get_device_control (xcb_connection_t *c,
6772                               uint16_t          control_id,
6773                               uint8_t           device_id)
6774 {
6775     static const xcb_protocol_request_t xcb_req = {
6776         .count = 2,
6777         .ext = &xcb_input_id,
6778         .opcode = XCB_INPUT_GET_DEVICE_CONTROL,
6779         .isvoid = 0
6780     };
6781 
6782     struct iovec xcb_parts[4];
6783     xcb_input_get_device_control_cookie_t xcb_ret;
6784     xcb_input_get_device_control_request_t xcb_out;
6785 
6786     xcb_out.control_id = control_id;
6787     xcb_out.device_id = device_id;
6788     xcb_out.pad0 = 0;
6789 
6790     xcb_parts[2].iov_base = (char *) &xcb_out;
6791     xcb_parts[2].iov_len = sizeof(xcb_out);
6792     xcb_parts[3].iov_base = 0;
6793     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
6794 
6795     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
6796     return xcb_ret;
6797 }
6798 
6799 xcb_input_get_device_control_cookie_t
6800 xcb_input_get_device_control_unchecked (xcb_connection_t *c,
6801                                         uint16_t          control_id,
6802                                         uint8_t           device_id)
6803 {
6804     static const xcb_protocol_request_t xcb_req = {
6805         .count = 2,
6806         .ext = &xcb_input_id,
6807         .opcode = XCB_INPUT_GET_DEVICE_CONTROL,
6808         .isvoid = 0
6809     };
6810 
6811     struct iovec xcb_parts[4];
6812     xcb_input_get_device_control_cookie_t xcb_ret;
6813     xcb_input_get_device_control_request_t xcb_out;
6814 
6815     xcb_out.control_id = control_id;
6816     xcb_out.device_id = device_id;
6817     xcb_out.pad0 = 0;
6818 
6819     xcb_parts[2].iov_base = (char *) &xcb_out;
6820     xcb_parts[2].iov_len = sizeof(xcb_out);
6821     xcb_parts[3].iov_base = 0;
6822     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
6823 
6824     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
6825     return xcb_ret;
6826 }
6827 
6828 xcb_input_device_state_t *
6829 xcb_input_get_device_control_control (const xcb_input_get_device_control_reply_t *R)
6830 {
6831     return (xcb_input_device_state_t *) (R + 1);
6832 }
6833 
6834 xcb_input_get_device_control_reply_t *
6835 xcb_input_get_device_control_reply (xcb_connection_t                       *c,
6836                                     xcb_input_get_device_control_cookie_t   cookie  /**< */,
6837                                     xcb_generic_error_t                   **e)
6838 {
6839     return (xcb_input_get_device_control_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
6840 }
6841 
6842 int
6843 xcb_input_device_resolution_ctl_sizeof (const void  *_buffer)
6844 {
6845     char *xcb_tmp = (char *)_buffer;
6846     const xcb_input_device_resolution_ctl_t *_aux = (xcb_input_device_resolution_ctl_t *)_buffer;
6847     unsigned int xcb_buffer_len = 0;
6848     unsigned int xcb_block_len = 0;
6849     unsigned int xcb_pad = 0;
6850     unsigned int xcb_align_to = 0;
6851 
6852 
6853     xcb_block_len += sizeof(xcb_input_device_resolution_ctl_t);
6854     xcb_tmp += xcb_block_len;
6855     xcb_buffer_len += xcb_block_len;
6856     xcb_block_len = 0;
6857     /* resolution_values */
6858     xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
6859     xcb_tmp += xcb_block_len;
6860     xcb_align_to = ALIGNOF(uint32_t);
6861     /* insert padding */
6862     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
6863     xcb_buffer_len += xcb_block_len + xcb_pad;
6864     if (0 != xcb_pad) {
6865         xcb_tmp += xcb_pad;
6866         xcb_pad = 0;
6867     }
6868     xcb_block_len = 0;
6869 
6870     return xcb_buffer_len;
6871 }
6872 
6873 uint32_t *
6874 xcb_input_device_resolution_ctl_resolution_values (const xcb_input_device_resolution_ctl_t *R)
6875 {
6876     return (uint32_t *) (R + 1);
6877 }
6878 
6879 int
6880 xcb_input_device_resolution_ctl_resolution_values_length (const xcb_input_device_resolution_ctl_t *R)
6881 {
6882     return R->num_valuators;
6883 }
6884 
6885 xcb_generic_iterator_t
6886 xcb_input_device_resolution_ctl_resolution_values_end (const xcb_input_device_resolution_ctl_t *R)
6887 {
6888     xcb_generic_iterator_t i;
6889     i.data = ((uint32_t *) (R + 1)) + (R->num_valuators);
6890     i.rem = 0;
6891     i.index = (char *) i.data - (char *) R;
6892     return i;
6893 }
6894 
6895 void
6896 xcb_input_device_resolution_ctl_next (xcb_input_device_resolution_ctl_iterator_t *i)
6897 {
6898     xcb_input_device_resolution_ctl_t *R = i->data;
6899     xcb_generic_iterator_t child;
6900     child.data = (xcb_input_device_resolution_ctl_t *)(((char *)R) + xcb_input_device_resolution_ctl_sizeof(R));
6901     i->index = (char *) child.data - (char *) i->data;
6902     --i->rem;
6903     i->data = (xcb_input_device_resolution_ctl_t *) child.data;
6904 }
6905 
6906 xcb_generic_iterator_t
6907 xcb_input_device_resolution_ctl_end (xcb_input_device_resolution_ctl_iterator_t i)
6908 {
6909     xcb_generic_iterator_t ret;
6910     while(i.rem > 0)
6911         xcb_input_device_resolution_ctl_next(&i);
6912     ret.data = i.data;
6913     ret.rem = i.rem;
6914     ret.index = i.index;
6915     return ret;
6916 }
6917 
6918 void
6919 xcb_input_device_abs_calib_ctl_next (xcb_input_device_abs_calib_ctl_iterator_t *i)
6920 {
6921     --i->rem;
6922     ++i->data;
6923     i->index += sizeof(xcb_input_device_abs_calib_ctl_t);
6924 }
6925 
6926 xcb_generic_iterator_t
6927 xcb_input_device_abs_calib_ctl_end (xcb_input_device_abs_calib_ctl_iterator_t i)
6928 {
6929     xcb_generic_iterator_t ret;
6930     ret.data = i.data + i.rem;
6931     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6932     ret.rem = 0;
6933     return ret;
6934 }
6935 
6936 void
6937 xcb_input_device_abs_area_ctrl_next (xcb_input_device_abs_area_ctrl_iterator_t *i)
6938 {
6939     --i->rem;
6940     ++i->data;
6941     i->index += sizeof(xcb_input_device_abs_area_ctrl_t);
6942 }
6943 
6944 xcb_generic_iterator_t
6945 xcb_input_device_abs_area_ctrl_end (xcb_input_device_abs_area_ctrl_iterator_t i)
6946 {
6947     xcb_generic_iterator_t ret;
6948     ret.data = i.data + i.rem;
6949     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6950     ret.rem = 0;
6951     return ret;
6952 }
6953 
6954 void
6955 xcb_input_device_core_ctrl_next (xcb_input_device_core_ctrl_iterator_t *i)
6956 {
6957     --i->rem;
6958     ++i->data;
6959     i->index += sizeof(xcb_input_device_core_ctrl_t);
6960 }
6961 
6962 xcb_generic_iterator_t
6963 xcb_input_device_core_ctrl_end (xcb_input_device_core_ctrl_iterator_t i)
6964 {
6965     xcb_generic_iterator_t ret;
6966     ret.data = i.data + i.rem;
6967     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6968     ret.rem = 0;
6969     return ret;
6970 }
6971 
6972 void
6973 xcb_input_device_enable_ctrl_next (xcb_input_device_enable_ctrl_iterator_t *i)
6974 {
6975     --i->rem;
6976     ++i->data;
6977     i->index += sizeof(xcb_input_device_enable_ctrl_t);
6978 }
6979 
6980 xcb_generic_iterator_t
6981 xcb_input_device_enable_ctrl_end (xcb_input_device_enable_ctrl_iterator_t i)
6982 {
6983     xcb_generic_iterator_t ret;
6984     ret.data = i.data + i.rem;
6985     ret.index = i.index + ((char *) ret.data - (char *) i.data);
6986     ret.rem = 0;
6987     return ret;
6988 }
6989 
6990 uint32_t *
6991 xcb_input_device_ctl_data_resolution_resolution_values (const xcb_input_device_ctl_data_t *S)
6992 {
6993     return S->resolution.resolution_values;
6994 }
6995 
6996 int
6997 xcb_input_device_ctl_data_resolution_resolution_values_length (const xcb_input_device_ctl_t *R,
6998                                                                const xcb_input_device_ctl_data_t *S)
6999 {
7000     return S->resolution.num_valuators;
7001 }
7002 
7003 xcb_generic_iterator_t
7004 xcb_input_device_ctl_data_resolution_resolution_values_end (const xcb_input_device_ctl_t *R,
7005                                                             const xcb_input_device_ctl_data_t *S)
7006 {
7007     xcb_generic_iterator_t i;
7008     i.data = S->resolution.resolution_values + S->resolution.num_valuators;
7009     i.rem = 0;
7010     i.index = (char *) i.data - (char *) S;
7011     return i;
7012 }
7013 
7014 int
7015 xcb_input_device_ctl_data_serialize (void                              **_buffer,
7016                                      uint16_t                            control_id,
7017                                      const xcb_input_device_ctl_data_t  *_aux)
7018 {
7019     char *xcb_out = *_buffer;
7020     unsigned int xcb_buffer_len = 0;
7021     unsigned int xcb_align_to = 0;
7022     unsigned int xcb_padding_offset = 0;
7023 
7024     unsigned int xcb_pad = 0;
7025     char xcb_pad0[3] = {0, 0, 0};
7026     struct iovec xcb_parts[24];
7027     unsigned int xcb_parts_idx = 0;
7028     unsigned int xcb_block_len = 0;
7029     unsigned int i;
7030     char *xcb_tmp;
7031 
7032     if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
7033         /* xcb_input_device_ctl_data_t.resolution.first_valuator */
7034         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->resolution.first_valuator;
7035         xcb_block_len += sizeof(uint8_t);
7036         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
7037         xcb_parts_idx++;
7038         xcb_align_to = ALIGNOF(uint8_t);
7039         /* xcb_input_device_ctl_data_t.resolution.num_valuators */
7040         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->resolution.num_valuators;
7041         xcb_block_len += sizeof(uint8_t);
7042         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
7043         xcb_parts_idx++;
7044         xcb_align_to = ALIGNOF(uint8_t);
7045         /* xcb_input_device_ctl_data_t.resolution.pad0 */
7046         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7047         xcb_block_len += sizeof(uint8_t)*2;
7048         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
7049         xcb_parts_idx++;
7050         xcb_align_to = ALIGNOF(uint8_t);
7051         /* insert padding */
7052         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7053         xcb_buffer_len += xcb_block_len + xcb_pad;
7054         if (0 != xcb_pad) {
7055             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7056             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7057             xcb_parts_idx++;
7058             xcb_pad = 0;
7059         }
7060         xcb_block_len = 0;
7061         xcb_padding_offset = 0;
7062         /* resolution_values */
7063         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_values;
7064         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
7065         xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
7066         xcb_parts_idx++;
7067         xcb_align_to = ALIGNOF(uint32_t);
7068     }
7069     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
7070         /* xcb_input_device_ctl_data_t.abs_calib.min_x */
7071         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_x;
7072         xcb_block_len += sizeof(int32_t);
7073         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7074         xcb_parts_idx++;
7075         xcb_align_to = ALIGNOF(int32_t);
7076         /* xcb_input_device_ctl_data_t.abs_calib.max_x */
7077         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_x;
7078         xcb_block_len += sizeof(int32_t);
7079         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7080         xcb_parts_idx++;
7081         xcb_align_to = ALIGNOF(int32_t);
7082         /* xcb_input_device_ctl_data_t.abs_calib.min_y */
7083         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_y;
7084         xcb_block_len += sizeof(int32_t);
7085         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7086         xcb_parts_idx++;
7087         xcb_align_to = ALIGNOF(int32_t);
7088         /* xcb_input_device_ctl_data_t.abs_calib.max_y */
7089         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_y;
7090         xcb_block_len += sizeof(int32_t);
7091         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7092         xcb_parts_idx++;
7093         xcb_align_to = ALIGNOF(int32_t);
7094         /* xcb_input_device_ctl_data_t.abs_calib.flip_x */
7095         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_x;
7096         xcb_block_len += sizeof(uint32_t);
7097         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7098         xcb_parts_idx++;
7099         xcb_align_to = ALIGNOF(uint32_t);
7100         /* xcb_input_device_ctl_data_t.abs_calib.flip_y */
7101         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_y;
7102         xcb_block_len += sizeof(uint32_t);
7103         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7104         xcb_parts_idx++;
7105         xcb_align_to = ALIGNOF(uint32_t);
7106         /* xcb_input_device_ctl_data_t.abs_calib.rotation */
7107         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.rotation;
7108         xcb_block_len += sizeof(uint32_t);
7109         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7110         xcb_parts_idx++;
7111         xcb_align_to = ALIGNOF(uint32_t);
7112         /* xcb_input_device_ctl_data_t.abs_calib.button_threshold */
7113         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.button_threshold;
7114         xcb_block_len += sizeof(uint32_t);
7115         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7116         xcb_parts_idx++;
7117         xcb_align_to = ALIGNOF(uint32_t);
7118     }
7119     if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
7120         /* xcb_input_device_ctl_data_t.core.status */
7121         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->core.status;
7122         xcb_block_len += sizeof(uint8_t);
7123         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
7124         xcb_parts_idx++;
7125         xcb_align_to = ALIGNOF(uint8_t);
7126         /* xcb_input_device_ctl_data_t.core.pad1 */
7127         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7128         xcb_block_len += sizeof(uint8_t)*3;
7129         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
7130         xcb_parts_idx++;
7131         xcb_align_to = ALIGNOF(uint8_t);
7132     }
7133     if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
7134         /* xcb_input_device_ctl_data_t.enable.enable */
7135         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->enable.enable;
7136         xcb_block_len += sizeof(uint8_t);
7137         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
7138         xcb_parts_idx++;
7139         xcb_align_to = ALIGNOF(uint8_t);
7140         /* xcb_input_device_ctl_data_t.enable.pad2 */
7141         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7142         xcb_block_len += sizeof(uint8_t)*3;
7143         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
7144         xcb_parts_idx++;
7145         xcb_align_to = ALIGNOF(uint8_t);
7146     }
7147     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
7148         /* xcb_input_device_ctl_data_t.abs_area.offset_x */
7149         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_x;
7150         xcb_block_len += sizeof(uint32_t);
7151         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7152         xcb_parts_idx++;
7153         xcb_align_to = ALIGNOF(uint32_t);
7154         /* xcb_input_device_ctl_data_t.abs_area.offset_y */
7155         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_y;
7156         xcb_block_len += sizeof(uint32_t);
7157         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7158         xcb_parts_idx++;
7159         xcb_align_to = ALIGNOF(uint32_t);
7160         /* xcb_input_device_ctl_data_t.abs_area.width */
7161         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.width;
7162         xcb_block_len += sizeof(int32_t);
7163         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7164         xcb_parts_idx++;
7165         xcb_align_to = ALIGNOF(int32_t);
7166         /* xcb_input_device_ctl_data_t.abs_area.height */
7167         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.height;
7168         xcb_block_len += sizeof(int32_t);
7169         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7170         xcb_parts_idx++;
7171         xcb_align_to = ALIGNOF(int32_t);
7172         /* xcb_input_device_ctl_data_t.abs_area.screen */
7173         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.screen;
7174         xcb_block_len += sizeof(int32_t);
7175         xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
7176         xcb_parts_idx++;
7177         xcb_align_to = ALIGNOF(int32_t);
7178         /* xcb_input_device_ctl_data_t.abs_area.following */
7179         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.following;
7180         xcb_block_len += sizeof(uint32_t);
7181         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
7182         xcb_parts_idx++;
7183         xcb_align_to = ALIGNOF(uint32_t);
7184     }
7185     /* insert padding */
7186     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7187     xcb_buffer_len += xcb_block_len + xcb_pad;
7188     if (0 != xcb_pad) {
7189         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7190         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7191         xcb_parts_idx++;
7192         xcb_pad = 0;
7193     }
7194     xcb_block_len = 0;
7195     xcb_padding_offset = 0;
7196 
7197     if (NULL == xcb_out) {
7198         /* allocate memory */
7199         xcb_out = malloc(xcb_buffer_len);
7200         *_buffer = xcb_out;
7201     }
7202 
7203     xcb_tmp = xcb_out;
7204     for(i=0; i<xcb_parts_idx; i++) {
7205         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
7206             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
7207         if (0 != xcb_parts[i].iov_len)
7208             xcb_tmp += xcb_parts[i].iov_len;
7209     }
7210 
7211     return xcb_buffer_len;
7212 }
7213 
7214 int
7215 xcb_input_device_ctl_data_unpack (const void                   *_buffer,
7216                                   uint16_t                      control_id,
7217                                   xcb_input_device_ctl_data_t  *_aux)
7218 {
7219     char *xcb_tmp = (char *)_buffer;
7220     unsigned int xcb_buffer_len = 0;
7221     unsigned int xcb_block_len = 0;
7222     unsigned int xcb_pad = 0;
7223     unsigned int xcb_align_to = 0;
7224     unsigned int xcb_padding_offset = 0;
7225 
7226 
7227     if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
7228         /* xcb_input_device_ctl_data_t.resolution.first_valuator */
7229         _aux->resolution.first_valuator = *(uint8_t *)xcb_tmp;
7230         xcb_block_len += sizeof(uint8_t);
7231         xcb_tmp += sizeof(uint8_t);
7232         xcb_align_to = ALIGNOF(uint8_t);
7233         /* xcb_input_device_ctl_data_t.resolution.num_valuators */
7234         _aux->resolution.num_valuators = *(uint8_t *)xcb_tmp;
7235         xcb_block_len += sizeof(uint8_t);
7236         xcb_tmp += sizeof(uint8_t);
7237         xcb_align_to = ALIGNOF(uint8_t);
7238         /* xcb_input_device_ctl_data_t.resolution.pad0 */
7239         _aux->resolution.pad0[0] = *(uint8_t *)xcb_tmp;
7240         _aux->resolution.pad0[1] = *(uint8_t *)xcb_tmp;
7241         xcb_block_len += sizeof(uint8_t) * 2;
7242         xcb_tmp += sizeof(uint8_t) * 2;
7243         xcb_align_to = ALIGNOF(uint8_t);
7244         /* insert padding */
7245         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7246         xcb_buffer_len += xcb_block_len + xcb_pad;
7247         if (0 != xcb_pad) {
7248             xcb_tmp += xcb_pad;
7249             xcb_pad = 0;
7250         }
7251         xcb_block_len = 0;
7252         xcb_padding_offset = 0;
7253         /* resolution_values */
7254         _aux->resolution.resolution_values = (uint32_t *)xcb_tmp;
7255         xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
7256         xcb_tmp += xcb_block_len;
7257         xcb_align_to = ALIGNOF(uint32_t);
7258     }
7259     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
7260         /* xcb_input_device_ctl_data_t.abs_calib.min_x */
7261         _aux->abs_calib.min_x = *(int32_t *)xcb_tmp;
7262         xcb_block_len += sizeof(int32_t);
7263         xcb_tmp += sizeof(int32_t);
7264         xcb_align_to = ALIGNOF(int32_t);
7265         /* xcb_input_device_ctl_data_t.abs_calib.max_x */
7266         _aux->abs_calib.max_x = *(int32_t *)xcb_tmp;
7267         xcb_block_len += sizeof(int32_t);
7268         xcb_tmp += sizeof(int32_t);
7269         xcb_align_to = ALIGNOF(int32_t);
7270         /* xcb_input_device_ctl_data_t.abs_calib.min_y */
7271         _aux->abs_calib.min_y = *(int32_t *)xcb_tmp;
7272         xcb_block_len += sizeof(int32_t);
7273         xcb_tmp += sizeof(int32_t);
7274         xcb_align_to = ALIGNOF(int32_t);
7275         /* xcb_input_device_ctl_data_t.abs_calib.max_y */
7276         _aux->abs_calib.max_y = *(int32_t *)xcb_tmp;
7277         xcb_block_len += sizeof(int32_t);
7278         xcb_tmp += sizeof(int32_t);
7279         xcb_align_to = ALIGNOF(int32_t);
7280         /* xcb_input_device_ctl_data_t.abs_calib.flip_x */
7281         _aux->abs_calib.flip_x = *(uint32_t *)xcb_tmp;
7282         xcb_block_len += sizeof(uint32_t);
7283         xcb_tmp += sizeof(uint32_t);
7284         xcb_align_to = ALIGNOF(uint32_t);
7285         /* xcb_input_device_ctl_data_t.abs_calib.flip_y */
7286         _aux->abs_calib.flip_y = *(uint32_t *)xcb_tmp;
7287         xcb_block_len += sizeof(uint32_t);
7288         xcb_tmp += sizeof(uint32_t);
7289         xcb_align_to = ALIGNOF(uint32_t);
7290         /* xcb_input_device_ctl_data_t.abs_calib.rotation */
7291         _aux->abs_calib.rotation = *(uint32_t *)xcb_tmp;
7292         xcb_block_len += sizeof(uint32_t);
7293         xcb_tmp += sizeof(uint32_t);
7294         xcb_align_to = ALIGNOF(uint32_t);
7295         /* xcb_input_device_ctl_data_t.abs_calib.button_threshold */
7296         _aux->abs_calib.button_threshold = *(uint32_t *)xcb_tmp;
7297         xcb_block_len += sizeof(uint32_t);
7298         xcb_tmp += sizeof(uint32_t);
7299         xcb_align_to = ALIGNOF(uint32_t);
7300     }
7301     if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
7302         /* xcb_input_device_ctl_data_t.core.status */
7303         _aux->core.status = *(uint8_t *)xcb_tmp;
7304         xcb_block_len += sizeof(uint8_t);
7305         xcb_tmp += sizeof(uint8_t);
7306         xcb_align_to = ALIGNOF(uint8_t);
7307         /* xcb_input_device_ctl_data_t.core.pad1 */
7308         _aux->core.pad1[0] = *(uint8_t *)xcb_tmp;
7309         _aux->core.pad1[1] = *(uint8_t *)xcb_tmp;
7310         _aux->core.pad1[2] = *(uint8_t *)xcb_tmp;
7311         xcb_block_len += sizeof(uint8_t) * 3;
7312         xcb_tmp += sizeof(uint8_t) * 3;
7313         xcb_align_to = ALIGNOF(uint8_t);
7314     }
7315     if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
7316         /* xcb_input_device_ctl_data_t.enable.enable */
7317         _aux->enable.enable = *(uint8_t *)xcb_tmp;
7318         xcb_block_len += sizeof(uint8_t);
7319         xcb_tmp += sizeof(uint8_t);
7320         xcb_align_to = ALIGNOF(uint8_t);
7321         /* xcb_input_device_ctl_data_t.enable.pad2 */
7322         _aux->enable.pad2[0] = *(uint8_t *)xcb_tmp;
7323         _aux->enable.pad2[1] = *(uint8_t *)xcb_tmp;
7324         _aux->enable.pad2[2] = *(uint8_t *)xcb_tmp;
7325         xcb_block_len += sizeof(uint8_t) * 3;
7326         xcb_tmp += sizeof(uint8_t) * 3;
7327         xcb_align_to = ALIGNOF(uint8_t);
7328     }
7329     if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
7330         /* xcb_input_device_ctl_data_t.abs_area.offset_x */
7331         _aux->abs_area.offset_x = *(uint32_t *)xcb_tmp;
7332         xcb_block_len += sizeof(uint32_t);
7333         xcb_tmp += sizeof(uint32_t);
7334         xcb_align_to = ALIGNOF(uint32_t);
7335         /* xcb_input_device_ctl_data_t.abs_area.offset_y */
7336         _aux->abs_area.offset_y = *(uint32_t *)xcb_tmp;
7337         xcb_block_len += sizeof(uint32_t);
7338         xcb_tmp += sizeof(uint32_t);
7339         xcb_align_to = ALIGNOF(uint32_t);
7340         /* xcb_input_device_ctl_data_t.abs_area.width */
7341         _aux->abs_area.width = *(int32_t *)xcb_tmp;
7342         xcb_block_len += sizeof(int32_t);
7343         xcb_tmp += sizeof(int32_t);
7344         xcb_align_to = ALIGNOF(int32_t);
7345         /* xcb_input_device_ctl_data_t.abs_area.height */
7346         _aux->abs_area.height = *(int32_t *)xcb_tmp;
7347         xcb_block_len += sizeof(int32_t);
7348         xcb_tmp += sizeof(int32_t);
7349         xcb_align_to = ALIGNOF(int32_t);
7350         /* xcb_input_device_ctl_data_t.abs_area.screen */
7351         _aux->abs_area.screen = *(int32_t *)xcb_tmp;
7352         xcb_block_len += sizeof(int32_t);
7353         xcb_tmp += sizeof(int32_t);
7354         xcb_align_to = ALIGNOF(int32_t);
7355         /* xcb_input_device_ctl_data_t.abs_area.following */
7356         _aux->abs_area.following = *(uint32_t *)xcb_tmp;
7357         xcb_block_len += sizeof(uint32_t);
7358         xcb_tmp += sizeof(uint32_t);
7359         xcb_align_to = ALIGNOF(uint32_t);
7360     }
7361     /* insert padding */
7362     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7363     xcb_buffer_len += xcb_block_len + xcb_pad;
7364     if (0 != xcb_pad) {
7365         xcb_tmp += xcb_pad;
7366         xcb_pad = 0;
7367     }
7368     xcb_block_len = 0;
7369     xcb_padding_offset = 0;
7370 
7371     return xcb_buffer_len;
7372 }
7373 
7374 int
7375 xcb_input_device_ctl_data_sizeof (const void  *_buffer,
7376                                   uint16_t     control_id)
7377 {
7378     xcb_input_device_ctl_data_t _aux;
7379     return xcb_input_device_ctl_data_unpack(_buffer, control_id, &_aux);
7380 }
7381 
7382 int
7383 xcb_input_device_ctl_sizeof (const void  *_buffer)
7384 {
7385     char *xcb_tmp = (char *)_buffer;
7386     const xcb_input_device_ctl_t *_aux = (xcb_input_device_ctl_t *)_buffer;
7387     unsigned int xcb_buffer_len = 0;
7388     unsigned int xcb_block_len = 0;
7389     unsigned int xcb_pad = 0;
7390     unsigned int xcb_align_to = 0;
7391 
7392 
7393     xcb_block_len += sizeof(xcb_input_device_ctl_t);
7394     xcb_tmp += xcb_block_len;
7395     xcb_buffer_len += xcb_block_len;
7396     xcb_block_len = 0;
7397     /* data */
7398     xcb_block_len += xcb_input_device_ctl_data_sizeof(xcb_tmp, _aux->control_id);
7399     xcb_tmp += xcb_block_len;
7400     xcb_align_to = ALIGNOF(char);
7401     /* insert padding */
7402     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
7403     xcb_buffer_len += xcb_block_len + xcb_pad;
7404     if (0 != xcb_pad) {
7405         xcb_tmp += xcb_pad;
7406         xcb_pad = 0;
7407     }
7408     xcb_block_len = 0;
7409 
7410     return xcb_buffer_len;
7411 }
7412 
7413 void *
7414 xcb_input_device_ctl_data (const xcb_input_device_ctl_t *R)
7415 {
7416     return (void *) (R + 1);
7417 }
7418 
7419 void
7420 xcb_input_device_ctl_next (xcb_input_device_ctl_iterator_t *i)
7421 {
7422     xcb_input_device_ctl_t *R = i->data;
7423     xcb_generic_iterator_t child;
7424     child.data = (xcb_input_device_ctl_t *)(((char *)R) + xcb_input_device_ctl_sizeof(R));
7425     i->index = (char *) child.data - (char *) i->data;
7426     --i->rem;
7427     i->data = (xcb_input_device_ctl_t *) child.data;
7428 }
7429 
7430 xcb_generic_iterator_t
7431 xcb_input_device_ctl_end (xcb_input_device_ctl_iterator_t i)
7432 {
7433     xcb_generic_iterator_t ret;
7434     while(i.rem > 0)
7435         xcb_input_device_ctl_next(&i);
7436     ret.data = i.data;
7437     ret.rem = i.rem;
7438     ret.index = i.index;
7439     return ret;
7440 }
7441 
7442 int
7443 xcb_input_change_device_control_sizeof (const void  *_buffer)
7444 {
7445     char *xcb_tmp = (char *)_buffer;
7446     unsigned int xcb_buffer_len = 0;
7447     unsigned int xcb_block_len = 0;
7448     unsigned int xcb_pad = 0;
7449     unsigned int xcb_align_to = 0;
7450 
7451 
7452     xcb_block_len += sizeof(xcb_input_change_device_control_request_t);
7453     xcb_tmp += xcb_block_len;
7454     xcb_buffer_len += xcb_block_len;
7455     xcb_block_len = 0;
7456     /* control */
7457     xcb_block_len += xcb_input_device_ctl_sizeof(xcb_tmp);
7458     xcb_tmp += xcb_block_len;
7459     xcb_align_to = ALIGNOF(xcb_input_device_ctl_t);
7460     /* insert padding */
7461     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
7462     xcb_buffer_len += xcb_block_len + xcb_pad;
7463     if (0 != xcb_pad) {
7464         xcb_tmp += xcb_pad;
7465         xcb_pad = 0;
7466     }
7467     xcb_block_len = 0;
7468 
7469     return xcb_buffer_len;
7470 }
7471 
7472 xcb_input_change_device_control_cookie_t
7473 xcb_input_change_device_control (xcb_connection_t       *c,
7474                                  uint16_t                control_id,
7475                                  uint8_t                 device_id,
7476                                  xcb_input_device_ctl_t *control)
7477 {
7478     static const xcb_protocol_request_t xcb_req = {
7479         .count = 4,
7480         .ext = &xcb_input_id,
7481         .opcode = XCB_INPUT_CHANGE_DEVICE_CONTROL,
7482         .isvoid = 0
7483     };
7484 
7485     struct iovec xcb_parts[6];
7486     xcb_input_change_device_control_cookie_t xcb_ret;
7487     xcb_input_change_device_control_request_t xcb_out;
7488 
7489     xcb_out.control_id = control_id;
7490     xcb_out.device_id = device_id;
7491     xcb_out.pad0 = 0;
7492 
7493     xcb_parts[2].iov_base = (char *) &xcb_out;
7494     xcb_parts[2].iov_len = sizeof(xcb_out);
7495     xcb_parts[3].iov_base = 0;
7496     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
7497     /* xcb_input_device_ctl_t control */
7498     xcb_parts[4].iov_base = (char *) control;
7499     xcb_parts[4].iov_len =
7500       xcb_input_device_ctl_sizeof (control);
7501 
7502     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
7503     return xcb_ret;
7504 }
7505 
7506 xcb_input_change_device_control_cookie_t
7507 xcb_input_change_device_control_unchecked (xcb_connection_t       *c,
7508                                            uint16_t                control_id,
7509                                            uint8_t                 device_id,
7510                                            xcb_input_device_ctl_t *control)
7511 {
7512     static const xcb_protocol_request_t xcb_req = {
7513         .count = 4,
7514         .ext = &xcb_input_id,
7515         .opcode = XCB_INPUT_CHANGE_DEVICE_CONTROL,
7516         .isvoid = 0
7517     };
7518 
7519     struct iovec xcb_parts[6];
7520     xcb_input_change_device_control_cookie_t xcb_ret;
7521     xcb_input_change_device_control_request_t xcb_out;
7522 
7523     xcb_out.control_id = control_id;
7524     xcb_out.device_id = device_id;
7525     xcb_out.pad0 = 0;
7526 
7527     xcb_parts[2].iov_base = (char *) &xcb_out;
7528     xcb_parts[2].iov_len = sizeof(xcb_out);
7529     xcb_parts[3].iov_base = 0;
7530     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
7531     /* xcb_input_device_ctl_t control */
7532     xcb_parts[4].iov_base = (char *) control;
7533     xcb_parts[4].iov_len =
7534       xcb_input_device_ctl_sizeof (control);
7535 
7536     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
7537     return xcb_ret;
7538 }
7539 
7540 xcb_input_change_device_control_reply_t *
7541 xcb_input_change_device_control_reply (xcb_connection_t                          *c,
7542                                        xcb_input_change_device_control_cookie_t   cookie  /**< */,
7543                                        xcb_generic_error_t                      **e)
7544 {
7545     return (xcb_input_change_device_control_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
7546 }
7547 
7548 int
7549 xcb_input_list_device_properties_sizeof (const void  *_buffer)
7550 {
7551     char *xcb_tmp = (char *)_buffer;
7552     const xcb_input_list_device_properties_reply_t *_aux = (xcb_input_list_device_properties_reply_t *)_buffer;
7553     unsigned int xcb_buffer_len = 0;
7554     unsigned int xcb_block_len = 0;
7555     unsigned int xcb_pad = 0;
7556     unsigned int xcb_align_to = 0;
7557 
7558 
7559     xcb_block_len += sizeof(xcb_input_list_device_properties_reply_t);
7560     xcb_tmp += xcb_block_len;
7561     xcb_buffer_len += xcb_block_len;
7562     xcb_block_len = 0;
7563     /* atoms */
7564     xcb_block_len += _aux->num_atoms * sizeof(xcb_atom_t);
7565     xcb_tmp += xcb_block_len;
7566     xcb_align_to = ALIGNOF(xcb_atom_t);
7567     /* insert padding */
7568     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
7569     xcb_buffer_len += xcb_block_len + xcb_pad;
7570     if (0 != xcb_pad) {
7571         xcb_tmp += xcb_pad;
7572         xcb_pad = 0;
7573     }
7574     xcb_block_len = 0;
7575 
7576     return xcb_buffer_len;
7577 }
7578 
7579 xcb_input_list_device_properties_cookie_t
7580 xcb_input_list_device_properties (xcb_connection_t *c,
7581                                   uint8_t           device_id)
7582 {
7583     static const xcb_protocol_request_t xcb_req = {
7584         .count = 2,
7585         .ext = &xcb_input_id,
7586         .opcode = XCB_INPUT_LIST_DEVICE_PROPERTIES,
7587         .isvoid = 0
7588     };
7589 
7590     struct iovec xcb_parts[4];
7591     xcb_input_list_device_properties_cookie_t xcb_ret;
7592     xcb_input_list_device_properties_request_t xcb_out;
7593 
7594     xcb_out.device_id = device_id;
7595     memset(xcb_out.pad0, 0, 3);
7596 
7597     xcb_parts[2].iov_base = (char *) &xcb_out;
7598     xcb_parts[2].iov_len = sizeof(xcb_out);
7599     xcb_parts[3].iov_base = 0;
7600     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
7601 
7602     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
7603     return xcb_ret;
7604 }
7605 
7606 xcb_input_list_device_properties_cookie_t
7607 xcb_input_list_device_properties_unchecked (xcb_connection_t *c,
7608                                             uint8_t           device_id)
7609 {
7610     static const xcb_protocol_request_t xcb_req = {
7611         .count = 2,
7612         .ext = &xcb_input_id,
7613         .opcode = XCB_INPUT_LIST_DEVICE_PROPERTIES,
7614         .isvoid = 0
7615     };
7616 
7617     struct iovec xcb_parts[4];
7618     xcb_input_list_device_properties_cookie_t xcb_ret;
7619     xcb_input_list_device_properties_request_t xcb_out;
7620 
7621     xcb_out.device_id = device_id;
7622     memset(xcb_out.pad0, 0, 3);
7623 
7624     xcb_parts[2].iov_base = (char *) &xcb_out;
7625     xcb_parts[2].iov_len = sizeof(xcb_out);
7626     xcb_parts[3].iov_base = 0;
7627     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
7628 
7629     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
7630     return xcb_ret;
7631 }
7632 
7633 xcb_atom_t *
7634 xcb_input_list_device_properties_atoms (const xcb_input_list_device_properties_reply_t *R)
7635 {
7636     return (xcb_atom_t *) (R + 1);
7637 }
7638 
7639 int
7640 xcb_input_list_device_properties_atoms_length (const xcb_input_list_device_properties_reply_t *R)
7641 {
7642     return R->num_atoms;
7643 }
7644 
7645 xcb_generic_iterator_t
7646 xcb_input_list_device_properties_atoms_end (const xcb_input_list_device_properties_reply_t *R)
7647 {
7648     xcb_generic_iterator_t i;
7649     i.data = ((xcb_atom_t *) (R + 1)) + (R->num_atoms);
7650     i.rem = 0;
7651     i.index = (char *) i.data - (char *) R;
7652     return i;
7653 }
7654 
7655 xcb_input_list_device_properties_reply_t *
7656 xcb_input_list_device_properties_reply (xcb_connection_t                           *c,
7657                                         xcb_input_list_device_properties_cookie_t   cookie  /**< */,
7658                                         xcb_generic_error_t                       **e)
7659 {
7660     return (xcb_input_list_device_properties_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
7661 }
7662 
7663 uint8_t *
7664 xcb_input_change_device_property_items_data_8 (const xcb_input_change_device_property_items_t *S)
7665 {
7666     return S->data8;
7667 }
7668 
7669 int
7670 xcb_input_change_device_property_items_data_8_length (const xcb_input_change_device_property_request_t *R,
7671                                                       const xcb_input_change_device_property_items_t *S)
7672 {
7673     return R->num_items;
7674 }
7675 
7676 xcb_generic_iterator_t
7677 xcb_input_change_device_property_items_data_8_end (const xcb_input_change_device_property_request_t *R,
7678                                                    const xcb_input_change_device_property_items_t *S)
7679 {
7680     xcb_generic_iterator_t i;
7681     i.data = S->data8 + R->num_items;
7682     i.rem = 0;
7683     i.index = (char *) i.data - (char *) S;
7684     return i;
7685 }
7686 
7687 uint16_t *
7688 xcb_input_change_device_property_items_data_16 (const xcb_input_change_device_property_items_t *S)
7689 {
7690     return S->data16;
7691 }
7692 
7693 int
7694 xcb_input_change_device_property_items_data_16_length (const xcb_input_change_device_property_request_t *R,
7695                                                        const xcb_input_change_device_property_items_t *S)
7696 {
7697     return R->num_items;
7698 }
7699 
7700 xcb_generic_iterator_t
7701 xcb_input_change_device_property_items_data_16_end (const xcb_input_change_device_property_request_t *R,
7702                                                     const xcb_input_change_device_property_items_t *S)
7703 {
7704     xcb_generic_iterator_t i;
7705     i.data = S->data16 + R->num_items;
7706     i.rem = 0;
7707     i.index = (char *) i.data - (char *) S;
7708     return i;
7709 }
7710 
7711 uint32_t *
7712 xcb_input_change_device_property_items_data_32 (const xcb_input_change_device_property_items_t *S)
7713 {
7714     return S->data32;
7715 }
7716 
7717 int
7718 xcb_input_change_device_property_items_data_32_length (const xcb_input_change_device_property_request_t *R,
7719                                                        const xcb_input_change_device_property_items_t *S)
7720 {
7721     return R->num_items;
7722 }
7723 
7724 xcb_generic_iterator_t
7725 xcb_input_change_device_property_items_data_32_end (const xcb_input_change_device_property_request_t *R,
7726                                                     const xcb_input_change_device_property_items_t *S)
7727 {
7728     xcb_generic_iterator_t i;
7729     i.data = S->data32 + R->num_items;
7730     i.rem = 0;
7731     i.index = (char *) i.data - (char *) S;
7732     return i;
7733 }
7734 
7735 int
7736 xcb_input_change_device_property_items_serialize (void                                           **_buffer,
7737                                                   uint32_t                                         num_items,
7738                                                   uint8_t                                          format,
7739                                                   const xcb_input_change_device_property_items_t  *_aux)
7740 {
7741     char *xcb_out = *_buffer;
7742     unsigned int xcb_buffer_len = 0;
7743     unsigned int xcb_align_to = 0;
7744     unsigned int xcb_padding_offset = 0;
7745 
7746     unsigned int xcb_pad = 0;
7747     char xcb_pad0[3] = {0, 0, 0};
7748     struct iovec xcb_parts[9];
7749     unsigned int xcb_parts_idx = 0;
7750     unsigned int xcb_block_len = 0;
7751     unsigned int i;
7752     char *xcb_tmp;
7753 
7754     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
7755         /* insert padding */
7756         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7757         xcb_buffer_len += xcb_block_len + xcb_pad;
7758         if (0 != xcb_pad) {
7759             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7760             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7761             xcb_parts_idx++;
7762             xcb_pad = 0;
7763         }
7764         xcb_block_len = 0;
7765         xcb_padding_offset = 0;
7766         /* data8 */
7767         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
7768         xcb_block_len += num_items * sizeof(uint8_t);
7769         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
7770         xcb_parts_idx++;
7771         xcb_align_to = ALIGNOF(uint8_t);
7772         xcb_align_to = 4;
7773         /* insert padding */
7774         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7775         xcb_buffer_len += xcb_block_len + xcb_pad;
7776         if (0 != xcb_pad) {
7777             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7778             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7779             xcb_parts_idx++;
7780             xcb_pad = 0;
7781         }
7782         xcb_block_len = 0;
7783         xcb_padding_offset = 0;
7784     }
7785     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
7786         /* insert padding */
7787         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7788         xcb_buffer_len += xcb_block_len + xcb_pad;
7789         if (0 != xcb_pad) {
7790             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7791             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7792             xcb_parts_idx++;
7793             xcb_pad = 0;
7794         }
7795         xcb_block_len = 0;
7796         xcb_padding_offset = 0;
7797         /* data16 */
7798         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
7799         xcb_block_len += num_items * sizeof(uint16_t);
7800         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
7801         xcb_parts_idx++;
7802         xcb_align_to = ALIGNOF(uint16_t);
7803         xcb_align_to = 4;
7804         /* insert padding */
7805         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7806         xcb_buffer_len += xcb_block_len + xcb_pad;
7807         if (0 != xcb_pad) {
7808             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7809             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7810             xcb_parts_idx++;
7811             xcb_pad = 0;
7812         }
7813         xcb_block_len = 0;
7814         xcb_padding_offset = 0;
7815     }
7816     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
7817         /* insert padding */
7818         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7819         xcb_buffer_len += xcb_block_len + xcb_pad;
7820         if (0 != xcb_pad) {
7821             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7822             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7823             xcb_parts_idx++;
7824             xcb_pad = 0;
7825         }
7826         xcb_block_len = 0;
7827         xcb_padding_offset = 0;
7828         /* data32 */
7829         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
7830         xcb_block_len += num_items * sizeof(uint32_t);
7831         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
7832         xcb_parts_idx++;
7833         xcb_align_to = ALIGNOF(uint32_t);
7834     }
7835     /* insert padding */
7836     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7837     xcb_buffer_len += xcb_block_len + xcb_pad;
7838     if (0 != xcb_pad) {
7839         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
7840         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
7841         xcb_parts_idx++;
7842         xcb_pad = 0;
7843     }
7844     xcb_block_len = 0;
7845     xcb_padding_offset = 0;
7846 
7847     if (NULL == xcb_out) {
7848         /* allocate memory */
7849         xcb_out = malloc(xcb_buffer_len);
7850         *_buffer = xcb_out;
7851     }
7852 
7853     xcb_tmp = xcb_out;
7854     for(i=0; i<xcb_parts_idx; i++) {
7855         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
7856             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
7857         if (0 != xcb_parts[i].iov_len)
7858             xcb_tmp += xcb_parts[i].iov_len;
7859     }
7860 
7861     return xcb_buffer_len;
7862 }
7863 
7864 int
7865 xcb_input_change_device_property_items_unpack (const void                                *_buffer,
7866                                                uint32_t                                   num_items,
7867                                                uint8_t                                    format,
7868                                                xcb_input_change_device_property_items_t  *_aux)
7869 {
7870     char *xcb_tmp = (char *)_buffer;
7871     unsigned int xcb_buffer_len = 0;
7872     unsigned int xcb_block_len = 0;
7873     unsigned int xcb_pad = 0;
7874     unsigned int xcb_align_to = 0;
7875     unsigned int xcb_padding_offset = 0;
7876 
7877 
7878     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
7879         /* insert padding */
7880         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7881         xcb_buffer_len += xcb_block_len + xcb_pad;
7882         if (0 != xcb_pad) {
7883             xcb_tmp += xcb_pad;
7884             xcb_pad = 0;
7885         }
7886         xcb_block_len = 0;
7887         xcb_padding_offset = 0;
7888         /* data8 */
7889         _aux->data8 = (uint8_t *)xcb_tmp;
7890         xcb_block_len += num_items * sizeof(uint8_t);
7891         xcb_tmp += xcb_block_len;
7892         xcb_align_to = ALIGNOF(uint8_t);
7893         xcb_align_to = 4;
7894         /* insert padding */
7895         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7896         xcb_buffer_len += xcb_block_len + xcb_pad;
7897         if (0 != xcb_pad) {
7898             xcb_tmp += xcb_pad;
7899             xcb_pad = 0;
7900         }
7901         xcb_block_len = 0;
7902         xcb_padding_offset = 0;
7903     }
7904     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
7905         /* insert padding */
7906         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7907         xcb_buffer_len += xcb_block_len + xcb_pad;
7908         if (0 != xcb_pad) {
7909             xcb_tmp += xcb_pad;
7910             xcb_pad = 0;
7911         }
7912         xcb_block_len = 0;
7913         xcb_padding_offset = 0;
7914         /* data16 */
7915         _aux->data16 = (uint16_t *)xcb_tmp;
7916         xcb_block_len += num_items * sizeof(uint16_t);
7917         xcb_tmp += xcb_block_len;
7918         xcb_align_to = ALIGNOF(uint16_t);
7919         xcb_align_to = 4;
7920         /* insert padding */
7921         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7922         xcb_buffer_len += xcb_block_len + xcb_pad;
7923         if (0 != xcb_pad) {
7924             xcb_tmp += xcb_pad;
7925             xcb_pad = 0;
7926         }
7927         xcb_block_len = 0;
7928         xcb_padding_offset = 0;
7929     }
7930     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
7931         /* insert padding */
7932         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7933         xcb_buffer_len += xcb_block_len + xcb_pad;
7934         if (0 != xcb_pad) {
7935             xcb_tmp += xcb_pad;
7936             xcb_pad = 0;
7937         }
7938         xcb_block_len = 0;
7939         xcb_padding_offset = 0;
7940         /* data32 */
7941         _aux->data32 = (uint32_t *)xcb_tmp;
7942         xcb_block_len += num_items * sizeof(uint32_t);
7943         xcb_tmp += xcb_block_len;
7944         xcb_align_to = ALIGNOF(uint32_t);
7945     }
7946     /* insert padding */
7947     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
7948     xcb_buffer_len += xcb_block_len + xcb_pad;
7949     if (0 != xcb_pad) {
7950         xcb_tmp += xcb_pad;
7951         xcb_pad = 0;
7952     }
7953     xcb_block_len = 0;
7954     xcb_padding_offset = 0;
7955 
7956     return xcb_buffer_len;
7957 }
7958 
7959 int
7960 xcb_input_change_device_property_items_sizeof (const void  *_buffer,
7961                                                uint32_t     num_items,
7962                                                uint8_t      format)
7963 {
7964     xcb_input_change_device_property_items_t _aux;
7965     return xcb_input_change_device_property_items_unpack(_buffer, num_items, format, &_aux);
7966 }
7967 
7968 int
7969 xcb_input_change_device_property_sizeof (const void  *_buffer)
7970 {
7971     char *xcb_tmp = (char *)_buffer;
7972     const xcb_input_change_device_property_request_t *_aux = (xcb_input_change_device_property_request_t *)_buffer;
7973     unsigned int xcb_buffer_len = 0;
7974     unsigned int xcb_block_len = 0;
7975     unsigned int xcb_pad = 0;
7976     unsigned int xcb_align_to = 0;
7977 
7978 
7979     xcb_block_len += sizeof(xcb_input_change_device_property_request_t);
7980     xcb_tmp += xcb_block_len;
7981     xcb_buffer_len += xcb_block_len;
7982     xcb_block_len = 0;
7983     /* items */
7984     xcb_block_len += xcb_input_change_device_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
7985     xcb_tmp += xcb_block_len;
7986     xcb_align_to = ALIGNOF(char);
7987     /* insert padding */
7988     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
7989     xcb_buffer_len += xcb_block_len + xcb_pad;
7990     if (0 != xcb_pad) {
7991         xcb_tmp += xcb_pad;
7992         xcb_pad = 0;
7993     }
7994     xcb_block_len = 0;
7995 
7996     return xcb_buffer_len;
7997 }
7998 
7999 xcb_void_cookie_t
8000 xcb_input_change_device_property_checked (xcb_connection_t *c,
8001                                           xcb_atom_t        property,
8002                                           xcb_atom_t        type,
8003                                           uint8_t           device_id,
8004                                           uint8_t           format,
8005                                           uint8_t           mode,
8006                                           uint32_t          num_items,
8007                                           const void       *items)
8008 {
8009     static const xcb_protocol_request_t xcb_req = {
8010         .count = 3,
8011         .ext = &xcb_input_id,
8012         .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
8013         .isvoid = 1
8014     };
8015 
8016     struct iovec xcb_parts[5];
8017     xcb_void_cookie_t xcb_ret;
8018     xcb_input_change_device_property_request_t xcb_out;
8019 
8020     xcb_out.property = property;
8021     xcb_out.type = type;
8022     xcb_out.device_id = device_id;
8023     xcb_out.format = format;
8024     xcb_out.mode = mode;
8025     xcb_out.pad0 = 0;
8026     xcb_out.num_items = num_items;
8027 
8028     xcb_parts[2].iov_base = (char *) &xcb_out;
8029     xcb_parts[2].iov_len = sizeof(xcb_out);
8030     xcb_parts[3].iov_base = 0;
8031     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8032     /* xcb_input_change_device_property_items_t items */
8033     xcb_parts[4].iov_base = (char *) items;
8034     xcb_parts[4].iov_len =
8035       xcb_input_change_device_property_items_sizeof (items, num_items, format);
8036 
8037     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8038     return xcb_ret;
8039 }
8040 
8041 xcb_void_cookie_t
8042 xcb_input_change_device_property (xcb_connection_t *c,
8043                                   xcb_atom_t        property,
8044                                   xcb_atom_t        type,
8045                                   uint8_t           device_id,
8046                                   uint8_t           format,
8047                                   uint8_t           mode,
8048                                   uint32_t          num_items,
8049                                   const void       *items)
8050 {
8051     static const xcb_protocol_request_t xcb_req = {
8052         .count = 3,
8053         .ext = &xcb_input_id,
8054         .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
8055         .isvoid = 1
8056     };
8057 
8058     struct iovec xcb_parts[5];
8059     xcb_void_cookie_t xcb_ret;
8060     xcb_input_change_device_property_request_t xcb_out;
8061 
8062     xcb_out.property = property;
8063     xcb_out.type = type;
8064     xcb_out.device_id = device_id;
8065     xcb_out.format = format;
8066     xcb_out.mode = mode;
8067     xcb_out.pad0 = 0;
8068     xcb_out.num_items = num_items;
8069 
8070     xcb_parts[2].iov_base = (char *) &xcb_out;
8071     xcb_parts[2].iov_len = sizeof(xcb_out);
8072     xcb_parts[3].iov_base = 0;
8073     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8074     /* xcb_input_change_device_property_items_t items */
8075     xcb_parts[4].iov_base = (char *) items;
8076     xcb_parts[4].iov_len =
8077       xcb_input_change_device_property_items_sizeof (items, num_items, format);
8078 
8079     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8080     return xcb_ret;
8081 }
8082 
8083 xcb_void_cookie_t
8084 xcb_input_change_device_property_aux_checked (xcb_connection_t                               *c,
8085                                               xcb_atom_t                                      property,
8086                                               xcb_atom_t                                      type,
8087                                               uint8_t                                         device_id,
8088                                               uint8_t                                         format,
8089                                               uint8_t                                         mode,
8090                                               uint32_t                                        num_items,
8091                                               const xcb_input_change_device_property_items_t *items)
8092 {
8093     static const xcb_protocol_request_t xcb_req = {
8094         .count = 3,
8095         .ext = &xcb_input_id,
8096         .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
8097         .isvoid = 1
8098     };
8099 
8100     struct iovec xcb_parts[5];
8101     xcb_void_cookie_t xcb_ret;
8102     xcb_input_change_device_property_request_t xcb_out;
8103     void *xcb_aux0 = 0;
8104 
8105     xcb_out.property = property;
8106     xcb_out.type = type;
8107     xcb_out.device_id = device_id;
8108     xcb_out.format = format;
8109     xcb_out.mode = mode;
8110     xcb_out.pad0 = 0;
8111     xcb_out.num_items = num_items;
8112 
8113     xcb_parts[2].iov_base = (char *) &xcb_out;
8114     xcb_parts[2].iov_len = sizeof(xcb_out);
8115     xcb_parts[3].iov_base = 0;
8116     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8117     /* xcb_input_change_device_property_items_t items */
8118     xcb_parts[4].iov_len =
8119       xcb_input_change_device_property_items_serialize (&xcb_aux0, num_items, format, items);
8120     xcb_parts[4].iov_base = xcb_aux0;
8121 
8122     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8123     free(xcb_aux0);
8124     return xcb_ret;
8125 }
8126 
8127 xcb_void_cookie_t
8128 xcb_input_change_device_property_aux (xcb_connection_t                               *c,
8129                                       xcb_atom_t                                      property,
8130                                       xcb_atom_t                                      type,
8131                                       uint8_t                                         device_id,
8132                                       uint8_t                                         format,
8133                                       uint8_t                                         mode,
8134                                       uint32_t                                        num_items,
8135                                       const xcb_input_change_device_property_items_t *items)
8136 {
8137     static const xcb_protocol_request_t xcb_req = {
8138         .count = 3,
8139         .ext = &xcb_input_id,
8140         .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
8141         .isvoid = 1
8142     };
8143 
8144     struct iovec xcb_parts[5];
8145     xcb_void_cookie_t xcb_ret;
8146     xcb_input_change_device_property_request_t xcb_out;
8147     void *xcb_aux0 = 0;
8148 
8149     xcb_out.property = property;
8150     xcb_out.type = type;
8151     xcb_out.device_id = device_id;
8152     xcb_out.format = format;
8153     xcb_out.mode = mode;
8154     xcb_out.pad0 = 0;
8155     xcb_out.num_items = num_items;
8156 
8157     xcb_parts[2].iov_base = (char *) &xcb_out;
8158     xcb_parts[2].iov_len = sizeof(xcb_out);
8159     xcb_parts[3].iov_base = 0;
8160     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8161     /* xcb_input_change_device_property_items_t items */
8162     xcb_parts[4].iov_len =
8163       xcb_input_change_device_property_items_serialize (&xcb_aux0, num_items, format, items);
8164     xcb_parts[4].iov_base = xcb_aux0;
8165 
8166     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8167     free(xcb_aux0);
8168     return xcb_ret;
8169 }
8170 
8171 void *
8172 xcb_input_change_device_property_items (const xcb_input_change_device_property_request_t *R)
8173 {
8174     return (void *) (R + 1);
8175 }
8176 
8177 xcb_void_cookie_t
8178 xcb_input_delete_device_property_checked (xcb_connection_t *c,
8179                                           xcb_atom_t        property,
8180                                           uint8_t           device_id)
8181 {
8182     static const xcb_protocol_request_t xcb_req = {
8183         .count = 2,
8184         .ext = &xcb_input_id,
8185         .opcode = XCB_INPUT_DELETE_DEVICE_PROPERTY,
8186         .isvoid = 1
8187     };
8188 
8189     struct iovec xcb_parts[4];
8190     xcb_void_cookie_t xcb_ret;
8191     xcb_input_delete_device_property_request_t xcb_out;
8192 
8193     xcb_out.property = property;
8194     xcb_out.device_id = device_id;
8195     memset(xcb_out.pad0, 0, 3);
8196 
8197     xcb_parts[2].iov_base = (char *) &xcb_out;
8198     xcb_parts[2].iov_len = sizeof(xcb_out);
8199     xcb_parts[3].iov_base = 0;
8200     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8201 
8202     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8203     return xcb_ret;
8204 }
8205 
8206 xcb_void_cookie_t
8207 xcb_input_delete_device_property (xcb_connection_t *c,
8208                                   xcb_atom_t        property,
8209                                   uint8_t           device_id)
8210 {
8211     static const xcb_protocol_request_t xcb_req = {
8212         .count = 2,
8213         .ext = &xcb_input_id,
8214         .opcode = XCB_INPUT_DELETE_DEVICE_PROPERTY,
8215         .isvoid = 1
8216     };
8217 
8218     struct iovec xcb_parts[4];
8219     xcb_void_cookie_t xcb_ret;
8220     xcb_input_delete_device_property_request_t xcb_out;
8221 
8222     xcb_out.property = property;
8223     xcb_out.device_id = device_id;
8224     memset(xcb_out.pad0, 0, 3);
8225 
8226     xcb_parts[2].iov_base = (char *) &xcb_out;
8227     xcb_parts[2].iov_len = sizeof(xcb_out);
8228     xcb_parts[3].iov_base = 0;
8229     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8230 
8231     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8232     return xcb_ret;
8233 }
8234 
8235 uint8_t *
8236 xcb_input_get_device_property_items_data_8 (const xcb_input_get_device_property_items_t *S)
8237 {
8238     return S->data8;
8239 }
8240 
8241 int
8242 xcb_input_get_device_property_items_data_8_length (const xcb_input_get_device_property_reply_t *R,
8243                                                    const xcb_input_get_device_property_items_t *S)
8244 {
8245     return R->num_items;
8246 }
8247 
8248 xcb_generic_iterator_t
8249 xcb_input_get_device_property_items_data_8_end (const xcb_input_get_device_property_reply_t *R,
8250                                                 const xcb_input_get_device_property_items_t *S)
8251 {
8252     xcb_generic_iterator_t i;
8253     i.data = S->data8 + R->num_items;
8254     i.rem = 0;
8255     i.index = (char *) i.data - (char *) S;
8256     return i;
8257 }
8258 
8259 uint16_t *
8260 xcb_input_get_device_property_items_data_16 (const xcb_input_get_device_property_items_t *S)
8261 {
8262     return S->data16;
8263 }
8264 
8265 int
8266 xcb_input_get_device_property_items_data_16_length (const xcb_input_get_device_property_reply_t *R,
8267                                                     const xcb_input_get_device_property_items_t *S)
8268 {
8269     return R->num_items;
8270 }
8271 
8272 xcb_generic_iterator_t
8273 xcb_input_get_device_property_items_data_16_end (const xcb_input_get_device_property_reply_t *R,
8274                                                  const xcb_input_get_device_property_items_t *S)
8275 {
8276     xcb_generic_iterator_t i;
8277     i.data = S->data16 + R->num_items;
8278     i.rem = 0;
8279     i.index = (char *) i.data - (char *) S;
8280     return i;
8281 }
8282 
8283 uint32_t *
8284 xcb_input_get_device_property_items_data_32 (const xcb_input_get_device_property_items_t *S)
8285 {
8286     return S->data32;
8287 }
8288 
8289 int
8290 xcb_input_get_device_property_items_data_32_length (const xcb_input_get_device_property_reply_t *R,
8291                                                     const xcb_input_get_device_property_items_t *S)
8292 {
8293     return R->num_items;
8294 }
8295 
8296 xcb_generic_iterator_t
8297 xcb_input_get_device_property_items_data_32_end (const xcb_input_get_device_property_reply_t *R,
8298                                                  const xcb_input_get_device_property_items_t *S)
8299 {
8300     xcb_generic_iterator_t i;
8301     i.data = S->data32 + R->num_items;
8302     i.rem = 0;
8303     i.index = (char *) i.data - (char *) S;
8304     return i;
8305 }
8306 
8307 int
8308 xcb_input_get_device_property_items_serialize (void                                        **_buffer,
8309                                                uint32_t                                      num_items,
8310                                                uint8_t                                       format,
8311                                                const xcb_input_get_device_property_items_t  *_aux)
8312 {
8313     char *xcb_out = *_buffer;
8314     unsigned int xcb_buffer_len = 0;
8315     unsigned int xcb_align_to = 0;
8316     unsigned int xcb_padding_offset = 0;
8317 
8318     unsigned int xcb_pad = 0;
8319     char xcb_pad0[3] = {0, 0, 0};
8320     struct iovec xcb_parts[9];
8321     unsigned int xcb_parts_idx = 0;
8322     unsigned int xcb_block_len = 0;
8323     unsigned int i;
8324     char *xcb_tmp;
8325 
8326     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
8327         /* insert padding */
8328         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8329         xcb_buffer_len += xcb_block_len + xcb_pad;
8330         if (0 != xcb_pad) {
8331             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
8332             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
8333             xcb_parts_idx++;
8334             xcb_pad = 0;
8335         }
8336         xcb_block_len = 0;
8337         xcb_padding_offset = 0;
8338         /* data8 */
8339         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
8340         xcb_block_len += num_items * sizeof(uint8_t);
8341         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
8342         xcb_parts_idx++;
8343         xcb_align_to = ALIGNOF(uint8_t);
8344         xcb_align_to = 4;
8345         /* insert padding */
8346         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8347         xcb_buffer_len += xcb_block_len + xcb_pad;
8348         if (0 != xcb_pad) {
8349             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
8350             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
8351             xcb_parts_idx++;
8352             xcb_pad = 0;
8353         }
8354         xcb_block_len = 0;
8355         xcb_padding_offset = 0;
8356     }
8357     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
8358         /* insert padding */
8359         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8360         xcb_buffer_len += xcb_block_len + xcb_pad;
8361         if (0 != xcb_pad) {
8362             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
8363             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
8364             xcb_parts_idx++;
8365             xcb_pad = 0;
8366         }
8367         xcb_block_len = 0;
8368         xcb_padding_offset = 0;
8369         /* data16 */
8370         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
8371         xcb_block_len += num_items * sizeof(uint16_t);
8372         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
8373         xcb_parts_idx++;
8374         xcb_align_to = ALIGNOF(uint16_t);
8375         xcb_align_to = 4;
8376         /* insert padding */
8377         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8378         xcb_buffer_len += xcb_block_len + xcb_pad;
8379         if (0 != xcb_pad) {
8380             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
8381             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
8382             xcb_parts_idx++;
8383             xcb_pad = 0;
8384         }
8385         xcb_block_len = 0;
8386         xcb_padding_offset = 0;
8387     }
8388     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
8389         /* insert padding */
8390         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8391         xcb_buffer_len += xcb_block_len + xcb_pad;
8392         if (0 != xcb_pad) {
8393             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
8394             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
8395             xcb_parts_idx++;
8396             xcb_pad = 0;
8397         }
8398         xcb_block_len = 0;
8399         xcb_padding_offset = 0;
8400         /* data32 */
8401         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
8402         xcb_block_len += num_items * sizeof(uint32_t);
8403         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
8404         xcb_parts_idx++;
8405         xcb_align_to = ALIGNOF(uint32_t);
8406     }
8407     /* insert padding */
8408     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8409     xcb_buffer_len += xcb_block_len + xcb_pad;
8410     if (0 != xcb_pad) {
8411         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
8412         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
8413         xcb_parts_idx++;
8414         xcb_pad = 0;
8415     }
8416     xcb_block_len = 0;
8417     xcb_padding_offset = 0;
8418 
8419     if (NULL == xcb_out) {
8420         /* allocate memory */
8421         xcb_out = malloc(xcb_buffer_len);
8422         *_buffer = xcb_out;
8423     }
8424 
8425     xcb_tmp = xcb_out;
8426     for(i=0; i<xcb_parts_idx; i++) {
8427         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
8428             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
8429         if (0 != xcb_parts[i].iov_len)
8430             xcb_tmp += xcb_parts[i].iov_len;
8431     }
8432 
8433     return xcb_buffer_len;
8434 }
8435 
8436 int
8437 xcb_input_get_device_property_items_unpack (const void                             *_buffer,
8438                                             uint32_t                                num_items,
8439                                             uint8_t                                 format,
8440                                             xcb_input_get_device_property_items_t  *_aux)
8441 {
8442     char *xcb_tmp = (char *)_buffer;
8443     unsigned int xcb_buffer_len = 0;
8444     unsigned int xcb_block_len = 0;
8445     unsigned int xcb_pad = 0;
8446     unsigned int xcb_align_to = 0;
8447     unsigned int xcb_padding_offset = 0;
8448 
8449 
8450     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
8451         /* insert padding */
8452         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8453         xcb_buffer_len += xcb_block_len + xcb_pad;
8454         if (0 != xcb_pad) {
8455             xcb_tmp += xcb_pad;
8456             xcb_pad = 0;
8457         }
8458         xcb_block_len = 0;
8459         xcb_padding_offset = 0;
8460         /* data8 */
8461         _aux->data8 = (uint8_t *)xcb_tmp;
8462         xcb_block_len += num_items * sizeof(uint8_t);
8463         xcb_tmp += xcb_block_len;
8464         xcb_align_to = ALIGNOF(uint8_t);
8465         xcb_align_to = 4;
8466         /* insert padding */
8467         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8468         xcb_buffer_len += xcb_block_len + xcb_pad;
8469         if (0 != xcb_pad) {
8470             xcb_tmp += xcb_pad;
8471             xcb_pad = 0;
8472         }
8473         xcb_block_len = 0;
8474         xcb_padding_offset = 0;
8475     }
8476     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
8477         /* insert padding */
8478         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8479         xcb_buffer_len += xcb_block_len + xcb_pad;
8480         if (0 != xcb_pad) {
8481             xcb_tmp += xcb_pad;
8482             xcb_pad = 0;
8483         }
8484         xcb_block_len = 0;
8485         xcb_padding_offset = 0;
8486         /* data16 */
8487         _aux->data16 = (uint16_t *)xcb_tmp;
8488         xcb_block_len += num_items * sizeof(uint16_t);
8489         xcb_tmp += xcb_block_len;
8490         xcb_align_to = ALIGNOF(uint16_t);
8491         xcb_align_to = 4;
8492         /* insert padding */
8493         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8494         xcb_buffer_len += xcb_block_len + xcb_pad;
8495         if (0 != xcb_pad) {
8496             xcb_tmp += xcb_pad;
8497             xcb_pad = 0;
8498         }
8499         xcb_block_len = 0;
8500         xcb_padding_offset = 0;
8501     }
8502     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
8503         /* insert padding */
8504         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8505         xcb_buffer_len += xcb_block_len + xcb_pad;
8506         if (0 != xcb_pad) {
8507             xcb_tmp += xcb_pad;
8508             xcb_pad = 0;
8509         }
8510         xcb_block_len = 0;
8511         xcb_padding_offset = 0;
8512         /* data32 */
8513         _aux->data32 = (uint32_t *)xcb_tmp;
8514         xcb_block_len += num_items * sizeof(uint32_t);
8515         xcb_tmp += xcb_block_len;
8516         xcb_align_to = ALIGNOF(uint32_t);
8517     }
8518     /* insert padding */
8519     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
8520     xcb_buffer_len += xcb_block_len + xcb_pad;
8521     if (0 != xcb_pad) {
8522         xcb_tmp += xcb_pad;
8523         xcb_pad = 0;
8524     }
8525     xcb_block_len = 0;
8526     xcb_padding_offset = 0;
8527 
8528     return xcb_buffer_len;
8529 }
8530 
8531 int
8532 xcb_input_get_device_property_items_sizeof (const void  *_buffer,
8533                                             uint32_t     num_items,
8534                                             uint8_t      format)
8535 {
8536     xcb_input_get_device_property_items_t _aux;
8537     return xcb_input_get_device_property_items_unpack(_buffer, num_items, format, &_aux);
8538 }
8539 
8540 int
8541 xcb_input_get_device_property_sizeof (const void  *_buffer)
8542 {
8543     char *xcb_tmp = (char *)_buffer;
8544     const xcb_input_get_device_property_reply_t *_aux = (xcb_input_get_device_property_reply_t *)_buffer;
8545     unsigned int xcb_buffer_len = 0;
8546     unsigned int xcb_block_len = 0;
8547     unsigned int xcb_pad = 0;
8548     unsigned int xcb_align_to = 0;
8549 
8550 
8551     xcb_block_len += sizeof(xcb_input_get_device_property_reply_t);
8552     xcb_tmp += xcb_block_len;
8553     xcb_buffer_len += xcb_block_len;
8554     xcb_block_len = 0;
8555     /* items */
8556     xcb_block_len += xcb_input_get_device_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
8557     xcb_tmp += xcb_block_len;
8558     xcb_align_to = ALIGNOF(char);
8559     /* insert padding */
8560     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
8561     xcb_buffer_len += xcb_block_len + xcb_pad;
8562     if (0 != xcb_pad) {
8563         xcb_tmp += xcb_pad;
8564         xcb_pad = 0;
8565     }
8566     xcb_block_len = 0;
8567 
8568     return xcb_buffer_len;
8569 }
8570 
8571 xcb_input_get_device_property_cookie_t
8572 xcb_input_get_device_property (xcb_connection_t *c,
8573                                xcb_atom_t        property,
8574                                xcb_atom_t        type,
8575                                uint32_t          offset,
8576                                uint32_t          len,
8577                                uint8_t           device_id,
8578                                uint8_t           _delete)
8579 {
8580     static const xcb_protocol_request_t xcb_req = {
8581         .count = 2,
8582         .ext = &xcb_input_id,
8583         .opcode = XCB_INPUT_GET_DEVICE_PROPERTY,
8584         .isvoid = 0
8585     };
8586 
8587     struct iovec xcb_parts[4];
8588     xcb_input_get_device_property_cookie_t xcb_ret;
8589     xcb_input_get_device_property_request_t xcb_out;
8590 
8591     xcb_out.property = property;
8592     xcb_out.type = type;
8593     xcb_out.offset = offset;
8594     xcb_out.len = len;
8595     xcb_out.device_id = device_id;
8596     xcb_out._delete = _delete;
8597     memset(xcb_out.pad0, 0, 2);
8598 
8599     xcb_parts[2].iov_base = (char *) &xcb_out;
8600     xcb_parts[2].iov_len = sizeof(xcb_out);
8601     xcb_parts[3].iov_base = 0;
8602     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8603 
8604     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8605     return xcb_ret;
8606 }
8607 
8608 xcb_input_get_device_property_cookie_t
8609 xcb_input_get_device_property_unchecked (xcb_connection_t *c,
8610                                          xcb_atom_t        property,
8611                                          xcb_atom_t        type,
8612                                          uint32_t          offset,
8613                                          uint32_t          len,
8614                                          uint8_t           device_id,
8615                                          uint8_t           _delete)
8616 {
8617     static const xcb_protocol_request_t xcb_req = {
8618         .count = 2,
8619         .ext = &xcb_input_id,
8620         .opcode = XCB_INPUT_GET_DEVICE_PROPERTY,
8621         .isvoid = 0
8622     };
8623 
8624     struct iovec xcb_parts[4];
8625     xcb_input_get_device_property_cookie_t xcb_ret;
8626     xcb_input_get_device_property_request_t xcb_out;
8627 
8628     xcb_out.property = property;
8629     xcb_out.type = type;
8630     xcb_out.offset = offset;
8631     xcb_out.len = len;
8632     xcb_out.device_id = device_id;
8633     xcb_out._delete = _delete;
8634     memset(xcb_out.pad0, 0, 2);
8635 
8636     xcb_parts[2].iov_base = (char *) &xcb_out;
8637     xcb_parts[2].iov_len = sizeof(xcb_out);
8638     xcb_parts[3].iov_base = 0;
8639     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8640 
8641     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8642     return xcb_ret;
8643 }
8644 
8645 void *
8646 xcb_input_get_device_property_items (const xcb_input_get_device_property_reply_t *R)
8647 {
8648     return (void *) (R + 1);
8649 }
8650 
8651 xcb_input_get_device_property_reply_t *
8652 xcb_input_get_device_property_reply (xcb_connection_t                        *c,
8653                                      xcb_input_get_device_property_cookie_t   cookie  /**< */,
8654                                      xcb_generic_error_t                    **e)
8655 {
8656     return (xcb_input_get_device_property_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
8657 }
8658 
8659 void
8660 xcb_input_group_info_next (xcb_input_group_info_iterator_t *i)
8661 {
8662     --i->rem;
8663     ++i->data;
8664     i->index += sizeof(xcb_input_group_info_t);
8665 }
8666 
8667 xcb_generic_iterator_t
8668 xcb_input_group_info_end (xcb_input_group_info_iterator_t i)
8669 {
8670     xcb_generic_iterator_t ret;
8671     ret.data = i.data + i.rem;
8672     ret.index = i.index + ((char *) ret.data - (char *) i.data);
8673     ret.rem = 0;
8674     return ret;
8675 }
8676 
8677 void
8678 xcb_input_modifier_info_next (xcb_input_modifier_info_iterator_t *i)
8679 {
8680     --i->rem;
8681     ++i->data;
8682     i->index += sizeof(xcb_input_modifier_info_t);
8683 }
8684 
8685 xcb_generic_iterator_t
8686 xcb_input_modifier_info_end (xcb_input_modifier_info_iterator_t i)
8687 {
8688     xcb_generic_iterator_t ret;
8689     ret.data = i.data + i.rem;
8690     ret.index = i.index + ((char *) ret.data - (char *) i.data);
8691     ret.rem = 0;
8692     return ret;
8693 }
8694 
8695 int
8696 xcb_input_xi_query_pointer_sizeof (const void  *_buffer)
8697 {
8698     char *xcb_tmp = (char *)_buffer;
8699     const xcb_input_xi_query_pointer_reply_t *_aux = (xcb_input_xi_query_pointer_reply_t *)_buffer;
8700     unsigned int xcb_buffer_len = 0;
8701     unsigned int xcb_block_len = 0;
8702     unsigned int xcb_pad = 0;
8703     unsigned int xcb_align_to = 0;
8704 
8705 
8706     xcb_block_len += sizeof(xcb_input_xi_query_pointer_reply_t);
8707     xcb_tmp += xcb_block_len;
8708     xcb_buffer_len += xcb_block_len;
8709     xcb_block_len = 0;
8710     /* buttons */
8711     xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
8712     xcb_tmp += xcb_block_len;
8713     xcb_align_to = ALIGNOF(uint32_t);
8714     /* insert padding */
8715     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
8716     xcb_buffer_len += xcb_block_len + xcb_pad;
8717     if (0 != xcb_pad) {
8718         xcb_tmp += xcb_pad;
8719         xcb_pad = 0;
8720     }
8721     xcb_block_len = 0;
8722 
8723     return xcb_buffer_len;
8724 }
8725 
8726 xcb_input_xi_query_pointer_cookie_t
8727 xcb_input_xi_query_pointer (xcb_connection_t      *c,
8728                             xcb_window_t           window,
8729                             xcb_input_device_id_t  deviceid)
8730 {
8731     static const xcb_protocol_request_t xcb_req = {
8732         .count = 2,
8733         .ext = &xcb_input_id,
8734         .opcode = XCB_INPUT_XI_QUERY_POINTER,
8735         .isvoid = 0
8736     };
8737 
8738     struct iovec xcb_parts[4];
8739     xcb_input_xi_query_pointer_cookie_t xcb_ret;
8740     xcb_input_xi_query_pointer_request_t xcb_out;
8741 
8742     xcb_out.window = window;
8743     xcb_out.deviceid = deviceid;
8744     memset(xcb_out.pad0, 0, 2);
8745 
8746     xcb_parts[2].iov_base = (char *) &xcb_out;
8747     xcb_parts[2].iov_len = sizeof(xcb_out);
8748     xcb_parts[3].iov_base = 0;
8749     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8750 
8751     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8752     return xcb_ret;
8753 }
8754 
8755 xcb_input_xi_query_pointer_cookie_t
8756 xcb_input_xi_query_pointer_unchecked (xcb_connection_t      *c,
8757                                       xcb_window_t           window,
8758                                       xcb_input_device_id_t  deviceid)
8759 {
8760     static const xcb_protocol_request_t xcb_req = {
8761         .count = 2,
8762         .ext = &xcb_input_id,
8763         .opcode = XCB_INPUT_XI_QUERY_POINTER,
8764         .isvoid = 0
8765     };
8766 
8767     struct iovec xcb_parts[4];
8768     xcb_input_xi_query_pointer_cookie_t xcb_ret;
8769     xcb_input_xi_query_pointer_request_t xcb_out;
8770 
8771     xcb_out.window = window;
8772     xcb_out.deviceid = deviceid;
8773     memset(xcb_out.pad0, 0, 2);
8774 
8775     xcb_parts[2].iov_base = (char *) &xcb_out;
8776     xcb_parts[2].iov_len = sizeof(xcb_out);
8777     xcb_parts[3].iov_base = 0;
8778     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8779 
8780     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8781     return xcb_ret;
8782 }
8783 
8784 uint32_t *
8785 xcb_input_xi_query_pointer_buttons (const xcb_input_xi_query_pointer_reply_t *R)
8786 {
8787     return (uint32_t *) (R + 1);
8788 }
8789 
8790 int
8791 xcb_input_xi_query_pointer_buttons_length (const xcb_input_xi_query_pointer_reply_t *R)
8792 {
8793     return R->buttons_len;
8794 }
8795 
8796 xcb_generic_iterator_t
8797 xcb_input_xi_query_pointer_buttons_end (const xcb_input_xi_query_pointer_reply_t *R)
8798 {
8799     xcb_generic_iterator_t i;
8800     i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
8801     i.rem = 0;
8802     i.index = (char *) i.data - (char *) R;
8803     return i;
8804 }
8805 
8806 xcb_input_xi_query_pointer_reply_t *
8807 xcb_input_xi_query_pointer_reply (xcb_connection_t                     *c,
8808                                   xcb_input_xi_query_pointer_cookie_t   cookie  /**< */,
8809                                   xcb_generic_error_t                 **e)
8810 {
8811     return (xcb_input_xi_query_pointer_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
8812 }
8813 
8814 xcb_void_cookie_t
8815 xcb_input_xi_warp_pointer_checked (xcb_connection_t      *c,
8816                                    xcb_window_t           src_win,
8817                                    xcb_window_t           dst_win,
8818                                    xcb_input_fp1616_t     src_x,
8819                                    xcb_input_fp1616_t     src_y,
8820                                    uint16_t               src_width,
8821                                    uint16_t               src_height,
8822                                    xcb_input_fp1616_t     dst_x,
8823                                    xcb_input_fp1616_t     dst_y,
8824                                    xcb_input_device_id_t  deviceid)
8825 {
8826     static const xcb_protocol_request_t xcb_req = {
8827         .count = 2,
8828         .ext = &xcb_input_id,
8829         .opcode = XCB_INPUT_XI_WARP_POINTER,
8830         .isvoid = 1
8831     };
8832 
8833     struct iovec xcb_parts[4];
8834     xcb_void_cookie_t xcb_ret;
8835     xcb_input_xi_warp_pointer_request_t xcb_out;
8836 
8837     xcb_out.src_win = src_win;
8838     xcb_out.dst_win = dst_win;
8839     xcb_out.src_x = src_x;
8840     xcb_out.src_y = src_y;
8841     xcb_out.src_width = src_width;
8842     xcb_out.src_height = src_height;
8843     xcb_out.dst_x = dst_x;
8844     xcb_out.dst_y = dst_y;
8845     xcb_out.deviceid = deviceid;
8846     memset(xcb_out.pad0, 0, 2);
8847 
8848     xcb_parts[2].iov_base = (char *) &xcb_out;
8849     xcb_parts[2].iov_len = sizeof(xcb_out);
8850     xcb_parts[3].iov_base = 0;
8851     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8852 
8853     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8854     return xcb_ret;
8855 }
8856 
8857 xcb_void_cookie_t
8858 xcb_input_xi_warp_pointer (xcb_connection_t      *c,
8859                            xcb_window_t           src_win,
8860                            xcb_window_t           dst_win,
8861                            xcb_input_fp1616_t     src_x,
8862                            xcb_input_fp1616_t     src_y,
8863                            uint16_t               src_width,
8864                            uint16_t               src_height,
8865                            xcb_input_fp1616_t     dst_x,
8866                            xcb_input_fp1616_t     dst_y,
8867                            xcb_input_device_id_t  deviceid)
8868 {
8869     static const xcb_protocol_request_t xcb_req = {
8870         .count = 2,
8871         .ext = &xcb_input_id,
8872         .opcode = XCB_INPUT_XI_WARP_POINTER,
8873         .isvoid = 1
8874     };
8875 
8876     struct iovec xcb_parts[4];
8877     xcb_void_cookie_t xcb_ret;
8878     xcb_input_xi_warp_pointer_request_t xcb_out;
8879 
8880     xcb_out.src_win = src_win;
8881     xcb_out.dst_win = dst_win;
8882     xcb_out.src_x = src_x;
8883     xcb_out.src_y = src_y;
8884     xcb_out.src_width = src_width;
8885     xcb_out.src_height = src_height;
8886     xcb_out.dst_x = dst_x;
8887     xcb_out.dst_y = dst_y;
8888     xcb_out.deviceid = deviceid;
8889     memset(xcb_out.pad0, 0, 2);
8890 
8891     xcb_parts[2].iov_base = (char *) &xcb_out;
8892     xcb_parts[2].iov_len = sizeof(xcb_out);
8893     xcb_parts[3].iov_base = 0;
8894     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8895 
8896     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8897     return xcb_ret;
8898 }
8899 
8900 xcb_void_cookie_t
8901 xcb_input_xi_change_cursor_checked (xcb_connection_t      *c,
8902                                     xcb_window_t           window,
8903                                     xcb_cursor_t           cursor,
8904                                     xcb_input_device_id_t  deviceid)
8905 {
8906     static const xcb_protocol_request_t xcb_req = {
8907         .count = 2,
8908         .ext = &xcb_input_id,
8909         .opcode = XCB_INPUT_XI_CHANGE_CURSOR,
8910         .isvoid = 1
8911     };
8912 
8913     struct iovec xcb_parts[4];
8914     xcb_void_cookie_t xcb_ret;
8915     xcb_input_xi_change_cursor_request_t xcb_out;
8916 
8917     xcb_out.window = window;
8918     xcb_out.cursor = cursor;
8919     xcb_out.deviceid = deviceid;
8920     memset(xcb_out.pad0, 0, 2);
8921 
8922     xcb_parts[2].iov_base = (char *) &xcb_out;
8923     xcb_parts[2].iov_len = sizeof(xcb_out);
8924     xcb_parts[3].iov_base = 0;
8925     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8926 
8927     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
8928     return xcb_ret;
8929 }
8930 
8931 xcb_void_cookie_t
8932 xcb_input_xi_change_cursor (xcb_connection_t      *c,
8933                             xcb_window_t           window,
8934                             xcb_cursor_t           cursor,
8935                             xcb_input_device_id_t  deviceid)
8936 {
8937     static const xcb_protocol_request_t xcb_req = {
8938         .count = 2,
8939         .ext = &xcb_input_id,
8940         .opcode = XCB_INPUT_XI_CHANGE_CURSOR,
8941         .isvoid = 1
8942     };
8943 
8944     struct iovec xcb_parts[4];
8945     xcb_void_cookie_t xcb_ret;
8946     xcb_input_xi_change_cursor_request_t xcb_out;
8947 
8948     xcb_out.window = window;
8949     xcb_out.cursor = cursor;
8950     xcb_out.deviceid = deviceid;
8951     memset(xcb_out.pad0, 0, 2);
8952 
8953     xcb_parts[2].iov_base = (char *) &xcb_out;
8954     xcb_parts[2].iov_len = sizeof(xcb_out);
8955     xcb_parts[3].iov_base = 0;
8956     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
8957 
8958     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
8959     return xcb_ret;
8960 }
8961 
8962 int
8963 xcb_input_add_master_sizeof (const void  *_buffer)
8964 {
8965     char *xcb_tmp = (char *)_buffer;
8966     const xcb_input_add_master_t *_aux = (xcb_input_add_master_t *)_buffer;
8967     unsigned int xcb_buffer_len = 0;
8968     unsigned int xcb_block_len = 0;
8969     unsigned int xcb_pad = 0;
8970     unsigned int xcb_align_to = 0;
8971 
8972 
8973     xcb_block_len += sizeof(xcb_input_add_master_t);
8974     xcb_tmp += xcb_block_len;
8975     xcb_buffer_len += xcb_block_len;
8976     xcb_block_len = 0;
8977     /* name */
8978     xcb_block_len += _aux->name_len * sizeof(char);
8979     xcb_tmp += xcb_block_len;
8980     xcb_align_to = ALIGNOF(char);
8981     xcb_align_to = 4;
8982     /* insert padding */
8983     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
8984     xcb_buffer_len += xcb_block_len + xcb_pad;
8985     if (0 != xcb_pad) {
8986         xcb_tmp += xcb_pad;
8987         xcb_pad = 0;
8988     }
8989     xcb_block_len = 0;
8990     /* insert padding */
8991     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
8992     xcb_buffer_len += xcb_block_len + xcb_pad;
8993     if (0 != xcb_pad) {
8994         xcb_tmp += xcb_pad;
8995         xcb_pad = 0;
8996     }
8997     xcb_block_len = 0;
8998 
8999     return xcb_buffer_len;
9000 }
9001 
9002 char *
9003 xcb_input_add_master_name (const xcb_input_add_master_t *R)
9004 {
9005     return (char *) (R + 1);
9006 }
9007 
9008 int
9009 xcb_input_add_master_name_length (const xcb_input_add_master_t *R)
9010 {
9011     return R->name_len;
9012 }
9013 
9014 xcb_generic_iterator_t
9015 xcb_input_add_master_name_end (const xcb_input_add_master_t *R)
9016 {
9017     xcb_generic_iterator_t i;
9018     i.data = ((char *) (R + 1)) + (R->name_len);
9019     i.rem = 0;
9020     i.index = (char *) i.data - (char *) R;
9021     return i;
9022 }
9023 
9024 void
9025 xcb_input_add_master_next (xcb_input_add_master_iterator_t *i)
9026 {
9027     xcb_input_add_master_t *R = i->data;
9028     xcb_generic_iterator_t child;
9029     child.data = (xcb_input_add_master_t *)(((char *)R) + xcb_input_add_master_sizeof(R));
9030     i->index = (char *) child.data - (char *) i->data;
9031     --i->rem;
9032     i->data = (xcb_input_add_master_t *) child.data;
9033 }
9034 
9035 xcb_generic_iterator_t
9036 xcb_input_add_master_end (xcb_input_add_master_iterator_t i)
9037 {
9038     xcb_generic_iterator_t ret;
9039     while(i.rem > 0)
9040         xcb_input_add_master_next(&i);
9041     ret.data = i.data;
9042     ret.rem = i.rem;
9043     ret.index = i.index;
9044     return ret;
9045 }
9046 
9047 void
9048 xcb_input_remove_master_next (xcb_input_remove_master_iterator_t *i)
9049 {
9050     --i->rem;
9051     ++i->data;
9052     i->index += sizeof(xcb_input_remove_master_t);
9053 }
9054 
9055 xcb_generic_iterator_t
9056 xcb_input_remove_master_end (xcb_input_remove_master_iterator_t i)
9057 {
9058     xcb_generic_iterator_t ret;
9059     ret.data = i.data + i.rem;
9060     ret.index = i.index + ((char *) ret.data - (char *) i.data);
9061     ret.rem = 0;
9062     return ret;
9063 }
9064 
9065 void
9066 xcb_input_attach_slave_next (xcb_input_attach_slave_iterator_t *i)
9067 {
9068     --i->rem;
9069     ++i->data;
9070     i->index += sizeof(xcb_input_attach_slave_t);
9071 }
9072 
9073 xcb_generic_iterator_t
9074 xcb_input_attach_slave_end (xcb_input_attach_slave_iterator_t i)
9075 {
9076     xcb_generic_iterator_t ret;
9077     ret.data = i.data + i.rem;
9078     ret.index = i.index + ((char *) ret.data - (char *) i.data);
9079     ret.rem = 0;
9080     return ret;
9081 }
9082 
9083 void
9084 xcb_input_detach_slave_next (xcb_input_detach_slave_iterator_t *i)
9085 {
9086     --i->rem;
9087     ++i->data;
9088     i->index += sizeof(xcb_input_detach_slave_t);
9089 }
9090 
9091 xcb_generic_iterator_t
9092 xcb_input_detach_slave_end (xcb_input_detach_slave_iterator_t i)
9093 {
9094     xcb_generic_iterator_t ret;
9095     ret.data = i.data + i.rem;
9096     ret.index = i.index + ((char *) ret.data - (char *) i.data);
9097     ret.rem = 0;
9098     return ret;
9099 }
9100 
9101 char *
9102 xcb_input_hierarchy_change_data_add_master_name (const xcb_input_hierarchy_change_data_t *S)
9103 {
9104     return S->add_master.name;
9105 }
9106 
9107 int
9108 xcb_input_hierarchy_change_data_add_master_name_length (const xcb_input_hierarchy_change_t *R,
9109                                                         const xcb_input_hierarchy_change_data_t *S)
9110 {
9111     return S->add_master.name_len;
9112 }
9113 
9114 xcb_generic_iterator_t
9115 xcb_input_hierarchy_change_data_add_master_name_end (const xcb_input_hierarchy_change_t *R,
9116                                                      const xcb_input_hierarchy_change_data_t *S)
9117 {
9118     xcb_generic_iterator_t i;
9119     i.data = S->add_master.name + S->add_master.name_len;
9120     i.rem = 0;
9121     i.index = (char *) i.data - (char *) S;
9122     return i;
9123 }
9124 
9125 int
9126 xcb_input_hierarchy_change_data_serialize (void                                    **_buffer,
9127                                            uint16_t                                  type,
9128                                            const xcb_input_hierarchy_change_data_t  *_aux)
9129 {
9130     char *xcb_out = *_buffer;
9131     unsigned int xcb_buffer_len = 0;
9132     unsigned int xcb_align_to = 0;
9133     unsigned int xcb_padding_offset = 0;
9134 
9135     unsigned int xcb_pad = 0;
9136     char xcb_pad0[3] = {0, 0, 0};
9137     struct iovec xcb_parts[16];
9138     unsigned int xcb_parts_idx = 0;
9139     unsigned int xcb_block_len = 0;
9140     unsigned int i;
9141     char *xcb_tmp;
9142 
9143     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ADD_MASTER) {
9144         /* xcb_input_hierarchy_change_data_t.add_master.name_len */
9145         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->add_master.name_len;
9146         xcb_block_len += sizeof(uint16_t);
9147         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
9148         xcb_parts_idx++;
9149         xcb_align_to = ALIGNOF(uint16_t);
9150         /* xcb_input_hierarchy_change_data_t.add_master.send_core */
9151         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->add_master.send_core;
9152         xcb_block_len += sizeof(uint8_t);
9153         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
9154         xcb_parts_idx++;
9155         xcb_align_to = ALIGNOF(uint8_t);
9156         /* xcb_input_hierarchy_change_data_t.add_master.enable */
9157         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->add_master.enable;
9158         xcb_block_len += sizeof(uint8_t);
9159         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
9160         xcb_parts_idx++;
9161         xcb_align_to = ALIGNOF(uint8_t);
9162         /* insert padding */
9163         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
9164         xcb_buffer_len += xcb_block_len + xcb_pad;
9165         if (0 != xcb_pad) {
9166             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
9167             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
9168             xcb_parts_idx++;
9169             xcb_pad = 0;
9170         }
9171         xcb_block_len = 0;
9172         xcb_padding_offset = 0;
9173         /* name */
9174         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->add_master.name;
9175         xcb_block_len += _aux->add_master.name_len * sizeof(char);
9176         xcb_parts[xcb_parts_idx].iov_len = _aux->add_master.name_len * sizeof(char);
9177         xcb_parts_idx++;
9178         xcb_align_to = ALIGNOF(char);
9179         xcb_align_to = 4;
9180         /* insert padding */
9181         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
9182         xcb_buffer_len += xcb_block_len + xcb_pad;
9183         if (0 != xcb_pad) {
9184             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
9185             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
9186             xcb_parts_idx++;
9187             xcb_pad = 0;
9188         }
9189         xcb_block_len = 0;
9190         xcb_padding_offset = 0;
9191     }
9192     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_REMOVE_MASTER) {
9193         /* xcb_input_hierarchy_change_data_t.remove_master.deviceid */
9194         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.deviceid;
9195         xcb_block_len += sizeof(xcb_input_device_id_t);
9196         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
9197         xcb_parts_idx++;
9198         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9199         /* xcb_input_hierarchy_change_data_t.remove_master.return_mode */
9200         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.return_mode;
9201         xcb_block_len += sizeof(uint8_t);
9202         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
9203         xcb_parts_idx++;
9204         xcb_align_to = ALIGNOF(uint8_t);
9205         /* xcb_input_hierarchy_change_data_t.remove_master.pad1 */
9206         xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
9207         xcb_block_len += sizeof(uint8_t);
9208         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
9209         xcb_parts_idx++;
9210         xcb_align_to = ALIGNOF(uint8_t);
9211         /* xcb_input_hierarchy_change_data_t.remove_master.return_pointer */
9212         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.return_pointer;
9213         xcb_block_len += sizeof(xcb_input_device_id_t);
9214         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
9215         xcb_parts_idx++;
9216         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9217         /* xcb_input_hierarchy_change_data_t.remove_master.return_keyboard */
9218         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.return_keyboard;
9219         xcb_block_len += sizeof(xcb_input_device_id_t);
9220         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
9221         xcb_parts_idx++;
9222         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9223     }
9224     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ATTACH_SLAVE) {
9225         /* xcb_input_hierarchy_change_data_t.attach_slave.deviceid */
9226         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->attach_slave.deviceid;
9227         xcb_block_len += sizeof(xcb_input_device_id_t);
9228         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
9229         xcb_parts_idx++;
9230         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9231         /* xcb_input_hierarchy_change_data_t.attach_slave.master */
9232         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->attach_slave.master;
9233         xcb_block_len += sizeof(xcb_input_device_id_t);
9234         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
9235         xcb_parts_idx++;
9236         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9237     }
9238     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_DETACH_SLAVE) {
9239         /* xcb_input_hierarchy_change_data_t.detach_slave.deviceid */
9240         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->detach_slave.deviceid;
9241         xcb_block_len += sizeof(xcb_input_device_id_t);
9242         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
9243         xcb_parts_idx++;
9244         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9245         /* xcb_input_hierarchy_change_data_t.detach_slave.pad2 */
9246         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
9247         xcb_block_len += sizeof(uint8_t)*2;
9248         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
9249         xcb_parts_idx++;
9250         xcb_align_to = ALIGNOF(uint8_t);
9251     }
9252     /* insert padding */
9253     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
9254     xcb_buffer_len += xcb_block_len + xcb_pad;
9255     if (0 != xcb_pad) {
9256         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
9257         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
9258         xcb_parts_idx++;
9259         xcb_pad = 0;
9260     }
9261     xcb_block_len = 0;
9262     xcb_padding_offset = 0;
9263 
9264     if (NULL == xcb_out) {
9265         /* allocate memory */
9266         xcb_out = malloc(xcb_buffer_len);
9267         *_buffer = xcb_out;
9268     }
9269 
9270     xcb_tmp = xcb_out;
9271     for(i=0; i<xcb_parts_idx; i++) {
9272         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
9273             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
9274         if (0 != xcb_parts[i].iov_len)
9275             xcb_tmp += xcb_parts[i].iov_len;
9276     }
9277 
9278     return xcb_buffer_len;
9279 }
9280 
9281 int
9282 xcb_input_hierarchy_change_data_unpack (const void                         *_buffer,
9283                                         uint16_t                            type,
9284                                         xcb_input_hierarchy_change_data_t  *_aux)
9285 {
9286     char *xcb_tmp = (char *)_buffer;
9287     unsigned int xcb_buffer_len = 0;
9288     unsigned int xcb_block_len = 0;
9289     unsigned int xcb_pad = 0;
9290     unsigned int xcb_align_to = 0;
9291     unsigned int xcb_padding_offset = 0;
9292 
9293 
9294     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ADD_MASTER) {
9295         /* xcb_input_hierarchy_change_data_t.add_master.name_len */
9296         _aux->add_master.name_len = *(uint16_t *)xcb_tmp;
9297         xcb_block_len += sizeof(uint16_t);
9298         xcb_tmp += sizeof(uint16_t);
9299         xcb_align_to = ALIGNOF(uint16_t);
9300         /* xcb_input_hierarchy_change_data_t.add_master.send_core */
9301         _aux->add_master.send_core = *(uint8_t *)xcb_tmp;
9302         xcb_block_len += sizeof(uint8_t);
9303         xcb_tmp += sizeof(uint8_t);
9304         xcb_align_to = ALIGNOF(uint8_t);
9305         /* xcb_input_hierarchy_change_data_t.add_master.enable */
9306         _aux->add_master.enable = *(uint8_t *)xcb_tmp;
9307         xcb_block_len += sizeof(uint8_t);
9308         xcb_tmp += sizeof(uint8_t);
9309         xcb_align_to = ALIGNOF(uint8_t);
9310         /* insert padding */
9311         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
9312         xcb_buffer_len += xcb_block_len + xcb_pad;
9313         if (0 != xcb_pad) {
9314             xcb_tmp += xcb_pad;
9315             xcb_pad = 0;
9316         }
9317         xcb_block_len = 0;
9318         xcb_padding_offset = 0;
9319         /* name */
9320         _aux->add_master.name = (char *)xcb_tmp;
9321         xcb_block_len += _aux->add_master.name_len * sizeof(char);
9322         xcb_tmp += xcb_block_len;
9323         xcb_align_to = ALIGNOF(char);
9324         xcb_align_to = 4;
9325         /* insert padding */
9326         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
9327         xcb_buffer_len += xcb_block_len + xcb_pad;
9328         if (0 != xcb_pad) {
9329             xcb_tmp += xcb_pad;
9330             xcb_pad = 0;
9331         }
9332         xcb_block_len = 0;
9333         xcb_padding_offset = 0;
9334     }
9335     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_REMOVE_MASTER) {
9336         /* xcb_input_hierarchy_change_data_t.remove_master.deviceid */
9337         _aux->remove_master.deviceid = *(xcb_input_device_id_t *)xcb_tmp;
9338         xcb_block_len += sizeof(xcb_input_device_id_t);
9339         xcb_tmp += sizeof(xcb_input_device_id_t);
9340         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9341         /* xcb_input_hierarchy_change_data_t.remove_master.return_mode */
9342         _aux->remove_master.return_mode = *(uint8_t *)xcb_tmp;
9343         xcb_block_len += sizeof(uint8_t);
9344         xcb_tmp += sizeof(uint8_t);
9345         xcb_align_to = ALIGNOF(uint8_t);
9346         /* xcb_input_hierarchy_change_data_t.remove_master.pad1 */
9347         _aux->remove_master.pad1 = *(uint8_t *)xcb_tmp;
9348         xcb_block_len += sizeof(uint8_t);
9349         xcb_tmp += sizeof(uint8_t);
9350         xcb_align_to = ALIGNOF(uint8_t);
9351         /* xcb_input_hierarchy_change_data_t.remove_master.return_pointer */
9352         _aux->remove_master.return_pointer = *(xcb_input_device_id_t *)xcb_tmp;
9353         xcb_block_len += sizeof(xcb_input_device_id_t);
9354         xcb_tmp += sizeof(xcb_input_device_id_t);
9355         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9356         /* xcb_input_hierarchy_change_data_t.remove_master.return_keyboard */
9357         _aux->remove_master.return_keyboard = *(xcb_input_device_id_t *)xcb_tmp;
9358         xcb_block_len += sizeof(xcb_input_device_id_t);
9359         xcb_tmp += sizeof(xcb_input_device_id_t);
9360         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9361     }
9362     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ATTACH_SLAVE) {
9363         /* xcb_input_hierarchy_change_data_t.attach_slave.deviceid */
9364         _aux->attach_slave.deviceid = *(xcb_input_device_id_t *)xcb_tmp;
9365         xcb_block_len += sizeof(xcb_input_device_id_t);
9366         xcb_tmp += sizeof(xcb_input_device_id_t);
9367         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9368         /* xcb_input_hierarchy_change_data_t.attach_slave.master */
9369         _aux->attach_slave.master = *(xcb_input_device_id_t *)xcb_tmp;
9370         xcb_block_len += sizeof(xcb_input_device_id_t);
9371         xcb_tmp += sizeof(xcb_input_device_id_t);
9372         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9373     }
9374     if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_DETACH_SLAVE) {
9375         /* xcb_input_hierarchy_change_data_t.detach_slave.deviceid */
9376         _aux->detach_slave.deviceid = *(xcb_input_device_id_t *)xcb_tmp;
9377         xcb_block_len += sizeof(xcb_input_device_id_t);
9378         xcb_tmp += sizeof(xcb_input_device_id_t);
9379         xcb_align_to = ALIGNOF(xcb_input_device_id_t);
9380         /* xcb_input_hierarchy_change_data_t.detach_slave.pad2 */
9381         _aux->detach_slave.pad2[0] = *(uint8_t *)xcb_tmp;
9382         _aux->detach_slave.pad2[1] = *(uint8_t *)xcb_tmp;
9383         xcb_block_len += sizeof(uint8_t) * 2;
9384         xcb_tmp += sizeof(uint8_t) * 2;
9385         xcb_align_to = ALIGNOF(uint8_t);
9386     }
9387     /* insert padding */
9388     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
9389     xcb_buffer_len += xcb_block_len + xcb_pad;
9390     if (0 != xcb_pad) {
9391         xcb_tmp += xcb_pad;
9392         xcb_pad = 0;
9393     }
9394     xcb_block_len = 0;
9395     xcb_padding_offset = 0;
9396 
9397     return xcb_buffer_len;
9398 }
9399 
9400 int
9401 xcb_input_hierarchy_change_data_sizeof (const void  *_buffer,
9402                                         uint16_t     type)
9403 {
9404     xcb_input_hierarchy_change_data_t _aux;
9405     return xcb_input_hierarchy_change_data_unpack(_buffer, type, &_aux);
9406 }
9407 
9408 int
9409 xcb_input_hierarchy_change_sizeof (const void  *_buffer)
9410 {
9411     char *xcb_tmp = (char *)_buffer;
9412     const xcb_input_hierarchy_change_t *_aux = (xcb_input_hierarchy_change_t *)_buffer;
9413     unsigned int xcb_buffer_len = 0;
9414     unsigned int xcb_block_len = 0;
9415     unsigned int xcb_pad = 0;
9416     unsigned int xcb_align_to = 0;
9417 
9418 
9419     xcb_block_len += sizeof(xcb_input_hierarchy_change_t);
9420     xcb_tmp += xcb_block_len;
9421     xcb_buffer_len += xcb_block_len;
9422     xcb_block_len = 0;
9423     /* data */
9424     xcb_block_len += xcb_input_hierarchy_change_data_sizeof(xcb_tmp, _aux->type);
9425     xcb_tmp += xcb_block_len;
9426     xcb_align_to = ALIGNOF(char);
9427     /* insert padding */
9428     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
9429     xcb_buffer_len += xcb_block_len + xcb_pad;
9430     if (0 != xcb_pad) {
9431         xcb_tmp += xcb_pad;
9432         xcb_pad = 0;
9433     }
9434     xcb_block_len = 0;
9435 
9436     return xcb_buffer_len;
9437 }
9438 
9439 void *
9440 xcb_input_hierarchy_change_data (const xcb_input_hierarchy_change_t *R)
9441 {
9442     return (void *) (R + 1);
9443 }
9444 
9445 void
9446 xcb_input_hierarchy_change_next (xcb_input_hierarchy_change_iterator_t *i)
9447 {
9448     xcb_input_hierarchy_change_t *R = i->data;
9449     xcb_generic_iterator_t child;
9450     child.data = (xcb_input_hierarchy_change_t *)(((char *)R) + xcb_input_hierarchy_change_sizeof(R));
9451     i->index = (char *) child.data - (char *) i->data;
9452     --i->rem;
9453     i->data = (xcb_input_hierarchy_change_t *) child.data;
9454 }
9455 
9456 xcb_generic_iterator_t
9457 xcb_input_hierarchy_change_end (xcb_input_hierarchy_change_iterator_t i)
9458 {
9459     xcb_generic_iterator_t ret;
9460     while(i.rem > 0)
9461         xcb_input_hierarchy_change_next(&i);
9462     ret.data = i.data;
9463     ret.rem = i.rem;
9464     ret.index = i.index;
9465     return ret;
9466 }
9467 
9468 int
9469 xcb_input_xi_change_hierarchy_sizeof (const void  *_buffer)
9470 {
9471     char *xcb_tmp = (char *)_buffer;
9472     const xcb_input_xi_change_hierarchy_request_t *_aux = (xcb_input_xi_change_hierarchy_request_t *)_buffer;
9473     unsigned int xcb_buffer_len = 0;
9474     unsigned int xcb_block_len = 0;
9475     unsigned int xcb_pad = 0;
9476     unsigned int xcb_align_to = 0;
9477 
9478     unsigned int i;
9479     unsigned int xcb_tmp_len;
9480 
9481     xcb_block_len += sizeof(xcb_input_xi_change_hierarchy_request_t);
9482     xcb_tmp += xcb_block_len;
9483     xcb_buffer_len += xcb_block_len;
9484     xcb_block_len = 0;
9485     /* changes */
9486     for(i=0; i<_aux->num_changes; i++) {
9487         xcb_tmp_len = xcb_input_hierarchy_change_sizeof(xcb_tmp);
9488         xcb_block_len += xcb_tmp_len;
9489         xcb_tmp += xcb_tmp_len;
9490     }
9491     xcb_align_to = ALIGNOF(xcb_input_hierarchy_change_t);
9492     /* insert padding */
9493     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
9494     xcb_buffer_len += xcb_block_len + xcb_pad;
9495     if (0 != xcb_pad) {
9496         xcb_tmp += xcb_pad;
9497         xcb_pad = 0;
9498     }
9499     xcb_block_len = 0;
9500 
9501     return xcb_buffer_len;
9502 }
9503 
9504 xcb_void_cookie_t
9505 xcb_input_xi_change_hierarchy_checked (xcb_connection_t                   *c,
9506                                        uint8_t                             num_changes,
9507                                        const xcb_input_hierarchy_change_t *changes)
9508 {
9509     static const xcb_protocol_request_t xcb_req = {
9510         .count = 4,
9511         .ext = &xcb_input_id,
9512         .opcode = XCB_INPUT_XI_CHANGE_HIERARCHY,
9513         .isvoid = 1
9514     };
9515 
9516     struct iovec xcb_parts[6];
9517     xcb_void_cookie_t xcb_ret;
9518     xcb_input_xi_change_hierarchy_request_t xcb_out;
9519     unsigned int i;
9520     unsigned int xcb_tmp_len;
9521     char *xcb_tmp;
9522 
9523     xcb_out.num_changes = num_changes;
9524     memset(xcb_out.pad0, 0, 3);
9525 
9526     xcb_parts[2].iov_base = (char *) &xcb_out;
9527     xcb_parts[2].iov_len = sizeof(xcb_out);
9528     xcb_parts[3].iov_base = 0;
9529     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9530     /* xcb_input_hierarchy_change_t changes */
9531     xcb_parts[4].iov_base = (char *) changes;
9532     xcb_parts[4].iov_len = 0;
9533     xcb_tmp = (char *)changes;
9534     for(i=0; i<num_changes; i++) {
9535         xcb_tmp_len = xcb_input_hierarchy_change_sizeof(xcb_tmp);
9536         xcb_parts[4].iov_len += xcb_tmp_len;
9537         xcb_tmp += xcb_tmp_len;
9538     }
9539     xcb_parts[5].iov_base = 0;
9540     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
9541 
9542     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
9543     return xcb_ret;
9544 }
9545 
9546 xcb_void_cookie_t
9547 xcb_input_xi_change_hierarchy (xcb_connection_t                   *c,
9548                                uint8_t                             num_changes,
9549                                const xcb_input_hierarchy_change_t *changes)
9550 {
9551     static const xcb_protocol_request_t xcb_req = {
9552         .count = 4,
9553         .ext = &xcb_input_id,
9554         .opcode = XCB_INPUT_XI_CHANGE_HIERARCHY,
9555         .isvoid = 1
9556     };
9557 
9558     struct iovec xcb_parts[6];
9559     xcb_void_cookie_t xcb_ret;
9560     xcb_input_xi_change_hierarchy_request_t xcb_out;
9561     unsigned int i;
9562     unsigned int xcb_tmp_len;
9563     char *xcb_tmp;
9564 
9565     xcb_out.num_changes = num_changes;
9566     memset(xcb_out.pad0, 0, 3);
9567 
9568     xcb_parts[2].iov_base = (char *) &xcb_out;
9569     xcb_parts[2].iov_len = sizeof(xcb_out);
9570     xcb_parts[3].iov_base = 0;
9571     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9572     /* xcb_input_hierarchy_change_t changes */
9573     xcb_parts[4].iov_base = (char *) changes;
9574     xcb_parts[4].iov_len = 0;
9575     xcb_tmp = (char *)changes;
9576     for(i=0; i<num_changes; i++) {
9577         xcb_tmp_len = xcb_input_hierarchy_change_sizeof(xcb_tmp);
9578         xcb_parts[4].iov_len += xcb_tmp_len;
9579         xcb_tmp += xcb_tmp_len;
9580     }
9581     xcb_parts[5].iov_base = 0;
9582     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
9583 
9584     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
9585     return xcb_ret;
9586 }
9587 
9588 int
9589 xcb_input_xi_change_hierarchy_changes_length (const xcb_input_xi_change_hierarchy_request_t *R)
9590 {
9591     return R->num_changes;
9592 }
9593 
9594 xcb_input_hierarchy_change_iterator_t
9595 xcb_input_xi_change_hierarchy_changes_iterator (const xcb_input_xi_change_hierarchy_request_t *R)
9596 {
9597     xcb_input_hierarchy_change_iterator_t i;
9598     i.data = (xcb_input_hierarchy_change_t *) (R + 1);
9599     i.rem = R->num_changes;
9600     i.index = (char *) i.data - (char *) R;
9601     return i;
9602 }
9603 
9604 xcb_void_cookie_t
9605 xcb_input_xi_set_client_pointer_checked (xcb_connection_t      *c,
9606                                          xcb_window_t           window,
9607                                          xcb_input_device_id_t  deviceid)
9608 {
9609     static const xcb_protocol_request_t xcb_req = {
9610         .count = 2,
9611         .ext = &xcb_input_id,
9612         .opcode = XCB_INPUT_XI_SET_CLIENT_POINTER,
9613         .isvoid = 1
9614     };
9615 
9616     struct iovec xcb_parts[4];
9617     xcb_void_cookie_t xcb_ret;
9618     xcb_input_xi_set_client_pointer_request_t xcb_out;
9619 
9620     xcb_out.window = window;
9621     xcb_out.deviceid = deviceid;
9622     memset(xcb_out.pad0, 0, 2);
9623 
9624     xcb_parts[2].iov_base = (char *) &xcb_out;
9625     xcb_parts[2].iov_len = sizeof(xcb_out);
9626     xcb_parts[3].iov_base = 0;
9627     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9628 
9629     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
9630     return xcb_ret;
9631 }
9632 
9633 xcb_void_cookie_t
9634 xcb_input_xi_set_client_pointer (xcb_connection_t      *c,
9635                                  xcb_window_t           window,
9636                                  xcb_input_device_id_t  deviceid)
9637 {
9638     static const xcb_protocol_request_t xcb_req = {
9639         .count = 2,
9640         .ext = &xcb_input_id,
9641         .opcode = XCB_INPUT_XI_SET_CLIENT_POINTER,
9642         .isvoid = 1
9643     };
9644 
9645     struct iovec xcb_parts[4];
9646     xcb_void_cookie_t xcb_ret;
9647     xcb_input_xi_set_client_pointer_request_t xcb_out;
9648 
9649     xcb_out.window = window;
9650     xcb_out.deviceid = deviceid;
9651     memset(xcb_out.pad0, 0, 2);
9652 
9653     xcb_parts[2].iov_base = (char *) &xcb_out;
9654     xcb_parts[2].iov_len = sizeof(xcb_out);
9655     xcb_parts[3].iov_base = 0;
9656     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9657 
9658     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
9659     return xcb_ret;
9660 }
9661 
9662 xcb_input_xi_get_client_pointer_cookie_t
9663 xcb_input_xi_get_client_pointer (xcb_connection_t *c,
9664                                  xcb_window_t      window)
9665 {
9666     static const xcb_protocol_request_t xcb_req = {
9667         .count = 2,
9668         .ext = &xcb_input_id,
9669         .opcode = XCB_INPUT_XI_GET_CLIENT_POINTER,
9670         .isvoid = 0
9671     };
9672 
9673     struct iovec xcb_parts[4];
9674     xcb_input_xi_get_client_pointer_cookie_t xcb_ret;
9675     xcb_input_xi_get_client_pointer_request_t xcb_out;
9676 
9677     xcb_out.window = window;
9678 
9679     xcb_parts[2].iov_base = (char *) &xcb_out;
9680     xcb_parts[2].iov_len = sizeof(xcb_out);
9681     xcb_parts[3].iov_base = 0;
9682     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9683 
9684     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
9685     return xcb_ret;
9686 }
9687 
9688 xcb_input_xi_get_client_pointer_cookie_t
9689 xcb_input_xi_get_client_pointer_unchecked (xcb_connection_t *c,
9690                                            xcb_window_t      window)
9691 {
9692     static const xcb_protocol_request_t xcb_req = {
9693         .count = 2,
9694         .ext = &xcb_input_id,
9695         .opcode = XCB_INPUT_XI_GET_CLIENT_POINTER,
9696         .isvoid = 0
9697     };
9698 
9699     struct iovec xcb_parts[4];
9700     xcb_input_xi_get_client_pointer_cookie_t xcb_ret;
9701     xcb_input_xi_get_client_pointer_request_t xcb_out;
9702 
9703     xcb_out.window = window;
9704 
9705     xcb_parts[2].iov_base = (char *) &xcb_out;
9706     xcb_parts[2].iov_len = sizeof(xcb_out);
9707     xcb_parts[3].iov_base = 0;
9708     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9709 
9710     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
9711     return xcb_ret;
9712 }
9713 
9714 xcb_input_xi_get_client_pointer_reply_t *
9715 xcb_input_xi_get_client_pointer_reply (xcb_connection_t                          *c,
9716                                        xcb_input_xi_get_client_pointer_cookie_t   cookie  /**< */,
9717                                        xcb_generic_error_t                      **e)
9718 {
9719     return (xcb_input_xi_get_client_pointer_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
9720 }
9721 
9722 int
9723 xcb_input_event_mask_sizeof (const void  *_buffer)
9724 {
9725     char *xcb_tmp = (char *)_buffer;
9726     const xcb_input_event_mask_t *_aux = (xcb_input_event_mask_t *)_buffer;
9727     unsigned int xcb_buffer_len = 0;
9728     unsigned int xcb_block_len = 0;
9729     unsigned int xcb_pad = 0;
9730     unsigned int xcb_align_to = 0;
9731 
9732 
9733     xcb_block_len += sizeof(xcb_input_event_mask_t);
9734     xcb_tmp += xcb_block_len;
9735     xcb_buffer_len += xcb_block_len;
9736     xcb_block_len = 0;
9737     /* mask */
9738     xcb_block_len += _aux->mask_len * sizeof(uint32_t);
9739     xcb_tmp += xcb_block_len;
9740     xcb_align_to = ALIGNOF(uint32_t);
9741     /* insert padding */
9742     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
9743     xcb_buffer_len += xcb_block_len + xcb_pad;
9744     if (0 != xcb_pad) {
9745         xcb_tmp += xcb_pad;
9746         xcb_pad = 0;
9747     }
9748     xcb_block_len = 0;
9749 
9750     return xcb_buffer_len;
9751 }
9752 
9753 uint32_t *
9754 xcb_input_event_mask_mask (const xcb_input_event_mask_t *R)
9755 {
9756     return (uint32_t *) (R + 1);
9757 }
9758 
9759 int
9760 xcb_input_event_mask_mask_length (const xcb_input_event_mask_t *R)
9761 {
9762     return R->mask_len;
9763 }
9764 
9765 xcb_generic_iterator_t
9766 xcb_input_event_mask_mask_end (const xcb_input_event_mask_t *R)
9767 {
9768     xcb_generic_iterator_t i;
9769     i.data = ((uint32_t *) (R + 1)) + (R->mask_len);
9770     i.rem = 0;
9771     i.index = (char *) i.data - (char *) R;
9772     return i;
9773 }
9774 
9775 void
9776 xcb_input_event_mask_next (xcb_input_event_mask_iterator_t *i)
9777 {
9778     xcb_input_event_mask_t *R = i->data;
9779     xcb_generic_iterator_t child;
9780     child.data = (xcb_input_event_mask_t *)(((char *)R) + xcb_input_event_mask_sizeof(R));
9781     i->index = (char *) child.data - (char *) i->data;
9782     --i->rem;
9783     i->data = (xcb_input_event_mask_t *) child.data;
9784 }
9785 
9786 xcb_generic_iterator_t
9787 xcb_input_event_mask_end (xcb_input_event_mask_iterator_t i)
9788 {
9789     xcb_generic_iterator_t ret;
9790     while(i.rem > 0)
9791         xcb_input_event_mask_next(&i);
9792     ret.data = i.data;
9793     ret.rem = i.rem;
9794     ret.index = i.index;
9795     return ret;
9796 }
9797 
9798 int
9799 xcb_input_xi_select_events_sizeof (const void  *_buffer)
9800 {
9801     char *xcb_tmp = (char *)_buffer;
9802     const xcb_input_xi_select_events_request_t *_aux = (xcb_input_xi_select_events_request_t *)_buffer;
9803     unsigned int xcb_buffer_len = 0;
9804     unsigned int xcb_block_len = 0;
9805     unsigned int xcb_pad = 0;
9806     unsigned int xcb_align_to = 0;
9807 
9808     unsigned int i;
9809     unsigned int xcb_tmp_len;
9810 
9811     xcb_block_len += sizeof(xcb_input_xi_select_events_request_t);
9812     xcb_tmp += xcb_block_len;
9813     xcb_buffer_len += xcb_block_len;
9814     xcb_block_len = 0;
9815     /* masks */
9816     for(i=0; i<_aux->num_mask; i++) {
9817         xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
9818         xcb_block_len += xcb_tmp_len;
9819         xcb_tmp += xcb_tmp_len;
9820     }
9821     xcb_align_to = ALIGNOF(xcb_input_event_mask_t);
9822     /* insert padding */
9823     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
9824     xcb_buffer_len += xcb_block_len + xcb_pad;
9825     if (0 != xcb_pad) {
9826         xcb_tmp += xcb_pad;
9827         xcb_pad = 0;
9828     }
9829     xcb_block_len = 0;
9830 
9831     return xcb_buffer_len;
9832 }
9833 
9834 xcb_void_cookie_t
9835 xcb_input_xi_select_events_checked (xcb_connection_t             *c,
9836                                     xcb_window_t                  window,
9837                                     uint16_t                      num_mask,
9838                                     const xcb_input_event_mask_t *masks)
9839 {
9840     static const xcb_protocol_request_t xcb_req = {
9841         .count = 4,
9842         .ext = &xcb_input_id,
9843         .opcode = XCB_INPUT_XI_SELECT_EVENTS,
9844         .isvoid = 1
9845     };
9846 
9847     struct iovec xcb_parts[6];
9848     xcb_void_cookie_t xcb_ret;
9849     xcb_input_xi_select_events_request_t xcb_out;
9850     unsigned int i;
9851     unsigned int xcb_tmp_len;
9852     char *xcb_tmp;
9853 
9854     xcb_out.window = window;
9855     xcb_out.num_mask = num_mask;
9856     memset(xcb_out.pad0, 0, 2);
9857 
9858     xcb_parts[2].iov_base = (char *) &xcb_out;
9859     xcb_parts[2].iov_len = sizeof(xcb_out);
9860     xcb_parts[3].iov_base = 0;
9861     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9862     /* xcb_input_event_mask_t masks */
9863     xcb_parts[4].iov_base = (char *) masks;
9864     xcb_parts[4].iov_len = 0;
9865     xcb_tmp = (char *)masks;
9866     for(i=0; i<num_mask; i++) {
9867         xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
9868         xcb_parts[4].iov_len += xcb_tmp_len;
9869         xcb_tmp += xcb_tmp_len;
9870     }
9871     xcb_parts[5].iov_base = 0;
9872     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
9873 
9874     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
9875     return xcb_ret;
9876 }
9877 
9878 xcb_void_cookie_t
9879 xcb_input_xi_select_events (xcb_connection_t             *c,
9880                             xcb_window_t                  window,
9881                             uint16_t                      num_mask,
9882                             const xcb_input_event_mask_t *masks)
9883 {
9884     static const xcb_protocol_request_t xcb_req = {
9885         .count = 4,
9886         .ext = &xcb_input_id,
9887         .opcode = XCB_INPUT_XI_SELECT_EVENTS,
9888         .isvoid = 1
9889     };
9890 
9891     struct iovec xcb_parts[6];
9892     xcb_void_cookie_t xcb_ret;
9893     xcb_input_xi_select_events_request_t xcb_out;
9894     unsigned int i;
9895     unsigned int xcb_tmp_len;
9896     char *xcb_tmp;
9897 
9898     xcb_out.window = window;
9899     xcb_out.num_mask = num_mask;
9900     memset(xcb_out.pad0, 0, 2);
9901 
9902     xcb_parts[2].iov_base = (char *) &xcb_out;
9903     xcb_parts[2].iov_len = sizeof(xcb_out);
9904     xcb_parts[3].iov_base = 0;
9905     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9906     /* xcb_input_event_mask_t masks */
9907     xcb_parts[4].iov_base = (char *) masks;
9908     xcb_parts[4].iov_len = 0;
9909     xcb_tmp = (char *)masks;
9910     for(i=0; i<num_mask; i++) {
9911         xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
9912         xcb_parts[4].iov_len += xcb_tmp_len;
9913         xcb_tmp += xcb_tmp_len;
9914     }
9915     xcb_parts[5].iov_base = 0;
9916     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
9917 
9918     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
9919     return xcb_ret;
9920 }
9921 
9922 int
9923 xcb_input_xi_select_events_masks_length (const xcb_input_xi_select_events_request_t *R)
9924 {
9925     return R->num_mask;
9926 }
9927 
9928 xcb_input_event_mask_iterator_t
9929 xcb_input_xi_select_events_masks_iterator (const xcb_input_xi_select_events_request_t *R)
9930 {
9931     xcb_input_event_mask_iterator_t i;
9932     i.data = (xcb_input_event_mask_t *) (R + 1);
9933     i.rem = R->num_mask;
9934     i.index = (char *) i.data - (char *) R;
9935     return i;
9936 }
9937 
9938 xcb_input_xi_query_version_cookie_t
9939 xcb_input_xi_query_version (xcb_connection_t *c,
9940                             uint16_t          major_version,
9941                             uint16_t          minor_version)
9942 {
9943     static const xcb_protocol_request_t xcb_req = {
9944         .count = 2,
9945         .ext = &xcb_input_id,
9946         .opcode = XCB_INPUT_XI_QUERY_VERSION,
9947         .isvoid = 0
9948     };
9949 
9950     struct iovec xcb_parts[4];
9951     xcb_input_xi_query_version_cookie_t xcb_ret;
9952     xcb_input_xi_query_version_request_t xcb_out;
9953 
9954     xcb_out.major_version = major_version;
9955     xcb_out.minor_version = minor_version;
9956 
9957     xcb_parts[2].iov_base = (char *) &xcb_out;
9958     xcb_parts[2].iov_len = sizeof(xcb_out);
9959     xcb_parts[3].iov_base = 0;
9960     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9961 
9962     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
9963     return xcb_ret;
9964 }
9965 
9966 xcb_input_xi_query_version_cookie_t
9967 xcb_input_xi_query_version_unchecked (xcb_connection_t *c,
9968                                       uint16_t          major_version,
9969                                       uint16_t          minor_version)
9970 {
9971     static const xcb_protocol_request_t xcb_req = {
9972         .count = 2,
9973         .ext = &xcb_input_id,
9974         .opcode = XCB_INPUT_XI_QUERY_VERSION,
9975         .isvoid = 0
9976     };
9977 
9978     struct iovec xcb_parts[4];
9979     xcb_input_xi_query_version_cookie_t xcb_ret;
9980     xcb_input_xi_query_version_request_t xcb_out;
9981 
9982     xcb_out.major_version = major_version;
9983     xcb_out.minor_version = minor_version;
9984 
9985     xcb_parts[2].iov_base = (char *) &xcb_out;
9986     xcb_parts[2].iov_len = sizeof(xcb_out);
9987     xcb_parts[3].iov_base = 0;
9988     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
9989 
9990     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
9991     return xcb_ret;
9992 }
9993 
9994 xcb_input_xi_query_version_reply_t *
9995 xcb_input_xi_query_version_reply (xcb_connection_t                     *c,
9996                                   xcb_input_xi_query_version_cookie_t   cookie  /**< */,
9997                                   xcb_generic_error_t                 **e)
9998 {
9999     return (xcb_input_xi_query_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
10000 }
10001 
10002 int
10003 xcb_input_button_class_sizeof (const void  *_buffer)
10004 {
10005     char *xcb_tmp = (char *)_buffer;
10006     const xcb_input_button_class_t *_aux = (xcb_input_button_class_t *)_buffer;
10007     unsigned int xcb_buffer_len = 0;
10008     unsigned int xcb_block_len = 0;
10009     unsigned int xcb_pad = 0;
10010     unsigned int xcb_align_to = 0;
10011 
10012 
10013     xcb_block_len += sizeof(xcb_input_button_class_t);
10014     xcb_tmp += xcb_block_len;
10015     xcb_buffer_len += xcb_block_len;
10016     xcb_block_len = 0;
10017     /* state */
10018     xcb_block_len += ((_aux->num_buttons + 31) / 32) * sizeof(xcb_atom_t);
10019     xcb_tmp += xcb_block_len;
10020     xcb_align_to = ALIGNOF(uint32_t);
10021     /* insert padding */
10022     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10023     xcb_buffer_len += xcb_block_len + xcb_pad;
10024     if (0 != xcb_pad) {
10025         xcb_tmp += xcb_pad;
10026         xcb_pad = 0;
10027     }
10028     xcb_block_len = 0;
10029     /* labels */
10030     xcb_block_len += _aux->num_buttons * sizeof(xcb_atom_t);
10031     xcb_tmp += xcb_block_len;
10032     xcb_align_to = ALIGNOF(xcb_atom_t);
10033     /* insert padding */
10034     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10035     xcb_buffer_len += xcb_block_len + xcb_pad;
10036     if (0 != xcb_pad) {
10037         xcb_tmp += xcb_pad;
10038         xcb_pad = 0;
10039     }
10040     xcb_block_len = 0;
10041 
10042     return xcb_buffer_len;
10043 }
10044 
10045 uint32_t *
10046 xcb_input_button_class_state (const xcb_input_button_class_t *R)
10047 {
10048     return (uint32_t *) (R + 1);
10049 }
10050 
10051 int
10052 xcb_input_button_class_state_length (const xcb_input_button_class_t *R)
10053 {
10054     return ((R->num_buttons + 31) / 32);
10055 }
10056 
10057 xcb_generic_iterator_t
10058 xcb_input_button_class_state_end (const xcb_input_button_class_t *R)
10059 {
10060     xcb_generic_iterator_t i;
10061     i.data = ((uint32_t *) (R + 1)) + (((R->num_buttons + 31) / 32));
10062     i.rem = 0;
10063     i.index = (char *) i.data - (char *) R;
10064     return i;
10065 }
10066 
10067 xcb_atom_t *
10068 xcb_input_button_class_labels (const xcb_input_button_class_t *R)
10069 {
10070     xcb_generic_iterator_t prev = xcb_input_button_class_state_end(R);
10071     return (xcb_atom_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_atom_t, prev.index) + 0);
10072 }
10073 
10074 int
10075 xcb_input_button_class_labels_length (const xcb_input_button_class_t *R)
10076 {
10077     return R->num_buttons;
10078 }
10079 
10080 xcb_generic_iterator_t
10081 xcb_input_button_class_labels_end (const xcb_input_button_class_t *R)
10082 {
10083     xcb_generic_iterator_t i;
10084     xcb_generic_iterator_t prev = xcb_input_button_class_state_end(R);
10085     i.data = ((xcb_atom_t *) ((char*) prev.data + XCB_TYPE_PAD(xcb_atom_t, prev.index))) + (R->num_buttons);
10086     i.rem = 0;
10087     i.index = (char *) i.data - (char *) R;
10088     return i;
10089 }
10090 
10091 void
10092 xcb_input_button_class_next (xcb_input_button_class_iterator_t *i)
10093 {
10094     xcb_input_button_class_t *R = i->data;
10095     xcb_generic_iterator_t child;
10096     child.data = (xcb_input_button_class_t *)(((char *)R) + xcb_input_button_class_sizeof(R));
10097     i->index = (char *) child.data - (char *) i->data;
10098     --i->rem;
10099     i->data = (xcb_input_button_class_t *) child.data;
10100 }
10101 
10102 xcb_generic_iterator_t
10103 xcb_input_button_class_end (xcb_input_button_class_iterator_t i)
10104 {
10105     xcb_generic_iterator_t ret;
10106     while(i.rem > 0)
10107         xcb_input_button_class_next(&i);
10108     ret.data = i.data;
10109     ret.rem = i.rem;
10110     ret.index = i.index;
10111     return ret;
10112 }
10113 
10114 int
10115 xcb_input_key_class_sizeof (const void  *_buffer)
10116 {
10117     char *xcb_tmp = (char *)_buffer;
10118     const xcb_input_key_class_t *_aux = (xcb_input_key_class_t *)_buffer;
10119     unsigned int xcb_buffer_len = 0;
10120     unsigned int xcb_block_len = 0;
10121     unsigned int xcb_pad = 0;
10122     unsigned int xcb_align_to = 0;
10123 
10124 
10125     xcb_block_len += sizeof(xcb_input_key_class_t);
10126     xcb_tmp += xcb_block_len;
10127     xcb_buffer_len += xcb_block_len;
10128     xcb_block_len = 0;
10129     /* keys */
10130     xcb_block_len += _aux->num_keys * sizeof(uint32_t);
10131     xcb_tmp += xcb_block_len;
10132     xcb_align_to = ALIGNOF(uint32_t);
10133     /* insert padding */
10134     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10135     xcb_buffer_len += xcb_block_len + xcb_pad;
10136     if (0 != xcb_pad) {
10137         xcb_tmp += xcb_pad;
10138         xcb_pad = 0;
10139     }
10140     xcb_block_len = 0;
10141 
10142     return xcb_buffer_len;
10143 }
10144 
10145 uint32_t *
10146 xcb_input_key_class_keys (const xcb_input_key_class_t *R)
10147 {
10148     return (uint32_t *) (R + 1);
10149 }
10150 
10151 int
10152 xcb_input_key_class_keys_length (const xcb_input_key_class_t *R)
10153 {
10154     return R->num_keys;
10155 }
10156 
10157 xcb_generic_iterator_t
10158 xcb_input_key_class_keys_end (const xcb_input_key_class_t *R)
10159 {
10160     xcb_generic_iterator_t i;
10161     i.data = ((uint32_t *) (R + 1)) + (R->num_keys);
10162     i.rem = 0;
10163     i.index = (char *) i.data - (char *) R;
10164     return i;
10165 }
10166 
10167 void
10168 xcb_input_key_class_next (xcb_input_key_class_iterator_t *i)
10169 {
10170     xcb_input_key_class_t *R = i->data;
10171     xcb_generic_iterator_t child;
10172     child.data = (xcb_input_key_class_t *)(((char *)R) + xcb_input_key_class_sizeof(R));
10173     i->index = (char *) child.data - (char *) i->data;
10174     --i->rem;
10175     i->data = (xcb_input_key_class_t *) child.data;
10176 }
10177 
10178 xcb_generic_iterator_t
10179 xcb_input_key_class_end (xcb_input_key_class_iterator_t i)
10180 {
10181     xcb_generic_iterator_t ret;
10182     while(i.rem > 0)
10183         xcb_input_key_class_next(&i);
10184     ret.data = i.data;
10185     ret.rem = i.rem;
10186     ret.index = i.index;
10187     return ret;
10188 }
10189 
10190 void
10191 xcb_input_scroll_class_next (xcb_input_scroll_class_iterator_t *i)
10192 {
10193     --i->rem;
10194     ++i->data;
10195     i->index += sizeof(xcb_input_scroll_class_t);
10196 }
10197 
10198 xcb_generic_iterator_t
10199 xcb_input_scroll_class_end (xcb_input_scroll_class_iterator_t i)
10200 {
10201     xcb_generic_iterator_t ret;
10202     ret.data = i.data + i.rem;
10203     ret.index = i.index + ((char *) ret.data - (char *) i.data);
10204     ret.rem = 0;
10205     return ret;
10206 }
10207 
10208 void
10209 xcb_input_touch_class_next (xcb_input_touch_class_iterator_t *i)
10210 {
10211     --i->rem;
10212     ++i->data;
10213     i->index += sizeof(xcb_input_touch_class_t);
10214 }
10215 
10216 xcb_generic_iterator_t
10217 xcb_input_touch_class_end (xcb_input_touch_class_iterator_t i)
10218 {
10219     xcb_generic_iterator_t ret;
10220     ret.data = i.data + i.rem;
10221     ret.index = i.index + ((char *) ret.data - (char *) i.data);
10222     ret.rem = 0;
10223     return ret;
10224 }
10225 
10226 void
10227 xcb_input_valuator_class_next (xcb_input_valuator_class_iterator_t *i)
10228 {
10229     --i->rem;
10230     ++i->data;
10231     i->index += sizeof(xcb_input_valuator_class_t);
10232 }
10233 
10234 xcb_generic_iterator_t
10235 xcb_input_valuator_class_end (xcb_input_valuator_class_iterator_t i)
10236 {
10237     xcb_generic_iterator_t ret;
10238     ret.data = i.data + i.rem;
10239     ret.index = i.index + ((char *) ret.data - (char *) i.data);
10240     ret.rem = 0;
10241     return ret;
10242 }
10243 
10244 uint32_t *
10245 xcb_input_device_class_data_key_keys (const xcb_input_device_class_data_t *S)
10246 {
10247     return S->key.keys;
10248 }
10249 
10250 int
10251 xcb_input_device_class_data_key_keys_length (const xcb_input_device_class_t *R,
10252                                              const xcb_input_device_class_data_t *S)
10253 {
10254     return S->key.num_keys;
10255 }
10256 
10257 xcb_generic_iterator_t
10258 xcb_input_device_class_data_key_keys_end (const xcb_input_device_class_t *R,
10259                                           const xcb_input_device_class_data_t *S)
10260 {
10261     xcb_generic_iterator_t i;
10262     i.data = S->key.keys + S->key.num_keys;
10263     i.rem = 0;
10264     i.index = (char *) i.data - (char *) S;
10265     return i;
10266 }
10267 
10268 uint32_t *
10269 xcb_input_device_class_data_button_state (const xcb_input_device_class_data_t *S)
10270 {
10271     return S->button.state;
10272 }
10273 
10274 int
10275 xcb_input_device_class_data_button_state_length (const xcb_input_device_class_t *R,
10276                                                  const xcb_input_device_class_data_t *S)
10277 {
10278     return ((S->button.num_buttons + 31) / 32);
10279 }
10280 
10281 xcb_generic_iterator_t
10282 xcb_input_device_class_data_button_state_end (const xcb_input_device_class_t *R,
10283                                               const xcb_input_device_class_data_t *S)
10284 {
10285     xcb_generic_iterator_t i;
10286     i.data = S->button.state + ((S->button.num_buttons + 31) / 32);
10287     i.rem = 0;
10288     i.index = (char *) i.data - (char *) S;
10289     return i;
10290 }
10291 
10292 xcb_atom_t *
10293 xcb_input_device_class_data_button_labels (const xcb_input_device_class_data_t *S)
10294 {
10295     return S->button.labels;
10296 }
10297 
10298 int
10299 xcb_input_device_class_data_button_labels_length (const xcb_input_device_class_t *R,
10300                                                   const xcb_input_device_class_data_t *S)
10301 {
10302     return S->button.num_buttons;
10303 }
10304 
10305 xcb_generic_iterator_t
10306 xcb_input_device_class_data_button_labels_end (const xcb_input_device_class_t *R,
10307                                                const xcb_input_device_class_data_t *S)
10308 {
10309     xcb_generic_iterator_t i;
10310     i.data = S->button.labels + S->button.num_buttons;
10311     i.rem = 0;
10312     i.index = (char *) i.data - (char *) S;
10313     return i;
10314 }
10315 
10316 int
10317 xcb_input_device_class_data_serialize (void                                **_buffer,
10318                                        uint16_t                              type,
10319                                        const xcb_input_device_class_data_t  *_aux)
10320 {
10321     char *xcb_out = *_buffer;
10322     unsigned int xcb_buffer_len = 0;
10323     unsigned int xcb_align_to = 0;
10324     unsigned int xcb_padding_offset = 2;
10325 
10326     unsigned int xcb_pad = 0;
10327     char xcb_pad0[3] = {0, 0, 0};
10328     struct iovec xcb_parts[24];
10329     unsigned int xcb_parts_idx = 0;
10330     unsigned int xcb_block_len = 0;
10331     unsigned int i;
10332     char *xcb_tmp;
10333 
10334     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_KEY) {
10335         /* xcb_input_device_class_data_t.key.num_keys */
10336         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.num_keys;
10337         xcb_block_len += sizeof(uint16_t);
10338         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
10339         xcb_parts_idx++;
10340         xcb_align_to = ALIGNOF(uint16_t);
10341         /* insert padding */
10342         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10343         xcb_buffer_len += xcb_block_len + xcb_pad;
10344         if (0 != xcb_pad) {
10345             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
10346             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
10347             xcb_parts_idx++;
10348             xcb_pad = 0;
10349         }
10350         xcb_block_len = 0;
10351         xcb_padding_offset = 0;
10352         /* keys */
10353         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->key.keys;
10354         xcb_block_len += _aux->key.num_keys * sizeof(uint32_t);
10355         xcb_parts[xcb_parts_idx].iov_len = _aux->key.num_keys * sizeof(uint32_t);
10356         xcb_parts_idx++;
10357         xcb_align_to = ALIGNOF(uint32_t);
10358     }
10359     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_BUTTON) {
10360         /* xcb_input_device_class_data_t.button.num_buttons */
10361         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->button.num_buttons;
10362         xcb_block_len += sizeof(uint16_t);
10363         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
10364         xcb_parts_idx++;
10365         xcb_align_to = ALIGNOF(uint16_t);
10366         /* insert padding */
10367         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10368         xcb_buffer_len += xcb_block_len + xcb_pad;
10369         if (0 != xcb_pad) {
10370             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
10371             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
10372             xcb_parts_idx++;
10373             xcb_pad = 0;
10374         }
10375         xcb_block_len = 0;
10376         xcb_padding_offset = 0;
10377         /* state */
10378         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->button.state;
10379         xcb_block_len += ((_aux->button.num_buttons + 31) / 32) * sizeof(uint32_t);
10380         xcb_parts[xcb_parts_idx].iov_len = ((_aux->button.num_buttons + 31) / 32) * sizeof(uint32_t);
10381         xcb_parts_idx++;
10382         xcb_align_to = ALIGNOF(uint32_t);
10383         /* insert padding */
10384         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10385         xcb_buffer_len += xcb_block_len + xcb_pad;
10386         if (0 != xcb_pad) {
10387             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
10388             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
10389             xcb_parts_idx++;
10390             xcb_pad = 0;
10391         }
10392         xcb_block_len = 0;
10393         xcb_padding_offset = 0;
10394         /* labels */
10395         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->button.labels;
10396         xcb_block_len += _aux->button.num_buttons * sizeof(uint32_t);
10397         xcb_parts[xcb_parts_idx].iov_len = _aux->button.num_buttons * sizeof(uint32_t);
10398         xcb_parts_idx++;
10399         xcb_align_to = ALIGNOF(xcb_atom_t);
10400     }
10401     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_VALUATOR) {
10402         /* xcb_input_device_class_data_t.valuator.number */
10403         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.number;
10404         xcb_block_len += sizeof(uint16_t);
10405         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
10406         xcb_parts_idx++;
10407         xcb_align_to = ALIGNOF(uint16_t);
10408         /* xcb_input_device_class_data_t.valuator.label */
10409         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.label;
10410         xcb_block_len += sizeof(xcb_atom_t);
10411         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_atom_t);
10412         xcb_parts_idx++;
10413         xcb_align_to = ALIGNOF(xcb_atom_t);
10414         /* xcb_input_device_class_data_t.valuator.min */
10415         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.min;
10416         xcb_block_len += sizeof(xcb_input_fp3232_t);
10417         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
10418         xcb_parts_idx++;
10419         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10420         /* xcb_input_device_class_data_t.valuator.max */
10421         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.max;
10422         xcb_block_len += sizeof(xcb_input_fp3232_t);
10423         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
10424         xcb_parts_idx++;
10425         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10426         /* xcb_input_device_class_data_t.valuator.value */
10427         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.value;
10428         xcb_block_len += sizeof(xcb_input_fp3232_t);
10429         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
10430         xcb_parts_idx++;
10431         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10432         /* xcb_input_device_class_data_t.valuator.resolution */
10433         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.resolution;
10434         xcb_block_len += sizeof(uint32_t);
10435         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
10436         xcb_parts_idx++;
10437         xcb_align_to = ALIGNOF(uint32_t);
10438         /* xcb_input_device_class_data_t.valuator.mode */
10439         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.mode;
10440         xcb_block_len += sizeof(uint8_t);
10441         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
10442         xcb_parts_idx++;
10443         xcb_align_to = ALIGNOF(uint8_t);
10444         /* xcb_input_device_class_data_t.valuator.pad0 */
10445         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
10446         xcb_block_len += sizeof(uint8_t)*3;
10447         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
10448         xcb_parts_idx++;
10449         xcb_align_to = ALIGNOF(uint8_t);
10450     }
10451     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_SCROLL) {
10452         /* xcb_input_device_class_data_t.scroll.number */
10453         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.number;
10454         xcb_block_len += sizeof(uint16_t);
10455         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
10456         xcb_parts_idx++;
10457         xcb_align_to = ALIGNOF(uint16_t);
10458         /* xcb_input_device_class_data_t.scroll.scroll_type */
10459         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.scroll_type;
10460         xcb_block_len += sizeof(uint16_t);
10461         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
10462         xcb_parts_idx++;
10463         xcb_align_to = ALIGNOF(uint16_t);
10464         /* xcb_input_device_class_data_t.scroll.pad1 */
10465         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
10466         xcb_block_len += sizeof(uint8_t)*2;
10467         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
10468         xcb_parts_idx++;
10469         xcb_align_to = ALIGNOF(uint8_t);
10470         /* xcb_input_device_class_data_t.scroll.flags */
10471         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.flags;
10472         xcb_block_len += sizeof(uint32_t);
10473         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
10474         xcb_parts_idx++;
10475         xcb_align_to = ALIGNOF(uint32_t);
10476         /* xcb_input_device_class_data_t.scroll.increment */
10477         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.increment;
10478         xcb_block_len += sizeof(xcb_input_fp3232_t);
10479         xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
10480         xcb_parts_idx++;
10481         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10482     }
10483     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_TOUCH) {
10484         /* xcb_input_device_class_data_t.touch.mode */
10485         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->touch.mode;
10486         xcb_block_len += sizeof(uint8_t);
10487         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
10488         xcb_parts_idx++;
10489         xcb_align_to = ALIGNOF(uint8_t);
10490         /* xcb_input_device_class_data_t.touch.num_touches */
10491         xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->touch.num_touches;
10492         xcb_block_len += sizeof(uint8_t);
10493         xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
10494         xcb_parts_idx++;
10495         xcb_align_to = ALIGNOF(uint8_t);
10496     }
10497     /* insert padding */
10498     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10499     xcb_buffer_len += xcb_block_len + xcb_pad;
10500     if (0 != xcb_pad) {
10501         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
10502         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
10503         xcb_parts_idx++;
10504         xcb_pad = 0;
10505     }
10506     xcb_block_len = 0;
10507     xcb_padding_offset = 0;
10508 
10509     if (NULL == xcb_out) {
10510         /* allocate memory */
10511         xcb_out = malloc(xcb_buffer_len);
10512         *_buffer = xcb_out;
10513     }
10514 
10515     xcb_tmp = xcb_out;
10516     for(i=0; i<xcb_parts_idx; i++) {
10517         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
10518             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
10519         if (0 != xcb_parts[i].iov_len)
10520             xcb_tmp += xcb_parts[i].iov_len;
10521     }
10522 
10523     return xcb_buffer_len;
10524 }
10525 
10526 int
10527 xcb_input_device_class_data_unpack (const void                     *_buffer,
10528                                     uint16_t                        type,
10529                                     xcb_input_device_class_data_t  *_aux)
10530 {
10531     char *xcb_tmp = (char *)_buffer;
10532     unsigned int xcb_buffer_len = 0;
10533     unsigned int xcb_block_len = 0;
10534     unsigned int xcb_pad = 0;
10535     unsigned int xcb_align_to = 0;
10536     unsigned int xcb_padding_offset = 2;
10537 
10538 
10539     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_KEY) {
10540         /* xcb_input_device_class_data_t.key.num_keys */
10541         _aux->key.num_keys = *(uint16_t *)xcb_tmp;
10542         xcb_block_len += sizeof(uint16_t);
10543         xcb_tmp += sizeof(uint16_t);
10544         xcb_align_to = ALIGNOF(uint16_t);
10545         /* insert padding */
10546         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10547         xcb_buffer_len += xcb_block_len + xcb_pad;
10548         if (0 != xcb_pad) {
10549             xcb_tmp += xcb_pad;
10550             xcb_pad = 0;
10551         }
10552         xcb_block_len = 0;
10553         xcb_padding_offset = 0;
10554         /* keys */
10555         _aux->key.keys = (uint32_t *)xcb_tmp;
10556         xcb_block_len += _aux->key.num_keys * sizeof(uint32_t);
10557         xcb_tmp += xcb_block_len;
10558         xcb_align_to = ALIGNOF(uint32_t);
10559     }
10560     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_BUTTON) {
10561         /* xcb_input_device_class_data_t.button.num_buttons */
10562         _aux->button.num_buttons = *(uint16_t *)xcb_tmp;
10563         xcb_block_len += sizeof(uint16_t);
10564         xcb_tmp += sizeof(uint16_t);
10565         xcb_align_to = ALIGNOF(uint16_t);
10566         /* insert padding */
10567         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10568         xcb_buffer_len += xcb_block_len + xcb_pad;
10569         if (0 != xcb_pad) {
10570             xcb_tmp += xcb_pad;
10571             xcb_pad = 0;
10572         }
10573         xcb_block_len = 0;
10574         xcb_padding_offset = 0;
10575         /* state */
10576         _aux->button.state = (uint32_t *)xcb_tmp;
10577         xcb_block_len += ((_aux->button.num_buttons + 31) / 32) * sizeof(uint32_t);
10578         xcb_tmp += xcb_block_len;
10579         xcb_align_to = ALIGNOF(uint32_t);
10580         /* insert padding */
10581         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10582         xcb_buffer_len += xcb_block_len + xcb_pad;
10583         if (0 != xcb_pad) {
10584             xcb_tmp += xcb_pad;
10585             xcb_pad = 0;
10586         }
10587         xcb_block_len = 0;
10588         xcb_padding_offset = 0;
10589         /* labels */
10590         _aux->button.labels = (xcb_atom_t *)xcb_tmp;
10591         xcb_block_len += _aux->button.num_buttons * sizeof(uint32_t);
10592         xcb_tmp += xcb_block_len;
10593         xcb_align_to = ALIGNOF(xcb_atom_t);
10594     }
10595     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_VALUATOR) {
10596         /* xcb_input_device_class_data_t.valuator.number */
10597         _aux->valuator.number = *(uint16_t *)xcb_tmp;
10598         xcb_block_len += sizeof(uint16_t);
10599         xcb_tmp += sizeof(uint16_t);
10600         xcb_align_to = ALIGNOF(uint16_t);
10601         /* xcb_input_device_class_data_t.valuator.label */
10602         _aux->valuator.label = *(xcb_atom_t *)xcb_tmp;
10603         xcb_block_len += sizeof(xcb_atom_t);
10604         xcb_tmp += sizeof(xcb_atom_t);
10605         xcb_align_to = ALIGNOF(xcb_atom_t);
10606         /* xcb_input_device_class_data_t.valuator.min */
10607         _aux->valuator.min = *(xcb_input_fp3232_t *)xcb_tmp;
10608         xcb_block_len += sizeof(xcb_input_fp3232_t);
10609         xcb_tmp += sizeof(xcb_input_fp3232_t);
10610         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10611         /* xcb_input_device_class_data_t.valuator.max */
10612         _aux->valuator.max = *(xcb_input_fp3232_t *)xcb_tmp;
10613         xcb_block_len += sizeof(xcb_input_fp3232_t);
10614         xcb_tmp += sizeof(xcb_input_fp3232_t);
10615         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10616         /* xcb_input_device_class_data_t.valuator.value */
10617         _aux->valuator.value = *(xcb_input_fp3232_t *)xcb_tmp;
10618         xcb_block_len += sizeof(xcb_input_fp3232_t);
10619         xcb_tmp += sizeof(xcb_input_fp3232_t);
10620         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10621         /* xcb_input_device_class_data_t.valuator.resolution */
10622         _aux->valuator.resolution = *(uint32_t *)xcb_tmp;
10623         xcb_block_len += sizeof(uint32_t);
10624         xcb_tmp += sizeof(uint32_t);
10625         xcb_align_to = ALIGNOF(uint32_t);
10626         /* xcb_input_device_class_data_t.valuator.mode */
10627         _aux->valuator.mode = *(uint8_t *)xcb_tmp;
10628         xcb_block_len += sizeof(uint8_t);
10629         xcb_tmp += sizeof(uint8_t);
10630         xcb_align_to = ALIGNOF(uint8_t);
10631         /* xcb_input_device_class_data_t.valuator.pad0 */
10632         _aux->valuator.pad0[0] = *(uint8_t *)xcb_tmp;
10633         _aux->valuator.pad0[1] = *(uint8_t *)xcb_tmp;
10634         _aux->valuator.pad0[2] = *(uint8_t *)xcb_tmp;
10635         xcb_block_len += sizeof(uint8_t) * 3;
10636         xcb_tmp += sizeof(uint8_t) * 3;
10637         xcb_align_to = ALIGNOF(uint8_t);
10638     }
10639     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_SCROLL) {
10640         /* xcb_input_device_class_data_t.scroll.number */
10641         _aux->scroll.number = *(uint16_t *)xcb_tmp;
10642         xcb_block_len += sizeof(uint16_t);
10643         xcb_tmp += sizeof(uint16_t);
10644         xcb_align_to = ALIGNOF(uint16_t);
10645         /* xcb_input_device_class_data_t.scroll.scroll_type */
10646         _aux->scroll.scroll_type = *(uint16_t *)xcb_tmp;
10647         xcb_block_len += sizeof(uint16_t);
10648         xcb_tmp += sizeof(uint16_t);
10649         xcb_align_to = ALIGNOF(uint16_t);
10650         /* xcb_input_device_class_data_t.scroll.pad1 */
10651         _aux->scroll.pad1[0] = *(uint8_t *)xcb_tmp;
10652         _aux->scroll.pad1[1] = *(uint8_t *)xcb_tmp;
10653         xcb_block_len += sizeof(uint8_t) * 2;
10654         xcb_tmp += sizeof(uint8_t) * 2;
10655         xcb_align_to = ALIGNOF(uint8_t);
10656         /* xcb_input_device_class_data_t.scroll.flags */
10657         _aux->scroll.flags = *(uint32_t *)xcb_tmp;
10658         xcb_block_len += sizeof(uint32_t);
10659         xcb_tmp += sizeof(uint32_t);
10660         xcb_align_to = ALIGNOF(uint32_t);
10661         /* xcb_input_device_class_data_t.scroll.increment */
10662         _aux->scroll.increment = *(xcb_input_fp3232_t *)xcb_tmp;
10663         xcb_block_len += sizeof(xcb_input_fp3232_t);
10664         xcb_tmp += sizeof(xcb_input_fp3232_t);
10665         xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
10666     }
10667     if(type == XCB_INPUT_DEVICE_CLASS_TYPE_TOUCH) {
10668         /* xcb_input_device_class_data_t.touch.mode */
10669         _aux->touch.mode = *(uint8_t *)xcb_tmp;
10670         xcb_block_len += sizeof(uint8_t);
10671         xcb_tmp += sizeof(uint8_t);
10672         xcb_align_to = ALIGNOF(uint8_t);
10673         /* xcb_input_device_class_data_t.touch.num_touches */
10674         _aux->touch.num_touches = *(uint8_t *)xcb_tmp;
10675         xcb_block_len += sizeof(uint8_t);
10676         xcb_tmp += sizeof(uint8_t);
10677         xcb_align_to = ALIGNOF(uint8_t);
10678     }
10679     /* insert padding */
10680     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
10681     xcb_buffer_len += xcb_block_len + xcb_pad;
10682     if (0 != xcb_pad) {
10683         xcb_tmp += xcb_pad;
10684         xcb_pad = 0;
10685     }
10686     xcb_block_len = 0;
10687     xcb_padding_offset = 0;
10688 
10689     return xcb_buffer_len;
10690 }
10691 
10692 int
10693 xcb_input_device_class_data_sizeof (const void  *_buffer,
10694                                     uint16_t     type)
10695 {
10696     xcb_input_device_class_data_t _aux;
10697     return xcb_input_device_class_data_unpack(_buffer, type, &_aux);
10698 }
10699 
10700 int
10701 xcb_input_device_class_sizeof (const void  *_buffer)
10702 {
10703     char *xcb_tmp = (char *)_buffer;
10704     const xcb_input_device_class_t *_aux = (xcb_input_device_class_t *)_buffer;
10705     unsigned int xcb_buffer_len = 0;
10706     unsigned int xcb_block_len = 0;
10707     unsigned int xcb_pad = 0;
10708     unsigned int xcb_align_to = 0;
10709 
10710 
10711     xcb_block_len += sizeof(xcb_input_device_class_t);
10712     xcb_tmp += xcb_block_len;
10713     xcb_buffer_len += xcb_block_len;
10714     xcb_block_len = 0;
10715     /* data */
10716     xcb_block_len += xcb_input_device_class_data_sizeof(xcb_tmp, _aux->type);
10717     xcb_tmp += xcb_block_len;
10718     xcb_align_to = ALIGNOF(char);
10719     /* insert padding */
10720     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10721     xcb_buffer_len += xcb_block_len + xcb_pad;
10722     if (0 != xcb_pad) {
10723         xcb_tmp += xcb_pad;
10724         xcb_pad = 0;
10725     }
10726     xcb_block_len = 0;
10727 
10728     return xcb_buffer_len;
10729 }
10730 
10731 void *
10732 xcb_input_device_class_data (const xcb_input_device_class_t *R)
10733 {
10734     return (void *) (R + 1);
10735 }
10736 
10737 void
10738 xcb_input_device_class_next (xcb_input_device_class_iterator_t *i)
10739 {
10740     xcb_input_device_class_t *R = i->data;
10741     xcb_generic_iterator_t child;
10742     child.data = (xcb_input_device_class_t *)(((char *)R) + xcb_input_device_class_sizeof(R));
10743     i->index = (char *) child.data - (char *) i->data;
10744     --i->rem;
10745     i->data = (xcb_input_device_class_t *) child.data;
10746 }
10747 
10748 xcb_generic_iterator_t
10749 xcb_input_device_class_end (xcb_input_device_class_iterator_t i)
10750 {
10751     xcb_generic_iterator_t ret;
10752     while(i.rem > 0)
10753         xcb_input_device_class_next(&i);
10754     ret.data = i.data;
10755     ret.rem = i.rem;
10756     ret.index = i.index;
10757     return ret;
10758 }
10759 
10760 int
10761 xcb_input_xi_device_info_sizeof (const void  *_buffer)
10762 {
10763     char *xcb_tmp = (char *)_buffer;
10764     const xcb_input_xi_device_info_t *_aux = (xcb_input_xi_device_info_t *)_buffer;
10765     unsigned int xcb_buffer_len = 0;
10766     unsigned int xcb_block_len = 0;
10767     unsigned int xcb_pad = 0;
10768     unsigned int xcb_align_to = 0;
10769 
10770     unsigned int i;
10771     unsigned int xcb_tmp_len;
10772 
10773     xcb_block_len += sizeof(xcb_input_xi_device_info_t);
10774     xcb_tmp += xcb_block_len;
10775     xcb_buffer_len += xcb_block_len;
10776     xcb_block_len = 0;
10777     /* name */
10778     xcb_block_len += _aux->name_len * sizeof(char);
10779     xcb_tmp += xcb_block_len;
10780     xcb_align_to = ALIGNOF(char);
10781     xcb_align_to = 4;
10782     /* insert padding */
10783     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10784     xcb_buffer_len += xcb_block_len + xcb_pad;
10785     if (0 != xcb_pad) {
10786         xcb_tmp += xcb_pad;
10787         xcb_pad = 0;
10788     }
10789     xcb_block_len = 0;
10790     /* insert padding */
10791     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10792     xcb_buffer_len += xcb_block_len + xcb_pad;
10793     if (0 != xcb_pad) {
10794         xcb_tmp += xcb_pad;
10795         xcb_pad = 0;
10796     }
10797     xcb_block_len = 0;
10798     /* classes */
10799     for(i=0; i<_aux->num_classes; i++) {
10800         xcb_tmp_len = xcb_input_device_class_sizeof(xcb_tmp);
10801         xcb_block_len += xcb_tmp_len;
10802         xcb_tmp += xcb_tmp_len;
10803     }
10804     xcb_align_to = ALIGNOF(xcb_input_device_class_t);
10805     /* insert padding */
10806     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10807     xcb_buffer_len += xcb_block_len + xcb_pad;
10808     if (0 != xcb_pad) {
10809         xcb_tmp += xcb_pad;
10810         xcb_pad = 0;
10811     }
10812     xcb_block_len = 0;
10813 
10814     return xcb_buffer_len;
10815 }
10816 
10817 char *
10818 xcb_input_xi_device_info_name (const xcb_input_xi_device_info_t *R)
10819 {
10820     return (char *) (R + 1);
10821 }
10822 
10823 int
10824 xcb_input_xi_device_info_name_length (const xcb_input_xi_device_info_t *R)
10825 {
10826     return R->name_len;
10827 }
10828 
10829 xcb_generic_iterator_t
10830 xcb_input_xi_device_info_name_end (const xcb_input_xi_device_info_t *R)
10831 {
10832     xcb_generic_iterator_t i;
10833     i.data = ((char *) (R + 1)) + (R->name_len);
10834     i.rem = 0;
10835     i.index = (char *) i.data - (char *) R;
10836     return i;
10837 }
10838 
10839 int
10840 xcb_input_xi_device_info_classes_length (const xcb_input_xi_device_info_t *R)
10841 {
10842     return R->num_classes;
10843 }
10844 
10845 xcb_input_device_class_iterator_t
10846 xcb_input_xi_device_info_classes_iterator (const xcb_input_xi_device_info_t *R)
10847 {
10848     xcb_input_device_class_iterator_t i;
10849     xcb_generic_iterator_t prev = xcb_input_xi_device_info_name_end(R);
10850     i.data = (xcb_input_device_class_t *) ((char *) prev.data + ((-prev.index) & (4 - 1)));
10851     i.rem = R->num_classes;
10852     i.index = (char *) i.data - (char *) R;
10853     return i;
10854 }
10855 
10856 void
10857 xcb_input_xi_device_info_next (xcb_input_xi_device_info_iterator_t *i)
10858 {
10859     xcb_input_xi_device_info_t *R = i->data;
10860     xcb_generic_iterator_t child;
10861     child.data = (xcb_input_xi_device_info_t *)(((char *)R) + xcb_input_xi_device_info_sizeof(R));
10862     i->index = (char *) child.data - (char *) i->data;
10863     --i->rem;
10864     i->data = (xcb_input_xi_device_info_t *) child.data;
10865 }
10866 
10867 xcb_generic_iterator_t
10868 xcb_input_xi_device_info_end (xcb_input_xi_device_info_iterator_t i)
10869 {
10870     xcb_generic_iterator_t ret;
10871     while(i.rem > 0)
10872         xcb_input_xi_device_info_next(&i);
10873     ret.data = i.data;
10874     ret.rem = i.rem;
10875     ret.index = i.index;
10876     return ret;
10877 }
10878 
10879 int
10880 xcb_input_xi_query_device_sizeof (const void  *_buffer)
10881 {
10882     char *xcb_tmp = (char *)_buffer;
10883     const xcb_input_xi_query_device_reply_t *_aux = (xcb_input_xi_query_device_reply_t *)_buffer;
10884     unsigned int xcb_buffer_len = 0;
10885     unsigned int xcb_block_len = 0;
10886     unsigned int xcb_pad = 0;
10887     unsigned int xcb_align_to = 0;
10888 
10889     unsigned int i;
10890     unsigned int xcb_tmp_len;
10891 
10892     xcb_block_len += sizeof(xcb_input_xi_query_device_reply_t);
10893     xcb_tmp += xcb_block_len;
10894     xcb_buffer_len += xcb_block_len;
10895     xcb_block_len = 0;
10896     /* infos */
10897     for(i=0; i<_aux->num_infos; i++) {
10898         xcb_tmp_len = xcb_input_xi_device_info_sizeof(xcb_tmp);
10899         xcb_block_len += xcb_tmp_len;
10900         xcb_tmp += xcb_tmp_len;
10901     }
10902     xcb_align_to = ALIGNOF(xcb_input_xi_device_info_t);
10903     /* insert padding */
10904     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
10905     xcb_buffer_len += xcb_block_len + xcb_pad;
10906     if (0 != xcb_pad) {
10907         xcb_tmp += xcb_pad;
10908         xcb_pad = 0;
10909     }
10910     xcb_block_len = 0;
10911 
10912     return xcb_buffer_len;
10913 }
10914 
10915 xcb_input_xi_query_device_cookie_t
10916 xcb_input_xi_query_device (xcb_connection_t      *c,
10917                            xcb_input_device_id_t  deviceid)
10918 {
10919     static const xcb_protocol_request_t xcb_req = {
10920         .count = 2,
10921         .ext = &xcb_input_id,
10922         .opcode = XCB_INPUT_XI_QUERY_DEVICE,
10923         .isvoid = 0
10924     };
10925 
10926     struct iovec xcb_parts[4];
10927     xcb_input_xi_query_device_cookie_t xcb_ret;
10928     xcb_input_xi_query_device_request_t xcb_out;
10929 
10930     xcb_out.deviceid = deviceid;
10931     memset(xcb_out.pad0, 0, 2);
10932 
10933     xcb_parts[2].iov_base = (char *) &xcb_out;
10934     xcb_parts[2].iov_len = sizeof(xcb_out);
10935     xcb_parts[3].iov_base = 0;
10936     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
10937 
10938     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
10939     return xcb_ret;
10940 }
10941 
10942 xcb_input_xi_query_device_cookie_t
10943 xcb_input_xi_query_device_unchecked (xcb_connection_t      *c,
10944                                      xcb_input_device_id_t  deviceid)
10945 {
10946     static const xcb_protocol_request_t xcb_req = {
10947         .count = 2,
10948         .ext = &xcb_input_id,
10949         .opcode = XCB_INPUT_XI_QUERY_DEVICE,
10950         .isvoid = 0
10951     };
10952 
10953     struct iovec xcb_parts[4];
10954     xcb_input_xi_query_device_cookie_t xcb_ret;
10955     xcb_input_xi_query_device_request_t xcb_out;
10956 
10957     xcb_out.deviceid = deviceid;
10958     memset(xcb_out.pad0, 0, 2);
10959 
10960     xcb_parts[2].iov_base = (char *) &xcb_out;
10961     xcb_parts[2].iov_len = sizeof(xcb_out);
10962     xcb_parts[3].iov_base = 0;
10963     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
10964 
10965     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
10966     return xcb_ret;
10967 }
10968 
10969 int
10970 xcb_input_xi_query_device_infos_length (const xcb_input_xi_query_device_reply_t *R)
10971 {
10972     return R->num_infos;
10973 }
10974 
10975 xcb_input_xi_device_info_iterator_t
10976 xcb_input_xi_query_device_infos_iterator (const xcb_input_xi_query_device_reply_t *R)
10977 {
10978     xcb_input_xi_device_info_iterator_t i;
10979     i.data = (xcb_input_xi_device_info_t *) (R + 1);
10980     i.rem = R->num_infos;
10981     i.index = (char *) i.data - (char *) R;
10982     return i;
10983 }
10984 
10985 xcb_input_xi_query_device_reply_t *
10986 xcb_input_xi_query_device_reply (xcb_connection_t                    *c,
10987                                  xcb_input_xi_query_device_cookie_t   cookie  /**< */,
10988                                  xcb_generic_error_t                **e)
10989 {
10990     return (xcb_input_xi_query_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
10991 }
10992 
10993 xcb_void_cookie_t
10994 xcb_input_xi_set_focus_checked (xcb_connection_t      *c,
10995                                 xcb_window_t           window,
10996                                 xcb_timestamp_t        time,
10997                                 xcb_input_device_id_t  deviceid)
10998 {
10999     static const xcb_protocol_request_t xcb_req = {
11000         .count = 2,
11001         .ext = &xcb_input_id,
11002         .opcode = XCB_INPUT_XI_SET_FOCUS,
11003         .isvoid = 1
11004     };
11005 
11006     struct iovec xcb_parts[4];
11007     xcb_void_cookie_t xcb_ret;
11008     xcb_input_xi_set_focus_request_t xcb_out;
11009 
11010     xcb_out.window = window;
11011     xcb_out.time = time;
11012     xcb_out.deviceid = deviceid;
11013     memset(xcb_out.pad0, 0, 2);
11014 
11015     xcb_parts[2].iov_base = (char *) &xcb_out;
11016     xcb_parts[2].iov_len = sizeof(xcb_out);
11017     xcb_parts[3].iov_base = 0;
11018     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11019 
11020     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11021     return xcb_ret;
11022 }
11023 
11024 xcb_void_cookie_t
11025 xcb_input_xi_set_focus (xcb_connection_t      *c,
11026                         xcb_window_t           window,
11027                         xcb_timestamp_t        time,
11028                         xcb_input_device_id_t  deviceid)
11029 {
11030     static const xcb_protocol_request_t xcb_req = {
11031         .count = 2,
11032         .ext = &xcb_input_id,
11033         .opcode = XCB_INPUT_XI_SET_FOCUS,
11034         .isvoid = 1
11035     };
11036 
11037     struct iovec xcb_parts[4];
11038     xcb_void_cookie_t xcb_ret;
11039     xcb_input_xi_set_focus_request_t xcb_out;
11040 
11041     xcb_out.window = window;
11042     xcb_out.time = time;
11043     xcb_out.deviceid = deviceid;
11044     memset(xcb_out.pad0, 0, 2);
11045 
11046     xcb_parts[2].iov_base = (char *) &xcb_out;
11047     xcb_parts[2].iov_len = sizeof(xcb_out);
11048     xcb_parts[3].iov_base = 0;
11049     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11050 
11051     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11052     return xcb_ret;
11053 }
11054 
11055 xcb_input_xi_get_focus_cookie_t
11056 xcb_input_xi_get_focus (xcb_connection_t      *c,
11057                         xcb_input_device_id_t  deviceid)
11058 {
11059     static const xcb_protocol_request_t xcb_req = {
11060         .count = 2,
11061         .ext = &xcb_input_id,
11062         .opcode = XCB_INPUT_XI_GET_FOCUS,
11063         .isvoid = 0
11064     };
11065 
11066     struct iovec xcb_parts[4];
11067     xcb_input_xi_get_focus_cookie_t xcb_ret;
11068     xcb_input_xi_get_focus_request_t xcb_out;
11069 
11070     xcb_out.deviceid = deviceid;
11071     memset(xcb_out.pad0, 0, 2);
11072 
11073     xcb_parts[2].iov_base = (char *) &xcb_out;
11074     xcb_parts[2].iov_len = sizeof(xcb_out);
11075     xcb_parts[3].iov_base = 0;
11076     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11077 
11078     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11079     return xcb_ret;
11080 }
11081 
11082 xcb_input_xi_get_focus_cookie_t
11083 xcb_input_xi_get_focus_unchecked (xcb_connection_t      *c,
11084                                   xcb_input_device_id_t  deviceid)
11085 {
11086     static const xcb_protocol_request_t xcb_req = {
11087         .count = 2,
11088         .ext = &xcb_input_id,
11089         .opcode = XCB_INPUT_XI_GET_FOCUS,
11090         .isvoid = 0
11091     };
11092 
11093     struct iovec xcb_parts[4];
11094     xcb_input_xi_get_focus_cookie_t xcb_ret;
11095     xcb_input_xi_get_focus_request_t xcb_out;
11096 
11097     xcb_out.deviceid = deviceid;
11098     memset(xcb_out.pad0, 0, 2);
11099 
11100     xcb_parts[2].iov_base = (char *) &xcb_out;
11101     xcb_parts[2].iov_len = sizeof(xcb_out);
11102     xcb_parts[3].iov_base = 0;
11103     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11104 
11105     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11106     return xcb_ret;
11107 }
11108 
11109 xcb_input_xi_get_focus_reply_t *
11110 xcb_input_xi_get_focus_reply (xcb_connection_t                 *c,
11111                               xcb_input_xi_get_focus_cookie_t   cookie  /**< */,
11112                               xcb_generic_error_t             **e)
11113 {
11114     return (xcb_input_xi_get_focus_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
11115 }
11116 
11117 int
11118 xcb_input_xi_grab_device_sizeof (const void  *_buffer)
11119 {
11120     char *xcb_tmp = (char *)_buffer;
11121     const xcb_input_xi_grab_device_request_t *_aux = (xcb_input_xi_grab_device_request_t *)_buffer;
11122     unsigned int xcb_buffer_len = 0;
11123     unsigned int xcb_block_len = 0;
11124     unsigned int xcb_pad = 0;
11125     unsigned int xcb_align_to = 0;
11126 
11127 
11128     xcb_block_len += sizeof(xcb_input_xi_grab_device_request_t);
11129     xcb_tmp += xcb_block_len;
11130     xcb_buffer_len += xcb_block_len;
11131     xcb_block_len = 0;
11132     /* mask */
11133     xcb_block_len += _aux->mask_len * sizeof(uint32_t);
11134     xcb_tmp += xcb_block_len;
11135     xcb_align_to = ALIGNOF(uint32_t);
11136     /* insert padding */
11137     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
11138     xcb_buffer_len += xcb_block_len + xcb_pad;
11139     if (0 != xcb_pad) {
11140         xcb_tmp += xcb_pad;
11141         xcb_pad = 0;
11142     }
11143     xcb_block_len = 0;
11144 
11145     return xcb_buffer_len;
11146 }
11147 
11148 xcb_input_xi_grab_device_cookie_t
11149 xcb_input_xi_grab_device (xcb_connection_t      *c,
11150                           xcb_window_t           window,
11151                           xcb_timestamp_t        time,
11152                           xcb_cursor_t           cursor,
11153                           xcb_input_device_id_t  deviceid,
11154                           uint8_t                mode,
11155                           uint8_t                paired_device_mode,
11156                           uint8_t                owner_events,
11157                           uint16_t               mask_len,
11158                           const uint32_t        *mask)
11159 {
11160     static const xcb_protocol_request_t xcb_req = {
11161         .count = 4,
11162         .ext = &xcb_input_id,
11163         .opcode = XCB_INPUT_XI_GRAB_DEVICE,
11164         .isvoid = 0
11165     };
11166 
11167     struct iovec xcb_parts[6];
11168     xcb_input_xi_grab_device_cookie_t xcb_ret;
11169     xcb_input_xi_grab_device_request_t xcb_out;
11170 
11171     xcb_out.window = window;
11172     xcb_out.time = time;
11173     xcb_out.cursor = cursor;
11174     xcb_out.deviceid = deviceid;
11175     xcb_out.mode = mode;
11176     xcb_out.paired_device_mode = paired_device_mode;
11177     xcb_out.owner_events = owner_events;
11178     xcb_out.pad0 = 0;
11179     xcb_out.mask_len = mask_len;
11180 
11181     xcb_parts[2].iov_base = (char *) &xcb_out;
11182     xcb_parts[2].iov_len = sizeof(xcb_out);
11183     xcb_parts[3].iov_base = 0;
11184     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11185     /* uint32_t mask */
11186     xcb_parts[4].iov_base = (char *) mask;
11187     xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
11188     xcb_parts[5].iov_base = 0;
11189     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
11190 
11191     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11192     return xcb_ret;
11193 }
11194 
11195 xcb_input_xi_grab_device_cookie_t
11196 xcb_input_xi_grab_device_unchecked (xcb_connection_t      *c,
11197                                     xcb_window_t           window,
11198                                     xcb_timestamp_t        time,
11199                                     xcb_cursor_t           cursor,
11200                                     xcb_input_device_id_t  deviceid,
11201                                     uint8_t                mode,
11202                                     uint8_t                paired_device_mode,
11203                                     uint8_t                owner_events,
11204                                     uint16_t               mask_len,
11205                                     const uint32_t        *mask)
11206 {
11207     static const xcb_protocol_request_t xcb_req = {
11208         .count = 4,
11209         .ext = &xcb_input_id,
11210         .opcode = XCB_INPUT_XI_GRAB_DEVICE,
11211         .isvoid = 0
11212     };
11213 
11214     struct iovec xcb_parts[6];
11215     xcb_input_xi_grab_device_cookie_t xcb_ret;
11216     xcb_input_xi_grab_device_request_t xcb_out;
11217 
11218     xcb_out.window = window;
11219     xcb_out.time = time;
11220     xcb_out.cursor = cursor;
11221     xcb_out.deviceid = deviceid;
11222     xcb_out.mode = mode;
11223     xcb_out.paired_device_mode = paired_device_mode;
11224     xcb_out.owner_events = owner_events;
11225     xcb_out.pad0 = 0;
11226     xcb_out.mask_len = mask_len;
11227 
11228     xcb_parts[2].iov_base = (char *) &xcb_out;
11229     xcb_parts[2].iov_len = sizeof(xcb_out);
11230     xcb_parts[3].iov_base = 0;
11231     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11232     /* uint32_t mask */
11233     xcb_parts[4].iov_base = (char *) mask;
11234     xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
11235     xcb_parts[5].iov_base = 0;
11236     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
11237 
11238     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11239     return xcb_ret;
11240 }
11241 
11242 xcb_input_xi_grab_device_reply_t *
11243 xcb_input_xi_grab_device_reply (xcb_connection_t                   *c,
11244                                 xcb_input_xi_grab_device_cookie_t   cookie  /**< */,
11245                                 xcb_generic_error_t               **e)
11246 {
11247     return (xcb_input_xi_grab_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
11248 }
11249 
11250 xcb_void_cookie_t
11251 xcb_input_xi_ungrab_device_checked (xcb_connection_t      *c,
11252                                     xcb_timestamp_t        time,
11253                                     xcb_input_device_id_t  deviceid)
11254 {
11255     static const xcb_protocol_request_t xcb_req = {
11256         .count = 2,
11257         .ext = &xcb_input_id,
11258         .opcode = XCB_INPUT_XI_UNGRAB_DEVICE,
11259         .isvoid = 1
11260     };
11261 
11262     struct iovec xcb_parts[4];
11263     xcb_void_cookie_t xcb_ret;
11264     xcb_input_xi_ungrab_device_request_t xcb_out;
11265 
11266     xcb_out.time = time;
11267     xcb_out.deviceid = deviceid;
11268     memset(xcb_out.pad0, 0, 2);
11269 
11270     xcb_parts[2].iov_base = (char *) &xcb_out;
11271     xcb_parts[2].iov_len = sizeof(xcb_out);
11272     xcb_parts[3].iov_base = 0;
11273     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11274 
11275     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11276     return xcb_ret;
11277 }
11278 
11279 xcb_void_cookie_t
11280 xcb_input_xi_ungrab_device (xcb_connection_t      *c,
11281                             xcb_timestamp_t        time,
11282                             xcb_input_device_id_t  deviceid)
11283 {
11284     static const xcb_protocol_request_t xcb_req = {
11285         .count = 2,
11286         .ext = &xcb_input_id,
11287         .opcode = XCB_INPUT_XI_UNGRAB_DEVICE,
11288         .isvoid = 1
11289     };
11290 
11291     struct iovec xcb_parts[4];
11292     xcb_void_cookie_t xcb_ret;
11293     xcb_input_xi_ungrab_device_request_t xcb_out;
11294 
11295     xcb_out.time = time;
11296     xcb_out.deviceid = deviceid;
11297     memset(xcb_out.pad0, 0, 2);
11298 
11299     xcb_parts[2].iov_base = (char *) &xcb_out;
11300     xcb_parts[2].iov_len = sizeof(xcb_out);
11301     xcb_parts[3].iov_base = 0;
11302     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11303 
11304     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11305     return xcb_ret;
11306 }
11307 
11308 xcb_void_cookie_t
11309 xcb_input_xi_allow_events_checked (xcb_connection_t      *c,
11310                                    xcb_timestamp_t        time,
11311                                    xcb_input_device_id_t  deviceid,
11312                                    uint8_t                event_mode,
11313                                    uint32_t               touchid,
11314                                    xcb_window_t           grab_window)
11315 {
11316     static const xcb_protocol_request_t xcb_req = {
11317         .count = 2,
11318         .ext = &xcb_input_id,
11319         .opcode = XCB_INPUT_XI_ALLOW_EVENTS,
11320         .isvoid = 1
11321     };
11322 
11323     struct iovec xcb_parts[4];
11324     xcb_void_cookie_t xcb_ret;
11325     xcb_input_xi_allow_events_request_t xcb_out;
11326 
11327     xcb_out.time = time;
11328     xcb_out.deviceid = deviceid;
11329     xcb_out.event_mode = event_mode;
11330     xcb_out.pad0 = 0;
11331     xcb_out.touchid = touchid;
11332     xcb_out.grab_window = grab_window;
11333 
11334     xcb_parts[2].iov_base = (char *) &xcb_out;
11335     xcb_parts[2].iov_len = sizeof(xcb_out);
11336     xcb_parts[3].iov_base = 0;
11337     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11338 
11339     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11340     return xcb_ret;
11341 }
11342 
11343 xcb_void_cookie_t
11344 xcb_input_xi_allow_events (xcb_connection_t      *c,
11345                            xcb_timestamp_t        time,
11346                            xcb_input_device_id_t  deviceid,
11347                            uint8_t                event_mode,
11348                            uint32_t               touchid,
11349                            xcb_window_t           grab_window)
11350 {
11351     static const xcb_protocol_request_t xcb_req = {
11352         .count = 2,
11353         .ext = &xcb_input_id,
11354         .opcode = XCB_INPUT_XI_ALLOW_EVENTS,
11355         .isvoid = 1
11356     };
11357 
11358     struct iovec xcb_parts[4];
11359     xcb_void_cookie_t xcb_ret;
11360     xcb_input_xi_allow_events_request_t xcb_out;
11361 
11362     xcb_out.time = time;
11363     xcb_out.deviceid = deviceid;
11364     xcb_out.event_mode = event_mode;
11365     xcb_out.pad0 = 0;
11366     xcb_out.touchid = touchid;
11367     xcb_out.grab_window = grab_window;
11368 
11369     xcb_parts[2].iov_base = (char *) &xcb_out;
11370     xcb_parts[2].iov_len = sizeof(xcb_out);
11371     xcb_parts[3].iov_base = 0;
11372     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11373 
11374     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11375     return xcb_ret;
11376 }
11377 
11378 void
11379 xcb_input_grab_modifier_info_next (xcb_input_grab_modifier_info_iterator_t *i)
11380 {
11381     --i->rem;
11382     ++i->data;
11383     i->index += sizeof(xcb_input_grab_modifier_info_t);
11384 }
11385 
11386 xcb_generic_iterator_t
11387 xcb_input_grab_modifier_info_end (xcb_input_grab_modifier_info_iterator_t i)
11388 {
11389     xcb_generic_iterator_t ret;
11390     ret.data = i.data + i.rem;
11391     ret.index = i.index + ((char *) ret.data - (char *) i.data);
11392     ret.rem = 0;
11393     return ret;
11394 }
11395 
11396 int
11397 xcb_input_xi_passive_grab_device_sizeof (const void  *_buffer)
11398 {
11399     char *xcb_tmp = (char *)_buffer;
11400     const xcb_input_xi_passive_grab_device_request_t *_aux = (xcb_input_xi_passive_grab_device_request_t *)_buffer;
11401     unsigned int xcb_buffer_len = 0;
11402     unsigned int xcb_block_len = 0;
11403     unsigned int xcb_pad = 0;
11404     unsigned int xcb_align_to = 0;
11405 
11406 
11407     xcb_block_len += sizeof(xcb_input_xi_passive_grab_device_request_t);
11408     xcb_tmp += xcb_block_len;
11409     xcb_buffer_len += xcb_block_len;
11410     xcb_block_len = 0;
11411     /* mask */
11412     xcb_block_len += _aux->mask_len * sizeof(uint32_t);
11413     xcb_tmp += xcb_block_len;
11414     xcb_align_to = ALIGNOF(uint32_t);
11415     /* insert padding */
11416     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
11417     xcb_buffer_len += xcb_block_len + xcb_pad;
11418     if (0 != xcb_pad) {
11419         xcb_tmp += xcb_pad;
11420         xcb_pad = 0;
11421     }
11422     xcb_block_len = 0;
11423     /* modifiers */
11424     xcb_block_len += _aux->num_modifiers * sizeof(uint32_t);
11425     xcb_tmp += xcb_block_len;
11426     xcb_align_to = ALIGNOF(uint32_t);
11427     /* insert padding */
11428     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
11429     xcb_buffer_len += xcb_block_len + xcb_pad;
11430     if (0 != xcb_pad) {
11431         xcb_tmp += xcb_pad;
11432         xcb_pad = 0;
11433     }
11434     xcb_block_len = 0;
11435 
11436     return xcb_buffer_len;
11437 }
11438 
11439 xcb_input_xi_passive_grab_device_cookie_t
11440 xcb_input_xi_passive_grab_device (xcb_connection_t      *c,
11441                                   xcb_timestamp_t        time,
11442                                   xcb_window_t           grab_window,
11443                                   xcb_cursor_t           cursor,
11444                                   uint32_t               detail,
11445                                   xcb_input_device_id_t  deviceid,
11446                                   uint16_t               num_modifiers,
11447                                   uint16_t               mask_len,
11448                                   uint8_t                grab_type,
11449                                   uint8_t                grab_mode,
11450                                   uint8_t                paired_device_mode,
11451                                   uint8_t                owner_events,
11452                                   const uint32_t        *mask,
11453                                   const uint32_t        *modifiers)
11454 {
11455     static const xcb_protocol_request_t xcb_req = {
11456         .count = 6,
11457         .ext = &xcb_input_id,
11458         .opcode = XCB_INPUT_XI_PASSIVE_GRAB_DEVICE,
11459         .isvoid = 0
11460     };
11461 
11462     struct iovec xcb_parts[8];
11463     xcb_input_xi_passive_grab_device_cookie_t xcb_ret;
11464     xcb_input_xi_passive_grab_device_request_t xcb_out;
11465 
11466     xcb_out.time = time;
11467     xcb_out.grab_window = grab_window;
11468     xcb_out.cursor = cursor;
11469     xcb_out.detail = detail;
11470     xcb_out.deviceid = deviceid;
11471     xcb_out.num_modifiers = num_modifiers;
11472     xcb_out.mask_len = mask_len;
11473     xcb_out.grab_type = grab_type;
11474     xcb_out.grab_mode = grab_mode;
11475     xcb_out.paired_device_mode = paired_device_mode;
11476     xcb_out.owner_events = owner_events;
11477     memset(xcb_out.pad0, 0, 2);
11478 
11479     xcb_parts[2].iov_base = (char *) &xcb_out;
11480     xcb_parts[2].iov_len = sizeof(xcb_out);
11481     xcb_parts[3].iov_base = 0;
11482     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11483     /* uint32_t mask */
11484     xcb_parts[4].iov_base = (char *) mask;
11485     xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
11486     xcb_parts[5].iov_base = 0;
11487     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
11488     /* uint32_t modifiers */
11489     xcb_parts[6].iov_base = (char *) modifiers;
11490     xcb_parts[6].iov_len = num_modifiers * sizeof(uint32_t);
11491     xcb_parts[7].iov_base = 0;
11492     xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;
11493 
11494     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11495     return xcb_ret;
11496 }
11497 
11498 xcb_input_xi_passive_grab_device_cookie_t
11499 xcb_input_xi_passive_grab_device_unchecked (xcb_connection_t      *c,
11500                                             xcb_timestamp_t        time,
11501                                             xcb_window_t           grab_window,
11502                                             xcb_cursor_t           cursor,
11503                                             uint32_t               detail,
11504                                             xcb_input_device_id_t  deviceid,
11505                                             uint16_t               num_modifiers,
11506                                             uint16_t               mask_len,
11507                                             uint8_t                grab_type,
11508                                             uint8_t                grab_mode,
11509                                             uint8_t                paired_device_mode,
11510                                             uint8_t                owner_events,
11511                                             const uint32_t        *mask,
11512                                             const uint32_t        *modifiers)
11513 {
11514     static const xcb_protocol_request_t xcb_req = {
11515         .count = 6,
11516         .ext = &xcb_input_id,
11517         .opcode = XCB_INPUT_XI_PASSIVE_GRAB_DEVICE,
11518         .isvoid = 0
11519     };
11520 
11521     struct iovec xcb_parts[8];
11522     xcb_input_xi_passive_grab_device_cookie_t xcb_ret;
11523     xcb_input_xi_passive_grab_device_request_t xcb_out;
11524 
11525     xcb_out.time = time;
11526     xcb_out.grab_window = grab_window;
11527     xcb_out.cursor = cursor;
11528     xcb_out.detail = detail;
11529     xcb_out.deviceid = deviceid;
11530     xcb_out.num_modifiers = num_modifiers;
11531     xcb_out.mask_len = mask_len;
11532     xcb_out.grab_type = grab_type;
11533     xcb_out.grab_mode = grab_mode;
11534     xcb_out.paired_device_mode = paired_device_mode;
11535     xcb_out.owner_events = owner_events;
11536     memset(xcb_out.pad0, 0, 2);
11537 
11538     xcb_parts[2].iov_base = (char *) &xcb_out;
11539     xcb_parts[2].iov_len = sizeof(xcb_out);
11540     xcb_parts[3].iov_base = 0;
11541     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11542     /* uint32_t mask */
11543     xcb_parts[4].iov_base = (char *) mask;
11544     xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
11545     xcb_parts[5].iov_base = 0;
11546     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
11547     /* uint32_t modifiers */
11548     xcb_parts[6].iov_base = (char *) modifiers;
11549     xcb_parts[6].iov_len = num_modifiers * sizeof(uint32_t);
11550     xcb_parts[7].iov_base = 0;
11551     xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;
11552 
11553     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11554     return xcb_ret;
11555 }
11556 
11557 xcb_input_grab_modifier_info_t *
11558 xcb_input_xi_passive_grab_device_modifiers (const xcb_input_xi_passive_grab_device_reply_t *R)
11559 {
11560     return (xcb_input_grab_modifier_info_t *) (R + 1);
11561 }
11562 
11563 int
11564 xcb_input_xi_passive_grab_device_modifiers_length (const xcb_input_xi_passive_grab_device_reply_t *R)
11565 {
11566     return R->num_modifiers;
11567 }
11568 
11569 xcb_input_grab_modifier_info_iterator_t
11570 xcb_input_xi_passive_grab_device_modifiers_iterator (const xcb_input_xi_passive_grab_device_reply_t *R)
11571 {
11572     xcb_input_grab_modifier_info_iterator_t i;
11573     i.data = (xcb_input_grab_modifier_info_t *) (R + 1);
11574     i.rem = R->num_modifiers;
11575     i.index = (char *) i.data - (char *) R;
11576     return i;
11577 }
11578 
11579 xcb_input_xi_passive_grab_device_reply_t *
11580 xcb_input_xi_passive_grab_device_reply (xcb_connection_t                           *c,
11581                                         xcb_input_xi_passive_grab_device_cookie_t   cookie  /**< */,
11582                                         xcb_generic_error_t                       **e)
11583 {
11584     return (xcb_input_xi_passive_grab_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
11585 }
11586 
11587 int
11588 xcb_input_xi_passive_ungrab_device_sizeof (const void  *_buffer)
11589 {
11590     char *xcb_tmp = (char *)_buffer;
11591     const xcb_input_xi_passive_ungrab_device_request_t *_aux = (xcb_input_xi_passive_ungrab_device_request_t *)_buffer;
11592     unsigned int xcb_buffer_len = 0;
11593     unsigned int xcb_block_len = 0;
11594     unsigned int xcb_pad = 0;
11595     unsigned int xcb_align_to = 0;
11596 
11597 
11598     xcb_block_len += sizeof(xcb_input_xi_passive_ungrab_device_request_t);
11599     xcb_tmp += xcb_block_len;
11600     xcb_buffer_len += xcb_block_len;
11601     xcb_block_len = 0;
11602     /* modifiers */
11603     xcb_block_len += _aux->num_modifiers * sizeof(uint32_t);
11604     xcb_tmp += xcb_block_len;
11605     xcb_align_to = ALIGNOF(uint32_t);
11606     /* insert padding */
11607     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
11608     xcb_buffer_len += xcb_block_len + xcb_pad;
11609     if (0 != xcb_pad) {
11610         xcb_tmp += xcb_pad;
11611         xcb_pad = 0;
11612     }
11613     xcb_block_len = 0;
11614 
11615     return xcb_buffer_len;
11616 }
11617 
11618 xcb_void_cookie_t
11619 xcb_input_xi_passive_ungrab_device_checked (xcb_connection_t      *c,
11620                                             xcb_window_t           grab_window,
11621                                             uint32_t               detail,
11622                                             xcb_input_device_id_t  deviceid,
11623                                             uint16_t               num_modifiers,
11624                                             uint8_t                grab_type,
11625                                             const uint32_t        *modifiers)
11626 {
11627     static const xcb_protocol_request_t xcb_req = {
11628         .count = 4,
11629         .ext = &xcb_input_id,
11630         .opcode = XCB_INPUT_XI_PASSIVE_UNGRAB_DEVICE,
11631         .isvoid = 1
11632     };
11633 
11634     struct iovec xcb_parts[6];
11635     xcb_void_cookie_t xcb_ret;
11636     xcb_input_xi_passive_ungrab_device_request_t xcb_out;
11637 
11638     xcb_out.grab_window = grab_window;
11639     xcb_out.detail = detail;
11640     xcb_out.deviceid = deviceid;
11641     xcb_out.num_modifiers = num_modifiers;
11642     xcb_out.grab_type = grab_type;
11643     memset(xcb_out.pad0, 0, 3);
11644 
11645     xcb_parts[2].iov_base = (char *) &xcb_out;
11646     xcb_parts[2].iov_len = sizeof(xcb_out);
11647     xcb_parts[3].iov_base = 0;
11648     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11649     /* uint32_t modifiers */
11650     xcb_parts[4].iov_base = (char *) modifiers;
11651     xcb_parts[4].iov_len = num_modifiers * sizeof(uint32_t);
11652     xcb_parts[5].iov_base = 0;
11653     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
11654 
11655     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11656     return xcb_ret;
11657 }
11658 
11659 xcb_void_cookie_t
11660 xcb_input_xi_passive_ungrab_device (xcb_connection_t      *c,
11661                                     xcb_window_t           grab_window,
11662                                     uint32_t               detail,
11663                                     xcb_input_device_id_t  deviceid,
11664                                     uint16_t               num_modifiers,
11665                                     uint8_t                grab_type,
11666                                     const uint32_t        *modifiers)
11667 {
11668     static const xcb_protocol_request_t xcb_req = {
11669         .count = 4,
11670         .ext = &xcb_input_id,
11671         .opcode = XCB_INPUT_XI_PASSIVE_UNGRAB_DEVICE,
11672         .isvoid = 1
11673     };
11674 
11675     struct iovec xcb_parts[6];
11676     xcb_void_cookie_t xcb_ret;
11677     xcb_input_xi_passive_ungrab_device_request_t xcb_out;
11678 
11679     xcb_out.grab_window = grab_window;
11680     xcb_out.detail = detail;
11681     xcb_out.deviceid = deviceid;
11682     xcb_out.num_modifiers = num_modifiers;
11683     xcb_out.grab_type = grab_type;
11684     memset(xcb_out.pad0, 0, 3);
11685 
11686     xcb_parts[2].iov_base = (char *) &xcb_out;
11687     xcb_parts[2].iov_len = sizeof(xcb_out);
11688     xcb_parts[3].iov_base = 0;
11689     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11690     /* uint32_t modifiers */
11691     xcb_parts[4].iov_base = (char *) modifiers;
11692     xcb_parts[4].iov_len = num_modifiers * sizeof(uint32_t);
11693     xcb_parts[5].iov_base = 0;
11694     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
11695 
11696     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11697     return xcb_ret;
11698 }
11699 
11700 uint32_t *
11701 xcb_input_xi_passive_ungrab_device_modifiers (const xcb_input_xi_passive_ungrab_device_request_t *R)
11702 {
11703     return (uint32_t *) (R + 1);
11704 }
11705 
11706 int
11707 xcb_input_xi_passive_ungrab_device_modifiers_length (const xcb_input_xi_passive_ungrab_device_request_t *R)
11708 {
11709     return R->num_modifiers;
11710 }
11711 
11712 xcb_generic_iterator_t
11713 xcb_input_xi_passive_ungrab_device_modifiers_end (const xcb_input_xi_passive_ungrab_device_request_t *R)
11714 {
11715     xcb_generic_iterator_t i;
11716     i.data = ((uint32_t *) (R + 1)) + (R->num_modifiers);
11717     i.rem = 0;
11718     i.index = (char *) i.data - (char *) R;
11719     return i;
11720 }
11721 
11722 int
11723 xcb_input_xi_list_properties_sizeof (const void  *_buffer)
11724 {
11725     char *xcb_tmp = (char *)_buffer;
11726     const xcb_input_xi_list_properties_reply_t *_aux = (xcb_input_xi_list_properties_reply_t *)_buffer;
11727     unsigned int xcb_buffer_len = 0;
11728     unsigned int xcb_block_len = 0;
11729     unsigned int xcb_pad = 0;
11730     unsigned int xcb_align_to = 0;
11731 
11732 
11733     xcb_block_len += sizeof(xcb_input_xi_list_properties_reply_t);
11734     xcb_tmp += xcb_block_len;
11735     xcb_buffer_len += xcb_block_len;
11736     xcb_block_len = 0;
11737     /* properties */
11738     xcb_block_len += _aux->num_properties * sizeof(xcb_atom_t);
11739     xcb_tmp += xcb_block_len;
11740     xcb_align_to = ALIGNOF(xcb_atom_t);
11741     /* insert padding */
11742     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
11743     xcb_buffer_len += xcb_block_len + xcb_pad;
11744     if (0 != xcb_pad) {
11745         xcb_tmp += xcb_pad;
11746         xcb_pad = 0;
11747     }
11748     xcb_block_len = 0;
11749 
11750     return xcb_buffer_len;
11751 }
11752 
11753 xcb_input_xi_list_properties_cookie_t
11754 xcb_input_xi_list_properties (xcb_connection_t      *c,
11755                               xcb_input_device_id_t  deviceid)
11756 {
11757     static const xcb_protocol_request_t xcb_req = {
11758         .count = 2,
11759         .ext = &xcb_input_id,
11760         .opcode = XCB_INPUT_XI_LIST_PROPERTIES,
11761         .isvoid = 0
11762     };
11763 
11764     struct iovec xcb_parts[4];
11765     xcb_input_xi_list_properties_cookie_t xcb_ret;
11766     xcb_input_xi_list_properties_request_t xcb_out;
11767 
11768     xcb_out.deviceid = deviceid;
11769     memset(xcb_out.pad0, 0, 2);
11770 
11771     xcb_parts[2].iov_base = (char *) &xcb_out;
11772     xcb_parts[2].iov_len = sizeof(xcb_out);
11773     xcb_parts[3].iov_base = 0;
11774     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11775 
11776     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
11777     return xcb_ret;
11778 }
11779 
11780 xcb_input_xi_list_properties_cookie_t
11781 xcb_input_xi_list_properties_unchecked (xcb_connection_t      *c,
11782                                         xcb_input_device_id_t  deviceid)
11783 {
11784     static const xcb_protocol_request_t xcb_req = {
11785         .count = 2,
11786         .ext = &xcb_input_id,
11787         .opcode = XCB_INPUT_XI_LIST_PROPERTIES,
11788         .isvoid = 0
11789     };
11790 
11791     struct iovec xcb_parts[4];
11792     xcb_input_xi_list_properties_cookie_t xcb_ret;
11793     xcb_input_xi_list_properties_request_t xcb_out;
11794 
11795     xcb_out.deviceid = deviceid;
11796     memset(xcb_out.pad0, 0, 2);
11797 
11798     xcb_parts[2].iov_base = (char *) &xcb_out;
11799     xcb_parts[2].iov_len = sizeof(xcb_out);
11800     xcb_parts[3].iov_base = 0;
11801     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
11802 
11803     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
11804     return xcb_ret;
11805 }
11806 
11807 xcb_atom_t *
11808 xcb_input_xi_list_properties_properties (const xcb_input_xi_list_properties_reply_t *R)
11809 {
11810     return (xcb_atom_t *) (R + 1);
11811 }
11812 
11813 int
11814 xcb_input_xi_list_properties_properties_length (const xcb_input_xi_list_properties_reply_t *R)
11815 {
11816     return R->num_properties;
11817 }
11818 
11819 xcb_generic_iterator_t
11820 xcb_input_xi_list_properties_properties_end (const xcb_input_xi_list_properties_reply_t *R)
11821 {
11822     xcb_generic_iterator_t i;
11823     i.data = ((xcb_atom_t *) (R + 1)) + (R->num_properties);
11824     i.rem = 0;
11825     i.index = (char *) i.data - (char *) R;
11826     return i;
11827 }
11828 
11829 xcb_input_xi_list_properties_reply_t *
11830 xcb_input_xi_list_properties_reply (xcb_connection_t                       *c,
11831                                     xcb_input_xi_list_properties_cookie_t   cookie  /**< */,
11832                                     xcb_generic_error_t                   **e)
11833 {
11834     return (xcb_input_xi_list_properties_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
11835 }
11836 
11837 uint8_t *
11838 xcb_input_xi_change_property_items_data_8 (const xcb_input_xi_change_property_items_t *S)
11839 {
11840     return S->data8;
11841 }
11842 
11843 int
11844 xcb_input_xi_change_property_items_data_8_length (const xcb_input_xi_change_property_request_t *R,
11845                                                   const xcb_input_xi_change_property_items_t *S)
11846 {
11847     return R->num_items;
11848 }
11849 
11850 xcb_generic_iterator_t
11851 xcb_input_xi_change_property_items_data_8_end (const xcb_input_xi_change_property_request_t *R,
11852                                                const xcb_input_xi_change_property_items_t *S)
11853 {
11854     xcb_generic_iterator_t i;
11855     i.data = S->data8 + R->num_items;
11856     i.rem = 0;
11857     i.index = (char *) i.data - (char *) S;
11858     return i;
11859 }
11860 
11861 uint16_t *
11862 xcb_input_xi_change_property_items_data_16 (const xcb_input_xi_change_property_items_t *S)
11863 {
11864     return S->data16;
11865 }
11866 
11867 int
11868 xcb_input_xi_change_property_items_data_16_length (const xcb_input_xi_change_property_request_t *R,
11869                                                    const xcb_input_xi_change_property_items_t *S)
11870 {
11871     return R->num_items;
11872 }
11873 
11874 xcb_generic_iterator_t
11875 xcb_input_xi_change_property_items_data_16_end (const xcb_input_xi_change_property_request_t *R,
11876                                                 const xcb_input_xi_change_property_items_t *S)
11877 {
11878     xcb_generic_iterator_t i;
11879     i.data = S->data16 + R->num_items;
11880     i.rem = 0;
11881     i.index = (char *) i.data - (char *) S;
11882     return i;
11883 }
11884 
11885 uint32_t *
11886 xcb_input_xi_change_property_items_data_32 (const xcb_input_xi_change_property_items_t *S)
11887 {
11888     return S->data32;
11889 }
11890 
11891 int
11892 xcb_input_xi_change_property_items_data_32_length (const xcb_input_xi_change_property_request_t *R,
11893                                                    const xcb_input_xi_change_property_items_t *S)
11894 {
11895     return R->num_items;
11896 }
11897 
11898 xcb_generic_iterator_t
11899 xcb_input_xi_change_property_items_data_32_end (const xcb_input_xi_change_property_request_t *R,
11900                                                 const xcb_input_xi_change_property_items_t *S)
11901 {
11902     xcb_generic_iterator_t i;
11903     i.data = S->data32 + R->num_items;
11904     i.rem = 0;
11905     i.index = (char *) i.data - (char *) S;
11906     return i;
11907 }
11908 
11909 int
11910 xcb_input_xi_change_property_items_serialize (void                                       **_buffer,
11911                                               uint32_t                                     num_items,
11912                                               uint8_t                                      format,
11913                                               const xcb_input_xi_change_property_items_t  *_aux)
11914 {
11915     char *xcb_out = *_buffer;
11916     unsigned int xcb_buffer_len = 0;
11917     unsigned int xcb_align_to = 0;
11918     unsigned int xcb_padding_offset = 0;
11919 
11920     unsigned int xcb_pad = 0;
11921     char xcb_pad0[3] = {0, 0, 0};
11922     struct iovec xcb_parts[9];
11923     unsigned int xcb_parts_idx = 0;
11924     unsigned int xcb_block_len = 0;
11925     unsigned int i;
11926     char *xcb_tmp;
11927 
11928     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
11929         /* insert padding */
11930         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
11931         xcb_buffer_len += xcb_block_len + xcb_pad;
11932         if (0 != xcb_pad) {
11933             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
11934             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
11935             xcb_parts_idx++;
11936             xcb_pad = 0;
11937         }
11938         xcb_block_len = 0;
11939         xcb_padding_offset = 0;
11940         /* data8 */
11941         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
11942         xcb_block_len += num_items * sizeof(uint8_t);
11943         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
11944         xcb_parts_idx++;
11945         xcb_align_to = ALIGNOF(uint8_t);
11946         xcb_align_to = 4;
11947         /* insert padding */
11948         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
11949         xcb_buffer_len += xcb_block_len + xcb_pad;
11950         if (0 != xcb_pad) {
11951             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
11952             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
11953             xcb_parts_idx++;
11954             xcb_pad = 0;
11955         }
11956         xcb_block_len = 0;
11957         xcb_padding_offset = 0;
11958     }
11959     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
11960         /* insert padding */
11961         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
11962         xcb_buffer_len += xcb_block_len + xcb_pad;
11963         if (0 != xcb_pad) {
11964             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
11965             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
11966             xcb_parts_idx++;
11967             xcb_pad = 0;
11968         }
11969         xcb_block_len = 0;
11970         xcb_padding_offset = 0;
11971         /* data16 */
11972         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
11973         xcb_block_len += num_items * sizeof(uint16_t);
11974         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
11975         xcb_parts_idx++;
11976         xcb_align_to = ALIGNOF(uint16_t);
11977         xcb_align_to = 4;
11978         /* insert padding */
11979         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
11980         xcb_buffer_len += xcb_block_len + xcb_pad;
11981         if (0 != xcb_pad) {
11982             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
11983             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
11984             xcb_parts_idx++;
11985             xcb_pad = 0;
11986         }
11987         xcb_block_len = 0;
11988         xcb_padding_offset = 0;
11989     }
11990     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
11991         /* insert padding */
11992         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
11993         xcb_buffer_len += xcb_block_len + xcb_pad;
11994         if (0 != xcb_pad) {
11995             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
11996             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
11997             xcb_parts_idx++;
11998             xcb_pad = 0;
11999         }
12000         xcb_block_len = 0;
12001         xcb_padding_offset = 0;
12002         /* data32 */
12003         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
12004         xcb_block_len += num_items * sizeof(uint32_t);
12005         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
12006         xcb_parts_idx++;
12007         xcb_align_to = ALIGNOF(uint32_t);
12008     }
12009     /* insert padding */
12010     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12011     xcb_buffer_len += xcb_block_len + xcb_pad;
12012     if (0 != xcb_pad) {
12013         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12014         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12015         xcb_parts_idx++;
12016         xcb_pad = 0;
12017     }
12018     xcb_block_len = 0;
12019     xcb_padding_offset = 0;
12020 
12021     if (NULL == xcb_out) {
12022         /* allocate memory */
12023         xcb_out = malloc(xcb_buffer_len);
12024         *_buffer = xcb_out;
12025     }
12026 
12027     xcb_tmp = xcb_out;
12028     for(i=0; i<xcb_parts_idx; i++) {
12029         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
12030             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
12031         if (0 != xcb_parts[i].iov_len)
12032             xcb_tmp += xcb_parts[i].iov_len;
12033     }
12034 
12035     return xcb_buffer_len;
12036 }
12037 
12038 int
12039 xcb_input_xi_change_property_items_unpack (const void                            *_buffer,
12040                                            uint32_t                               num_items,
12041                                            uint8_t                                format,
12042                                            xcb_input_xi_change_property_items_t  *_aux)
12043 {
12044     char *xcb_tmp = (char *)_buffer;
12045     unsigned int xcb_buffer_len = 0;
12046     unsigned int xcb_block_len = 0;
12047     unsigned int xcb_pad = 0;
12048     unsigned int xcb_align_to = 0;
12049     unsigned int xcb_padding_offset = 0;
12050 
12051 
12052     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
12053         /* insert padding */
12054         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12055         xcb_buffer_len += xcb_block_len + xcb_pad;
12056         if (0 != xcb_pad) {
12057             xcb_tmp += xcb_pad;
12058             xcb_pad = 0;
12059         }
12060         xcb_block_len = 0;
12061         xcb_padding_offset = 0;
12062         /* data8 */
12063         _aux->data8 = (uint8_t *)xcb_tmp;
12064         xcb_block_len += num_items * sizeof(uint8_t);
12065         xcb_tmp += xcb_block_len;
12066         xcb_align_to = ALIGNOF(uint8_t);
12067         xcb_align_to = 4;
12068         /* insert padding */
12069         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12070         xcb_buffer_len += xcb_block_len + xcb_pad;
12071         if (0 != xcb_pad) {
12072             xcb_tmp += xcb_pad;
12073             xcb_pad = 0;
12074         }
12075         xcb_block_len = 0;
12076         xcb_padding_offset = 0;
12077     }
12078     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
12079         /* insert padding */
12080         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12081         xcb_buffer_len += xcb_block_len + xcb_pad;
12082         if (0 != xcb_pad) {
12083             xcb_tmp += xcb_pad;
12084             xcb_pad = 0;
12085         }
12086         xcb_block_len = 0;
12087         xcb_padding_offset = 0;
12088         /* data16 */
12089         _aux->data16 = (uint16_t *)xcb_tmp;
12090         xcb_block_len += num_items * sizeof(uint16_t);
12091         xcb_tmp += xcb_block_len;
12092         xcb_align_to = ALIGNOF(uint16_t);
12093         xcb_align_to = 4;
12094         /* insert padding */
12095         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12096         xcb_buffer_len += xcb_block_len + xcb_pad;
12097         if (0 != xcb_pad) {
12098             xcb_tmp += xcb_pad;
12099             xcb_pad = 0;
12100         }
12101         xcb_block_len = 0;
12102         xcb_padding_offset = 0;
12103     }
12104     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
12105         /* insert padding */
12106         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12107         xcb_buffer_len += xcb_block_len + xcb_pad;
12108         if (0 != xcb_pad) {
12109             xcb_tmp += xcb_pad;
12110             xcb_pad = 0;
12111         }
12112         xcb_block_len = 0;
12113         xcb_padding_offset = 0;
12114         /* data32 */
12115         _aux->data32 = (uint32_t *)xcb_tmp;
12116         xcb_block_len += num_items * sizeof(uint32_t);
12117         xcb_tmp += xcb_block_len;
12118         xcb_align_to = ALIGNOF(uint32_t);
12119     }
12120     /* insert padding */
12121     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12122     xcb_buffer_len += xcb_block_len + xcb_pad;
12123     if (0 != xcb_pad) {
12124         xcb_tmp += xcb_pad;
12125         xcb_pad = 0;
12126     }
12127     xcb_block_len = 0;
12128     xcb_padding_offset = 0;
12129 
12130     return xcb_buffer_len;
12131 }
12132 
12133 int
12134 xcb_input_xi_change_property_items_sizeof (const void  *_buffer,
12135                                            uint32_t     num_items,
12136                                            uint8_t      format)
12137 {
12138     xcb_input_xi_change_property_items_t _aux;
12139     return xcb_input_xi_change_property_items_unpack(_buffer, num_items, format, &_aux);
12140 }
12141 
12142 int
12143 xcb_input_xi_change_property_sizeof (const void  *_buffer)
12144 {
12145     char *xcb_tmp = (char *)_buffer;
12146     const xcb_input_xi_change_property_request_t *_aux = (xcb_input_xi_change_property_request_t *)_buffer;
12147     unsigned int xcb_buffer_len = 0;
12148     unsigned int xcb_block_len = 0;
12149     unsigned int xcb_pad = 0;
12150     unsigned int xcb_align_to = 0;
12151 
12152 
12153     xcb_block_len += sizeof(xcb_input_xi_change_property_request_t);
12154     xcb_tmp += xcb_block_len;
12155     xcb_buffer_len += xcb_block_len;
12156     xcb_block_len = 0;
12157     /* items */
12158     xcb_block_len += xcb_input_xi_change_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
12159     xcb_tmp += xcb_block_len;
12160     xcb_align_to = ALIGNOF(char);
12161     /* insert padding */
12162     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
12163     xcb_buffer_len += xcb_block_len + xcb_pad;
12164     if (0 != xcb_pad) {
12165         xcb_tmp += xcb_pad;
12166         xcb_pad = 0;
12167     }
12168     xcb_block_len = 0;
12169 
12170     return xcb_buffer_len;
12171 }
12172 
12173 xcb_void_cookie_t
12174 xcb_input_xi_change_property_checked (xcb_connection_t      *c,
12175                                       xcb_input_device_id_t  deviceid,
12176                                       uint8_t                mode,
12177                                       uint8_t                format,
12178                                       xcb_atom_t             property,
12179                                       xcb_atom_t             type,
12180                                       uint32_t               num_items,
12181                                       const void            *items)
12182 {
12183     static const xcb_protocol_request_t xcb_req = {
12184         .count = 3,
12185         .ext = &xcb_input_id,
12186         .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
12187         .isvoid = 1
12188     };
12189 
12190     struct iovec xcb_parts[5];
12191     xcb_void_cookie_t xcb_ret;
12192     xcb_input_xi_change_property_request_t xcb_out;
12193 
12194     xcb_out.deviceid = deviceid;
12195     xcb_out.mode = mode;
12196     xcb_out.format = format;
12197     xcb_out.property = property;
12198     xcb_out.type = type;
12199     xcb_out.num_items = num_items;
12200 
12201     xcb_parts[2].iov_base = (char *) &xcb_out;
12202     xcb_parts[2].iov_len = sizeof(xcb_out);
12203     xcb_parts[3].iov_base = 0;
12204     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12205     /* xcb_input_xi_change_property_items_t items */
12206     xcb_parts[4].iov_base = (char *) items;
12207     xcb_parts[4].iov_len =
12208       xcb_input_xi_change_property_items_sizeof (items, num_items, format);
12209 
12210     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
12211     return xcb_ret;
12212 }
12213 
12214 xcb_void_cookie_t
12215 xcb_input_xi_change_property (xcb_connection_t      *c,
12216                               xcb_input_device_id_t  deviceid,
12217                               uint8_t                mode,
12218                               uint8_t                format,
12219                               xcb_atom_t             property,
12220                               xcb_atom_t             type,
12221                               uint32_t               num_items,
12222                               const void            *items)
12223 {
12224     static const xcb_protocol_request_t xcb_req = {
12225         .count = 3,
12226         .ext = &xcb_input_id,
12227         .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
12228         .isvoid = 1
12229     };
12230 
12231     struct iovec xcb_parts[5];
12232     xcb_void_cookie_t xcb_ret;
12233     xcb_input_xi_change_property_request_t xcb_out;
12234 
12235     xcb_out.deviceid = deviceid;
12236     xcb_out.mode = mode;
12237     xcb_out.format = format;
12238     xcb_out.property = property;
12239     xcb_out.type = type;
12240     xcb_out.num_items = num_items;
12241 
12242     xcb_parts[2].iov_base = (char *) &xcb_out;
12243     xcb_parts[2].iov_len = sizeof(xcb_out);
12244     xcb_parts[3].iov_base = 0;
12245     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12246     /* xcb_input_xi_change_property_items_t items */
12247     xcb_parts[4].iov_base = (char *) items;
12248     xcb_parts[4].iov_len =
12249       xcb_input_xi_change_property_items_sizeof (items, num_items, format);
12250 
12251     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
12252     return xcb_ret;
12253 }
12254 
12255 xcb_void_cookie_t
12256 xcb_input_xi_change_property_aux_checked (xcb_connection_t                           *c,
12257                                           xcb_input_device_id_t                       deviceid,
12258                                           uint8_t                                     mode,
12259                                           uint8_t                                     format,
12260                                           xcb_atom_t                                  property,
12261                                           xcb_atom_t                                  type,
12262                                           uint32_t                                    num_items,
12263                                           const xcb_input_xi_change_property_items_t *items)
12264 {
12265     static const xcb_protocol_request_t xcb_req = {
12266         .count = 3,
12267         .ext = &xcb_input_id,
12268         .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
12269         .isvoid = 1
12270     };
12271 
12272     struct iovec xcb_parts[5];
12273     xcb_void_cookie_t xcb_ret;
12274     xcb_input_xi_change_property_request_t xcb_out;
12275     void *xcb_aux0 = 0;
12276 
12277     xcb_out.deviceid = deviceid;
12278     xcb_out.mode = mode;
12279     xcb_out.format = format;
12280     xcb_out.property = property;
12281     xcb_out.type = type;
12282     xcb_out.num_items = num_items;
12283 
12284     xcb_parts[2].iov_base = (char *) &xcb_out;
12285     xcb_parts[2].iov_len = sizeof(xcb_out);
12286     xcb_parts[3].iov_base = 0;
12287     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12288     /* xcb_input_xi_change_property_items_t items */
12289     xcb_parts[4].iov_len =
12290       xcb_input_xi_change_property_items_serialize (&xcb_aux0, num_items, format, items);
12291     xcb_parts[4].iov_base = xcb_aux0;
12292 
12293     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
12294     free(xcb_aux0);
12295     return xcb_ret;
12296 }
12297 
12298 xcb_void_cookie_t
12299 xcb_input_xi_change_property_aux (xcb_connection_t                           *c,
12300                                   xcb_input_device_id_t                       deviceid,
12301                                   uint8_t                                     mode,
12302                                   uint8_t                                     format,
12303                                   xcb_atom_t                                  property,
12304                                   xcb_atom_t                                  type,
12305                                   uint32_t                                    num_items,
12306                                   const xcb_input_xi_change_property_items_t *items)
12307 {
12308     static const xcb_protocol_request_t xcb_req = {
12309         .count = 3,
12310         .ext = &xcb_input_id,
12311         .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
12312         .isvoid = 1
12313     };
12314 
12315     struct iovec xcb_parts[5];
12316     xcb_void_cookie_t xcb_ret;
12317     xcb_input_xi_change_property_request_t xcb_out;
12318     void *xcb_aux0 = 0;
12319 
12320     xcb_out.deviceid = deviceid;
12321     xcb_out.mode = mode;
12322     xcb_out.format = format;
12323     xcb_out.property = property;
12324     xcb_out.type = type;
12325     xcb_out.num_items = num_items;
12326 
12327     xcb_parts[2].iov_base = (char *) &xcb_out;
12328     xcb_parts[2].iov_len = sizeof(xcb_out);
12329     xcb_parts[3].iov_base = 0;
12330     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12331     /* xcb_input_xi_change_property_items_t items */
12332     xcb_parts[4].iov_len =
12333       xcb_input_xi_change_property_items_serialize (&xcb_aux0, num_items, format, items);
12334     xcb_parts[4].iov_base = xcb_aux0;
12335 
12336     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
12337     free(xcb_aux0);
12338     return xcb_ret;
12339 }
12340 
12341 void *
12342 xcb_input_xi_change_property_items (const xcb_input_xi_change_property_request_t *R)
12343 {
12344     return (void *) (R + 1);
12345 }
12346 
12347 xcb_void_cookie_t
12348 xcb_input_xi_delete_property_checked (xcb_connection_t      *c,
12349                                       xcb_input_device_id_t  deviceid,
12350                                       xcb_atom_t             property)
12351 {
12352     static const xcb_protocol_request_t xcb_req = {
12353         .count = 2,
12354         .ext = &xcb_input_id,
12355         .opcode = XCB_INPUT_XI_DELETE_PROPERTY,
12356         .isvoid = 1
12357     };
12358 
12359     struct iovec xcb_parts[4];
12360     xcb_void_cookie_t xcb_ret;
12361     xcb_input_xi_delete_property_request_t xcb_out;
12362 
12363     xcb_out.deviceid = deviceid;
12364     memset(xcb_out.pad0, 0, 2);
12365     xcb_out.property = property;
12366 
12367     xcb_parts[2].iov_base = (char *) &xcb_out;
12368     xcb_parts[2].iov_len = sizeof(xcb_out);
12369     xcb_parts[3].iov_base = 0;
12370     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12371 
12372     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
12373     return xcb_ret;
12374 }
12375 
12376 xcb_void_cookie_t
12377 xcb_input_xi_delete_property (xcb_connection_t      *c,
12378                               xcb_input_device_id_t  deviceid,
12379                               xcb_atom_t             property)
12380 {
12381     static const xcb_protocol_request_t xcb_req = {
12382         .count = 2,
12383         .ext = &xcb_input_id,
12384         .opcode = XCB_INPUT_XI_DELETE_PROPERTY,
12385         .isvoid = 1
12386     };
12387 
12388     struct iovec xcb_parts[4];
12389     xcb_void_cookie_t xcb_ret;
12390     xcb_input_xi_delete_property_request_t xcb_out;
12391 
12392     xcb_out.deviceid = deviceid;
12393     memset(xcb_out.pad0, 0, 2);
12394     xcb_out.property = property;
12395 
12396     xcb_parts[2].iov_base = (char *) &xcb_out;
12397     xcb_parts[2].iov_len = sizeof(xcb_out);
12398     xcb_parts[3].iov_base = 0;
12399     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12400 
12401     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
12402     return xcb_ret;
12403 }
12404 
12405 uint8_t *
12406 xcb_input_xi_get_property_items_data_8 (const xcb_input_xi_get_property_items_t *S)
12407 {
12408     return S->data8;
12409 }
12410 
12411 int
12412 xcb_input_xi_get_property_items_data_8_length (const xcb_input_xi_get_property_reply_t *R,
12413                                                const xcb_input_xi_get_property_items_t *S)
12414 {
12415     return R->num_items;
12416 }
12417 
12418 xcb_generic_iterator_t
12419 xcb_input_xi_get_property_items_data_8_end (const xcb_input_xi_get_property_reply_t *R,
12420                                             const xcb_input_xi_get_property_items_t *S)
12421 {
12422     xcb_generic_iterator_t i;
12423     i.data = S->data8 + R->num_items;
12424     i.rem = 0;
12425     i.index = (char *) i.data - (char *) S;
12426     return i;
12427 }
12428 
12429 uint16_t *
12430 xcb_input_xi_get_property_items_data_16 (const xcb_input_xi_get_property_items_t *S)
12431 {
12432     return S->data16;
12433 }
12434 
12435 int
12436 xcb_input_xi_get_property_items_data_16_length (const xcb_input_xi_get_property_reply_t *R,
12437                                                 const xcb_input_xi_get_property_items_t *S)
12438 {
12439     return R->num_items;
12440 }
12441 
12442 xcb_generic_iterator_t
12443 xcb_input_xi_get_property_items_data_16_end (const xcb_input_xi_get_property_reply_t *R,
12444                                              const xcb_input_xi_get_property_items_t *S)
12445 {
12446     xcb_generic_iterator_t i;
12447     i.data = S->data16 + R->num_items;
12448     i.rem = 0;
12449     i.index = (char *) i.data - (char *) S;
12450     return i;
12451 }
12452 
12453 uint32_t *
12454 xcb_input_xi_get_property_items_data_32 (const xcb_input_xi_get_property_items_t *S)
12455 {
12456     return S->data32;
12457 }
12458 
12459 int
12460 xcb_input_xi_get_property_items_data_32_length (const xcb_input_xi_get_property_reply_t *R,
12461                                                 const xcb_input_xi_get_property_items_t *S)
12462 {
12463     return R->num_items;
12464 }
12465 
12466 xcb_generic_iterator_t
12467 xcb_input_xi_get_property_items_data_32_end (const xcb_input_xi_get_property_reply_t *R,
12468                                              const xcb_input_xi_get_property_items_t *S)
12469 {
12470     xcb_generic_iterator_t i;
12471     i.data = S->data32 + R->num_items;
12472     i.rem = 0;
12473     i.index = (char *) i.data - (char *) S;
12474     return i;
12475 }
12476 
12477 int
12478 xcb_input_xi_get_property_items_serialize (void                                    **_buffer,
12479                                            uint32_t                                  num_items,
12480                                            uint8_t                                   format,
12481                                            const xcb_input_xi_get_property_items_t  *_aux)
12482 {
12483     char *xcb_out = *_buffer;
12484     unsigned int xcb_buffer_len = 0;
12485     unsigned int xcb_align_to = 0;
12486     unsigned int xcb_padding_offset = 0;
12487 
12488     unsigned int xcb_pad = 0;
12489     char xcb_pad0[3] = {0, 0, 0};
12490     struct iovec xcb_parts[9];
12491     unsigned int xcb_parts_idx = 0;
12492     unsigned int xcb_block_len = 0;
12493     unsigned int i;
12494     char *xcb_tmp;
12495 
12496     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
12497         /* insert padding */
12498         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12499         xcb_buffer_len += xcb_block_len + xcb_pad;
12500         if (0 != xcb_pad) {
12501             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12502             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12503             xcb_parts_idx++;
12504             xcb_pad = 0;
12505         }
12506         xcb_block_len = 0;
12507         xcb_padding_offset = 0;
12508         /* data8 */
12509         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
12510         xcb_block_len += num_items * sizeof(uint8_t);
12511         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
12512         xcb_parts_idx++;
12513         xcb_align_to = ALIGNOF(uint8_t);
12514         xcb_align_to = 4;
12515         /* insert padding */
12516         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12517         xcb_buffer_len += xcb_block_len + xcb_pad;
12518         if (0 != xcb_pad) {
12519             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12520             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12521             xcb_parts_idx++;
12522             xcb_pad = 0;
12523         }
12524         xcb_block_len = 0;
12525         xcb_padding_offset = 0;
12526     }
12527     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
12528         /* insert padding */
12529         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12530         xcb_buffer_len += xcb_block_len + xcb_pad;
12531         if (0 != xcb_pad) {
12532             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12533             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12534             xcb_parts_idx++;
12535             xcb_pad = 0;
12536         }
12537         xcb_block_len = 0;
12538         xcb_padding_offset = 0;
12539         /* data16 */
12540         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
12541         xcb_block_len += num_items * sizeof(uint16_t);
12542         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
12543         xcb_parts_idx++;
12544         xcb_align_to = ALIGNOF(uint16_t);
12545         xcb_align_to = 4;
12546         /* insert padding */
12547         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12548         xcb_buffer_len += xcb_block_len + xcb_pad;
12549         if (0 != xcb_pad) {
12550             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12551             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12552             xcb_parts_idx++;
12553             xcb_pad = 0;
12554         }
12555         xcb_block_len = 0;
12556         xcb_padding_offset = 0;
12557     }
12558     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
12559         /* insert padding */
12560         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12561         xcb_buffer_len += xcb_block_len + xcb_pad;
12562         if (0 != xcb_pad) {
12563             xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12564             xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12565             xcb_parts_idx++;
12566             xcb_pad = 0;
12567         }
12568         xcb_block_len = 0;
12569         xcb_padding_offset = 0;
12570         /* data32 */
12571         xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
12572         xcb_block_len += num_items * sizeof(uint32_t);
12573         xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
12574         xcb_parts_idx++;
12575         xcb_align_to = ALIGNOF(uint32_t);
12576     }
12577     /* insert padding */
12578     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12579     xcb_buffer_len += xcb_block_len + xcb_pad;
12580     if (0 != xcb_pad) {
12581         xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
12582         xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
12583         xcb_parts_idx++;
12584         xcb_pad = 0;
12585     }
12586     xcb_block_len = 0;
12587     xcb_padding_offset = 0;
12588 
12589     if (NULL == xcb_out) {
12590         /* allocate memory */
12591         xcb_out = malloc(xcb_buffer_len);
12592         *_buffer = xcb_out;
12593     }
12594 
12595     xcb_tmp = xcb_out;
12596     for(i=0; i<xcb_parts_idx; i++) {
12597         if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
12598             memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
12599         if (0 != xcb_parts[i].iov_len)
12600             xcb_tmp += xcb_parts[i].iov_len;
12601     }
12602 
12603     return xcb_buffer_len;
12604 }
12605 
12606 int
12607 xcb_input_xi_get_property_items_unpack (const void                         *_buffer,
12608                                         uint32_t                            num_items,
12609                                         uint8_t                             format,
12610                                         xcb_input_xi_get_property_items_t  *_aux)
12611 {
12612     char *xcb_tmp = (char *)_buffer;
12613     unsigned int xcb_buffer_len = 0;
12614     unsigned int xcb_block_len = 0;
12615     unsigned int xcb_pad = 0;
12616     unsigned int xcb_align_to = 0;
12617     unsigned int xcb_padding_offset = 0;
12618 
12619 
12620     if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
12621         /* insert padding */
12622         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12623         xcb_buffer_len += xcb_block_len + xcb_pad;
12624         if (0 != xcb_pad) {
12625             xcb_tmp += xcb_pad;
12626             xcb_pad = 0;
12627         }
12628         xcb_block_len = 0;
12629         xcb_padding_offset = 0;
12630         /* data8 */
12631         _aux->data8 = (uint8_t *)xcb_tmp;
12632         xcb_block_len += num_items * sizeof(uint8_t);
12633         xcb_tmp += xcb_block_len;
12634         xcb_align_to = ALIGNOF(uint8_t);
12635         xcb_align_to = 4;
12636         /* insert padding */
12637         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12638         xcb_buffer_len += xcb_block_len + xcb_pad;
12639         if (0 != xcb_pad) {
12640             xcb_tmp += xcb_pad;
12641             xcb_pad = 0;
12642         }
12643         xcb_block_len = 0;
12644         xcb_padding_offset = 0;
12645     }
12646     if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
12647         /* insert padding */
12648         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12649         xcb_buffer_len += xcb_block_len + xcb_pad;
12650         if (0 != xcb_pad) {
12651             xcb_tmp += xcb_pad;
12652             xcb_pad = 0;
12653         }
12654         xcb_block_len = 0;
12655         xcb_padding_offset = 0;
12656         /* data16 */
12657         _aux->data16 = (uint16_t *)xcb_tmp;
12658         xcb_block_len += num_items * sizeof(uint16_t);
12659         xcb_tmp += xcb_block_len;
12660         xcb_align_to = ALIGNOF(uint16_t);
12661         xcb_align_to = 4;
12662         /* insert padding */
12663         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12664         xcb_buffer_len += xcb_block_len + xcb_pad;
12665         if (0 != xcb_pad) {
12666             xcb_tmp += xcb_pad;
12667             xcb_pad = 0;
12668         }
12669         xcb_block_len = 0;
12670         xcb_padding_offset = 0;
12671     }
12672     if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
12673         /* insert padding */
12674         xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12675         xcb_buffer_len += xcb_block_len + xcb_pad;
12676         if (0 != xcb_pad) {
12677             xcb_tmp += xcb_pad;
12678             xcb_pad = 0;
12679         }
12680         xcb_block_len = 0;
12681         xcb_padding_offset = 0;
12682         /* data32 */
12683         _aux->data32 = (uint32_t *)xcb_tmp;
12684         xcb_block_len += num_items * sizeof(uint32_t);
12685         xcb_tmp += xcb_block_len;
12686         xcb_align_to = ALIGNOF(uint32_t);
12687     }
12688     /* insert padding */
12689     xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
12690     xcb_buffer_len += xcb_block_len + xcb_pad;
12691     if (0 != xcb_pad) {
12692         xcb_tmp += xcb_pad;
12693         xcb_pad = 0;
12694     }
12695     xcb_block_len = 0;
12696     xcb_padding_offset = 0;
12697 
12698     return xcb_buffer_len;
12699 }
12700 
12701 int
12702 xcb_input_xi_get_property_items_sizeof (const void  *_buffer,
12703                                         uint32_t     num_items,
12704                                         uint8_t      format)
12705 {
12706     xcb_input_xi_get_property_items_t _aux;
12707     return xcb_input_xi_get_property_items_unpack(_buffer, num_items, format, &_aux);
12708 }
12709 
12710 int
12711 xcb_input_xi_get_property_sizeof (const void  *_buffer)
12712 {
12713     char *xcb_tmp = (char *)_buffer;
12714     const xcb_input_xi_get_property_reply_t *_aux = (xcb_input_xi_get_property_reply_t *)_buffer;
12715     unsigned int xcb_buffer_len = 0;
12716     unsigned int xcb_block_len = 0;
12717     unsigned int xcb_pad = 0;
12718     unsigned int xcb_align_to = 0;
12719 
12720 
12721     xcb_block_len += sizeof(xcb_input_xi_get_property_reply_t);
12722     xcb_tmp += xcb_block_len;
12723     xcb_buffer_len += xcb_block_len;
12724     xcb_block_len = 0;
12725     /* items */
12726     xcb_block_len += xcb_input_xi_get_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
12727     xcb_tmp += xcb_block_len;
12728     xcb_align_to = ALIGNOF(char);
12729     /* insert padding */
12730     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
12731     xcb_buffer_len += xcb_block_len + xcb_pad;
12732     if (0 != xcb_pad) {
12733         xcb_tmp += xcb_pad;
12734         xcb_pad = 0;
12735     }
12736     xcb_block_len = 0;
12737 
12738     return xcb_buffer_len;
12739 }
12740 
12741 xcb_input_xi_get_property_cookie_t
12742 xcb_input_xi_get_property (xcb_connection_t      *c,
12743                            xcb_input_device_id_t  deviceid,
12744                            uint8_t                _delete,
12745                            xcb_atom_t             property,
12746                            xcb_atom_t             type,
12747                            uint32_t               offset,
12748                            uint32_t               len)
12749 {
12750     static const xcb_protocol_request_t xcb_req = {
12751         .count = 2,
12752         .ext = &xcb_input_id,
12753         .opcode = XCB_INPUT_XI_GET_PROPERTY,
12754         .isvoid = 0
12755     };
12756 
12757     struct iovec xcb_parts[4];
12758     xcb_input_xi_get_property_cookie_t xcb_ret;
12759     xcb_input_xi_get_property_request_t xcb_out;
12760 
12761     xcb_out.deviceid = deviceid;
12762     xcb_out._delete = _delete;
12763     xcb_out.pad0 = 0;
12764     xcb_out.property = property;
12765     xcb_out.type = type;
12766     xcb_out.offset = offset;
12767     xcb_out.len = len;
12768 
12769     xcb_parts[2].iov_base = (char *) &xcb_out;
12770     xcb_parts[2].iov_len = sizeof(xcb_out);
12771     xcb_parts[3].iov_base = 0;
12772     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12773 
12774     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
12775     return xcb_ret;
12776 }
12777 
12778 xcb_input_xi_get_property_cookie_t
12779 xcb_input_xi_get_property_unchecked (xcb_connection_t      *c,
12780                                      xcb_input_device_id_t  deviceid,
12781                                      uint8_t                _delete,
12782                                      xcb_atom_t             property,
12783                                      xcb_atom_t             type,
12784                                      uint32_t               offset,
12785                                      uint32_t               len)
12786 {
12787     static const xcb_protocol_request_t xcb_req = {
12788         .count = 2,
12789         .ext = &xcb_input_id,
12790         .opcode = XCB_INPUT_XI_GET_PROPERTY,
12791         .isvoid = 0
12792     };
12793 
12794     struct iovec xcb_parts[4];
12795     xcb_input_xi_get_property_cookie_t xcb_ret;
12796     xcb_input_xi_get_property_request_t xcb_out;
12797 
12798     xcb_out.deviceid = deviceid;
12799     xcb_out._delete = _delete;
12800     xcb_out.pad0 = 0;
12801     xcb_out.property = property;
12802     xcb_out.type = type;
12803     xcb_out.offset = offset;
12804     xcb_out.len = len;
12805 
12806     xcb_parts[2].iov_base = (char *) &xcb_out;
12807     xcb_parts[2].iov_len = sizeof(xcb_out);
12808     xcb_parts[3].iov_base = 0;
12809     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12810 
12811     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
12812     return xcb_ret;
12813 }
12814 
12815 void *
12816 xcb_input_xi_get_property_items (const xcb_input_xi_get_property_reply_t *R)
12817 {
12818     return (void *) (R + 1);
12819 }
12820 
12821 xcb_input_xi_get_property_reply_t *
12822 xcb_input_xi_get_property_reply (xcb_connection_t                    *c,
12823                                  xcb_input_xi_get_property_cookie_t   cookie  /**< */,
12824                                  xcb_generic_error_t                **e)
12825 {
12826     return (xcb_input_xi_get_property_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
12827 }
12828 
12829 int
12830 xcb_input_xi_get_selected_events_sizeof (const void  *_buffer)
12831 {
12832     char *xcb_tmp = (char *)_buffer;
12833     const xcb_input_xi_get_selected_events_reply_t *_aux = (xcb_input_xi_get_selected_events_reply_t *)_buffer;
12834     unsigned int xcb_buffer_len = 0;
12835     unsigned int xcb_block_len = 0;
12836     unsigned int xcb_pad = 0;
12837     unsigned int xcb_align_to = 0;
12838 
12839     unsigned int i;
12840     unsigned int xcb_tmp_len;
12841 
12842     xcb_block_len += sizeof(xcb_input_xi_get_selected_events_reply_t);
12843     xcb_tmp += xcb_block_len;
12844     xcb_buffer_len += xcb_block_len;
12845     xcb_block_len = 0;
12846     /* masks */
12847     for(i=0; i<_aux->num_masks; i++) {
12848         xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
12849         xcb_block_len += xcb_tmp_len;
12850         xcb_tmp += xcb_tmp_len;
12851     }
12852     xcb_align_to = ALIGNOF(xcb_input_event_mask_t);
12853     /* insert padding */
12854     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
12855     xcb_buffer_len += xcb_block_len + xcb_pad;
12856     if (0 != xcb_pad) {
12857         xcb_tmp += xcb_pad;
12858         xcb_pad = 0;
12859     }
12860     xcb_block_len = 0;
12861 
12862     return xcb_buffer_len;
12863 }
12864 
12865 xcb_input_xi_get_selected_events_cookie_t
12866 xcb_input_xi_get_selected_events (xcb_connection_t *c,
12867                                   xcb_window_t      window)
12868 {
12869     static const xcb_protocol_request_t xcb_req = {
12870         .count = 2,
12871         .ext = &xcb_input_id,
12872         .opcode = XCB_INPUT_XI_GET_SELECTED_EVENTS,
12873         .isvoid = 0
12874     };
12875 
12876     struct iovec xcb_parts[4];
12877     xcb_input_xi_get_selected_events_cookie_t xcb_ret;
12878     xcb_input_xi_get_selected_events_request_t xcb_out;
12879 
12880     xcb_out.window = window;
12881 
12882     xcb_parts[2].iov_base = (char *) &xcb_out;
12883     xcb_parts[2].iov_len = sizeof(xcb_out);
12884     xcb_parts[3].iov_base = 0;
12885     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12886 
12887     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
12888     return xcb_ret;
12889 }
12890 
12891 xcb_input_xi_get_selected_events_cookie_t
12892 xcb_input_xi_get_selected_events_unchecked (xcb_connection_t *c,
12893                                             xcb_window_t      window)
12894 {
12895     static const xcb_protocol_request_t xcb_req = {
12896         .count = 2,
12897         .ext = &xcb_input_id,
12898         .opcode = XCB_INPUT_XI_GET_SELECTED_EVENTS,
12899         .isvoid = 0
12900     };
12901 
12902     struct iovec xcb_parts[4];
12903     xcb_input_xi_get_selected_events_cookie_t xcb_ret;
12904     xcb_input_xi_get_selected_events_request_t xcb_out;
12905 
12906     xcb_out.window = window;
12907 
12908     xcb_parts[2].iov_base = (char *) &xcb_out;
12909     xcb_parts[2].iov_len = sizeof(xcb_out);
12910     xcb_parts[3].iov_base = 0;
12911     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
12912 
12913     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
12914     return xcb_ret;
12915 }
12916 
12917 int
12918 xcb_input_xi_get_selected_events_masks_length (const xcb_input_xi_get_selected_events_reply_t *R)
12919 {
12920     return R->num_masks;
12921 }
12922 
12923 xcb_input_event_mask_iterator_t
12924 xcb_input_xi_get_selected_events_masks_iterator (const xcb_input_xi_get_selected_events_reply_t *R)
12925 {
12926     xcb_input_event_mask_iterator_t i;
12927     i.data = (xcb_input_event_mask_t *) (R + 1);
12928     i.rem = R->num_masks;
12929     i.index = (char *) i.data - (char *) R;
12930     return i;
12931 }
12932 
12933 xcb_input_xi_get_selected_events_reply_t *
12934 xcb_input_xi_get_selected_events_reply (xcb_connection_t                           *c,
12935                                         xcb_input_xi_get_selected_events_cookie_t   cookie  /**< */,
12936                                         xcb_generic_error_t                       **e)
12937 {
12938     return (xcb_input_xi_get_selected_events_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
12939 }
12940 
12941 void
12942 xcb_input_barrier_release_pointer_info_next (xcb_input_barrier_release_pointer_info_iterator_t *i)
12943 {
12944     --i->rem;
12945     ++i->data;
12946     i->index += sizeof(xcb_input_barrier_release_pointer_info_t);
12947 }
12948 
12949 xcb_generic_iterator_t
12950 xcb_input_barrier_release_pointer_info_end (xcb_input_barrier_release_pointer_info_iterator_t i)
12951 {
12952     xcb_generic_iterator_t ret;
12953     ret.data = i.data + i.rem;
12954     ret.index = i.index + ((char *) ret.data - (char *) i.data);
12955     ret.rem = 0;
12956     return ret;
12957 }
12958 
12959 int
12960 xcb_input_xi_barrier_release_pointer_sizeof (const void  *_buffer)
12961 {
12962     char *xcb_tmp = (char *)_buffer;
12963     const xcb_input_xi_barrier_release_pointer_request_t *_aux = (xcb_input_xi_barrier_release_pointer_request_t *)_buffer;
12964     unsigned int xcb_buffer_len = 0;
12965     unsigned int xcb_block_len = 0;
12966     unsigned int xcb_pad = 0;
12967     unsigned int xcb_align_to = 0;
12968 
12969 
12970     xcb_block_len += sizeof(xcb_input_xi_barrier_release_pointer_request_t);
12971     xcb_tmp += xcb_block_len;
12972     xcb_buffer_len += xcb_block_len;
12973     xcb_block_len = 0;
12974     /* barriers */
12975     xcb_block_len += _aux->num_barriers * sizeof(xcb_input_barrier_release_pointer_info_t);
12976     xcb_tmp += xcb_block_len;
12977     xcb_align_to = ALIGNOF(xcb_input_barrier_release_pointer_info_t);
12978     /* insert padding */
12979     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
12980     xcb_buffer_len += xcb_block_len + xcb_pad;
12981     if (0 != xcb_pad) {
12982         xcb_tmp += xcb_pad;
12983         xcb_pad = 0;
12984     }
12985     xcb_block_len = 0;
12986 
12987     return xcb_buffer_len;
12988 }
12989 
12990 xcb_void_cookie_t
12991 xcb_input_xi_barrier_release_pointer_checked (xcb_connection_t                               *c,
12992                                               uint32_t                                        num_barriers,
12993                                               const xcb_input_barrier_release_pointer_info_t *barriers)
12994 {
12995     static const xcb_protocol_request_t xcb_req = {
12996         .count = 4,
12997         .ext = &xcb_input_id,
12998         .opcode = XCB_INPUT_XI_BARRIER_RELEASE_POINTER,
12999         .isvoid = 1
13000     };
13001 
13002     struct iovec xcb_parts[6];
13003     xcb_void_cookie_t xcb_ret;
13004     xcb_input_xi_barrier_release_pointer_request_t xcb_out;
13005 
13006     xcb_out.num_barriers = num_barriers;
13007 
13008     xcb_parts[2].iov_base = (char *) &xcb_out;
13009     xcb_parts[2].iov_len = sizeof(xcb_out);
13010     xcb_parts[3].iov_base = 0;
13011     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
13012     /* xcb_input_barrier_release_pointer_info_t barriers */
13013     xcb_parts[4].iov_base = (char *) barriers;
13014     xcb_parts[4].iov_len = num_barriers * sizeof(xcb_input_barrier_release_pointer_info_t);
13015     xcb_parts[5].iov_base = 0;
13016     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
13017 
13018     xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
13019     return xcb_ret;
13020 }
13021 
13022 xcb_void_cookie_t
13023 xcb_input_xi_barrier_release_pointer (xcb_connection_t                               *c,
13024                                       uint32_t                                        num_barriers,
13025                                       const xcb_input_barrier_release_pointer_info_t *barriers)
13026 {
13027     static const xcb_protocol_request_t xcb_req = {
13028         .count = 4,
13029         .ext = &xcb_input_id,
13030         .opcode = XCB_INPUT_XI_BARRIER_RELEASE_POINTER,
13031         .isvoid = 1
13032     };
13033 
13034     struct iovec xcb_parts[6];
13035     xcb_void_cookie_t xcb_ret;
13036     xcb_input_xi_barrier_release_pointer_request_t xcb_out;
13037 
13038     xcb_out.num_barriers = num_barriers;
13039 
13040     xcb_parts[2].iov_base = (char *) &xcb_out;
13041     xcb_parts[2].iov_len = sizeof(xcb_out);
13042     xcb_parts[3].iov_base = 0;
13043     xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
13044     /* xcb_input_barrier_release_pointer_info_t barriers */
13045     xcb_parts[4].iov_base = (char *) barriers;
13046     xcb_parts[4].iov_len = num_barriers * sizeof(xcb_input_barrier_release_pointer_info_t);
13047     xcb_parts[5].iov_base = 0;
13048     xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
13049 
13050     xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
13051     return xcb_ret;
13052 }
13053 
13054 xcb_input_barrier_release_pointer_info_t *
13055 xcb_input_xi_barrier_release_pointer_barriers (const xcb_input_xi_barrier_release_pointer_request_t *R)
13056 {
13057     return (xcb_input_barrier_release_pointer_info_t *) (R + 1);
13058 }
13059 
13060 int
13061 xcb_input_xi_barrier_release_pointer_barriers_length (const xcb_input_xi_barrier_release_pointer_request_t *R)
13062 {
13063     return R->num_barriers;
13064 }
13065 
13066 xcb_input_barrier_release_pointer_info_iterator_t
13067 xcb_input_xi_barrier_release_pointer_barriers_iterator (const xcb_input_xi_barrier_release_pointer_request_t *R)
13068 {
13069     xcb_input_barrier_release_pointer_info_iterator_t i;
13070     i.data = (xcb_input_barrier_release_pointer_info_t *) (R + 1);
13071     i.rem = R->num_barriers;
13072     i.index = (char *) i.data - (char *) R;
13073     return i;
13074 }
13075 
13076 int
13077 xcb_input_device_changed_sizeof (const void  *_buffer)
13078 {
13079     char *xcb_tmp = (char *)_buffer;
13080     const xcb_input_device_changed_event_t *_aux = (xcb_input_device_changed_event_t *)_buffer;
13081     unsigned int xcb_buffer_len = 0;
13082     unsigned int xcb_block_len = 0;
13083     unsigned int xcb_pad = 0;
13084     unsigned int xcb_align_to = 0;
13085 
13086     unsigned int i;
13087     unsigned int xcb_tmp_len;
13088 
13089     xcb_block_len += sizeof(xcb_input_device_changed_event_t);
13090     xcb_tmp += xcb_block_len;
13091     xcb_buffer_len += xcb_block_len;
13092     xcb_block_len = 0;
13093     /* classes */
13094     for(i=0; i<_aux->num_classes; i++) {
13095         xcb_tmp_len = xcb_input_device_class_sizeof(xcb_tmp);
13096         xcb_block_len += xcb_tmp_len;
13097         xcb_tmp += xcb_tmp_len;
13098     }
13099     xcb_align_to = ALIGNOF(xcb_input_device_class_t);
13100     /* insert padding */
13101     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13102     xcb_buffer_len += xcb_block_len + xcb_pad;
13103     if (0 != xcb_pad) {
13104         xcb_tmp += xcb_pad;
13105         xcb_pad = 0;
13106     }
13107     xcb_block_len = 0;
13108 
13109     return xcb_buffer_len;
13110 }
13111 
13112 int
13113 xcb_input_device_changed_classes_length (const xcb_input_device_changed_event_t *R)
13114 {
13115     return R->num_classes;
13116 }
13117 
13118 xcb_input_device_class_iterator_t
13119 xcb_input_device_changed_classes_iterator (const xcb_input_device_changed_event_t *R)
13120 {
13121     xcb_input_device_class_iterator_t i;
13122     i.data = (xcb_input_device_class_t *) (R + 1);
13123     i.rem = R->num_classes;
13124     i.index = (char *) i.data - (char *) R;
13125     return i;
13126 }
13127 
13128 int
13129 xcb_input_key_press_sizeof (const void  *_buffer)
13130 {
13131     char *xcb_tmp = (char *)_buffer;
13132     const xcb_input_key_press_event_t *_aux = (xcb_input_key_press_event_t *)_buffer;
13133     unsigned int xcb_buffer_len = 0;
13134     unsigned int xcb_block_len = 0;
13135     unsigned int xcb_pad = 0;
13136     unsigned int xcb_align_to = 0;
13137 
13138     int xcb_pre_tmp_1; /* sumof length */
13139     int xcb_pre_tmp_2; /* sumof loop counter */
13140     int64_t xcb_pre_tmp_3; /* sumof sum */
13141     const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
13142 
13143     xcb_block_len += sizeof(xcb_input_key_press_event_t);
13144     xcb_tmp += xcb_block_len;
13145     xcb_buffer_len += xcb_block_len;
13146     xcb_block_len = 0;
13147     /* button_mask */
13148     xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
13149     xcb_tmp += xcb_block_len;
13150     xcb_align_to = ALIGNOF(uint32_t);
13151     /* insert padding */
13152     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13153     xcb_buffer_len += xcb_block_len + xcb_pad;
13154     if (0 != xcb_pad) {
13155         xcb_tmp += xcb_pad;
13156         xcb_pad = 0;
13157     }
13158     xcb_block_len = 0;
13159     /* valuator_mask */
13160     xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
13161     xcb_tmp += xcb_block_len;
13162     xcb_align_to = ALIGNOF(uint32_t);
13163     /* insert padding */
13164     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13165     xcb_buffer_len += xcb_block_len + xcb_pad;
13166     if (0 != xcb_pad) {
13167         xcb_tmp += xcb_pad;
13168         xcb_pad = 0;
13169     }
13170     xcb_block_len = 0;
13171     /* axisvalues */
13172     /* sumof start */
13173     xcb_pre_tmp_1 = _aux->valuators_len;
13174     xcb_pre_tmp_3 = 0;
13175     xcb_pre_tmp_4 = xcb_input_key_press_valuator_mask(_aux);
13176     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
13177         const uint32_t *xcb_listelement = xcb_pre_tmp_4;
13178         xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
13179         xcb_pre_tmp_4++;
13180     }
13181     /* sumof end. Result is in xcb_pre_tmp_3 */
13182     xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
13183     xcb_tmp += xcb_block_len;
13184     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
13185     /* insert padding */
13186     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13187     xcb_buffer_len += xcb_block_len + xcb_pad;
13188     if (0 != xcb_pad) {
13189         xcb_tmp += xcb_pad;
13190         xcb_pad = 0;
13191     }
13192     xcb_block_len = 0;
13193 
13194     return xcb_buffer_len;
13195 }
13196 
13197 uint32_t *
13198 xcb_input_key_press_button_mask (const xcb_input_key_press_event_t *R)
13199 {
13200     return (uint32_t *) (R + 1);
13201 }
13202 
13203 int
13204 xcb_input_key_press_button_mask_length (const xcb_input_key_press_event_t *R)
13205 {
13206     return R->buttons_len;
13207 }
13208 
13209 xcb_generic_iterator_t
13210 xcb_input_key_press_button_mask_end (const xcb_input_key_press_event_t *R)
13211 {
13212     xcb_generic_iterator_t i;
13213     i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
13214     i.rem = 0;
13215     i.index = (char *) i.data - (char *) R;
13216     return i;
13217 }
13218 
13219 uint32_t *
13220 xcb_input_key_press_valuator_mask (const xcb_input_key_press_event_t *R)
13221 {
13222     xcb_generic_iterator_t prev = xcb_input_key_press_button_mask_end(R);
13223     return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
13224 }
13225 
13226 int
13227 xcb_input_key_press_valuator_mask_length (const xcb_input_key_press_event_t *R)
13228 {
13229     return R->valuators_len;
13230 }
13231 
13232 xcb_generic_iterator_t
13233 xcb_input_key_press_valuator_mask_end (const xcb_input_key_press_event_t *R)
13234 {
13235     xcb_generic_iterator_t i;
13236     xcb_generic_iterator_t prev = xcb_input_key_press_button_mask_end(R);
13237     i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->valuators_len);
13238     i.rem = 0;
13239     i.index = (char *) i.data - (char *) R;
13240     return i;
13241 }
13242 
13243 xcb_input_fp3232_t *
13244 xcb_input_key_press_axisvalues (const xcb_input_key_press_event_t *R)
13245 {
13246     xcb_generic_iterator_t prev = xcb_input_key_press_valuator_mask_end(R);
13247     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
13248 }
13249 
13250 int
13251 xcb_input_key_press_axisvalues_length (const xcb_input_key_press_event_t *R)
13252 {
13253     int xcb_pre_tmp_5; /* sumof length */
13254     int xcb_pre_tmp_6; /* sumof loop counter */
13255     int64_t xcb_pre_tmp_7; /* sumof sum */
13256     const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
13257     /* sumof start */
13258     xcb_pre_tmp_5 = R->valuators_len;
13259     xcb_pre_tmp_7 = 0;
13260     xcb_pre_tmp_8 = xcb_input_key_press_valuator_mask(R);
13261     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
13262         const uint32_t *xcb_listelement = xcb_pre_tmp_8;
13263         xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
13264         xcb_pre_tmp_8++;
13265     }
13266     /* sumof end. Result is in xcb_pre_tmp_7 */
13267     return xcb_pre_tmp_7;
13268 }
13269 
13270 xcb_input_fp3232_iterator_t
13271 xcb_input_key_press_axisvalues_iterator (const xcb_input_key_press_event_t *R)
13272 {
13273     xcb_input_fp3232_iterator_t i;
13274     xcb_generic_iterator_t prev = xcb_input_key_press_valuator_mask_end(R);
13275     int xcb_pre_tmp_9; /* sumof length */
13276     int xcb_pre_tmp_10; /* sumof loop counter */
13277     int64_t xcb_pre_tmp_11; /* sumof sum */
13278     const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
13279     /* sumof start */
13280     xcb_pre_tmp_9 = R->valuators_len;
13281     xcb_pre_tmp_11 = 0;
13282     xcb_pre_tmp_12 = xcb_input_key_press_valuator_mask(R);
13283     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
13284         const uint32_t *xcb_listelement = xcb_pre_tmp_12;
13285         xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
13286         xcb_pre_tmp_12++;
13287     }
13288     /* sumof end. Result is in xcb_pre_tmp_11 */
13289     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
13290     i.rem = xcb_pre_tmp_11;
13291     i.index = (char *) i.data - (char *) R;
13292     return i;
13293 }
13294 
13295 int
13296 xcb_input_key_release_sizeof (const void  *_buffer  /**< */)
13297 {
13298     return xcb_input_key_press_sizeof(_buffer);
13299 }
13300 
13301 int
13302 xcb_input_button_press_sizeof (const void  *_buffer)
13303 {
13304     char *xcb_tmp = (char *)_buffer;
13305     const xcb_input_button_press_event_t *_aux = (xcb_input_button_press_event_t *)_buffer;
13306     unsigned int xcb_buffer_len = 0;
13307     unsigned int xcb_block_len = 0;
13308     unsigned int xcb_pad = 0;
13309     unsigned int xcb_align_to = 0;
13310 
13311     int xcb_pre_tmp_1; /* sumof length */
13312     int xcb_pre_tmp_2; /* sumof loop counter */
13313     int64_t xcb_pre_tmp_3; /* sumof sum */
13314     const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
13315 
13316     xcb_block_len += sizeof(xcb_input_button_press_event_t);
13317     xcb_tmp += xcb_block_len;
13318     xcb_buffer_len += xcb_block_len;
13319     xcb_block_len = 0;
13320     /* button_mask */
13321     xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
13322     xcb_tmp += xcb_block_len;
13323     xcb_align_to = ALIGNOF(uint32_t);
13324     /* insert padding */
13325     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13326     xcb_buffer_len += xcb_block_len + xcb_pad;
13327     if (0 != xcb_pad) {
13328         xcb_tmp += xcb_pad;
13329         xcb_pad = 0;
13330     }
13331     xcb_block_len = 0;
13332     /* valuator_mask */
13333     xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
13334     xcb_tmp += xcb_block_len;
13335     xcb_align_to = ALIGNOF(uint32_t);
13336     /* insert padding */
13337     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13338     xcb_buffer_len += xcb_block_len + xcb_pad;
13339     if (0 != xcb_pad) {
13340         xcb_tmp += xcb_pad;
13341         xcb_pad = 0;
13342     }
13343     xcb_block_len = 0;
13344     /* axisvalues */
13345     /* sumof start */
13346     xcb_pre_tmp_1 = _aux->valuators_len;
13347     xcb_pre_tmp_3 = 0;
13348     xcb_pre_tmp_4 = xcb_input_button_press_valuator_mask(_aux);
13349     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
13350         const uint32_t *xcb_listelement = xcb_pre_tmp_4;
13351         xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
13352         xcb_pre_tmp_4++;
13353     }
13354     /* sumof end. Result is in xcb_pre_tmp_3 */
13355     xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
13356     xcb_tmp += xcb_block_len;
13357     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
13358     /* insert padding */
13359     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13360     xcb_buffer_len += xcb_block_len + xcb_pad;
13361     if (0 != xcb_pad) {
13362         xcb_tmp += xcb_pad;
13363         xcb_pad = 0;
13364     }
13365     xcb_block_len = 0;
13366 
13367     return xcb_buffer_len;
13368 }
13369 
13370 uint32_t *
13371 xcb_input_button_press_button_mask (const xcb_input_button_press_event_t *R)
13372 {
13373     return (uint32_t *) (R + 1);
13374 }
13375 
13376 int
13377 xcb_input_button_press_button_mask_length (const xcb_input_button_press_event_t *R)
13378 {
13379     return R->buttons_len;
13380 }
13381 
13382 xcb_generic_iterator_t
13383 xcb_input_button_press_button_mask_end (const xcb_input_button_press_event_t *R)
13384 {
13385     xcb_generic_iterator_t i;
13386     i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
13387     i.rem = 0;
13388     i.index = (char *) i.data - (char *) R;
13389     return i;
13390 }
13391 
13392 uint32_t *
13393 xcb_input_button_press_valuator_mask (const xcb_input_button_press_event_t *R)
13394 {
13395     xcb_generic_iterator_t prev = xcb_input_button_press_button_mask_end(R);
13396     return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
13397 }
13398 
13399 int
13400 xcb_input_button_press_valuator_mask_length (const xcb_input_button_press_event_t *R)
13401 {
13402     return R->valuators_len;
13403 }
13404 
13405 xcb_generic_iterator_t
13406 xcb_input_button_press_valuator_mask_end (const xcb_input_button_press_event_t *R)
13407 {
13408     xcb_generic_iterator_t i;
13409     xcb_generic_iterator_t prev = xcb_input_button_press_button_mask_end(R);
13410     i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->valuators_len);
13411     i.rem = 0;
13412     i.index = (char *) i.data - (char *) R;
13413     return i;
13414 }
13415 
13416 xcb_input_fp3232_t *
13417 xcb_input_button_press_axisvalues (const xcb_input_button_press_event_t *R)
13418 {
13419     xcb_generic_iterator_t prev = xcb_input_button_press_valuator_mask_end(R);
13420     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
13421 }
13422 
13423 int
13424 xcb_input_button_press_axisvalues_length (const xcb_input_button_press_event_t *R)
13425 {
13426     int xcb_pre_tmp_5; /* sumof length */
13427     int xcb_pre_tmp_6; /* sumof loop counter */
13428     int64_t xcb_pre_tmp_7; /* sumof sum */
13429     const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
13430     /* sumof start */
13431     xcb_pre_tmp_5 = R->valuators_len;
13432     xcb_pre_tmp_7 = 0;
13433     xcb_pre_tmp_8 = xcb_input_button_press_valuator_mask(R);
13434     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
13435         const uint32_t *xcb_listelement = xcb_pre_tmp_8;
13436         xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
13437         xcb_pre_tmp_8++;
13438     }
13439     /* sumof end. Result is in xcb_pre_tmp_7 */
13440     return xcb_pre_tmp_7;
13441 }
13442 
13443 xcb_input_fp3232_iterator_t
13444 xcb_input_button_press_axisvalues_iterator (const xcb_input_button_press_event_t *R)
13445 {
13446     xcb_input_fp3232_iterator_t i;
13447     xcb_generic_iterator_t prev = xcb_input_button_press_valuator_mask_end(R);
13448     int xcb_pre_tmp_9; /* sumof length */
13449     int xcb_pre_tmp_10; /* sumof loop counter */
13450     int64_t xcb_pre_tmp_11; /* sumof sum */
13451     const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
13452     /* sumof start */
13453     xcb_pre_tmp_9 = R->valuators_len;
13454     xcb_pre_tmp_11 = 0;
13455     xcb_pre_tmp_12 = xcb_input_button_press_valuator_mask(R);
13456     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
13457         const uint32_t *xcb_listelement = xcb_pre_tmp_12;
13458         xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
13459         xcb_pre_tmp_12++;
13460     }
13461     /* sumof end. Result is in xcb_pre_tmp_11 */
13462     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
13463     i.rem = xcb_pre_tmp_11;
13464     i.index = (char *) i.data - (char *) R;
13465     return i;
13466 }
13467 
13468 int
13469 xcb_input_button_release_sizeof (const void  *_buffer  /**< */)
13470 {
13471     return xcb_input_button_press_sizeof(_buffer);
13472 }
13473 
13474 int
13475 xcb_input_motion_sizeof (const void  *_buffer  /**< */)
13476 {
13477     return xcb_input_button_press_sizeof(_buffer);
13478 }
13479 
13480 int
13481 xcb_input_enter_sizeof (const void  *_buffer)
13482 {
13483     char *xcb_tmp = (char *)_buffer;
13484     const xcb_input_enter_event_t *_aux = (xcb_input_enter_event_t *)_buffer;
13485     unsigned int xcb_buffer_len = 0;
13486     unsigned int xcb_block_len = 0;
13487     unsigned int xcb_pad = 0;
13488     unsigned int xcb_align_to = 0;
13489 
13490 
13491     xcb_block_len += sizeof(xcb_input_enter_event_t);
13492     xcb_tmp += xcb_block_len;
13493     xcb_buffer_len += xcb_block_len;
13494     xcb_block_len = 0;
13495     /* buttons */
13496     xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
13497     xcb_tmp += xcb_block_len;
13498     xcb_align_to = ALIGNOF(uint32_t);
13499     /* insert padding */
13500     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13501     xcb_buffer_len += xcb_block_len + xcb_pad;
13502     if (0 != xcb_pad) {
13503         xcb_tmp += xcb_pad;
13504         xcb_pad = 0;
13505     }
13506     xcb_block_len = 0;
13507 
13508     return xcb_buffer_len;
13509 }
13510 
13511 uint32_t *
13512 xcb_input_enter_buttons (const xcb_input_enter_event_t *R)
13513 {
13514     return (uint32_t *) (R + 1);
13515 }
13516 
13517 int
13518 xcb_input_enter_buttons_length (const xcb_input_enter_event_t *R)
13519 {
13520     return R->buttons_len;
13521 }
13522 
13523 xcb_generic_iterator_t
13524 xcb_input_enter_buttons_end (const xcb_input_enter_event_t *R)
13525 {
13526     xcb_generic_iterator_t i;
13527     i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
13528     i.rem = 0;
13529     i.index = (char *) i.data - (char *) R;
13530     return i;
13531 }
13532 
13533 int
13534 xcb_input_leave_sizeof (const void  *_buffer  /**< */)
13535 {
13536     return xcb_input_enter_sizeof(_buffer);
13537 }
13538 
13539 int
13540 xcb_input_focus_in_sizeof (const void  *_buffer  /**< */)
13541 {
13542     return xcb_input_enter_sizeof(_buffer);
13543 }
13544 
13545 int
13546 xcb_input_focus_out_sizeof (const void  *_buffer  /**< */)
13547 {
13548     return xcb_input_enter_sizeof(_buffer);
13549 }
13550 
13551 void
13552 xcb_input_hierarchy_info_next (xcb_input_hierarchy_info_iterator_t *i)
13553 {
13554     --i->rem;
13555     ++i->data;
13556     i->index += sizeof(xcb_input_hierarchy_info_t);
13557 }
13558 
13559 xcb_generic_iterator_t
13560 xcb_input_hierarchy_info_end (xcb_input_hierarchy_info_iterator_t i)
13561 {
13562     xcb_generic_iterator_t ret;
13563     ret.data = i.data + i.rem;
13564     ret.index = i.index + ((char *) ret.data - (char *) i.data);
13565     ret.rem = 0;
13566     return ret;
13567 }
13568 
13569 int
13570 xcb_input_hierarchy_sizeof (const void  *_buffer)
13571 {
13572     char *xcb_tmp = (char *)_buffer;
13573     const xcb_input_hierarchy_event_t *_aux = (xcb_input_hierarchy_event_t *)_buffer;
13574     unsigned int xcb_buffer_len = 0;
13575     unsigned int xcb_block_len = 0;
13576     unsigned int xcb_pad = 0;
13577     unsigned int xcb_align_to = 0;
13578 
13579 
13580     xcb_block_len += sizeof(xcb_input_hierarchy_event_t);
13581     xcb_tmp += xcb_block_len;
13582     xcb_buffer_len += xcb_block_len;
13583     xcb_block_len = 0;
13584     /* infos */
13585     xcb_block_len += _aux->num_infos * sizeof(xcb_input_hierarchy_info_t);
13586     xcb_tmp += xcb_block_len;
13587     xcb_align_to = ALIGNOF(xcb_input_hierarchy_info_t);
13588     /* insert padding */
13589     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13590     xcb_buffer_len += xcb_block_len + xcb_pad;
13591     if (0 != xcb_pad) {
13592         xcb_tmp += xcb_pad;
13593         xcb_pad = 0;
13594     }
13595     xcb_block_len = 0;
13596 
13597     return xcb_buffer_len;
13598 }
13599 
13600 xcb_input_hierarchy_info_t *
13601 xcb_input_hierarchy_infos (const xcb_input_hierarchy_event_t *R)
13602 {
13603     return (xcb_input_hierarchy_info_t *) (R + 1);
13604 }
13605 
13606 int
13607 xcb_input_hierarchy_infos_length (const xcb_input_hierarchy_event_t *R)
13608 {
13609     return R->num_infos;
13610 }
13611 
13612 xcb_input_hierarchy_info_iterator_t
13613 xcb_input_hierarchy_infos_iterator (const xcb_input_hierarchy_event_t *R)
13614 {
13615     xcb_input_hierarchy_info_iterator_t i;
13616     i.data = (xcb_input_hierarchy_info_t *) (R + 1);
13617     i.rem = R->num_infos;
13618     i.index = (char *) i.data - (char *) R;
13619     return i;
13620 }
13621 
13622 int
13623 xcb_input_raw_key_press_sizeof (const void  *_buffer)
13624 {
13625     char *xcb_tmp = (char *)_buffer;
13626     const xcb_input_raw_key_press_event_t *_aux = (xcb_input_raw_key_press_event_t *)_buffer;
13627     unsigned int xcb_buffer_len = 0;
13628     unsigned int xcb_block_len = 0;
13629     unsigned int xcb_pad = 0;
13630     unsigned int xcb_align_to = 0;
13631 
13632     int xcb_pre_tmp_1; /* sumof length */
13633     int xcb_pre_tmp_2; /* sumof loop counter */
13634     int64_t xcb_pre_tmp_3; /* sumof sum */
13635     const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
13636     int xcb_pre_tmp_5; /* sumof length */
13637     int xcb_pre_tmp_6; /* sumof loop counter */
13638     int64_t xcb_pre_tmp_7; /* sumof sum */
13639     const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
13640 
13641     xcb_block_len += sizeof(xcb_input_raw_key_press_event_t);
13642     xcb_tmp += xcb_block_len;
13643     xcb_buffer_len += xcb_block_len;
13644     xcb_block_len = 0;
13645     /* valuator_mask */
13646     xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
13647     xcb_tmp += xcb_block_len;
13648     xcb_align_to = ALIGNOF(uint32_t);
13649     /* insert padding */
13650     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13651     xcb_buffer_len += xcb_block_len + xcb_pad;
13652     if (0 != xcb_pad) {
13653         xcb_tmp += xcb_pad;
13654         xcb_pad = 0;
13655     }
13656     xcb_block_len = 0;
13657     /* axisvalues */
13658     /* sumof start */
13659     xcb_pre_tmp_1 = _aux->valuators_len;
13660     xcb_pre_tmp_3 = 0;
13661     xcb_pre_tmp_4 = xcb_input_raw_key_press_valuator_mask(_aux);
13662     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
13663         const uint32_t *xcb_listelement = xcb_pre_tmp_4;
13664         xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
13665         xcb_pre_tmp_4++;
13666     }
13667     /* sumof end. Result is in xcb_pre_tmp_3 */
13668     xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
13669     xcb_tmp += xcb_block_len;
13670     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
13671     /* insert padding */
13672     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13673     xcb_buffer_len += xcb_block_len + xcb_pad;
13674     if (0 != xcb_pad) {
13675         xcb_tmp += xcb_pad;
13676         xcb_pad = 0;
13677     }
13678     xcb_block_len = 0;
13679     /* axisvalues_raw */
13680     /* sumof start */
13681     xcb_pre_tmp_5 = _aux->valuators_len;
13682     xcb_pre_tmp_7 = 0;
13683     xcb_pre_tmp_8 = xcb_input_raw_key_press_valuator_mask(_aux);
13684     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
13685         const uint32_t *xcb_listelement = xcb_pre_tmp_8;
13686         xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
13687         xcb_pre_tmp_8++;
13688     }
13689     /* sumof end. Result is in xcb_pre_tmp_7 */
13690     xcb_block_len += xcb_pre_tmp_7 * sizeof(xcb_input_fp3232_t);
13691     xcb_tmp += xcb_block_len;
13692     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
13693     /* insert padding */
13694     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13695     xcb_buffer_len += xcb_block_len + xcb_pad;
13696     if (0 != xcb_pad) {
13697         xcb_tmp += xcb_pad;
13698         xcb_pad = 0;
13699     }
13700     xcb_block_len = 0;
13701 
13702     return xcb_buffer_len;
13703 }
13704 
13705 uint32_t *
13706 xcb_input_raw_key_press_valuator_mask (const xcb_input_raw_key_press_event_t *R)
13707 {
13708     return (uint32_t *) (R + 1);
13709 }
13710 
13711 int
13712 xcb_input_raw_key_press_valuator_mask_length (const xcb_input_raw_key_press_event_t *R)
13713 {
13714     return R->valuators_len;
13715 }
13716 
13717 xcb_generic_iterator_t
13718 xcb_input_raw_key_press_valuator_mask_end (const xcb_input_raw_key_press_event_t *R)
13719 {
13720     xcb_generic_iterator_t i;
13721     i.data = ((uint32_t *) (R + 1)) + (R->valuators_len);
13722     i.rem = 0;
13723     i.index = (char *) i.data - (char *) R;
13724     return i;
13725 }
13726 
13727 xcb_input_fp3232_t *
13728 xcb_input_raw_key_press_axisvalues (const xcb_input_raw_key_press_event_t *R)
13729 {
13730     xcb_generic_iterator_t prev = xcb_input_raw_key_press_valuator_mask_end(R);
13731     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
13732 }
13733 
13734 int
13735 xcb_input_raw_key_press_axisvalues_length (const xcb_input_raw_key_press_event_t *R)
13736 {
13737     int xcb_pre_tmp_9; /* sumof length */
13738     int xcb_pre_tmp_10; /* sumof loop counter */
13739     int64_t xcb_pre_tmp_11; /* sumof sum */
13740     const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
13741     /* sumof start */
13742     xcb_pre_tmp_9 = R->valuators_len;
13743     xcb_pre_tmp_11 = 0;
13744     xcb_pre_tmp_12 = xcb_input_raw_key_press_valuator_mask(R);
13745     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
13746         const uint32_t *xcb_listelement = xcb_pre_tmp_12;
13747         xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
13748         xcb_pre_tmp_12++;
13749     }
13750     /* sumof end. Result is in xcb_pre_tmp_11 */
13751     return xcb_pre_tmp_11;
13752 }
13753 
13754 xcb_input_fp3232_iterator_t
13755 xcb_input_raw_key_press_axisvalues_iterator (const xcb_input_raw_key_press_event_t *R)
13756 {
13757     xcb_input_fp3232_iterator_t i;
13758     xcb_generic_iterator_t prev = xcb_input_raw_key_press_valuator_mask_end(R);
13759     int xcb_pre_tmp_13; /* sumof length */
13760     int xcb_pre_tmp_14; /* sumof loop counter */
13761     int64_t xcb_pre_tmp_15; /* sumof sum */
13762     const uint32_t* xcb_pre_tmp_16; /* sumof list ptr */
13763     /* sumof start */
13764     xcb_pre_tmp_13 = R->valuators_len;
13765     xcb_pre_tmp_15 = 0;
13766     xcb_pre_tmp_16 = xcb_input_raw_key_press_valuator_mask(R);
13767     for (xcb_pre_tmp_14 = 0; xcb_pre_tmp_14 < xcb_pre_tmp_13; xcb_pre_tmp_14++) {
13768         const uint32_t *xcb_listelement = xcb_pre_tmp_16;
13769         xcb_pre_tmp_15 += xcb_popcount((*xcb_listelement));
13770         xcb_pre_tmp_16++;
13771     }
13772     /* sumof end. Result is in xcb_pre_tmp_15 */
13773     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
13774     i.rem = xcb_pre_tmp_15;
13775     i.index = (char *) i.data - (char *) R;
13776     return i;
13777 }
13778 
13779 xcb_input_fp3232_t *
13780 xcb_input_raw_key_press_axisvalues_raw (const xcb_input_raw_key_press_event_t *R)
13781 {
13782     xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_key_press_axisvalues_iterator(R));
13783     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
13784 }
13785 
13786 int
13787 xcb_input_raw_key_press_axisvalues_raw_length (const xcb_input_raw_key_press_event_t *R)
13788 {
13789     int xcb_pre_tmp_17; /* sumof length */
13790     int xcb_pre_tmp_18; /* sumof loop counter */
13791     int64_t xcb_pre_tmp_19; /* sumof sum */
13792     const uint32_t* xcb_pre_tmp_20; /* sumof list ptr */
13793     /* sumof start */
13794     xcb_pre_tmp_17 = R->valuators_len;
13795     xcb_pre_tmp_19 = 0;
13796     xcb_pre_tmp_20 = xcb_input_raw_key_press_valuator_mask(R);
13797     for (xcb_pre_tmp_18 = 0; xcb_pre_tmp_18 < xcb_pre_tmp_17; xcb_pre_tmp_18++) {
13798         const uint32_t *xcb_listelement = xcb_pre_tmp_20;
13799         xcb_pre_tmp_19 += xcb_popcount((*xcb_listelement));
13800         xcb_pre_tmp_20++;
13801     }
13802     /* sumof end. Result is in xcb_pre_tmp_19 */
13803     return xcb_pre_tmp_19;
13804 }
13805 
13806 xcb_input_fp3232_iterator_t
13807 xcb_input_raw_key_press_axisvalues_raw_iterator (const xcb_input_raw_key_press_event_t *R)
13808 {
13809     xcb_input_fp3232_iterator_t i;
13810     xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_key_press_axisvalues_iterator(R));
13811     int xcb_pre_tmp_21; /* sumof length */
13812     int xcb_pre_tmp_22; /* sumof loop counter */
13813     int64_t xcb_pre_tmp_23; /* sumof sum */
13814     const uint32_t* xcb_pre_tmp_24; /* sumof list ptr */
13815     /* sumof start */
13816     xcb_pre_tmp_21 = R->valuators_len;
13817     xcb_pre_tmp_23 = 0;
13818     xcb_pre_tmp_24 = xcb_input_raw_key_press_valuator_mask(R);
13819     for (xcb_pre_tmp_22 = 0; xcb_pre_tmp_22 < xcb_pre_tmp_21; xcb_pre_tmp_22++) {
13820         const uint32_t *xcb_listelement = xcb_pre_tmp_24;
13821         xcb_pre_tmp_23 += xcb_popcount((*xcb_listelement));
13822         xcb_pre_tmp_24++;
13823     }
13824     /* sumof end. Result is in xcb_pre_tmp_23 */
13825     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
13826     i.rem = xcb_pre_tmp_23;
13827     i.index = (char *) i.data - (char *) R;
13828     return i;
13829 }
13830 
13831 int
13832 xcb_input_raw_key_release_sizeof (const void  *_buffer  /**< */)
13833 {
13834     return xcb_input_raw_key_press_sizeof(_buffer);
13835 }
13836 
13837 int
13838 xcb_input_raw_button_press_sizeof (const void  *_buffer)
13839 {
13840     char *xcb_tmp = (char *)_buffer;
13841     const xcb_input_raw_button_press_event_t *_aux = (xcb_input_raw_button_press_event_t *)_buffer;
13842     unsigned int xcb_buffer_len = 0;
13843     unsigned int xcb_block_len = 0;
13844     unsigned int xcb_pad = 0;
13845     unsigned int xcb_align_to = 0;
13846 
13847     int xcb_pre_tmp_1; /* sumof length */
13848     int xcb_pre_tmp_2; /* sumof loop counter */
13849     int64_t xcb_pre_tmp_3; /* sumof sum */
13850     const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
13851     int xcb_pre_tmp_5; /* sumof length */
13852     int xcb_pre_tmp_6; /* sumof loop counter */
13853     int64_t xcb_pre_tmp_7; /* sumof sum */
13854     const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
13855 
13856     xcb_block_len += sizeof(xcb_input_raw_button_press_event_t);
13857     xcb_tmp += xcb_block_len;
13858     xcb_buffer_len += xcb_block_len;
13859     xcb_block_len = 0;
13860     /* valuator_mask */
13861     xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
13862     xcb_tmp += xcb_block_len;
13863     xcb_align_to = ALIGNOF(uint32_t);
13864     /* insert padding */
13865     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13866     xcb_buffer_len += xcb_block_len + xcb_pad;
13867     if (0 != xcb_pad) {
13868         xcb_tmp += xcb_pad;
13869         xcb_pad = 0;
13870     }
13871     xcb_block_len = 0;
13872     /* axisvalues */
13873     /* sumof start */
13874     xcb_pre_tmp_1 = _aux->valuators_len;
13875     xcb_pre_tmp_3 = 0;
13876     xcb_pre_tmp_4 = xcb_input_raw_button_press_valuator_mask(_aux);
13877     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
13878         const uint32_t *xcb_listelement = xcb_pre_tmp_4;
13879         xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
13880         xcb_pre_tmp_4++;
13881     }
13882     /* sumof end. Result is in xcb_pre_tmp_3 */
13883     xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
13884     xcb_tmp += xcb_block_len;
13885     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
13886     /* insert padding */
13887     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13888     xcb_buffer_len += xcb_block_len + xcb_pad;
13889     if (0 != xcb_pad) {
13890         xcb_tmp += xcb_pad;
13891         xcb_pad = 0;
13892     }
13893     xcb_block_len = 0;
13894     /* axisvalues_raw */
13895     /* sumof start */
13896     xcb_pre_tmp_5 = _aux->valuators_len;
13897     xcb_pre_tmp_7 = 0;
13898     xcb_pre_tmp_8 = xcb_input_raw_button_press_valuator_mask(_aux);
13899     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
13900         const uint32_t *xcb_listelement = xcb_pre_tmp_8;
13901         xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
13902         xcb_pre_tmp_8++;
13903     }
13904     /* sumof end. Result is in xcb_pre_tmp_7 */
13905     xcb_block_len += xcb_pre_tmp_7 * sizeof(xcb_input_fp3232_t);
13906     xcb_tmp += xcb_block_len;
13907     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
13908     /* insert padding */
13909     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
13910     xcb_buffer_len += xcb_block_len + xcb_pad;
13911     if (0 != xcb_pad) {
13912         xcb_tmp += xcb_pad;
13913         xcb_pad = 0;
13914     }
13915     xcb_block_len = 0;
13916 
13917     return xcb_buffer_len;
13918 }
13919 
13920 uint32_t *
13921 xcb_input_raw_button_press_valuator_mask (const xcb_input_raw_button_press_event_t *R)
13922 {
13923     return (uint32_t *) (R + 1);
13924 }
13925 
13926 int
13927 xcb_input_raw_button_press_valuator_mask_length (const xcb_input_raw_button_press_event_t *R)
13928 {
13929     return R->valuators_len;
13930 }
13931 
13932 xcb_generic_iterator_t
13933 xcb_input_raw_button_press_valuator_mask_end (const xcb_input_raw_button_press_event_t *R)
13934 {
13935     xcb_generic_iterator_t i;
13936     i.data = ((uint32_t *) (R + 1)) + (R->valuators_len);
13937     i.rem = 0;
13938     i.index = (char *) i.data - (char *) R;
13939     return i;
13940 }
13941 
13942 xcb_input_fp3232_t *
13943 xcb_input_raw_button_press_axisvalues (const xcb_input_raw_button_press_event_t *R)
13944 {
13945     xcb_generic_iterator_t prev = xcb_input_raw_button_press_valuator_mask_end(R);
13946     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
13947 }
13948 
13949 int
13950 xcb_input_raw_button_press_axisvalues_length (const xcb_input_raw_button_press_event_t *R)
13951 {
13952     int xcb_pre_tmp_9; /* sumof length */
13953     int xcb_pre_tmp_10; /* sumof loop counter */
13954     int64_t xcb_pre_tmp_11; /* sumof sum */
13955     const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
13956     /* sumof start */
13957     xcb_pre_tmp_9 = R->valuators_len;
13958     xcb_pre_tmp_11 = 0;
13959     xcb_pre_tmp_12 = xcb_input_raw_button_press_valuator_mask(R);
13960     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
13961         const uint32_t *xcb_listelement = xcb_pre_tmp_12;
13962         xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
13963         xcb_pre_tmp_12++;
13964     }
13965     /* sumof end. Result is in xcb_pre_tmp_11 */
13966     return xcb_pre_tmp_11;
13967 }
13968 
13969 xcb_input_fp3232_iterator_t
13970 xcb_input_raw_button_press_axisvalues_iterator (const xcb_input_raw_button_press_event_t *R)
13971 {
13972     xcb_input_fp3232_iterator_t i;
13973     xcb_generic_iterator_t prev = xcb_input_raw_button_press_valuator_mask_end(R);
13974     int xcb_pre_tmp_13; /* sumof length */
13975     int xcb_pre_tmp_14; /* sumof loop counter */
13976     int64_t xcb_pre_tmp_15; /* sumof sum */
13977     const uint32_t* xcb_pre_tmp_16; /* sumof list ptr */
13978     /* sumof start */
13979     xcb_pre_tmp_13 = R->valuators_len;
13980     xcb_pre_tmp_15 = 0;
13981     xcb_pre_tmp_16 = xcb_input_raw_button_press_valuator_mask(R);
13982     for (xcb_pre_tmp_14 = 0; xcb_pre_tmp_14 < xcb_pre_tmp_13; xcb_pre_tmp_14++) {
13983         const uint32_t *xcb_listelement = xcb_pre_tmp_16;
13984         xcb_pre_tmp_15 += xcb_popcount((*xcb_listelement));
13985         xcb_pre_tmp_16++;
13986     }
13987     /* sumof end. Result is in xcb_pre_tmp_15 */
13988     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
13989     i.rem = xcb_pre_tmp_15;
13990     i.index = (char *) i.data - (char *) R;
13991     return i;
13992 }
13993 
13994 xcb_input_fp3232_t *
13995 xcb_input_raw_button_press_axisvalues_raw (const xcb_input_raw_button_press_event_t *R)
13996 {
13997     xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_button_press_axisvalues_iterator(R));
13998     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
13999 }
14000 
14001 int
14002 xcb_input_raw_button_press_axisvalues_raw_length (const xcb_input_raw_button_press_event_t *R)
14003 {
14004     int xcb_pre_tmp_17; /* sumof length */
14005     int xcb_pre_tmp_18; /* sumof loop counter */
14006     int64_t xcb_pre_tmp_19; /* sumof sum */
14007     const uint32_t* xcb_pre_tmp_20; /* sumof list ptr */
14008     /* sumof start */
14009     xcb_pre_tmp_17 = R->valuators_len;
14010     xcb_pre_tmp_19 = 0;
14011     xcb_pre_tmp_20 = xcb_input_raw_button_press_valuator_mask(R);
14012     for (xcb_pre_tmp_18 = 0; xcb_pre_tmp_18 < xcb_pre_tmp_17; xcb_pre_tmp_18++) {
14013         const uint32_t *xcb_listelement = xcb_pre_tmp_20;
14014         xcb_pre_tmp_19 += xcb_popcount((*xcb_listelement));
14015         xcb_pre_tmp_20++;
14016     }
14017     /* sumof end. Result is in xcb_pre_tmp_19 */
14018     return xcb_pre_tmp_19;
14019 }
14020 
14021 xcb_input_fp3232_iterator_t
14022 xcb_input_raw_button_press_axisvalues_raw_iterator (const xcb_input_raw_button_press_event_t *R)
14023 {
14024     xcb_input_fp3232_iterator_t i;
14025     xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_button_press_axisvalues_iterator(R));
14026     int xcb_pre_tmp_21; /* sumof length */
14027     int xcb_pre_tmp_22; /* sumof loop counter */
14028     int64_t xcb_pre_tmp_23; /* sumof sum */
14029     const uint32_t* xcb_pre_tmp_24; /* sumof list ptr */
14030     /* sumof start */
14031     xcb_pre_tmp_21 = R->valuators_len;
14032     xcb_pre_tmp_23 = 0;
14033     xcb_pre_tmp_24 = xcb_input_raw_button_press_valuator_mask(R);
14034     for (xcb_pre_tmp_22 = 0; xcb_pre_tmp_22 < xcb_pre_tmp_21; xcb_pre_tmp_22++) {
14035         const uint32_t *xcb_listelement = xcb_pre_tmp_24;
14036         xcb_pre_tmp_23 += xcb_popcount((*xcb_listelement));
14037         xcb_pre_tmp_24++;
14038     }
14039     /* sumof end. Result is in xcb_pre_tmp_23 */
14040     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
14041     i.rem = xcb_pre_tmp_23;
14042     i.index = (char *) i.data - (char *) R;
14043     return i;
14044 }
14045 
14046 int
14047 xcb_input_raw_button_release_sizeof (const void  *_buffer  /**< */)
14048 {
14049     return xcb_input_raw_button_press_sizeof(_buffer);
14050 }
14051 
14052 int
14053 xcb_input_raw_motion_sizeof (const void  *_buffer  /**< */)
14054 {
14055     return xcb_input_raw_button_press_sizeof(_buffer);
14056 }
14057 
14058 int
14059 xcb_input_touch_begin_sizeof (const void  *_buffer)
14060 {
14061     char *xcb_tmp = (char *)_buffer;
14062     const xcb_input_touch_begin_event_t *_aux = (xcb_input_touch_begin_event_t *)_buffer;
14063     unsigned int xcb_buffer_len = 0;
14064     unsigned int xcb_block_len = 0;
14065     unsigned int xcb_pad = 0;
14066     unsigned int xcb_align_to = 0;
14067 
14068     int xcb_pre_tmp_1; /* sumof length */
14069     int xcb_pre_tmp_2; /* sumof loop counter */
14070     int64_t xcb_pre_tmp_3; /* sumof sum */
14071     const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
14072 
14073     xcb_block_len += sizeof(xcb_input_touch_begin_event_t);
14074     xcb_tmp += xcb_block_len;
14075     xcb_buffer_len += xcb_block_len;
14076     xcb_block_len = 0;
14077     /* button_mask */
14078     xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
14079     xcb_tmp += xcb_block_len;
14080     xcb_align_to = ALIGNOF(uint32_t);
14081     /* insert padding */
14082     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
14083     xcb_buffer_len += xcb_block_len + xcb_pad;
14084     if (0 != xcb_pad) {
14085         xcb_tmp += xcb_pad;
14086         xcb_pad = 0;
14087     }
14088     xcb_block_len = 0;
14089     /* valuator_mask */
14090     xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
14091     xcb_tmp += xcb_block_len;
14092     xcb_align_to = ALIGNOF(uint32_t);
14093     /* insert padding */
14094     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
14095     xcb_buffer_len += xcb_block_len + xcb_pad;
14096     if (0 != xcb_pad) {
14097         xcb_tmp += xcb_pad;
14098         xcb_pad = 0;
14099     }
14100     xcb_block_len = 0;
14101     /* axisvalues */
14102     /* sumof start */
14103     xcb_pre_tmp_1 = _aux->valuators_len;
14104     xcb_pre_tmp_3 = 0;
14105     xcb_pre_tmp_4 = xcb_input_touch_begin_valuator_mask(_aux);
14106     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
14107         const uint32_t *xcb_listelement = xcb_pre_tmp_4;
14108         xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
14109         xcb_pre_tmp_4++;
14110     }
14111     /* sumof end. Result is in xcb_pre_tmp_3 */
14112     xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
14113     xcb_tmp += xcb_block_len;
14114     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
14115     /* insert padding */
14116     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
14117     xcb_buffer_len += xcb_block_len + xcb_pad;
14118     if (0 != xcb_pad) {
14119         xcb_tmp += xcb_pad;
14120         xcb_pad = 0;
14121     }
14122     xcb_block_len = 0;
14123 
14124     return xcb_buffer_len;
14125 }
14126 
14127 uint32_t *
14128 xcb_input_touch_begin_button_mask (const xcb_input_touch_begin_event_t *R)
14129 {
14130     return (uint32_t *) (R + 1);
14131 }
14132 
14133 int
14134 xcb_input_touch_begin_button_mask_length (const xcb_input_touch_begin_event_t *R)
14135 {
14136     return R->buttons_len;
14137 }
14138 
14139 xcb_generic_iterator_t
14140 xcb_input_touch_begin_button_mask_end (const xcb_input_touch_begin_event_t *R)
14141 {
14142     xcb_generic_iterator_t i;
14143     i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
14144     i.rem = 0;
14145     i.index = (char *) i.data - (char *) R;
14146     return i;
14147 }
14148 
14149 uint32_t *
14150 xcb_input_touch_begin_valuator_mask (const xcb_input_touch_begin_event_t *R)
14151 {
14152     xcb_generic_iterator_t prev = xcb_input_touch_begin_button_mask_end(R);
14153     return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
14154 }
14155 
14156 int
14157 xcb_input_touch_begin_valuator_mask_length (const xcb_input_touch_begin_event_t *R)
14158 {
14159     return R->valuators_len;
14160 }
14161 
14162 xcb_generic_iterator_t
14163 xcb_input_touch_begin_valuator_mask_end (const xcb_input_touch_begin_event_t *R)
14164 {
14165     xcb_generic_iterator_t i;
14166     xcb_generic_iterator_t prev = xcb_input_touch_begin_button_mask_end(R);
14167     i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->valuators_len);
14168     i.rem = 0;
14169     i.index = (char *) i.data - (char *) R;
14170     return i;
14171 }
14172 
14173 xcb_input_fp3232_t *
14174 xcb_input_touch_begin_axisvalues (const xcb_input_touch_begin_event_t *R)
14175 {
14176     xcb_generic_iterator_t prev = xcb_input_touch_begin_valuator_mask_end(R);
14177     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
14178 }
14179 
14180 int
14181 xcb_input_touch_begin_axisvalues_length (const xcb_input_touch_begin_event_t *R)
14182 {
14183     int xcb_pre_tmp_5; /* sumof length */
14184     int xcb_pre_tmp_6; /* sumof loop counter */
14185     int64_t xcb_pre_tmp_7; /* sumof sum */
14186     const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
14187     /* sumof start */
14188     xcb_pre_tmp_5 = R->valuators_len;
14189     xcb_pre_tmp_7 = 0;
14190     xcb_pre_tmp_8 = xcb_input_touch_begin_valuator_mask(R);
14191     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
14192         const uint32_t *xcb_listelement = xcb_pre_tmp_8;
14193         xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
14194         xcb_pre_tmp_8++;
14195     }
14196     /* sumof end. Result is in xcb_pre_tmp_7 */
14197     return xcb_pre_tmp_7;
14198 }
14199 
14200 xcb_input_fp3232_iterator_t
14201 xcb_input_touch_begin_axisvalues_iterator (const xcb_input_touch_begin_event_t *R)
14202 {
14203     xcb_input_fp3232_iterator_t i;
14204     xcb_generic_iterator_t prev = xcb_input_touch_begin_valuator_mask_end(R);
14205     int xcb_pre_tmp_9; /* sumof length */
14206     int xcb_pre_tmp_10; /* sumof loop counter */
14207     int64_t xcb_pre_tmp_11; /* sumof sum */
14208     const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
14209     /* sumof start */
14210     xcb_pre_tmp_9 = R->valuators_len;
14211     xcb_pre_tmp_11 = 0;
14212     xcb_pre_tmp_12 = xcb_input_touch_begin_valuator_mask(R);
14213     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
14214         const uint32_t *xcb_listelement = xcb_pre_tmp_12;
14215         xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
14216         xcb_pre_tmp_12++;
14217     }
14218     /* sumof end. Result is in xcb_pre_tmp_11 */
14219     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
14220     i.rem = xcb_pre_tmp_11;
14221     i.index = (char *) i.data - (char *) R;
14222     return i;
14223 }
14224 
14225 int
14226 xcb_input_touch_update_sizeof (const void  *_buffer  /**< */)
14227 {
14228     return xcb_input_touch_begin_sizeof(_buffer);
14229 }
14230 
14231 int
14232 xcb_input_touch_end_sizeof (const void  *_buffer  /**< */)
14233 {
14234     return xcb_input_touch_begin_sizeof(_buffer);
14235 }
14236 
14237 int
14238 xcb_input_raw_touch_begin_sizeof (const void  *_buffer)
14239 {
14240     char *xcb_tmp = (char *)_buffer;
14241     const xcb_input_raw_touch_begin_event_t *_aux = (xcb_input_raw_touch_begin_event_t *)_buffer;
14242     unsigned int xcb_buffer_len = 0;
14243     unsigned int xcb_block_len = 0;
14244     unsigned int xcb_pad = 0;
14245     unsigned int xcb_align_to = 0;
14246 
14247     int xcb_pre_tmp_1; /* sumof length */
14248     int xcb_pre_tmp_2; /* sumof loop counter */
14249     int64_t xcb_pre_tmp_3; /* sumof sum */
14250     const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
14251     int xcb_pre_tmp_5; /* sumof length */
14252     int xcb_pre_tmp_6; /* sumof loop counter */
14253     int64_t xcb_pre_tmp_7; /* sumof sum */
14254     const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
14255 
14256     xcb_block_len += sizeof(xcb_input_raw_touch_begin_event_t);
14257     xcb_tmp += xcb_block_len;
14258     xcb_buffer_len += xcb_block_len;
14259     xcb_block_len = 0;
14260     /* valuator_mask */
14261     xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
14262     xcb_tmp += xcb_block_len;
14263     xcb_align_to = ALIGNOF(uint32_t);
14264     /* insert padding */
14265     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
14266     xcb_buffer_len += xcb_block_len + xcb_pad;
14267     if (0 != xcb_pad) {
14268         xcb_tmp += xcb_pad;
14269         xcb_pad = 0;
14270     }
14271     xcb_block_len = 0;
14272     /* axisvalues */
14273     /* sumof start */
14274     xcb_pre_tmp_1 = _aux->valuators_len;
14275     xcb_pre_tmp_3 = 0;
14276     xcb_pre_tmp_4 = xcb_input_raw_touch_begin_valuator_mask(_aux);
14277     for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
14278         const uint32_t *xcb_listelement = xcb_pre_tmp_4;
14279         xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
14280         xcb_pre_tmp_4++;
14281     }
14282     /* sumof end. Result is in xcb_pre_tmp_3 */
14283     xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
14284     xcb_tmp += xcb_block_len;
14285     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
14286     /* insert padding */
14287     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
14288     xcb_buffer_len += xcb_block_len + xcb_pad;
14289     if (0 != xcb_pad) {
14290         xcb_tmp += xcb_pad;
14291         xcb_pad = 0;
14292     }
14293     xcb_block_len = 0;
14294     /* axisvalues_raw */
14295     /* sumof start */
14296     xcb_pre_tmp_5 = _aux->valuators_len;
14297     xcb_pre_tmp_7 = 0;
14298     xcb_pre_tmp_8 = xcb_input_raw_touch_begin_valuator_mask(_aux);
14299     for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
14300         const uint32_t *xcb_listelement = xcb_pre_tmp_8;
14301         xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
14302         xcb_pre_tmp_8++;
14303     }
14304     /* sumof end. Result is in xcb_pre_tmp_7 */
14305     xcb_block_len += xcb_pre_tmp_7 * sizeof(xcb_input_fp3232_t);
14306     xcb_tmp += xcb_block_len;
14307     xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
14308     /* insert padding */
14309     xcb_pad = -xcb_block_len & (xcb_align_to - 1);
14310     xcb_buffer_len += xcb_block_len + xcb_pad;
14311     if (0 != xcb_pad) {
14312         xcb_tmp += xcb_pad;
14313         xcb_pad = 0;
14314     }
14315     xcb_block_len = 0;
14316 
14317     return xcb_buffer_len;
14318 }
14319 
14320 uint32_t *
14321 xcb_input_raw_touch_begin_valuator_mask (const xcb_input_raw_touch_begin_event_t *R)
14322 {
14323     return (uint32_t *) (R + 1);
14324 }
14325 
14326 int
14327 xcb_input_raw_touch_begin_valuator_mask_length (const xcb_input_raw_touch_begin_event_t *R)
14328 {
14329     return R->valuators_len;
14330 }
14331 
14332 xcb_generic_iterator_t
14333 xcb_input_raw_touch_begin_valuator_mask_end (const xcb_input_raw_touch_begin_event_t *R)
14334 {
14335     xcb_generic_iterator_t i;
14336     i.data = ((uint32_t *) (R + 1)) + (R->valuators_len);
14337     i.rem = 0;
14338     i.index = (char *) i.data - (char *) R;
14339     return i;
14340 }
14341 
14342 xcb_input_fp3232_t *
14343 xcb_input_raw_touch_begin_axisvalues (const xcb_input_raw_touch_begin_event_t *R)
14344 {
14345     xcb_generic_iterator_t prev = xcb_input_raw_touch_begin_valuator_mask_end(R);
14346     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
14347 }
14348 
14349 int
14350 xcb_input_raw_touch_begin_axisvalues_length (const xcb_input_raw_touch_begin_event_t *R)
14351 {
14352     int xcb_pre_tmp_9; /* sumof length */
14353     int xcb_pre_tmp_10; /* sumof loop counter */
14354     int64_t xcb_pre_tmp_11; /* sumof sum */
14355     const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
14356     /* sumof start */
14357     xcb_pre_tmp_9 = R->valuators_len;
14358     xcb_pre_tmp_11 = 0;
14359     xcb_pre_tmp_12 = xcb_input_raw_touch_begin_valuator_mask(R);
14360     for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
14361         const uint32_t *xcb_listelement = xcb_pre_tmp_12;
14362         xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
14363         xcb_pre_tmp_12++;
14364     }
14365     /* sumof end. Result is in xcb_pre_tmp_11 */
14366     return xcb_pre_tmp_11;
14367 }
14368 
14369 xcb_input_fp3232_iterator_t
14370 xcb_input_raw_touch_begin_axisvalues_iterator (const xcb_input_raw_touch_begin_event_t *R)
14371 {
14372     xcb_input_fp3232_iterator_t i;
14373     xcb_generic_iterator_t prev = xcb_input_raw_touch_begin_valuator_mask_end(R);
14374     int xcb_pre_tmp_13; /* sumof length */
14375     int xcb_pre_tmp_14; /* sumof loop counter */
14376     int64_t xcb_pre_tmp_15; /* sumof sum */
14377     const uint32_t* xcb_pre_tmp_16; /* sumof list ptr */
14378     /* sumof start */
14379     xcb_pre_tmp_13 = R->valuators_len;
14380     xcb_pre_tmp_15 = 0;
14381     xcb_pre_tmp_16 = xcb_input_raw_touch_begin_valuator_mask(R);
14382     for (xcb_pre_tmp_14 = 0; xcb_pre_tmp_14 < xcb_pre_tmp_13; xcb_pre_tmp_14++) {
14383         const uint32_t *xcb_listelement = xcb_pre_tmp_16;
14384         xcb_pre_tmp_15 += xcb_popcount((*xcb_listelement));
14385         xcb_pre_tmp_16++;
14386     }
14387     /* sumof end. Result is in xcb_pre_tmp_15 */
14388     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
14389     i.rem = xcb_pre_tmp_15;
14390     i.index = (char *) i.data - (char *) R;
14391     return i;
14392 }
14393 
14394 xcb_input_fp3232_t *
14395 xcb_input_raw_touch_begin_axisvalues_raw (const xcb_input_raw_touch_begin_event_t *R)
14396 {
14397     xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_touch_begin_axisvalues_iterator(R));
14398     return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
14399 }
14400 
14401 int
14402 xcb_input_raw_touch_begin_axisvalues_raw_length (const xcb_input_raw_touch_begin_event_t *R)
14403 {
14404     int xcb_pre_tmp_17; /* sumof length */
14405     int xcb_pre_tmp_18; /* sumof loop counter */
14406     int64_t xcb_pre_tmp_19; /* sumof sum */
14407     const uint32_t* xcb_pre_tmp_20; /* sumof list ptr */
14408     /* sumof start */
14409     xcb_pre_tmp_17 = R->valuators_len;
14410     xcb_pre_tmp_19 = 0;
14411     xcb_pre_tmp_20 = xcb_input_raw_touch_begin_valuator_mask(R);
14412     for (xcb_pre_tmp_18 = 0; xcb_pre_tmp_18 < xcb_pre_tmp_17; xcb_pre_tmp_18++) {
14413         const uint32_t *xcb_listelement = xcb_pre_tmp_20;
14414         xcb_pre_tmp_19 += xcb_popcount((*xcb_listelement));
14415         xcb_pre_tmp_20++;
14416     }
14417     /* sumof end. Result is in xcb_pre_tmp_19 */
14418     return xcb_pre_tmp_19;
14419 }
14420 
14421 xcb_input_fp3232_iterator_t
14422 xcb_input_raw_touch_begin_axisvalues_raw_iterator (const xcb_input_raw_touch_begin_event_t *R)
14423 {
14424     xcb_input_fp3232_iterator_t i;
14425     xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_touch_begin_axisvalues_iterator(R));
14426     int xcb_pre_tmp_21; /* sumof length */
14427     int xcb_pre_tmp_22; /* sumof loop counter */
14428     int64_t xcb_pre_tmp_23; /* sumof sum */
14429     const uint32_t* xcb_pre_tmp_24; /* sumof list ptr */
14430     /* sumof start */
14431     xcb_pre_tmp_21 = R->valuators_len;
14432     xcb_pre_tmp_23 = 0;
14433     xcb_pre_tmp_24 = xcb_input_raw_touch_begin_valuator_mask(R);
14434     for (xcb_pre_tmp_22 = 0; xcb_pre_tmp_22 < xcb_pre_tmp_21; xcb_pre_tmp_22++) {
14435         const uint32_t *xcb_listelement = xcb_pre_tmp_24;
14436         xcb_pre_tmp_23 += xcb_popcount((*xcb_listelement));
14437         xcb_pre_tmp_24++;
14438     }
14439     /* sumof end. Result is in xcb_pre_tmp_23 */
14440     i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
14441     i.rem = xcb_pre_tmp_23;
14442     i.index = (char *) i.data - (char *) R;
14443     return i;
14444 }
14445 
14446 int
14447 xcb_input_raw_touch_update_sizeof (const void  *_buffer  /**< */)
14448 {
14449     return xcb_input_raw_touch_begin_sizeof(_buffer);
14450 }
14451 
14452 int
14453 xcb_input_raw_touch_end_sizeof (const void  *_buffer  /**< */)
14454 {
14455     return xcb_input_raw_touch_begin_sizeof(_buffer);
14456 }
14457 
14458