request set_cursor {
    serial: u32,
    surface: id(wl_surface),
    hotspot_x: i32,
    hotspot_y: i32,
}

event enter {
    serial: u32,
    surface: id(wl_surface),
    surface_x: fixed,
    surface_y: fixed,
}

event leave {
    serial: u32,
    surface: id(wl_surface),
}

event motion {
    time: u32,
    surface_x: fixed,
    surface_y: fixed,
}

event button {
    serial: u32,
    time: u32,
    button: u32,
    state: u32,
}

event axis {
    time: u32,
    axis: u32,
    value: fixed,
}

request release (destructor, since = 3) {
}

event frame (since = 5) {
}

event axis_source (since = 5) {
    axis_source: u32,
}

event axis_stop (since = 5) {
    time: u32,
    axis: u32,
}

event axis_discrete (since = 5) {
    axis: u32,
    discrete: i32,
}

event axis_value120 (since = 8) {
    axis: u32,
    value120: i32,
}

event axis_relative_direction (since = 9) {
    axis: u32,
    direction: u32,
}
