diff options
| -rw-r--r-- | include/sway/server.h | 3 | ||||
| -rw-r--r-- | sway/input/cursor.c | 14 | ||||
| -rw-r--r-- | sway/server.c | 4 | 
3 files changed, 21 insertions, 0 deletions
| diff --git a/include/sway/server.h b/include/sway/server.h index fa2c6557..5eef7c1a 100644 --- a/include/sway/server.h +++ b/include/sway/server.h @@ -9,6 +9,7 @@  #include <wlr/types/wlr_data_device.h>  #include <wlr/types/wlr_layer_shell_v1.h>  #include <wlr/types/wlr_presentation_time.h> +#include <wlr/types/wlr_relative_pointer_v1.h>  #include <wlr/types/wlr_server_decoration.h>  #include <wlr/types/wlr_xdg_shell_v6.h>  #include <wlr/types/wlr_xdg_shell.h> @@ -51,6 +52,8 @@ struct sway_server {  	struct wl_listener xwayland_ready;  #endif +	struct wlr_relative_pointer_manager_v1 *relative_pointer_manager; +  	struct wlr_server_decoration_manager *server_decoration_manager;  	struct wl_listener server_decoration;  	struct wl_list decorations; // sway_server_decoration::link diff --git a/sway/input/cursor.c b/sway/input/cursor.c index c87efc2b..78e2f695 100644 --- a/sway/input/cursor.c +++ b/sway/input/cursor.c @@ -403,6 +403,14 @@ static void handle_cursor_motion(struct wl_listener *listener, void *data) {  	double dx = event->delta_x;  	double dy = event->delta_y; +	double dx_unaccel = event->unaccel_dx; +	double dy_unaccel = event->unaccel_dy; + +	wlr_relative_pointer_manager_v1_send_relative_motion( +		server.relative_pointer_manager, +		cursor->seat->wlr_seat, event->time_msec, dx, dy, +		dx_unaccel, dy_unaccel); +  	struct wlr_surface *surface = NULL;  	double sx, sy;  	struct sway_node *node = node_at_coords(cursor->seat, @@ -438,6 +446,12 @@ static void cursor_motion_absolute(struct sway_cursor *cursor,  	wlr_cursor_absolute_to_layout_coords(cursor->cursor, dev,  		x, y, &lx, &ly); +	double dx = lx - cursor->cursor->x; +	double dy = ly - cursor->cursor->y; +	wlr_relative_pointer_manager_v1_send_relative_motion( +		server.relative_pointer_manager, +		cursor->seat->wlr_seat, (uint64_t)time_msec * 1000, dx, dy, dx, dy); +  	struct wlr_surface *surface = NULL;  	double sx, sy;  	struct sway_node *node = node_at_coords(cursor->seat, diff --git a/sway/server.c b/sway/server.c index 82262585..712d8022 100644 --- a/sway/server.c +++ b/sway/server.c @@ -15,6 +15,7 @@  #include <wlr/types/wlr_gtk_primary_selection.h>  #include <wlr/types/wlr_idle.h>  #include <wlr/types/wlr_layer_shell_v1.h> +#include <wlr/types/wlr_relative_pointer_v1.h>  #include <wlr/types/wlr_pointer_constraints_v1.h>  #include <wlr/types/wlr_screencopy_v1.h>  #include <wlr/types/wlr_server_decoration.h> @@ -106,6 +107,9 @@ bool server_init(struct sway_server *server) {  	server->xdg_decoration.notify = handle_xdg_decoration;  	wl_list_init(&server->xdg_decorations); +	server->relative_pointer_manager = +		wlr_relative_pointer_manager_v1_create(server->wl_display); +  	server->pointer_constraints =  		wlr_pointer_constraints_v1_create(server->wl_display);  	server->pointer_constraint.notify = handle_pointer_constraint; | 
