mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	input/pointer: add wlr_seat_pointer_wrap
It allows a compositor to do things like skip motion events on pointer constraint unlock. References: https://github.com/swaywm/sway/pull/5431
This commit is contained in:
		
							parent
							
								
									6ef5d18757
								
							
						
					
					
						commit
						a145430afa
					
				
					 2 changed files with 14 additions and 6 deletions
				
			
		| 
						 | 
					@ -409,6 +409,12 @@ void wlr_seat_pointer_notify_enter(struct wlr_seat *wlr_seat,
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void wlr_seat_pointer_notify_clear_focus(struct wlr_seat *wlr_seat);
 | 
					void wlr_seat_pointer_notify_clear_focus(struct wlr_seat *wlr_seat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Warp the pointer of this seat to the given surface-local coordinates, without
 | 
				
			||||||
 | 
					 * generating motion events.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void wlr_seat_pointer_warp(struct wlr_seat *wlr_seat, double sx, double sy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Notify the seat of motion over the given surface. Pass surface-local
 | 
					 * Notify the seat of motion over the given surface. Pass surface-local
 | 
				
			||||||
 * coordinates where the pointer motion occurred. Defers to any grab of the
 | 
					 * coordinates where the pointer motion occurred. Defers to any grab of the
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -199,11 +199,9 @@ void wlr_seat_pointer_enter(struct wlr_seat *wlr_seat,
 | 
				
			||||||
	wlr_seat->pointer_state.focused_client = client;
 | 
						wlr_seat->pointer_state.focused_client = client;
 | 
				
			||||||
	wlr_seat->pointer_state.focused_surface = surface;
 | 
						wlr_seat->pointer_state.focused_surface = surface;
 | 
				
			||||||
	if (surface != NULL) {
 | 
						if (surface != NULL) {
 | 
				
			||||||
		wlr_seat->pointer_state.sx = sx;
 | 
							wlr_seat_pointer_warp(wlr_seat, sx, sy);
 | 
				
			||||||
		wlr_seat->pointer_state.sy = sy;
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		wlr_seat->pointer_state.sx = NAN;
 | 
							wlr_seat_pointer_warp(wlr_seat, NAN, NAN);
 | 
				
			||||||
		wlr_seat->pointer_state.sy = NAN;
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct wlr_seat_pointer_focus_change_event event = {
 | 
						struct wlr_seat_pointer_focus_change_event event = {
 | 
				
			||||||
| 
						 | 
					@ -220,6 +218,11 @@ void wlr_seat_pointer_clear_focus(struct wlr_seat *wlr_seat) {
 | 
				
			||||||
	wlr_seat_pointer_enter(wlr_seat, NULL, 0, 0);
 | 
						wlr_seat_pointer_enter(wlr_seat, NULL, 0, 0);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void wlr_seat_pointer_warp(struct wlr_seat *wlr_seat, double sx, double sy) {
 | 
				
			||||||
 | 
						wlr_seat->pointer_state.sx = sx;
 | 
				
			||||||
 | 
						wlr_seat->pointer_state.sy = sy;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wlr_seat_pointer_send_motion(struct wlr_seat *wlr_seat, uint32_t time,
 | 
					void wlr_seat_pointer_send_motion(struct wlr_seat *wlr_seat, uint32_t time,
 | 
				
			||||||
		double sx, double sy) {
 | 
							double sx, double sy) {
 | 
				
			||||||
	struct wlr_seat_client *client = wlr_seat->pointer_state.focused_client;
 | 
						struct wlr_seat_client *client = wlr_seat->pointer_state.focused_client;
 | 
				
			||||||
| 
						 | 
					@ -241,8 +244,7 @@ void wlr_seat_pointer_send_motion(struct wlr_seat *wlr_seat, uint32_t time,
 | 
				
			||||||
			wl_fixed_from_double(sy));
 | 
								wl_fixed_from_double(sy));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wlr_seat->pointer_state.sx = sx;
 | 
						wlr_seat_pointer_warp(wlr_seat, sx, sy);
 | 
				
			||||||
	wlr_seat->pointer_state.sy = sy;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint32_t wlr_seat_pointer_send_button(struct wlr_seat *wlr_seat, uint32_t time,
 | 
					uint32_t wlr_seat_pointer_send_button(struct wlr_seat *wlr_seat, uint32_t time,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue