mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	input_state: Extract 'pointer_position_set' function from handlers.
This commit is contained in:
		
							parent
							
								
									865b30f138
								
							
						
					
					
						commit
						4799d07ac1
					
				
					 3 changed files with 27 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -65,6 +65,8 @@ extern struct pointer_state {
 | 
			
		|||
	int mode;
 | 
			
		||||
} pointer_state;
 | 
			
		||||
 | 
			
		||||
void pointer_position_set(struct wlc_origin *new_origin, bool force_focus);
 | 
			
		||||
 | 
			
		||||
// on button release unset mode depending on the button.
 | 
			
		||||
// on button press set mode conditionally depending on the button
 | 
			
		||||
void pointer_mode_set(uint32_t button, bool condition);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -332,27 +332,7 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Update pointer origin
 | 
			
		||||
	pointer_state.delta.x = origin->x - pointer_state.origin.x;
 | 
			
		||||
	pointer_state.delta.y = origin->y - pointer_state.origin.y;
 | 
			
		||||
	pointer_state.origin.x = origin->x;
 | 
			
		||||
	pointer_state.origin.y = origin->y;
 | 
			
		||||
 | 
			
		||||
	// Update view under pointer
 | 
			
		||||
	swayc_t *prev_view = pointer_state.view;
 | 
			
		||||
	pointer_state.view = container_under_pointer();
 | 
			
		||||
 | 
			
		||||
	// If pointer is in a mode, update it
 | 
			
		||||
	if (pointer_state.mode) {
 | 
			
		||||
		pointer_mode_update();
 | 
			
		||||
	}
 | 
			
		||||
	// Otherwise change focus if config is set an
 | 
			
		||||
	else if (prev_view != pointer_state.view && config->focus_follows_mouse) {
 | 
			
		||||
		if (pointer_state.view && pointer_state.view->type == C_VIEW) {
 | 
			
		||||
			set_focused_container(pointer_state.view);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	wlc_pointer_set_origin(&new_origin);
 | 
			
		||||
	pointer_position_set(&new_origin, false);
 | 
			
		||||
	return EVENT_PASSTHROUGH;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@
 | 
			
		|||
#include <stdbool.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
#include "input_state.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -161,6 +162,29 @@ static void reset_initial_sibling(void) {
 | 
			
		|||
	pointer_state.mode = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pointer_position_set(struct wlc_origin *new_origin, bool force_focus) {
 | 
			
		||||
	pointer_state.delta.x = new_origin->x - pointer_state.origin.x;
 | 
			
		||||
	pointer_state.delta.y = new_origin->y - pointer_state.origin.y;
 | 
			
		||||
	pointer_state.origin.x = new_origin->x;
 | 
			
		||||
	pointer_state.origin.y = new_origin->y;
 | 
			
		||||
 | 
			
		||||
	// Update view under pointer
 | 
			
		||||
	swayc_t *prev_view = pointer_state.view;
 | 
			
		||||
	pointer_state.view = container_under_pointer();
 | 
			
		||||
 | 
			
		||||
	// If pointer is in a mode, update it
 | 
			
		||||
	if (pointer_state.mode) {
 | 
			
		||||
		pointer_mode_update();
 | 
			
		||||
	// Otherwise change focus if config is set
 | 
			
		||||
	} else if (force_focus || (prev_view != pointer_state.view && config->focus_follows_mouse)) {
 | 
			
		||||
		if (pointer_state.view && pointer_state.view->type == C_VIEW) {
 | 
			
		||||
			set_focused_container(pointer_state.view);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	wlc_pointer_set_origin(new_origin);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Mode set left/right click
 | 
			
		||||
 | 
			
		||||
static void pointer_mode_set_left(void) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue