+static void on_key_event(xcb_key_press_event_t *event, int up)
+{
+ printf("on_key_event: xcb=%-8u\n", event->event);
+ event_t ev = keycode_to_event(event->detail);
+ send_event_info(ev, event->state, up, &event->root_x,
+ event->root, event->event, event->child);
+}
+
+static void on_button_event(xcb_button_press_event_t *event, int up)
+{
+ printf("on_button_event: xcb=%-8u\n", event->event);
+ event_t ev = button_to_event(event->detail);
+ if (!send_event_info(ev, event->state, up, &event->root_x,
+ event->root, event->event, event->child))
+ xcb_allow_events(conn, XCB_ALLOW_REPLAY_POINTER, event->time);
+ else if (!up)
+ do_grab_pointer(XCB_EVENT_MASK_POINTER_MOTION |
+ XCB_EVENT_MASK_BUTTON_RELEASE);
+ else
+ do_ungrab_pointer();
+
+}
+
+static void on_motion_notify(xcb_motion_notify_event_t *event)
+{
+ printf("on_motion_notify: xcb=%-8u - %d,%d / %d.%d\n", event->event,
+ event->event_x, event->event_y,
+ event->root_x, event->root_y);
+ send_pointer(&event->root_x, event->root, event->event, event->child);
+}
+
+static void on_enter_notify(xcb_enter_notify_event_t *event)
+{
+ if (event->mode != XCB_NOTIFY_MODE_NORMAL)
+ return;
+ printf("on_enter_notify: xcb=%-8u\n", event->event);
+ send_event_info(EV_ENTER, event->state, 0, &event->root_x,
+ event->root, event->event, event->child);
+}
+
+static void on_leave_notify(xcb_leave_notify_event_t *event)
+{
+ if (event->mode != XCB_NOTIFY_MODE_NORMAL)
+ return;
+ printf("on_leave_notify: xcb=%-8u\n", event->event);
+ send_event_info(EV_LEAVE, event->state, 0, &event->root_x,
+ event->root, event->event, event->child);
+}
+
+static void on_focus_in(xcb_focus_in_event_t *event)
+{
+ if (event->mode != XCB_NOTIFY_MODE_NORMAL &&
+ event->mode != XCB_NOTIFY_MODE_WHILE_GRABBED)
+ return;
+ printf("on_focus_in: xcb=%-8u mode=%d\n", event->event, event->mode);
+ xcb_change_window_attributes(conn, event->event,
+ XCB_CW_BORDER_PIXEL, &colors[CLR_FOCUS]);
+ if (event->mode == XCB_NOTIFY_MODE_NORMAL)
+ send_event(EV_FOCUS, event->event);
+}
+
+static void on_focus_out(xcb_focus_out_event_t *event)
+{
+ if (event->mode != XCB_NOTIFY_MODE_NORMAL &&
+ event->mode != XCB_NOTIFY_MODE_WHILE_GRABBED)
+ return;
+ printf("on_focus_out: xcb=%-8u mode=%d\n", event->event, event->mode);
+ xcb_change_window_attributes(conn, event->event,
+ XCB_CW_BORDER_PIXEL, &colors[CLR_UNFOCUS]);
+ if (event->mode == XCB_NOTIFY_MODE_NORMAL)
+ send_event(EV_UNFOCUS, event->event);
+}
+