|  |  | @ -10,7 +10,8 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "sway/commands.h" |  |  |  | #include "sway/commands.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "sway/input/cursor.h" |  |  |  | #include "sway/input/cursor.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static struct cmd_results *press_or_release(struct sway_cursor *cursor, char *action, char *button_str); |  |  |  | static struct cmd_results *press_or_release(struct sway_cursor *cursor, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		char *action, char *button_str, uint32_t time); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static const char *expected_syntax = "Expected 'cursor <move> <x> <y>' or " |  |  |  | static const char *expected_syntax = "Expected 'cursor <move> <x> <y>' or " | 
			
		
	
		
		
			
				
					
					|  |  |  | 					"'cursor <set> <x> <y>' or " |  |  |  | 					"'cursor <set> <x> <y>' or " | 
			
		
	
	
		
		
			
				
					|  |  | @ -28,6 +29,10 @@ struct cmd_results *seat_cmd_cursor(int argc, char **argv) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	struct sway_cursor *cursor = seat->cursor; |  |  |  | 	struct sway_cursor *cursor = seat->cursor; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	struct timespec now; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	clock_gettime(CLOCK_MONOTONIC, &now); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	uint32_t time = now.tv_nsec / 1000; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if (strcasecmp(argv[0], "move") == 0) { |  |  |  | 	if (strcasecmp(argv[0], "move") == 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (argc < 3) { |  |  |  | 		if (argc < 3) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); |  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); | 
			
		
	
	
		
		
			
				
					|  |  | @ -35,7 +40,7 @@ struct cmd_results *seat_cmd_cursor(int argc, char **argv) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		int delta_x = strtol(argv[1], NULL, 10); |  |  |  | 		int delta_x = strtol(argv[1], NULL, 10); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		int delta_y = strtol(argv[2], NULL, 10); |  |  |  | 		int delta_y = strtol(argv[2], NULL, 10); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		wlr_cursor_move(cursor->cursor, NULL, delta_x, delta_y); |  |  |  | 		wlr_cursor_move(cursor->cursor, NULL, delta_x, delta_y); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		cursor_send_pointer_motion(cursor, 1); |  |  |  | 		cursor_send_pointer_motion(cursor, time); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	} else if (strcasecmp(argv[0], "set") == 0) { |  |  |  | 	} else if (strcasecmp(argv[0], "set") == 0) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (argc < 3) { |  |  |  | 		if (argc < 3) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); |  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); | 
			
		
	
	
		
		
			
				
					|  |  | @ -44,12 +49,12 @@ struct cmd_results *seat_cmd_cursor(int argc, char **argv) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		float x = strtof(argv[1], NULL) / root_container.width; |  |  |  | 		float x = strtof(argv[1], NULL) / root_container.width; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		float y = strtof(argv[2], NULL) / root_container.height; |  |  |  | 		float y = strtof(argv[2], NULL) / root_container.height; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		wlr_cursor_warp_absolute(cursor->cursor, NULL, x, y); |  |  |  | 		wlr_cursor_warp_absolute(cursor->cursor, NULL, x, y); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		cursor_send_pointer_motion(cursor, 0); |  |  |  | 		cursor_send_pointer_motion(cursor, time); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	} else { |  |  |  | 	} else { | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (argc < 2) { |  |  |  | 		if (argc < 2) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); |  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if ((error = press_or_release(cursor, argv[0], argv[1]))) { |  |  |  | 		if ((error = press_or_release(cursor, argv[0], argv[1], time))) { | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			return error; |  |  |  | 			return error; | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
	
		
		
			
				
					|  |  | @ -57,7 +62,8 @@ struct cmd_results *seat_cmd_cursor(int argc, char **argv) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	return cmd_results_new(CMD_SUCCESS, NULL, NULL); |  |  |  | 	return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static struct cmd_results *press_or_release(struct sway_cursor *cursor, char *action, char *button_str) { |  |  |  | static struct cmd_results *press_or_release(struct sway_cursor *cursor, | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		char *action, char *button_str, uint32_t time) { | 
			
		
	
		
		
			
				
					
					|  |  |  | 	enum wlr_button_state state; |  |  |  | 	enum wlr_button_state state; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	uint32_t button; |  |  |  | 	uint32_t button; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	if (strcasecmp(action, "press") == 0) { |  |  |  | 	if (strcasecmp(action, "press") == 0) { | 
			
		
	
	
		
		
			
				
					|  |  | @ -78,6 +84,6 @@ static struct cmd_results *press_or_release(struct sway_cursor *cursor, char *ac | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); |  |  |  | 			return cmd_results_new(CMD_INVALID, "cursor", expected_syntax); | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 	dispatch_cursor_button(cursor, 1, button, state); |  |  |  | 	dispatch_cursor_button(cursor, time, button, state); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	return cmd_results_new(CMD_SUCCESS, NULL, NULL); |  |  |  | 	return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |