#include <config.h>
#endif
+#include <assert.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
xcb_atom_t atom;
uint32_t *k;
uint32_t i, set;
+ uint8_t response_type;
int count;
prev = NULL;
count = 0;
while (x11_compositor_next_event(c, &event, mask)) {
+ response_type = event->response_type & ~0x80;
+
switch (prev ? prev->response_type & ~0x80 : 0x80) {
case XCB_KEY_RELEASE:
/* Suppress key repeat events; this is only used if we
* don't have XCB XKB support. */
key_release = (xcb_key_press_event_t *) prev;
key_press = (xcb_key_press_event_t *) event;
- if ((event->response_type & ~0x80) == XCB_KEY_PRESS &&
+ if (response_type == XCB_KEY_PRESS &&
key_release->time == key_press->time &&
key_release->detail == key_press->detail) {
/* Don't deliver the held key release
}
case XCB_FOCUS_IN:
- /* assert event is keymap_notify */
- focus_in = (xcb_focus_in_event_t *) prev;
+ assert(response_type == XCB_KEYMAP_NOTIFY);
keymap_notify = (xcb_keymap_notify_event_t *) event;
c->keys.size = 0;
for (i = 0; i < ARRAY_LENGTH(keymap_notify->keys) * 8; i++) {
}
}
- output = x11_compositor_find_output(c, focus_in->event);
/* Unfortunately the state only comes with the enter
* event, rather than with the focus event. I'm not
* sure of the exact semantics around it and whether
break;
}
- switch (event->response_type & ~0x80) {
+ switch (response_type) {
case XCB_KEY_PRESS:
key_press = (xcb_key_press_event_t *) event;
if (!c->has_xkb)
break;
if (!c->has_xkb)
update_xkb_state_from_core(c, enter_notify->state);
- output = x11_compositor_find_output(c, enter_notify->event);
notify_pointer_focus(&c->core_seat, NULL, 0, 0);
break;
#ifdef HAVE_XCB_XKB
if (c->has_xkb &&
- (event->response_type & ~0x80) == c->xkb_event_base) {
+ response_type == c->xkb_event_base) {
xcb_xkb_state_notify_event_t *state =
(xcb_xkb_state_notify_event_t *) event;
if (state->xkbType == XCB_XKB_STATE_NOTIFY)