- xcb_window_t xcb = event->event == root ?
- event->child : event->event;
- win_t *win = win_get(xcb);
- ptr_t ptr = list_to_ptr(&event->root_x);
- printf("on_motion_notify: xcb=%u -> win=%p - %d,%d / %d.%d\n", xcb, win,
- ptr.x, ptr.y, ptr.rx, ptr.ry);
- wm_handle_ptr(win, ptr);
+ 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);