struct ds_seat *seat;
struct ds_surface *old_surface, *new_surface;
};
+struct ds_seat_pointer_grab;
+
+struct ds_pointer_grab_interface
+{
+ void (*enter)(struct ds_seat_pointer_grab *grab,
+ struct ds_surface *surface, double sx, double sy);
+ void (*clear_focus)(struct ds_seat_pointer_grab *grab);
+ void (*motion)(struct ds_seat_pointer_grab *grab, uint32_t time_msec,
+ double sx, double sy);
+ uint32_t (*button)(struct ds_seat_pointer_grab *grab, uint32_t time_msec,
+ uint32_t button, enum ds_button_state state);
+ void (*axis)(struct ds_seat_pointer_grab *grab, uint32_t time_msec,
+ enum ds_axis_orientation orientation, double value,
+ int32_t value_discrete, enum ds_axis_source source);
+ void (*frame)(struct ds_seat_pointer_grab *grab);
+ void (*cancel)(struct ds_seat_pointer_grab *grab);
+};
+
+struct ds_seat_keyboard_grab;
+
+struct ds_keyboard_grab_interface
+{
+ void (*enter)(struct ds_seat_keyboard_grab *grab,
+ struct ds_surface *surface, uint32_t keycodes[],
+ size_t num_keycodes, struct ds_keyboard_modifiers *modifiers);
+ void (*clear_focus)(struct ds_seat_keyboard_grab *grab);
+ void (*key)(struct ds_seat_keyboard_grab *grab, uint32_t time_msec,
+ uint32_t key, uint32_t state);
+ void (*modifiers)(struct ds_seat_keyboard_grab *grab,
+ struct ds_keyboard_modifiers *modifiers);
+ void (*cancel)(struct ds_seat_keyboard_grab *grab);
+};
+
+struct ds_touch_point;
+struct ds_seat_touch_grab;
+
+struct ds_touch_grab_interface
+{
+ uint32_t (*down)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
+ struct ds_touch_point *point);
+ void (*up)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
+ struct ds_touch_point *point);
+ void (*motion)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
+ struct ds_touch_point *point);
+ void (*enter)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
+ struct ds_touch_point *point);
+ void (*frame)(struct ds_seat_touch_grab *grab);
+ void (*cancel)(struct ds_seat_touch_grab *grab);
+};
struct ds_seat *ds_seat_create(struct wl_display *display, const char *name);
void ds_seat_pointer_notify_frame(struct ds_seat *seat);
+void ds_seat_pointer_start_grab(struct ds_seat *seat,
+ struct ds_seat_pointer_grab *grab);
+
+void ds_seat_pointer_end_grab(struct ds_seat *seat);
+
void ds_seat_pointer_add_grab_begin_listener(struct ds_seat *seat,
struct wl_listener *listener);
void ds_seat_keyboard_notify_key(struct ds_seat *seat, uint32_t time_msec,
uint32_t key, uint32_t state);
+struct ds_seat_keyboard_grab *ds_seat_create_keyboard_grab(struct ds_seat *seat,
+ const struct ds_keyboard_grab_interface *iface, void *data);
+
+void ds_seat_keyboard_destroy_grab(struct ds_seat_keyboard_grab *grab);
+
+void *ds_seat_keyboard_grab_get_data(struct ds_seat_keyboard_grab *grab);
+
+void ds_seat_keyboard_start_grab(struct ds_seat *seat,
+ struct ds_seat_keyboard_grab *grab);
+
+void ds_seat_keyboard_end_grab(struct ds_seat *seat);
+
void ds_seat_keyboard_add_grab_begin_listener(struct ds_seat *seat,
struct wl_listener *listener);
void ds_seat_touch_notify_frame(struct ds_seat *seat);
+void ds_seat_touch_start_grab(struct ds_seat *seat,
+ struct ds_seat_touch_grab *grab);
+
+void ds_seat_touch_end_grab(struct ds_seat *seat);
+
void ds_seat_touch_add_grab_start_listener(struct ds_seat *seat,
struct wl_listener *listener);
#include "libds/keyboard.h"
#include "libds/seat.h"
-struct ds_seat_pointer_grab;
-
-struct ds_pointer_grab_interface
-{
- void (*enter)(struct ds_seat_pointer_grab *grab,
- struct ds_surface *surface, double sx, double sy);
- void (*clear_focus)(struct ds_seat_pointer_grab *grab);
- void (*motion)(struct ds_seat_pointer_grab *grab, uint32_t time_msec,
- double sx, double sy);
- uint32_t (*button)(struct ds_seat_pointer_grab *grab, uint32_t time_msec,
- uint32_t button, enum ds_button_state state);
- void (*axis)(struct ds_seat_pointer_grab *grab, uint32_t time_msec,
- enum ds_axis_orientation orientation, double value,
- int32_t value_discrete, enum ds_axis_source source);
- void (*frame)(struct ds_seat_pointer_grab *grab);
- void (*cancel)(struct ds_seat_pointer_grab *grab);
-};
-
-struct ds_seat_keyboard_grab;
-
-struct ds_keyboard_grab_interface
-{
- void (*enter)(struct ds_seat_keyboard_grab *grab,
- struct ds_surface *surface, uint32_t keycodes[],
- size_t num_keycodes, struct ds_keyboard_modifiers *modifiers);
- void (*clear_focus)(struct ds_seat_keyboard_grab *grab);
- void (*key)(struct ds_seat_keyboard_grab *grab, uint32_t time_msec,
- uint32_t key, uint32_t state);
- void (*modifiers)(struct ds_seat_keyboard_grab *grab,
- struct ds_keyboard_modifiers *modifiers);
- void (*cancel)(struct ds_seat_keyboard_grab *grab);
-};
-
-struct ds_touch_point;
-
-struct ds_seat_touch_grab;
-
-struct ds_touch_grab_interface
-{
- uint32_t (*down)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
- struct ds_touch_point *point);
- void (*up)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
- struct ds_touch_point *point);
- void (*motion)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
- struct ds_touch_point *point);
- void (*enter)(struct ds_seat_touch_grab *grab, uint32_t time_msec,
- struct ds_touch_point *point);
- void (*frame)(struct ds_seat_touch_grab *grab);
- void (*cancel)(struct ds_seat_touch_grab *grab);
-};
+struct ds_pointer_grab_interface;
struct ds_seat_pointer_grab
{
void *data;
};
+struct ds_keyboard_grab_interface;
+
struct ds_seat_keyboard_grab
{
const struct ds_keyboard_grab_interface *iface;
void *data;
};
+struct ds_touch_grab_interface;
+
struct ds_seat_touch_grab
{
const struct ds_touch_grab_interface *iface;
void *data;
};
-void ds_seat_pointer_start_grab(struct ds_seat *seat,
- struct ds_seat_pointer_grab *grab);
-
-void ds_seat_pointer_end_grab(struct ds_seat *seat);
-
void ds_seat_pointer_enter(struct ds_seat *seat, struct ds_surface *surface,
double sx, double sy);
void ds_seat_pointer_send_frame(struct ds_seat *seat);
-void ds_seat_keyboard_start_grab(struct ds_seat *seat,
- struct ds_seat_keyboard_grab *grab);
-
-void ds_seat_keyboard_end_grab(struct ds_seat *seat);
-
void ds_seat_keyboard_enter(struct ds_seat *seat, struct ds_surface *surface,
uint32_t keycodes[], size_t num_keycodes,
struct ds_keyboard_modifiers *modifiers);
void ds_seat_keyboard_send_modifiers(struct ds_seat *seat,
struct ds_keyboard_modifiers *modifiers);
-void ds_seat_touch_start_grab(struct ds_seat *seat,
- struct ds_seat_touch_grab *grab);
-
-void ds_seat_touch_end_grab(struct ds_seat *seat);
-
uint32_t ds_seat_touch_send_down(struct ds_seat *seat,
struct ds_surface *surface, uint32_t time_msec, int32_t touch_id,
double sx, double sy);
wl_signal_emit(&seat->events.keyboard_grab_begin, grab);
}
+struct ds_seat_keyboard_grab *
+ds_seat_create_keyboard_grab(struct ds_seat *seat,
+ const struct ds_keyboard_grab_interface *iface, void *data)
+{
+ struct ds_seat_keyboard_grab *grab;
+
+ grab = calloc(1, sizeof *grab);
+ if (!grab)
+ {
+ return NULL;
+ }
+
+ grab->iface = iface;
+ grab->seat = seat;
+ grab->data = data;
+
+ return grab;
+}
+
+void
+ds_seat_keyboard_destroy_grab(struct ds_seat_keyboard_grab *grab)
+{
+ free(grab);
+}
+
+void *
+ds_seat_keyboard_grab_get_data(struct ds_seat_keyboard_grab *grab)
+{
+ return grab->data;
+}
+
void
ds_seat_keyboard_end_grab(struct ds_seat *seat)
{