Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add optional next to move command for cursor | mouse | pointer #8077

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 21 additions & 7 deletions sway/commands/move.c
Expand Up @@ -775,16 +775,20 @@ static struct cmd_results *cmd_move_in_direction(
}

static struct cmd_results *cmd_move_to_position_pointer(
struct sway_container *container) {
struct sway_container *container, bool next) {
struct sway_seat *seat = config->handler_context.seat;
if (!seat->cursor) {
return cmd_results_new(CMD_FAILURE, "No cursor device");
}
struct wlr_cursor *cursor = seat->cursor->cursor;
/* Determine where to put the window. */
double lx = cursor->x - container->pending.width / 2;
double ly = cursor->y - container->pending.height / 2;

double lx = cursor->x;
double ly = cursor->y;
if (!next) {
lx -= container->pending.width / 2;
ly -= container->pending.height / 2;
}

/* Correct target coordinates to be in bounds (on screen). */
struct wlr_output *output = wlr_output_layout_output_at(
root->output_layout, cursor->x, cursor->y);
Expand All @@ -809,7 +813,7 @@ static struct cmd_results *cmd_move_to_position_pointer(
static const char expected_position_syntax[] =
"Expected 'move [absolute] position <x> [px] <y> [px]' or "
"'move [absolute] position center' or "
"'move position cursor|mouse|pointer'";
"'move position [next] cursor|mouse|pointer'";

static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
struct sway_container *container = config->handler_context.container;
Expand Down Expand Up @@ -838,13 +842,23 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
if (!argc) {
return cmd_results_new(CMD_INVALID, "%s", expected_position_syntax);
}

bool next = false;
if (strcmp(argv[0], "next") == 0) {
next = true;
--argc;
++argv;
}
if (strcmp(argv[0], "cursor") == 0 || strcmp(argv[0], "mouse") == 0 ||
strcmp(argv[0], "pointer") == 0) {
if (absolute) {
return cmd_results_new(CMD_INVALID, "%s", expected_position_syntax);
}
return cmd_move_to_position_pointer(container);
} else if (strcmp(argv[0], "center") == 0) {
return cmd_move_to_position_pointer(container, next);
} else if (next) {
return cmd_results_new(CMD_INVALID, "%s", expected_position_syntax);
}
if (strcmp(argv[0], "center") == 0) {
double lx, ly;
if (absolute) {
lx = root->x + (root->width - container->pending.width) / 2;
Expand Down
5 changes: 3 additions & 2 deletions sway/sway.5.scd
Expand Up @@ -230,8 +230,9 @@ set|plus|minus|toggle <amount>
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* position [next] cursor|mouse|pointer
Moves the focused container to be centered on the cursor. If _next_ is
used, it moves the left upper corner to the cursor's position.

*move* [container|window] [to] mark <mark>
Moves the focused container to the specified mark.
Expand Down