wlr-seat: pointer state button info

This commit is contained in:
Tony Crisci 2017-10-16 06:31:53 -04:00
parent 34f27ff691
commit 3f3110452c
2 changed files with 25 additions and 4 deletions

View File

@ -75,11 +75,16 @@ struct wlr_seat_pointer_state {
struct wlr_seat_handle *focused_handle;
struct wlr_surface *focused_surface;
struct wl_listener surface_destroy;
struct wl_listener resource_destroy;
struct wlr_seat_pointer_grab *grab;
struct wlr_seat_pointer_grab *default_grab;
uint32_t button_count;
uint32_t grab_button;
uint32_t grab_serial;
uint32_t grab_time;
struct wl_listener surface_destroy;
struct wl_listener resource_destroy;
};
struct wlr_seat_keyboard {

View File

@ -538,8 +538,24 @@ void wlr_seat_pointer_notify_motion(struct wlr_seat *wlr_seat, uint32_t time,
uint32_t wlr_seat_pointer_notify_button(struct wlr_seat *wlr_seat,
uint32_t time, uint32_t button, uint32_t state) {
if (state == WL_POINTER_BUTTON_STATE_PRESSED) {
if (wlr_seat->pointer_state.button_count == 0) {
wlr_seat->pointer_state.grab_button = button;
wlr_seat->pointer_state.grab_time = time;
}
wlr_seat->pointer_state.button_count++;
} else {
wlr_seat->pointer_state.button_count--;
}
struct wlr_seat_pointer_grab *grab = wlr_seat->pointer_state.grab;
return grab->interface->button(grab, time, button, state);
uint32_t serial = grab->interface->button(grab, time, button, state);
if (wlr_seat->pointer_state.button_count == 1) {
wlr_seat->pointer_state.grab_serial = serial;
}
return serial;
}
void wlr_seat_pointer_notify_axis(struct wlr_seat *wlr_seat, uint32_t time,