int evdev_device_process_event(struct libinput_event *event) { struct libinput_device *libinput_device = libinput_event_get_device(event); int handled = 1; switch (libinput_event_get_type(event)) { case LIBINPUT_EVENT_KEYBOARD_KEY: handle_keyboard_key(libinput_device, libinput_event_get_keyboard_event(event)); break; case LIBINPUT_EVENT_POINTER_MOTION: handle_pointer_motion(libinput_device, libinput_event_get_pointer_event(event)); break; case LIBINPUT_EVENT_POINTER_MOTION_ABSOLUTE: handle_pointer_motion_absolute( libinput_device, libinput_event_get_pointer_event(event)); break; case LIBINPUT_EVENT_POINTER_BUTTON: handle_pointer_button(libinput_device, libinput_event_get_pointer_event(event)); break; case LIBINPUT_EVENT_POINTER_AXIS: handle_pointer_axis(libinput_device, libinput_event_get_pointer_event(event)); break; case LIBINPUT_EVENT_TOUCH_DOWN: handle_touch_down(libinput_device, libinput_event_get_touch_event(event)); break; case LIBINPUT_EVENT_TOUCH_MOTION: handle_touch_motion(libinput_device, libinput_event_get_touch_event(event)); break; case LIBINPUT_EVENT_TOUCH_UP: handle_touch_up(libinput_device, libinput_event_get_touch_event(event)); break; case LIBINPUT_EVENT_TOUCH_FRAME: handle_touch_frame(libinput_device, libinput_event_get_touch_event(event)); break; default: handled = 0; weston_log("unknown libinput event %d\n", libinput_event_get_type(event)); } return handled; }
void default_pointer_handler(XEvent *ev) { XEvent tmp; Window win_pressed; WThing *t; bool mouse_grab_held=FALSE; if(grab_held()) return; win_pressed=ev->xbutton.window; if(!handle_button_press(&ev->xbutton)) return; mouse_grab_held=TRUE; while(mouse_grab_held){ XFlush(wglobal.dpy); get_event_mask(ev, GRAB_EV_MASK); switch(ev->type){ CASE_EVENT(ButtonRelease) if(handle_button_release(&(ev->xbutton))){ ungrab_kb_ptr(); mouse_grab_held=FALSE; } break; CASE_EVENT(MotionNotify) handle_pointer_motion(&(ev->xmotion)); break; CASE_EVENT(Expose) handle_expose(&(ev->xexpose)); break; } } }