+keyrelease(XEvent *e) {
+ XKeyEvent *ev;
+ ev = &e->xkey;
+ // fprintf(stderr, "key UP %i\n", ev->keycode);
+ if(key_buffering) {
+ if(key_buffer_len == LENGTH(key_buffer)) {
+ // buffer full, bail
+ key_buffer_len = 0;
+ key_buffering = False;
+ } else {
+ key_buffer[key_buffer_len].keycode = (KeyCode)ev->keycode;
+ key_buffer[key_buffer_len].state = ev->state;
+ key_buffer[key_buffer_len].type = KeyRelease;
+ key_buffer_len += 1;
+ }
+ } else {
+ send_key_event(KeyRelease, (KeyCode)ev->keycode, ev->state);
+ }
+}
+
+void