mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	Move gesture handling out of cursor.c
This commit is contained in:
		
							parent
							
								
									67a8ae8561
								
							
						
					
					
						commit
						8d0812d45a
					
				
					 5 changed files with 109 additions and 70 deletions
				
			
		
							
								
								
									
										10
									
								
								include/input/gestures.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								include/input/gestures.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,10 @@
 | 
				
			||||||
 | 
					/* SPDX-License-Identifier: GPL-2.0-only */
 | 
				
			||||||
 | 
					#ifndef LABWC_GESTURES_H
 | 
				
			||||||
 | 
					#define LABWC_GESTURES_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct seat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void gestures_init(struct seat *seat);
 | 
				
			||||||
 | 
					void gestures_finish(struct seat *seat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* LABWC_GESTURES_H */
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,6 @@
 | 
				
			||||||
#include <wlr/types/wlr_relative_pointer_v1.h>
 | 
					#include <wlr/types/wlr_relative_pointer_v1.h>
 | 
				
			||||||
#include <wlr/types/wlr_pointer.h>
 | 
					#include <wlr/types/wlr_pointer.h>
 | 
				
			||||||
#include <wlr/types/wlr_pointer_constraints_v1.h>
 | 
					#include <wlr/types/wlr_pointer_constraints_v1.h>
 | 
				
			||||||
#include <wlr/types/wlr_pointer_gestures_v1.h>
 | 
					 | 
				
			||||||
#include <wlr/types/wlr_seat.h>
 | 
					#include <wlr/types/wlr_seat.h>
 | 
				
			||||||
#include <wlr/types/wlr_subcompositor.h>
 | 
					#include <wlr/types/wlr_subcompositor.h>
 | 
				
			||||||
#include <wlr/types/wlr_xcursor_manager.h>
 | 
					#include <wlr/types/wlr_xcursor_manager.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,7 @@
 | 
				
			||||||
#include "config/mousebind.h"
 | 
					#include "config/mousebind.h"
 | 
				
			||||||
#include "dnd.h"
 | 
					#include "dnd.h"
 | 
				
			||||||
#include "idle.h"
 | 
					#include "idle.h"
 | 
				
			||||||
 | 
					#include "input/gestures.h"
 | 
				
			||||||
#include "labwc.h"
 | 
					#include "labwc.h"
 | 
				
			||||||
#include "menu/menu.h"
 | 
					#include "menu/menu.h"
 | 
				
			||||||
#include "regions.h"
 | 
					#include "regions.h"
 | 
				
			||||||
| 
						 | 
					@ -1140,55 +1141,6 @@ cursor_frame(struct wl_listener *listener, void *data)
 | 
				
			||||||
	wlr_seat_pointer_notify_frame(seat->seat);
 | 
						wlr_seat_pointer_notify_frame(seat->seat);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void handle_pointer_pinch_begin(struct wl_listener *listener, void *data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct seat *seat = wl_container_of(listener, seat, pinch_begin);
 | 
					 | 
				
			||||||
	struct wlr_pointer_pinch_begin_event *event = data;
 | 
					 | 
				
			||||||
	wlr_pointer_gestures_v1_send_pinch_begin(seat->pointer_gestures,
 | 
					 | 
				
			||||||
		seat->seat, event->time_msec, event->fingers);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void handle_pointer_pinch_update(struct wl_listener *listener, void *data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct seat *seat = wl_container_of(listener, seat, pinch_update);
 | 
					 | 
				
			||||||
	struct wlr_pointer_pinch_update_event *event = data;
 | 
					 | 
				
			||||||
	wlr_pointer_gestures_v1_send_pinch_update(seat->pointer_gestures,
 | 
					 | 
				
			||||||
		seat->seat, event->time_msec, event->dx, event->dy,
 | 
					 | 
				
			||||||
		event->scale, event->rotation);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void handle_pointer_pinch_end(struct wl_listener *listener, void *data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct seat *seat = wl_container_of(listener, seat, pinch_end);
 | 
					 | 
				
			||||||
	struct wlr_pointer_pinch_end_event *event = data;
 | 
					 | 
				
			||||||
	wlr_pointer_gestures_v1_send_pinch_end(seat->pointer_gestures,
 | 
					 | 
				
			||||||
		seat->seat, event->time_msec, event->cancelled);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void handle_pointer_swipe_begin(struct wl_listener *listener, void *data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct seat *seat = wl_container_of(listener, seat, swipe_begin);
 | 
					 | 
				
			||||||
	struct wlr_pointer_swipe_begin_event *event = data;
 | 
					 | 
				
			||||||
	wlr_pointer_gestures_v1_send_swipe_begin(seat->pointer_gestures,
 | 
					 | 
				
			||||||
		seat->seat, event->time_msec, event->fingers);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void handle_pointer_swipe_update(struct wl_listener *listener, void *data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct seat *seat = wl_container_of(listener, seat, swipe_update);
 | 
					 | 
				
			||||||
	struct wlr_pointer_swipe_update_event *event = data;
 | 
					 | 
				
			||||||
	wlr_pointer_gestures_v1_send_swipe_update(seat->pointer_gestures,
 | 
					 | 
				
			||||||
		seat->seat, event->time_msec, event->dx, event->dy);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static void handle_pointer_swipe_end(struct wl_listener *listener, void *data)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct seat *seat = wl_container_of(listener, seat, swipe_end);
 | 
					 | 
				
			||||||
	struct wlr_pointer_swipe_end_event *event = data;
 | 
					 | 
				
			||||||
	wlr_pointer_gestures_v1_send_swipe_end(seat->pointer_gestures,
 | 
					 | 
				
			||||||
		seat->seat, event->time_msec, event->cancelled);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
cursor_init(struct seat *seat)
 | 
					cursor_init(struct seat *seat)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -1248,19 +1200,7 @@ cursor_init(struct seat *seat)
 | 
				
			||||||
	seat->cursor_frame.notify = cursor_frame;
 | 
						seat->cursor_frame.notify = cursor_frame;
 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.frame, &seat->cursor_frame);
 | 
						wl_signal_add(&seat->cursor->events.frame, &seat->cursor_frame);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	seat->pointer_gestures = wlr_pointer_gestures_v1_create(seat->server->wl_display);
 | 
						gestures_init(seat);
 | 
				
			||||||
	seat->pinch_begin.notify = handle_pointer_pinch_begin;
 | 
					 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.pinch_begin, &seat->pinch_begin);
 | 
					 | 
				
			||||||
	seat->pinch_update.notify = handle_pointer_pinch_update;
 | 
					 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.pinch_update, &seat->pinch_update);
 | 
					 | 
				
			||||||
	seat->pinch_end.notify = handle_pointer_pinch_end;
 | 
					 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.pinch_end, &seat->pinch_end);
 | 
					 | 
				
			||||||
	seat->swipe_begin.notify = handle_pointer_swipe_begin;
 | 
					 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.swipe_begin, &seat->swipe_begin);
 | 
					 | 
				
			||||||
	seat->swipe_update.notify = handle_pointer_swipe_update;
 | 
					 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.swipe_update, &seat->swipe_update);
 | 
					 | 
				
			||||||
	seat->swipe_end.notify = handle_pointer_swipe_end;
 | 
					 | 
				
			||||||
	wl_signal_add(&seat->cursor->events.swipe_end, &seat->swipe_end);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	seat->request_cursor.notify = request_cursor_notify;
 | 
						seat->request_cursor.notify = request_cursor_notify;
 | 
				
			||||||
	wl_signal_add(&seat->seat->events.request_set_cursor,
 | 
						wl_signal_add(&seat->seat->events.request_set_cursor,
 | 
				
			||||||
| 
						 | 
					@ -1285,12 +1225,7 @@ void cursor_finish(struct seat *seat)
 | 
				
			||||||
	wl_list_remove(&seat->cursor_axis.link);
 | 
						wl_list_remove(&seat->cursor_axis.link);
 | 
				
			||||||
	wl_list_remove(&seat->cursor_frame.link);
 | 
						wl_list_remove(&seat->cursor_frame.link);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_remove(&seat->pinch_begin.link);
 | 
						gestures_finish(seat);
 | 
				
			||||||
	wl_list_remove(&seat->pinch_update.link);
 | 
					 | 
				
			||||||
	wl_list_remove(&seat->pinch_end.link);
 | 
					 | 
				
			||||||
	wl_list_remove(&seat->swipe_begin.link);
 | 
					 | 
				
			||||||
	wl_list_remove(&seat->swipe_update.link);
 | 
					 | 
				
			||||||
	wl_list_remove(&seat->swipe_end.link);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_remove(&seat->request_cursor.link);
 | 
						wl_list_remove(&seat->request_cursor.link);
 | 
				
			||||||
	wl_list_remove(&seat->request_set_selection.link);
 | 
						wl_list_remove(&seat->request_set_selection.link);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										94
									
								
								src/input/gestures.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/input/gestures.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,94 @@
 | 
				
			||||||
 | 
					// SPDX-License-Identifier: GPL-2.0-only
 | 
				
			||||||
 | 
					#include <wlr/types/wlr_pointer_gestures_v1.h>
 | 
				
			||||||
 | 
					#include "input/gestures.h"
 | 
				
			||||||
 | 
					#include "labwc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_pointer_pinch_begin(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct seat *seat = wl_container_of(listener, seat, pinch_begin);
 | 
				
			||||||
 | 
						struct wlr_pointer_pinch_begin_event *event = data;
 | 
				
			||||||
 | 
						wlr_pointer_gestures_v1_send_pinch_begin(seat->pointer_gestures,
 | 
				
			||||||
 | 
							seat->seat, event->time_msec, event->fingers);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_pointer_pinch_update(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct seat *seat = wl_container_of(listener, seat, pinch_update);
 | 
				
			||||||
 | 
						struct wlr_pointer_pinch_update_event *event = data;
 | 
				
			||||||
 | 
						wlr_pointer_gestures_v1_send_pinch_update(seat->pointer_gestures,
 | 
				
			||||||
 | 
							seat->seat, event->time_msec, event->dx, event->dy,
 | 
				
			||||||
 | 
							event->scale, event->rotation);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_pointer_pinch_end(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct seat *seat = wl_container_of(listener, seat, pinch_end);
 | 
				
			||||||
 | 
						struct wlr_pointer_pinch_end_event *event = data;
 | 
				
			||||||
 | 
						wlr_pointer_gestures_v1_send_pinch_end(seat->pointer_gestures,
 | 
				
			||||||
 | 
							seat->seat, event->time_msec, event->cancelled);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_pointer_swipe_begin(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct seat *seat = wl_container_of(listener, seat, swipe_begin);
 | 
				
			||||||
 | 
						struct wlr_pointer_swipe_begin_event *event = data;
 | 
				
			||||||
 | 
						wlr_pointer_gestures_v1_send_swipe_begin(seat->pointer_gestures,
 | 
				
			||||||
 | 
							seat->seat, event->time_msec, event->fingers);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_pointer_swipe_update(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct seat *seat = wl_container_of(listener, seat, swipe_update);
 | 
				
			||||||
 | 
						struct wlr_pointer_swipe_update_event *event = data;
 | 
				
			||||||
 | 
						wlr_pointer_gestures_v1_send_swipe_update(seat->pointer_gestures,
 | 
				
			||||||
 | 
							seat->seat, event->time_msec, event->dx, event->dy);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					handle_pointer_swipe_end(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct seat *seat = wl_container_of(listener, seat, swipe_end);
 | 
				
			||||||
 | 
						struct wlr_pointer_swipe_end_event *event = data;
 | 
				
			||||||
 | 
						wlr_pointer_gestures_v1_send_swipe_end(seat->pointer_gestures,
 | 
				
			||||||
 | 
							seat->seat, event->time_msec, event->cancelled);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					gestures_init(struct seat *seat)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						seat->pointer_gestures = wlr_pointer_gestures_v1_create(seat->server->wl_display);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						seat->pinch_begin.notify = handle_pointer_pinch_begin;
 | 
				
			||||||
 | 
						wl_signal_add(&seat->cursor->events.pinch_begin, &seat->pinch_begin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						seat->pinch_update.notify = handle_pointer_pinch_update;
 | 
				
			||||||
 | 
						wl_signal_add(&seat->cursor->events.pinch_update, &seat->pinch_update);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						seat->pinch_end.notify = handle_pointer_pinch_end;
 | 
				
			||||||
 | 
						wl_signal_add(&seat->cursor->events.pinch_end, &seat->pinch_end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						seat->swipe_begin.notify = handle_pointer_swipe_begin;
 | 
				
			||||||
 | 
						wl_signal_add(&seat->cursor->events.swipe_begin, &seat->swipe_begin);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						seat->swipe_update.notify = handle_pointer_swipe_update;
 | 
				
			||||||
 | 
						wl_signal_add(&seat->cursor->events.swipe_update, &seat->swipe_update);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						seat->swipe_end.notify = handle_pointer_swipe_end;
 | 
				
			||||||
 | 
						wl_signal_add(&seat->cursor->events.swipe_end, &seat->swipe_end);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void
 | 
				
			||||||
 | 
					gestures_finish(struct seat *seat)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						wl_list_remove(&seat->pinch_begin.link);
 | 
				
			||||||
 | 
						wl_list_remove(&seat->pinch_update.link);
 | 
				
			||||||
 | 
						wl_list_remove(&seat->pinch_end.link);
 | 
				
			||||||
 | 
						wl_list_remove(&seat->swipe_begin.link);
 | 
				
			||||||
 | 
						wl_list_remove(&seat->swipe_update.link);
 | 
				
			||||||
 | 
						wl_list_remove(&seat->swipe_end.link);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
labwc_sources += files(
 | 
					labwc_sources += files(
 | 
				
			||||||
 | 
					  'cursor.c',
 | 
				
			||||||
 | 
					  'gestures.c',
 | 
				
			||||||
  'keyboard.c',
 | 
					  'keyboard.c',
 | 
				
			||||||
  'key-state.c',
 | 
					  'key-state.c',
 | 
				
			||||||
  'touch.c',
 | 
					  'touch.c',
 | 
				
			||||||
  'cursor.c',
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue