@ -21,7 +21,7 @@
# include "log.h"
# include "util.h"
static const char * expected_syntax =
static const char expected_syntax [ ] =
" Expected 'move <left|right|up|down> <[px] px>' or "
" 'move [--no-auto-back-and-forth] <container|window> [to] workspace <name>' or "
" 'move <container|window|workspace> [to] output <name|direction>' or "
@ -378,7 +378,7 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
struct sway_container * container = config - > handler_context . container ;
if ( node - > type = = N_WORKSPACE ) {
if ( workspace - > tiling - > length = = 0 ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
return cmd_results_new ( CMD_FAILURE ,
" Can't move an empty workspace " ) ;
}
container = workspace_wrap_children ( workspace ) ;
@ -388,21 +388,21 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
while ( strcasecmp ( argv [ 0 ] , " --no-auto-back-and-forth " ) = = 0 ) {
no_auto_back_and_forth = true ;
if ( - - argc < 3 ) {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
+ + argv ;
}
while ( strcasecmp ( argv [ 1 ] , " --no-auto-back-and-forth " ) = = 0 ) {
no_auto_back_and_forth = true ;
if ( - - argc < 3 ) {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
argv + + ;
}
while ( strcasecmp ( argv [ 1 ] , " to " ) = = 0 ) {
if ( - - argc < 3 ) {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
argv + + ;
}
@ -429,7 +429,7 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
if ( seat - > prev_workspace_name ) {
ws_name = strdup ( seat - > prev_workspace_name ) ;
} else {
return cmd_results_new ( CMD_FAILURE , " move " ,
return cmd_results_new ( CMD_FAILURE ,
" No workspace was previously active. " ) ;
}
}
@ -437,11 +437,10 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
if ( strcasecmp ( argv [ 2 ] , " number " ) = = 0 ) {
// move "container to workspace number x"
if ( argc < 4 ) {
return cmd_results_new ( CMD_INVALID , " move " ,
expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
if ( ! isdigit ( argv [ 3 ] [ 0 ] ) ) {
return cmd_results_new ( CMD_INVALID , " move " ,
return cmd_results_new ( CMD_INVALID ,
" Invalid workspace number '%s' " , argv [ 3 ] ) ;
}
ws_name = join_args ( argv + 3 , argc - 3 ) ;
@ -472,7 +471,7 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
workspace_get_initial_output ( ws_name ) ;
if ( old_output = = new_output ) {
free ( ws_name ) ;
return cmd_results_new ( CMD_FAILURE , " move " ,
return cmd_results_new ( CMD_FAILURE ,
" Can't move sticky container to another workspace "
" on the same output " ) ;
}
@ -486,24 +485,24 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
struct sway_output * new_output = output_in_direction ( argv [ 2 ] ,
old_output , container - > x , container - > y ) ;
if ( ! new_output ) {
return cmd_results_new ( CMD_FAILURE , " move workspace " ,
return cmd_results_new ( CMD_FAILURE ,
" Can't find output with name/direction '%s' " , argv [ 2 ] ) ;
}
destination = seat_get_focus_inactive ( seat , & new_output - > node ) ;
} else if ( strcasecmp ( argv [ 1 ] , " mark " ) = = 0 ) {
struct sway_container * dest_con = container_find_mark ( argv [ 2 ] ) ;
if ( dest_con = = NULL ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
return cmd_results_new ( CMD_FAILURE ,
" Mark '%s' not found " , argv [ 2 ] ) ;
}
destination = & dest_con - > node ;
} else {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
if ( container - > is_sticky & & old_output & &
node_has_ancestor ( destination , & old_output - > node ) ) {
return cmd_results_new ( CMD_FAILURE , " move" , " Can't move sticky "
return cmd_results_new ( CMD_FAILURE , " Can't move sticky "
" container to another workspace on the same output " ) ;
}
@ -569,7 +568,7 @@ static struct cmd_results *cmd_move_container(int argc, char **argv) {
}
arrange_node ( node_get_parent ( destination ) ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
static void workspace_move_to_output ( struct sway_workspace * workspace ,
@ -611,13 +610,13 @@ static struct cmd_results *cmd_move_workspace(int argc, char **argv) {
while ( strcasecmp ( argv [ 1 ] , " to " ) = = 0 ) {
if ( - - argc < 3 ) {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
+ + argv ;
}
if ( strcasecmp ( argv [ 1 ] , " output " ) ! = 0 ) {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
struct sway_workspace * workspace = config - > handler_context . workspace ;
@ -627,7 +626,7 @@ static struct cmd_results *cmd_move_workspace(int argc, char **argv) {
struct sway_output * new_output = output_in_direction ( argv [ 2 ] ,
old_output , center_x , center_y ) ;
if ( ! new_output ) {
return cmd_results_new ( CMD_FAILURE , " move workspace " ,
return cmd_results_new ( CMD_FAILURE ,
" Can't find output with name/direction '%s' " , argv [ 2 ] ) ;
}
workspace_move_to_output ( workspace , new_output ) ;
@ -635,7 +634,7 @@ static struct cmd_results *cmd_move_workspace(int argc, char **argv) {
arrange_output ( old_output ) ;
arrange_output ( new_output ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
static struct cmd_results * cmd_move_in_direction (
@ -645,19 +644,18 @@ static struct cmd_results *cmd_move_in_direction(
char * inv ;
move_amt = ( int ) strtol ( argv [ 1 ] , & inv , 10 ) ;
if ( * inv ! = ' \0 ' & & strcasecmp ( inv , " px " ) ! = 0 ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
" Invalid distance specified " ) ;
return cmd_results_new ( CMD_FAILURE , " Invalid distance specified " ) ;
}
}
struct sway_container * container = config - > handler_context . container ;
if ( ! container ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
return cmd_results_new ( CMD_FAILURE ,
" Cannot move workspaces in a direction " ) ;
}
if ( container_is_floating ( container ) ) {
if ( container - > is_fullscreen ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
return cmd_results_new ( CMD_FAILURE ,
" Cannot move fullscreen floating container " ) ;
}
double lx = container - > x ;
@ -677,13 +675,13 @@ static struct cmd_results *cmd_move_in_direction(
break ;
}
container_floating_move_to ( container , lx , ly ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
struct sway_workspace * old_ws = container - > workspace ;
if ( ! container_move_in_direction ( container , direction ) ) {
// Container didn't move
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
struct sway_workspace * new_ws = container - > workspace ;
@ -708,10 +706,10 @@ static struct cmd_results *cmd_move_in_direction(
}
container_end_mouse_operation ( container ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
static const char * expected_position_syntax =
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' " ;
@ -719,12 +717,11 @@ static const char *expected_position_syntax =
static struct cmd_results * cmd_move_to_position ( int argc , char * * argv ) {
struct sway_container * container = config - > handler_context . container ;
if ( ! container | | ! container_is_floating ( container ) ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
" Only floating containers "
return cmd_results_new ( CMD_FAILURE , " Only floating containers "
" can be moved to an absolute position " ) ;
}
if ( ! argc ) {
return cmd_results_new ( CMD_FAILURE , " move " , expected_position_syntax ) ;
return cmd_results_new ( CMD_FAILURE , expected_position_syntax ) ;
}
bool absolute = false ;
@ -734,25 +731,25 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
+ + argv ;
}
if ( ! argc ) {
return cmd_results_new ( CMD_FAILURE , " move " , expected_position_syntax ) ;
return cmd_results_new ( CMD_FAILURE , expected_position_syntax ) ;
}
if ( strcmp ( argv [ 0 ] , " position " ) = = 0 ) {
- - argc ;
+ + argv ;
}
if ( ! argc ) {
return cmd_results_new ( CMD_FAILURE , " move " , expected_position_syntax ) ;
return cmd_results_new ( CMD_FAILURE , expected_position_syntax ) ;
}
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" ) ;
return cmd_results_new ( CMD_FAILURE , " No cursor device" ) ;
}
double lx = seat - > cursor - > cursor - > x - container - > width / 2 ;
double ly = seat - > cursor - > cursor - > y - container - > height / 2 ;
container_floating_move_to ( container , lx , ly ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
} else if ( strcmp ( argv [ 0 ] , " center " ) = = 0 ) {
double lx , ly ;
if ( absolute ) {
@ -764,19 +761,18 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
ly = ws - > y + ( ws - > height - container - > height ) / 2 ;
}
container_floating_move_to ( container , lx , ly ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
if ( argc < 2 ) {
return cmd_results_new ( CMD_FAILURE , " move " , expected_position_syntax ) ;
return cmd_results_new ( CMD_FAILURE , expected_position_syntax ) ;
}
double lx , ly ;
char * inv ;
lx = ( double ) strtol ( argv [ 0 ] , & inv , 10 ) ;
if ( * inv ! = ' \0 ' & & strcasecmp ( inv , " px " ) ! = 0 ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
" Invalid position specified " ) ;
return cmd_results_new ( CMD_FAILURE , " Invalid position specified " ) ;
}
if ( strcmp ( argv [ 1 ] , " px " ) = = 0 ) {
- - argc ;
@ -784,14 +780,13 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
}
if ( argc > 3 ) {
return cmd_results_new ( CMD_FAILURE , " move " , expected_position_syntax ) ;
return cmd_results_new ( CMD_FAILURE , expected_position_syntax ) ;
}
ly = ( double ) strtol ( argv [ 1 ] , & inv , 10 ) ;
if ( ( * inv ! = ' \0 ' & & strcasecmp ( inv , " px " ) ! = 0 ) | |
( argc = = 3 & & strcmp ( argv [ 2 ] , " px " ) ! = 0 ) ) {
return cmd_results_new ( CMD_FAILURE , " move " ,
" Invalid position specified " ) ;
return cmd_results_new ( CMD_FAILURE , " Invalid position specified " ) ;
}
if ( ! absolute ) {
@ -799,7 +794,7 @@ static struct cmd_results *cmd_move_to_position(int argc, char **argv) {
ly + = container - > workspace - > y ;
}
container_floating_move_to ( container , lx , ly ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
static struct cmd_results * cmd_move_to_scratchpad ( void ) {
@ -807,7 +802,7 @@ static struct cmd_results *cmd_move_to_scratchpad(void) {
struct sway_container * con = config - > handler_context . container ;
struct sway_workspace * ws = config - > handler_context . workspace ;
if ( node - > type = = N_WORKSPACE & & ws - > tiling - > length = = 0 ) {
return cmd_results_new ( CMD_INVALID , " move " ,
return cmd_results_new ( CMD_INVALID ,
" Can't move an empty workspace to the scratchpad " ) ;
}
if ( node - > type = = N_WORKSPACE ) {
@ -825,11 +820,11 @@ static struct cmd_results *cmd_move_to_scratchpad(void) {
}
if ( con - > scratchpad ) {
return cmd_results_new ( CMD_INVALID , " move " ,
return cmd_results_new ( CMD_INVALID ,
" Container is already in the scratchpad " ) ;
}
root_scratchpad_add_container ( con ) ;
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}
struct cmd_results * cmd_move ( int argc , char * * argv ) {
@ -838,7 +833,7 @@ struct cmd_results *cmd_move(int argc, char **argv) {
return error ;
}
if ( ! root - > outputs - > length ) {
return cmd_results_new ( CMD_INVALID , " move " ,
return cmd_results_new ( CMD_INVALID ,
" Can't run this command while there's no outputs connected. " ) ;
}
@ -867,7 +862,7 @@ struct cmd_results *cmd_move(int argc, char **argv) {
} else if ( strcasecmp ( argv [ 0 ] , " absolute " ) = = 0 ) {
return cmd_move_to_position ( argc , argv ) ;
} else {
return cmd_results_new ( CMD_INVALID , " move " , expected_syntax ) ;
return cmd_results_new ( CMD_INVALID , expected_syntax ) ;
}
return cmd_results_new ( CMD_SUCCESS , NULL , NULL );
return cmd_results_new ( CMD_SUCCESS , NULL );
}