Exemple #1
0
/* Handle a single event executing the handlers within its queue.
 * Prints an event dumb in case of empty queue. */
static void _handle(xcb_generic_event_t *e) {
    uint8_t sendEvent;
    uint16_t seq_num;
    fwm_eq_node_t *next_node;
    uint8_t response_type;
    fwm_eq_head_t *head;
    xcb_generic_error_t *er;

    /* Iterate queued handlers, if any. */
    response_type = XCB_EVENT_RESPONSE_TYPE(e);
    if (response_type) {
        head = _this.evenths_queue[response_type - 2];
        if (head != NULL) {
            next_node = head->first;
            while (next_node != NULL) {
                ((fwm_event_handler_t) (next_node->handler))(e);
                next_node = next_node->next;
            }
        }
    } else {
        /* Or format event if not to be handled. */
        sendEvent = response_type ? 1 : 0;
        seq_num = *((uint16_t *) e + 1);
        switch (response_type) {
            case 0:
                er = (xcb_generic_error_t *) e;
                printf("Error (%s) on sequence number %d.\n",
                        xcb_event_get_error_label(er->error_code), seq_num);
                break;
            default:
                printf("Unhandler event (%s) following seqnum %d.\n",
                        xcb_event_get_label(response_type), seq_num);
                break;
        }
        fflush(stdout);
    }
}
Exemple #2
0
void print_x_event(xcb_generic_event_t *event)
{
    uint8_t event_type = XCB_EVENT_RESPONSE_TYPE(event);
    const char *label = xcb_event_get_label(event_type);
    fprintf(stderr, "X event %d : %s\n", event_type, label);
}