mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #2495 from ianyfan/commands
commands: implement move absolute
This commit is contained in:
		
						commit
						33d1022650
					
				
					 2 changed files with 29 additions and 8 deletions
				
			
		| 
						 | 
				
			
			@ -359,7 +359,8 @@ static struct cmd_results *move_in_direction(struct sway_container *container,
 | 
			
		|||
 | 
			
		||||
static const char *expected_position_syntax =
 | 
			
		||||
	"Expected 'move [absolute] position <x> [px] <y> [px]' or "
 | 
			
		||||
	"'move [absolute] position center|mouse'";
 | 
			
		||||
	"'move [absolute] position center' or "
 | 
			
		||||
	"'move position cursor|mouse|pointer'";
 | 
			
		||||
 | 
			
		||||
static struct cmd_results *move_to_position(struct sway_container *container,
 | 
			
		||||
		int argc, char **argv) {
 | 
			
		||||
| 
						 | 
				
			
			@ -371,7 +372,10 @@ static struct cmd_results *move_to_position(struct sway_container *container,
 | 
			
		|||
	if (!argc) {
 | 
			
		||||
		return cmd_results_new(CMD_FAILURE, "move", expected_position_syntax);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	bool absolute = false;
 | 
			
		||||
	if (strcmp(argv[0], "absolute") == 0) {
 | 
			
		||||
		absolute = true;
 | 
			
		||||
		--argc;
 | 
			
		||||
		++argv;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -385,7 +389,8 @@ static struct cmd_results *move_to_position(struct sway_container *container,
 | 
			
		|||
	if (!argc) {
 | 
			
		||||
		return cmd_results_new(CMD_FAILURE, "move", expected_position_syntax);
 | 
			
		||||
	}
 | 
			
		||||
	if (strcmp(argv[0], "mouse") == 0) {
 | 
			
		||||
	if (strcmp(argv[0], "cursor") == 0 || strcmp(argv[0], "mouse") == 0 ||
 | 
			
		||||
			strcmp(argv[0], "pointer") == 0) {
 | 
			
		||||
		struct sway_seat *seat = config->handler_context.seat;
 | 
			
		||||
		if (!seat->cursor) {
 | 
			
		||||
			return cmd_results_new(CMD_FAILURE, "move", "No cursor device");
 | 
			
		||||
| 
						 | 
				
			
			@ -395,9 +400,15 @@ static struct cmd_results *move_to_position(struct sway_container *container,
 | 
			
		|||
		container_floating_move_to(container, lx, ly);
 | 
			
		||||
		return cmd_results_new(CMD_SUCCESS, NULL, NULL);
 | 
			
		||||
	} else if (strcmp(argv[0], "center") == 0) {
 | 
			
		||||
		struct sway_container *ws = container_parent(container, C_WORKSPACE);
 | 
			
		||||
		double lx = ws->x + (ws->width - container->width) / 2;
 | 
			
		||||
		double ly = ws->y + (ws->height - container->height) / 2;
 | 
			
		||||
		double lx, ly;
 | 
			
		||||
		if (absolute) {
 | 
			
		||||
			lx = root_container.x + (root_container.width - container->width) / 2;
 | 
			
		||||
			ly = root_container.y + (root_container.height - container->height) / 2;
 | 
			
		||||
		} else {
 | 
			
		||||
			struct sway_container *ws = container_parent(container, C_WORKSPACE);
 | 
			
		||||
			lx = ws->x + (ws->width - container->width) / 2;
 | 
			
		||||
			ly = ws->y + (ws->height - container->height) / 2;
 | 
			
		||||
		}
 | 
			
		||||
		container_floating_move_to(container, lx, ly);
 | 
			
		||||
		return cmd_results_new(CMD_SUCCESS, NULL, NULL);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -429,6 +440,11 @@ static struct cmd_results *move_to_position(struct sway_container *container,
 | 
			
		|||
				"Invalid position specified");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!absolute) {
 | 
			
		||||
		struct sway_container *ws = container_parent(container, C_WORKSPACE);
 | 
			
		||||
		lx += ws->x;
 | 
			
		||||
		ly += ws->y;
 | 
			
		||||
	}
 | 
			
		||||
	container_floating_move_to(container, lx, ly);
 | 
			
		||||
	return cmd_results_new(CMD_SUCCESS, NULL, NULL);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -133,10 +133,15 @@ They are expected to be used with *bindsym* or at runtime through *swaymsg*(1).
 | 
			
		|||
	tiled containers.
 | 
			
		||||
 | 
			
		||||
*move* [absolute] position <pos\_x> [px] <pos\_y> [px]
 | 
			
		||||
	Moves the focused container to the specified position.
 | 
			
		||||
	Moves the focused container to the specified position in the workspace. If
 | 
			
		||||
	_absolute_ is used, the position is relative to all outputs.
 | 
			
		||||
 | 
			
		||||
*move* [absolute] position center|mouse
 | 
			
		||||
	Moves the focused container to be centered on the workspace or mouse.
 | 
			
		||||
*move* [absolute] position center
 | 
			
		||||
	Moves the focused container to be centered on the workspace. If _absolute_
 | 
			
		||||
	is used, it is moved to the center of all outputs.
 | 
			
		||||
 | 
			
		||||
*move* position cursor|mouse|pointer
 | 
			
		||||
	Moves the focused container to be centered on the cursor.
 | 
			
		||||
 | 
			
		||||
*move* container|window [to] mark <mark>
 | 
			
		||||
	Moves the focused container to the specified mark.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue