Update wlr_seat and friends to new compositor

This commit is contained in:
Scott Anderson 2019-05-16 19:00:53 +12:00
parent 8630988eae
commit 841031031e
12 changed files with 159 additions and 142 deletions

View file

@ -12,6 +12,8 @@
#include <wayland-server.h>
#include <wlr/types/wlr_seat.h>
struct wlr_surface_2;
extern const struct wlr_pointer_grab_interface
wlr_data_device_pointer_drag_interface;
@ -93,7 +95,7 @@ struct wlr_drag;
struct wlr_drag_icon {
struct wlr_drag *drag;
struct wlr_surface *surface;
struct wlr_surface_2 *surface;
bool mapped;
struct {
@ -102,6 +104,7 @@ struct wlr_drag_icon {
struct wl_signal destroy;
} events;
struct wl_listener surface_commit;
struct wl_listener surface_destroy;
void *data;
@ -124,7 +127,7 @@ struct wlr_drag {
struct wlr_seat_client *focus_client;
struct wlr_drag_icon *icon; // can be NULL
struct wlr_surface *focus; // can be NULL
struct wlr_surface_2 *focus; // can be NULL
struct wlr_data_source *source; // can be NULL
bool started, dropped, cancelling;
@ -187,13 +190,13 @@ void wlr_seat_set_selection(struct wlr_seat *seat,
* `wlr_seat_request_start_drag`.
*/
struct wlr_drag *wlr_drag_create(struct wlr_seat_client *seat_client,
struct wlr_data_source *source, struct wlr_surface *icon_surface);
struct wlr_data_source *source, struct wlr_surface_2 *icon_surface);
/**
* Requests a drag to be started on the seat.
*/
void wlr_seat_request_start_drag(struct wlr_seat *seat, struct wlr_drag *drag,
struct wlr_surface *origin, uint32_t serial);
struct wlr_surface_2 *origin, uint32_t serial);
/**
* Starts a drag on the seat. This starts an implicit keyboard grab, but doesn't

View file

@ -13,7 +13,8 @@
#include <wayland-server.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_keyboard.h>
#include <wlr/types/wlr_surface.h>
struct wlr_surface_2;
/**
* Contains state for a single client's bound wl_seat resource and can be used
@ -39,10 +40,10 @@ struct wlr_seat_client {
struct wlr_touch_point {
int32_t touch_id;
struct wlr_surface *surface;
struct wlr_surface_2 *surface;
struct wlr_seat_client *client;
struct wlr_surface *focus_surface;
struct wlr_surface_2 *focus_surface;
struct wlr_seat_client *focus_client;
double sx, sy;
@ -60,7 +61,7 @@ struct wlr_seat_pointer_grab;
struct wlr_pointer_grab_interface {
void (*enter)(struct wlr_seat_pointer_grab *grab,
struct wlr_surface *surface, double sx, double sy);
struct wlr_surface_2 *surface, double sx, double sy);
void (*motion)(struct wlr_seat_pointer_grab *grab, uint32_t time_msec,
double sx, double sy);
uint32_t (*button)(struct wlr_seat_pointer_grab *grab, uint32_t time_msec,
@ -76,7 +77,7 @@ struct wlr_seat_keyboard_grab;
struct wlr_keyboard_grab_interface {
void (*enter)(struct wlr_seat_keyboard_grab *grab,
struct wlr_surface *surface, uint32_t keycodes[],
struct wlr_surface_2 *surface, uint32_t keycodes[],
size_t num_keycodes, struct wlr_keyboard_modifiers *modifiers);
void (*key)(struct wlr_seat_keyboard_grab *grab, uint32_t time_msec,
uint32_t key, uint32_t state);
@ -134,7 +135,7 @@ struct wlr_seat_pointer_grab {
struct wlr_seat_pointer_state {
struct wlr_seat *seat;
struct wlr_seat_client *focused_client;
struct wlr_surface *focused_surface;
struct wlr_surface_2 *focused_surface;
double sx, sy;
struct wlr_seat_pointer_grab *grab;
@ -158,7 +159,7 @@ struct wlr_seat_keyboard_state {
struct wlr_keyboard *keyboard;
struct wlr_seat_client *focused_client;
struct wlr_surface *focused_surface;
struct wlr_surface_2 *focused_surface;
struct wl_listener keyboard_destroy;
struct wl_listener keyboard_keymap;
@ -250,7 +251,7 @@ struct wlr_seat {
struct wlr_seat_pointer_request_set_cursor_event {
struct wlr_seat_client *seat_client;
struct wlr_surface *surface;
struct wlr_surface_2 *surface;
uint32_t serial;
int32_t hotspot_x, hotspot_y;
};
@ -267,19 +268,19 @@ struct wlr_seat_request_set_primary_selection_event {
struct wlr_seat_request_start_drag_event {
struct wlr_drag *drag;
struct wlr_surface *origin;
struct wlr_surface_2 *origin;
uint32_t serial;
};
struct wlr_seat_pointer_focus_change_event {
struct wlr_seat *seat;
struct wlr_surface *old_surface, *new_surface;
struct wlr_surface_2 *old_surface, *new_surface;
double sx, sy;
};
struct wlr_seat_keyboard_focus_change_event {
struct wlr_seat *seat;
struct wlr_surface *old_surface, *new_surface;
struct wlr_surface_2 *old_surface, *new_surface;
};
/**
@ -312,7 +313,7 @@ void wlr_seat_set_name(struct wlr_seat *wlr_seat, const char *name);
* Whether or not the surface has pointer focus
*/
bool wlr_seat_pointer_surface_has_focus(struct wlr_seat *wlr_seat,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
/**
* Send a pointer enter event to the given surface and consider it to be the
@ -322,7 +323,7 @@ bool wlr_seat_pointer_surface_has_focus(struct wlr_seat *wlr_seat,
* focus to respect pointer grabs.
*/
void wlr_seat_pointer_enter(struct wlr_seat *wlr_seat,
struct wlr_surface *surface, double sx, double sy);
struct wlr_surface_2 *surface, double sx, double sy);
/**
* Clear the focused surface for the pointer and leave all entered surfaces.
@ -382,7 +383,7 @@ void wlr_seat_pointer_end_grab(struct wlr_seat *wlr_seat);
* where the enter occurred.
*/
void wlr_seat_pointer_notify_enter(struct wlr_seat *wlr_seat,
struct wlr_surface *surface, double sx, double sy);
struct wlr_surface_2 *surface, double sx, double sy);
/**
* Notify the seat of motion over the given surface. Pass surface-local
@ -474,7 +475,7 @@ void wlr_seat_keyboard_notify_modifiers(struct wlr_seat *seat,
* keyboard.
*/
void wlr_seat_keyboard_notify_enter(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_surface_2 *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_keyboard_modifiers *modifiers);
/**
@ -485,7 +486,7 @@ void wlr_seat_keyboard_notify_enter(struct wlr_seat *seat,
* keyboard grabs.
*/
void wlr_seat_keyboard_enter(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_surface_2 *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_keyboard_modifiers *modifiers);
/**
@ -523,7 +524,7 @@ struct wlr_touch_point *wlr_seat_touch_get_point(struct wlr_seat *seat,
* the touch device.
*/
uint32_t wlr_seat_touch_notify_down(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t time_msec,
struct wlr_surface_2 *surface, uint32_t time_msec,
int32_t touch_id, double sx, double sy);
/**
@ -548,7 +549,7 @@ void wlr_seat_touch_notify_motion(struct wlr_seat *seat, uint32_t time_msec,
* `wlr_seat_touch_point_clear_focus()`.
*/
void wlr_seat_touch_point_focus(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t time_msec,
struct wlr_surface_2 *surface, uint32_t time_msec,
int32_t touch_id, double sx, double sy);
/**
@ -566,7 +567,7 @@ void wlr_seat_touch_point_clear_focus(struct wlr_seat *seat, uint32_t time_msec,
* `wlr_seat_touch_notify_down()` to respect any grabs of the touch device.
*/
uint32_t wlr_seat_touch_send_down(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t time_msec,
struct wlr_surface_2 *surface, uint32_t time_msec,
int32_t touch_id, double sx, double sy);
/**
@ -607,7 +608,7 @@ bool wlr_seat_validate_grab_serial(struct wlr_seat *seat, uint32_t serial);
* Check whether this serial is valid to start a pointer grab action.
*/
bool wlr_seat_validate_pointer_grab_serial(struct wlr_seat *seat,
struct wlr_surface *origin, uint32_t serial);
struct wlr_surface_2 *origin, uint32_t serial);
/**
* Check whether this serial is valid to start a touch grab action. If it's the
@ -615,7 +616,7 @@ bool wlr_seat_validate_pointer_grab_serial(struct wlr_seat *seat,
* the serial.
*/
bool wlr_seat_validate_touch_grab_serial(struct wlr_seat *seat,
struct wlr_surface *origin, uint32_t serial,
struct wlr_surface_2 *origin, uint32_t serial,
struct wlr_touch_point **point_ptr);
/**

View file

@ -19,6 +19,7 @@
#define WLR_TABLET_V2_TOOL_BUTTONS_CAP 16
struct wlr_tablet_pad_v2_grab_interface;
struct wlr_surface_2;
struct wlr_tablet_pad_v2_grab {
const struct wlr_tablet_pad_v2_grab_interface *interface;
@ -71,7 +72,7 @@ struct wlr_tablet_v2_tablet_tool {
struct wl_listener tool_destroy;
struct wlr_tablet_tool_client_v2 *current_client;
struct wlr_surface *focused_surface;
struct wlr_surface_2 *focused_surface;
struct wl_listener surface_destroy;
struct wlr_tablet_tool_v2_grab *grab;
@ -112,7 +113,7 @@ struct wlr_tablet_v2_tablet_pad {
};
struct wlr_tablet_v2_event_cursor {
struct wlr_surface *surface;
struct wlr_surface_2 *surface;
uint32_t serial;
int32_t hotspot_x;
int32_t hotspot_y;
@ -146,7 +147,7 @@ void wlr_tablet_v2_destroy(struct wlr_tablet_manager_v2 *manager);
void wlr_send_tablet_v2_tablet_tool_proximity_in(
struct wlr_tablet_v2_tablet_tool *tool,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
void wlr_send_tablet_v2_tablet_tool_down(struct wlr_tablet_v2_tablet_tool *tool);
void wlr_send_tablet_v2_tablet_tool_up(struct wlr_tablet_v2_tablet_tool *tool);
@ -184,7 +185,7 @@ void wlr_send_tablet_v2_tablet_tool_button(
void wlr_tablet_v2_tablet_tool_notify_proximity_in(
struct wlr_tablet_v2_tablet_tool *tool,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
void wlr_tablet_v2_tablet_tool_notify_down(struct wlr_tablet_v2_tablet_tool *tool);
void wlr_tablet_v2_tablet_tool_notify_up(struct wlr_tablet_v2_tablet_tool *tool);
@ -222,7 +223,7 @@ struct wlr_tablet_tool_v2_grab_interface {
void (*proximity_in)(
struct wlr_tablet_tool_v2_grab *grab,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
void (*down)(struct wlr_tablet_tool_v2_grab *grab);
void (*up)(struct wlr_tablet_tool_v2_grab *grab);
@ -258,7 +259,7 @@ void wlr_tablet_tool_v2_start_implicit_grab(struct wlr_tablet_v2_tablet_tool *to
uint32_t wlr_send_tablet_v2_tablet_pad_enter(
struct wlr_tablet_v2_tablet_pad *pad,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
void wlr_send_tablet_v2_tablet_pad_button(
struct wlr_tablet_v2_tablet_pad *pad, size_t button,
@ -270,7 +271,7 @@ void wlr_send_tablet_v2_tablet_pad_ring(struct wlr_tablet_v2_tablet_pad *pad,
uint32_t ring, double position, bool finger, uint32_t time);
uint32_t wlr_send_tablet_v2_tablet_pad_leave(struct wlr_tablet_v2_tablet_pad *pad,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
uint32_t wlr_send_tablet_v2_tablet_pad_mode(struct wlr_tablet_v2_tablet_pad *pad,
size_t group, uint32_t mode, uint32_t time);
@ -279,7 +280,7 @@ uint32_t wlr_send_tablet_v2_tablet_pad_mode(struct wlr_tablet_v2_tablet_pad *pad
uint32_t wlr_tablet_v2_tablet_pad_notify_enter(
struct wlr_tablet_v2_tablet_pad *pad,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
void wlr_tablet_v2_tablet_pad_notify_button(
struct wlr_tablet_v2_tablet_pad *pad, size_t button,
@ -293,7 +294,7 @@ void wlr_tablet_v2_tablet_pad_notify_ring(
uint32_t ring, double position, bool finger, uint32_t time);
uint32_t wlr_tablet_v2_tablet_pad_notify_leave(
struct wlr_tablet_v2_tablet_pad *pad, struct wlr_surface *surface);
struct wlr_tablet_v2_tablet_pad *pad, struct wlr_surface_2 *surface);
uint32_t wlr_tablet_v2_tablet_pad_notify_mode(
struct wlr_tablet_v2_tablet_pad *pad,
@ -303,7 +304,7 @@ struct wlr_tablet_pad_v2_grab_interface {
uint32_t (*enter)(
struct wlr_tablet_pad_v2_grab *grab,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
void (*button)(struct wlr_tablet_pad_v2_grab *grab,size_t button,
uint32_t time, enum zwp_tablet_pad_v2_button_state state);
@ -314,7 +315,7 @@ struct wlr_tablet_pad_v2_grab_interface {
uint32_t ring, double position, bool finger, uint32_t time);
uint32_t (*leave)(struct wlr_tablet_pad_v2_grab *grab,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
uint32_t (*mode)(struct wlr_tablet_pad_v2_grab *grab,
size_t group, uint32_t mode, uint32_t time);
@ -326,5 +327,5 @@ void wlr_tablet_v2_end_grab(struct wlr_tablet_v2_tablet_pad *pad);
void wlr_tablet_v2_start_grab(struct wlr_tablet_v2_tablet_pad *pad, struct wlr_tablet_pad_v2_grab *grab);
bool wlr_surface_accepts_tablet_v2(struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface);
struct wlr_surface_2 *surface);
#endif /* WLR_TYPES_WLR_TABLET_V2_H */

View file

@ -6,6 +6,7 @@
#include <wayland-server.h>
#include <wlr/types/wlr_data_device.h>
#include <wlr/types/wlr_seat.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/util/log.h>
#include "types/wlr_data_device.h"
#include "util/signal.h"
@ -55,18 +56,19 @@ static void data_device_start_drag(struct wl_client *client,
return;
}
struct wlr_surface *origin = wlr_surface_from_resource(origin_resource);
struct wlr_surface_2 *origin = wlr_surface_from_resource_2(origin_resource);
struct wlr_client_data_source *source = NULL;
if (source_resource != NULL) {
source = client_data_source_from_resource(source_resource);
}
struct wlr_surface *icon = NULL;
struct wlr_surface_2 *icon = NULL;
if (icon_resource) {
icon = wlr_surface_from_resource(icon_resource);
if (!wlr_surface_set_role(icon, &drag_icon_surface_role, NULL,
icon_resource, WL_DATA_DEVICE_ERROR_ROLE)) {
icon = wlr_surface_from_resource_2(icon_resource);
if (!wlr_surface_set_role_2(icon, "wl_data_device")) {
wl_resource_post_error(icon_resource, WL_DATA_DEVICE_ERROR_ROLE,
"surface already has role");
return;
}
}

View file

@ -5,6 +5,7 @@
#include <unistd.h>
#include <wayland-server.h>
#include <wlr/types/wlr_data_device.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_seat.h>
#include <wlr/util/log.h>
#include "types/wlr_data_device.h"
@ -20,7 +21,7 @@ static void drag_handle_seat_client_destroy(struct wl_listener *listener,
}
static void drag_set_focus(struct wlr_drag *drag,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
if (drag->focus == surface) {
return;
}
@ -154,7 +155,7 @@ static void drag_destroy(struct wlr_drag *drag) {
}
static void drag_handle_pointer_enter(struct wlr_seat_pointer_grab *grab,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
struct wlr_drag *drag = grab->data;
drag_set_focus(drag, surface, sx, sy);
}
@ -298,7 +299,7 @@ static const struct wlr_touch_grab_interface
};
static void drag_handle_keyboard_enter(struct wlr_seat_keyboard_grab *grab,
struct wlr_surface *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_surface_2 *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_keyboard_modifiers *modifiers) {
// nothing has keyboard focus during drags
}
@ -347,10 +348,25 @@ static void drag_icon_destroy(struct wlr_drag_icon *icon) {
drag_icon_set_mapped(icon, false);
wlr_signal_emit_safe(&icon->events.destroy, icon);
icon->surface->role_data = NULL;
wl_list_remove(&icon->surface_commit.link);
wl_list_remove(&icon->surface_destroy.link);
free(icon);
}
static void drag_icon_handle_surface_commit(struct wl_listener *listener,
void *data) {
struct wlr_drag_icon *icon =
wl_container_of(listener, icon, surface_commit);
struct wlr_commit *commit = wlr_surface_get_commit(icon->surface);
bool has_buffer = commit->buffer;
wlr_commit_unref(commit);
if (has_buffer) {
drag_icon_set_mapped(icon, true);
}
}
static void drag_icon_handle_surface_destroy(struct wl_listener *listener,
void *data) {
struct wlr_drag_icon *icon =
@ -358,23 +374,8 @@ static void drag_icon_handle_surface_destroy(struct wl_listener *listener,
drag_icon_destroy(icon);
}
static void drag_icon_surface_role_commit(struct wlr_surface *surface) {
assert(surface->role == &drag_icon_surface_role);
struct wlr_drag_icon *icon = surface->role_data;
if (icon == NULL) {
return;
}
drag_icon_set_mapped(icon, wlr_surface_has_buffer(surface));
}
const struct wlr_surface_role drag_icon_surface_role = {
.name = "wl_data_device-icon",
.commit = drag_icon_surface_role_commit,
};
static struct wlr_drag_icon *drag_icon_create(struct wlr_drag *drag,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
struct wlr_drag_icon *icon = calloc(1, sizeof(struct wlr_drag_icon));
if (!icon) {
return NULL;
@ -387,13 +388,21 @@ static struct wlr_drag_icon *drag_icon_create(struct wlr_drag *drag,
wl_signal_init(&icon->events.unmap);
wl_signal_init(&icon->events.destroy);
wl_signal_add(&icon->surface->events.commit, &icon->surface_commit);
icon->surface_commit.notify = drag_icon_handle_surface_commit;
wl_signal_add(&icon->surface->events.destroy, &icon->surface_destroy);
icon->surface_destroy.notify = drag_icon_handle_surface_destroy;
icon->surface->role_data = icon;
if (wlr_surface_has_buffer(surface)) {
drag_icon_set_mapped(icon, true);
struct wlr_commit *commit = wlr_surface_get_commit(icon->surface);
if (commit) {
bool has_buffer = commit->buffer;
wlr_commit_unref(commit);
if (has_buffer) {
drag_icon_set_mapped(icon, true);
}
}
return icon;
@ -401,7 +410,7 @@ static struct wlr_drag_icon *drag_icon_create(struct wlr_drag *drag,
struct wlr_drag *wlr_drag_create(struct wlr_seat_client *seat_client,
struct wlr_data_source *source, struct wlr_surface *icon_surface) {
struct wlr_data_source *source, struct wlr_surface_2 *icon_surface) {
struct wlr_drag *drag = calloc(1, sizeof(struct wlr_drag));
if (drag == NULL) {
return NULL;
@ -447,7 +456,7 @@ struct wlr_drag *wlr_drag_create(struct wlr_seat_client *seat_client,
}
void wlr_seat_request_start_drag(struct wlr_seat *seat, struct wlr_drag *drag,
struct wlr_surface *origin, uint32_t serial) {
struct wlr_surface_2 *origin, uint32_t serial) {
assert(drag->seat == seat);
if (seat->drag != NULL) {

View file

@ -1,18 +1,18 @@
lib_wlr_types = static_library(
'wlr_types',
files(
#'data_device/wlr_data_device.c',
#'data_device/wlr_data_offer.c',
#'data_device/wlr_data_source.c',
#'data_device/wlr_drag.c',
#'seat/wlr_seat_keyboard.c',
#'seat/wlr_seat_pointer.c',
#'seat/wlr_seat_touch.c',
#'seat/wlr_seat.c',
#'tablet_v2/wlr_tablet_v2_pad.c',
#'tablet_v2/wlr_tablet_v2_tablet.c',
#'tablet_v2/wlr_tablet_v2_tool.c',
#'tablet_v2/wlr_tablet_v2.c',
'data_device/wlr_data_device.c',
'data_device/wlr_data_offer.c',
'data_device/wlr_data_source.c',
'data_device/wlr_drag.c',
'seat/wlr_seat_keyboard.c',
'seat/wlr_seat_pointer.c',
'seat/wlr_seat_touch.c',
'seat/wlr_seat.c',
'tablet_v2/wlr_tablet_v2_pad.c',
'tablet_v2/wlr_tablet_v2_tablet.c',
'tablet_v2/wlr_tablet_v2_tool.c',
'tablet_v2/wlr_tablet_v2.c',
#'xdg_shell_v6/wlr_xdg_popup_v6.c',
#'xdg_shell_v6/wlr_xdg_positioner_v6.c',
#'xdg_shell_v6/wlr_xdg_shell_v6.c',
@ -27,18 +27,18 @@ lib_wlr_types = static_library(
'wlr_compositor.c',
'wlr_subcompositor.c',
#'wlr_cursor.c',
#'wlr_data_control_v1.c',
'wlr_data_control_v1.c',
#'wlr_export_dmabuf_v1.c',
#'wlr_foreign_toplevel_management_v1.c',
#'wlr_fullscreen_shell_v1.c',
#'wlr_gamma_control_v1.c',
#'wlr_gamma_control.c',
#'wlr_gtk_primary_selection.c',
'wlr_gtk_primary_selection.c',
#'wlr_idle_inhibit_v1.c',
#'wlr_idle.c',
#'wlr_input_device.c',
#'wlr_input_inhibitor.c',
#'wlr_input_method_v2.c',
'wlr_idle.c',
'wlr_input_device.c',
'wlr_input_inhibitor.c',
'wlr_input_method_v2.c',
'wlr_keyboard.c',
#'wlr_layer_shell_v1.c',
'wlr_linux_dmabuf_v1.c',
@ -49,22 +49,22 @@ lib_wlr_types = static_library(
'wlr_output_management_v1.c',
#'wlr_output.c',
#'wlr_pointer_constraints_v1.c',
#'wlr_pointer_gestures_v1.c',
'wlr_pointer_gestures_v1.c',
'wlr_pointer.c',
#'wlr_presentation_time.c',
#'wlr_primary_selection_v1.c',
#'wlr_primary_selection.c',
#'wlr_relative_pointer_v1.c',
'wlr_primary_selection_v1.c',
'wlr_primary_selection.c',
'wlr_relative_pointer_v1.c',
#'wlr_screencopy_v1.c',
#'wlr_screenshooter.c',
#'wlr_server_decoration.c',
#'wlr_surface.c',
'wlr_switch.c',
'wlr_tablet_pad.c',
#'wlr_tablet_tool.c',
#'wlr_text_input_v3.c',
'wlr_tablet_tool.c',
'wlr_text_input_v3.c',
'wlr_touch.c',
#'wlr_virtual_keyboard_v1.c',
'wlr_virtual_keyboard_v1.c',
#'wlr_xcursor_manager.c',
#'wlr_xdg_decoration_v1.c',
#'wlr_xdg_output_v1.c',

View file

@ -9,6 +9,7 @@
#include <wlr/types/wlr_data_device.h>
#include <wlr/types/wlr_gtk_primary_selection.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/util/log.h>
#include "types/wlr_data_device.h"
#include "types/wlr_seat.h"
@ -16,7 +17,7 @@
#include "util/signal.h"
static void default_keyboard_enter(struct wlr_seat_keyboard_grab *grab,
struct wlr_surface *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_surface_2 *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_keyboard_modifiers *modifiers) {
wlr_seat_keyboard_enter(grab->seat, surface, keycodes, num_keycodes, modifiers);
}
@ -219,7 +220,7 @@ void wlr_seat_keyboard_send_modifiers(struct wlr_seat *seat,
}
void wlr_seat_keyboard_enter(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_surface_2 *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_keyboard_modifiers *modifiers) {
if (seat->keyboard_state.focused_surface == surface) {
// this surface already got an enter notify
@ -235,7 +236,7 @@ void wlr_seat_keyboard_enter(struct wlr_seat *seat,
struct wlr_seat_client *focused_client =
seat->keyboard_state.focused_client;
struct wlr_surface *focused_surface =
struct wlr_surface_2 *focused_surface =
seat->keyboard_state.focused_surface;
// leave the previously entered surface
@ -304,7 +305,7 @@ void wlr_seat_keyboard_enter(struct wlr_seat *seat,
}
void wlr_seat_keyboard_notify_enter(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_surface_2 *surface, uint32_t keycodes[], size_t num_keycodes,
struct wlr_keyboard_modifiers *modifiers) {
struct wlr_seat_keyboard_grab *grab = seat->keyboard_state.grab;
grab->interface->enter(grab, surface, keycodes, num_keycodes, modifiers);

View file

@ -5,12 +5,13 @@
#include <time.h>
#include <wayland-server.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/util/log.h>
#include "types/wlr_seat.h"
#include "util/signal.h"
static void default_pointer_enter(struct wlr_seat_pointer_grab *grab,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
wlr_seat_pointer_enter(grab->seat, surface, sx, sy);
}
@ -65,10 +66,6 @@ struct wlr_seat_client *wlr_seat_client_from_pointer_resource(
return wl_resource_get_user_data(resource);
}
static const struct wlr_surface_role pointer_cursor_surface_role = {
.name = "wl_pointer-cursor",
};
static void pointer_set_cursor(struct wl_client *client,
struct wl_resource *pointer_resource, uint32_t serial,
struct wl_resource *surface_resource,
@ -79,11 +76,12 @@ static void pointer_set_cursor(struct wl_client *client,
return;
}
struct wlr_surface *surface = NULL;
struct wlr_surface_2 *surface = NULL;
if (surface_resource != NULL) {
surface = wlr_surface_from_resource(surface_resource);
if (!wlr_surface_set_role(surface, &pointer_cursor_surface_role, NULL,
surface_resource, WL_POINTER_ERROR_ROLE)) {
surface = wlr_surface_from_resource_2(surface_resource);
if (!wlr_surface_set_role_2(surface, "wl_pointer")) {
wl_resource_post_error(surface_resource, WL_POINTER_ERROR_ROLE,
"surface already has role");
return;
}
}
@ -115,7 +113,7 @@ static void pointer_handle_resource_destroy(struct wl_resource *resource) {
bool wlr_seat_pointer_surface_has_focus(struct wlr_seat *wlr_seat,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
return surface == wlr_seat->pointer_state.focused_surface;
}
@ -129,7 +127,7 @@ static void seat_pointer_handle_surface_destroy(struct wl_listener *listener,
}
void wlr_seat_pointer_enter(struct wlr_seat *wlr_seat,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
if (wlr_seat->pointer_state.focused_surface == surface) {
// this surface already got an enter notify
return;
@ -143,7 +141,7 @@ void wlr_seat_pointer_enter(struct wlr_seat *wlr_seat,
struct wlr_seat_client *focused_client =
wlr_seat->pointer_state.focused_client;
struct wlr_surface *focused_surface =
struct wlr_surface_2 *focused_surface =
wlr_seat->pointer_state.focused_surface;
// leave the previously entered surface
@ -324,7 +322,7 @@ void wlr_seat_pointer_end_grab(struct wlr_seat *wlr_seat) {
}
void wlr_seat_pointer_notify_enter(struct wlr_seat *wlr_seat,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
struct wlr_seat_pointer_grab *grab = wlr_seat->pointer_state.grab;
grab->interface->enter(grab, surface, sx, sy);
}
@ -409,7 +407,7 @@ void seat_client_destroy_pointer(struct wl_resource *resource) {
}
bool wlr_seat_validate_pointer_grab_serial(struct wlr_seat *seat,
struct wlr_surface *origin, uint32_t serial) {
struct wlr_surface_2 *origin, uint32_t serial) {
if (seat->pointer_state.button_count != 1 ||
seat->pointer_state.grab_serial != serial) {
wlr_log(WLR_DEBUG, "Pointer grab serial validation failed: "

View file

@ -5,6 +5,7 @@
#include <time.h>
#include <wayland-server.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/util/log.h>
#include "types/wlr_seat.h"
#include "util/signal.h"
@ -114,7 +115,7 @@ static void touch_point_handle_surface_destroy(struct wl_listener *listener,
static struct wlr_touch_point *touch_point_create(
struct wlr_seat *seat, int32_t touch_id,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
struct wl_client *wl_client = wl_resource_get_client(surface->resource);
struct wlr_seat_client *client =
wlr_seat_client_for_wl_client(seat, wl_client);
@ -159,7 +160,7 @@ struct wlr_touch_point *wlr_seat_touch_get_point(
}
uint32_t wlr_seat_touch_notify_down(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t time, int32_t touch_id, double sx,
struct wlr_surface_2 *surface, uint32_t time, int32_t touch_id, double sx,
double sy) {
clock_gettime(CLOCK_MONOTONIC, &seat->last_event);
struct wlr_seat_touch_grab *grab = seat->touch_state.grab;
@ -217,7 +218,7 @@ static void handle_point_focus_destroy(struct wl_listener *listener,
}
static void touch_point_set_focus(struct wlr_touch_point *point,
struct wlr_surface *surface, double sx, double sy) {
struct wlr_surface_2 *surface, double sx, double sy) {
if (point->focus_surface == surface) {
return;
}
@ -241,7 +242,7 @@ static void touch_point_set_focus(struct wlr_touch_point *point,
}
void wlr_seat_touch_point_focus(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t time, int32_t touch_id, double sx,
struct wlr_surface_2 *surface, uint32_t time, int32_t touch_id, double sx,
double sy) {
assert(surface);
struct wlr_touch_point *point = wlr_seat_touch_get_point(seat, touch_id);
@ -249,7 +250,7 @@ void wlr_seat_touch_point_focus(struct wlr_seat *seat,
wlr_log(WLR_ERROR, "got touch point focus for unknown touch point");
return;
}
struct wlr_surface *focus = point->focus_surface;
struct wlr_surface_2 *focus = point->focus_surface;
touch_point_set_focus(point, surface, sx, sy);
if (focus != point->focus_surface) {
@ -270,7 +271,7 @@ void wlr_seat_touch_point_clear_focus(struct wlr_seat *seat, uint32_t time,
}
uint32_t wlr_seat_touch_send_down(struct wlr_seat *seat,
struct wlr_surface *surface, uint32_t time, int32_t touch_id, double sx,
struct wlr_surface_2 *surface, uint32_t time, int32_t touch_id, double sx,
double sy) {
struct wlr_touch_point *point = wlr_seat_touch_get_point(seat, touch_id);
if (!point) {
@ -361,7 +362,7 @@ void seat_client_destroy_touch(struct wl_resource *resource) {
}
bool wlr_seat_validate_touch_grab_serial(struct wlr_seat *seat,
struct wlr_surface *origin, uint32_t serial,
struct wlr_surface_2 *origin, uint32_t serial,
struct wlr_touch_point **point_ptr) {
if (wlr_seat_touch_num_points(seat) != 1 ||
seat->touch_state.grab_serial != serial) {

View file

@ -7,6 +7,7 @@
#include <stdlib.h>
#include <types/wlr_tablet_v2.h>
#include <wayland-util.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/types/wlr_tablet_v2.h>
#include <wlr/util/log.h>
@ -413,7 +414,7 @@ struct wlr_tablet_pad_client_v2 *tablet_pad_client_from_resource(struct wl_resou
uint32_t wlr_send_tablet_v2_tablet_pad_enter(
struct wlr_tablet_v2_tablet_pad *pad,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
struct wl_client *client = wl_resource_get_client(surface->resource);
struct wlr_tablet_client_v2 *tablet_tmp;
@ -520,7 +521,7 @@ void wlr_send_tablet_v2_tablet_pad_ring(struct wlr_tablet_v2_tablet_pad *pad,
}
uint32_t wlr_send_tablet_v2_tablet_pad_leave(struct wlr_tablet_v2_tablet_pad *pad,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
struct wl_client *client = wl_resource_get_client(surface->resource);
if (!pad->current_client || client != pad->current_client->client) {
return 0;
@ -555,7 +556,7 @@ uint32_t wlr_send_tablet_v2_tablet_pad_mode(struct wlr_tablet_v2_tablet_pad *pad
}
bool wlr_surface_accepts_tablet_v2(struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
struct wl_client *client = wl_resource_get_client(surface->resource);
if (tablet->current_client &&
@ -577,7 +578,7 @@ bool wlr_surface_accepts_tablet_v2(struct wlr_tablet_v2_tablet *tablet,
uint32_t wlr_tablet_v2_tablet_pad_notify_enter(
struct wlr_tablet_v2_tablet_pad *pad,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
if (pad->grab && pad->grab->interface->enter) {
return pad->grab->interface->enter(pad->grab, tablet, surface);
}
@ -610,7 +611,7 @@ void wlr_tablet_v2_tablet_pad_notify_ring(
}
uint32_t wlr_tablet_v2_tablet_pad_notify_leave(
struct wlr_tablet_v2_tablet_pad *pad, struct wlr_surface *surface) {
struct wlr_tablet_v2_tablet_pad *pad, struct wlr_surface_2 *surface) {
if (pad->grab && pad->grab->interface->leave) {
return pad->grab->interface->leave(pad->grab, surface);
}
@ -653,7 +654,7 @@ void wlr_tablet_v2_end_grab(struct wlr_tablet_v2_tablet_pad *pad) {
static uint32_t default_pad_enter(
struct wlr_tablet_pad_v2_grab *grab,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
return wlr_send_tablet_v2_tablet_pad_enter(grab->pad, tablet, surface);
}
@ -673,7 +674,7 @@ static void default_pad_ring(struct wlr_tablet_pad_v2_grab *grab,
}
static uint32_t default_pad_leave(struct wlr_tablet_pad_v2_grab *grab,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
return wlr_send_tablet_v2_tablet_pad_leave(grab->pad, surface);
}

View file

@ -8,16 +8,13 @@
#include <stdlib.h>
#include <types/wlr_tablet_v2.h>
#include <wayland-util.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/types/wlr_tablet_v2.h>
#include <wlr/util/log.h>
static const struct wlr_tablet_tool_v2_grab_interface default_tool_grab_interface;
static const struct wlr_surface_role tablet_tool_cursor_surface_role = {
.name = "wp_tablet_tool-cursor",
};
static void handle_tablet_tool_v2_set_cursor(struct wl_client *client,
struct wl_resource *resource, uint32_t serial,
struct wl_resource *surface_resource,
@ -27,11 +24,13 @@ static void handle_tablet_tool_v2_set_cursor(struct wl_client *client,
return;
}
struct wlr_surface *surface = NULL;
struct wlr_surface_2 *surface = NULL;
if (surface_resource != NULL) {
surface = wlr_surface_from_resource(surface_resource);
if (!wlr_surface_set_role(surface, &tablet_tool_cursor_surface_role, NULL,
surface_resource, ZWP_TABLET_TOOL_V2_ERROR_ROLE)) {
surface = wlr_surface_from_resource_2(surface_resource);
if (!wlr_surface_set_role_2(surface, "wp_tablet_tool")) {
wl_resource_post_error(surface_resource,
ZWP_TABLET_TOOL_V2_ERROR_ROLE,
"surface already has role");
return;
}
}
@ -307,7 +306,7 @@ static void queue_tool_frame(struct wlr_tablet_tool_client_v2 *tool) {
void wlr_send_tablet_v2_tablet_tool_proximity_in(
struct wlr_tablet_v2_tablet_tool *tool,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
struct wl_client *client = wl_resource_get_client(surface->resource);
if (tool->focused_surface == surface) {
@ -525,7 +524,7 @@ void wlr_send_tablet_v2_tablet_tool_up(struct wlr_tablet_v2_tablet_tool *tool) {
void wlr_tablet_v2_tablet_tool_notify_proximity_in(
struct wlr_tablet_v2_tablet_tool *tool,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
if (tool->grab->interface->proximity_in) {
tool->grab->interface->proximity_in(tool->grab, tablet, surface);
}
@ -623,7 +622,7 @@ void wlr_tablet_tool_v2_end_grab(struct wlr_tablet_v2_tablet_tool *tool) {
static void default_tool_proximity_in(
struct wlr_tablet_tool_v2_grab *grab,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
wlr_send_tablet_v2_tablet_tool_proximity_in(grab->tool, tablet, surface);
}
@ -701,10 +700,10 @@ static const struct wlr_tablet_tool_v2_grab_interface
};
struct implicit_grab_state {
struct wlr_surface *original;
struct wlr_surface_2 *original;
bool released;
struct wlr_surface *focused;
struct wlr_surface_2 *focused;
struct wlr_tablet_v2_tablet *tablet;
};
@ -735,7 +734,7 @@ static void check_and_release_implicit_grab(struct wlr_tablet_tool_v2_grab *grab
static void implicit_tool_proximity_in(
struct wlr_tablet_tool_v2_grab *grab,
struct wlr_tablet_v2_tablet *tablet,
struct wlr_surface *surface) {
struct wlr_surface_2 *surface) {
/* As long as we got an implicit grab, proximity won't change
* But should track the currently focused surface to change to it when

View file

@ -5,6 +5,7 @@
#include <assert.h>
#include <stdlib.h>
#include <wayland-server.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_pointer.h>
#include <wlr/types/wlr_pointer_gestures_v1.h>
#include <wlr/util/log.h>
@ -47,7 +48,7 @@ void wlr_pointer_gestures_v1_send_swipe_begin(
struct wlr_seat *seat,
uint32_t time_msec,
uint32_t fingers) {
struct wlr_surface *focus = seat->pointer_state.focused_surface;
struct wlr_surface_2 *focus = seat->pointer_state.focused_surface;
if (focus == NULL) {
return;
}
@ -74,7 +75,7 @@ void wlr_pointer_gestures_v1_send_swipe_update(
uint32_t time_msec,
double dx,
double dy) {
struct wlr_surface *focus = seat->pointer_state.focused_surface;
struct wlr_surface_2 *focus = seat->pointer_state.focused_surface;
if (focus == NULL) {
return;
}
@ -98,7 +99,7 @@ void wlr_pointer_gestures_v1_send_swipe_end(
struct wlr_seat *seat,
uint32_t time_msec,
bool cancelled) {
struct wlr_surface *focus = seat->pointer_state.focused_surface;
struct wlr_surface_2 *focus = seat->pointer_state.focused_surface;
if (focus == NULL) {
return;
}
@ -159,7 +160,7 @@ void wlr_pointer_gestures_v1_send_pinch_begin(
struct wlr_seat *seat,
uint32_t time_msec,
uint32_t fingers) {
struct wlr_surface *focus = seat->pointer_state.focused_surface;
struct wlr_surface_2 *focus = seat->pointer_state.focused_surface;
if (focus == NULL) {
return;
}
@ -188,7 +189,7 @@ void wlr_pointer_gestures_v1_send_pinch_update(
double dy,
double scale,
double rotation) {
struct wlr_surface *focus = seat->pointer_state.focused_surface;
struct wlr_surface_2 *focus = seat->pointer_state.focused_surface;
if (focus == NULL) {
return;
}
@ -214,7 +215,7 @@ void wlr_pointer_gestures_v1_send_pinch_end(
struct wlr_seat *seat,
uint32_t time_msec,
bool cancelled) {
struct wlr_surface *focus = seat->pointer_state.focused_surface;
struct wlr_surface_2 *focus = seat->pointer_state.focused_surface;
if (focus == NULL) {
return;
}