@ -25,8 +25,22 @@ struct workspace_by_number_data {
const char * name ;
const char * name ;
} ;
} ;
char * workspace_next_name ( void ) {
static bool workspace_valid_on_output ( const char * output_name , const char * ws_name ) {
sway_log ( L_DEBUG , " Workspace: Generating new name " ) ;
int i ;
for ( i = 0 ; i < config - > workspace_outputs - > length ; + + i ) {
struct workspace_output * wso = config - > workspace_outputs - > items [ i ] ;
if ( strcasecmp ( wso - > workspace , ws_name ) = = 0 ) {
if ( strcasecmp ( wso - > output , output_name ) ! = 0 ) {
return false ;
}
}
}
return true ;
}
char * workspace_next_name ( const char * output_name ) {
sway_log ( L_DEBUG , " Workspace: Generating new workspace name for output %s " , output_name ) ;
int i ;
int i ;
int l = 1 ;
int l = 1 ;
// Scan all workspace bindings to find the next available workspace name,
// Scan all workspace bindings to find the next available workspace name,
@ -73,6 +87,14 @@ char *workspace_next_name(void) {
free ( _target ) ;
free ( _target ) ;
continue ;
continue ;
}
}
// make sure that the workspace can appear on the given
// output
if ( ! workspace_valid_on_output ( output_name , _target ) ) {
free ( _target ) ;
continue ;
}
if ( binding - > order < order ) {
if ( binding - > order < order ) {
order = binding - > order ;
order = binding - > order ;
target = _target ;
target = _target ;