void set_focus_client(client_t *client) { xcb_void_cookie_t c = xcb_set_input_focus_checked(wm_conf.connection, XCB_INPUT_FOCUS_POINTER_ROOT, client->window, XCB_CURRENT_TIME); xcb_generic_error_t *e = xcb_request_check(wm_conf.connection, c); if (e) { fprintf(stderr, "xcb_set_input_focus_checked error: %s\n", xcb_event_get_error_label(e->error_code)); free(e); } }
/** \brief awesome xerror function. * There's no way to check accesses to destroyed windows, thus those cases are * ignored (especially on UnmapNotify's). * \param e The error event. */ static void xerror(xcb_generic_error_t *e) { /* ignore this */ if(e->error_code == XCB_WINDOW || (e->error_code == XCB_MATCH && e->major_code == XCB_SET_INPUT_FOCUS) || (e->error_code == XCB_VALUE && e->major_code == XCB_KILL_CLIENT) || (e->error_code == XCB_MATCH && e->major_code == XCB_CONFIGURE_WINDOW)) return; warn("X error: request=%s (major %d, minor %d), error=%s (%d)", xcb_event_get_request_label(e->major_code), e->major_code, e->minor_code, xcb_event_get_error_label(e->error_code), e->error_code); return; }
/* 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); } }
void print_x_error(xcb_generic_error_t *error) { uint8_t error_code = error->error_code; fprintf(stderr, "X error %d: %s\n", error_code, xcb_event_get_error_label(error_code)); }
void process_error(xcb_generic_event_t *evt) { xcb_request_error_t *e = (xcb_request_error_t *) evt; warn("Failed request: %s, %s: %d.\n", xcb_event_get_request_label(e->major_opcode), xcb_event_get_error_label(e->error_code), e->bad_value); }