@ -432,8 +432,10 @@ struct sway_container *container_close(struct sway_container *con) {
if ( con - > type = = C_VIEW ) {
view_close ( con - > sway_view ) ;
} else {
container_for_each_descendant ( con , container_close_func , NULL ) ;
} else if ( con - > type = = C_CONTAINER ) {
container_for_each_child ( con , container_close_func , NULL ) ;
} else if ( con - > type = = C_WORKSPACE ) {
workspace_for_each_container ( con , container_close_func , NULL ) ;
}
return parent ;
@ -465,23 +467,12 @@ struct sway_container *container_view_create(struct sway_container *sibling,
return swayc ;
}
void container_descendants ( struct sway_container * root ,
enum sway_container_type type ,
void ( * func ) ( struct sway_container * item , void * data ) , void * data ) {
if ( ! root - > children | | ! root - > children - > length ) {
return ;
}
for ( int i = 0 ; i < root - > children - > length ; + + i ) {
struct sway_container * item = root - > children - > items [ i ] ;
if ( item - > type = = type ) {
func ( item , data ) ;
}
container_descendants ( item , type , func , data ) ;
}
}
struct sway_container * container_find ( struct sway_container * container ,
struct sway_container * container_find_child ( struct sway_container * container ,
bool ( * test ) ( struct sway_container * view , void * data ) , void * data ) {
if ( ! sway_assert ( container - > type = = C_CONTAINER | |
container - > type = = C_VIEW , " Expected a container or view " ) ) {
return NULL ;
}
if ( ! container - > children ) {
return NULL ;
}
@ -489,16 +480,12 @@ struct sway_container *container_find(struct sway_container *container,
struct sway_container * child = container - > children - > items [ i ] ;
if ( test ( child , data ) ) {
return child ;
} else {
struct sway_container * res = container_fin d( child , test , data ) ;
}
struct sway_container * res = container_fin d_chil d( child , test , data ) ;
if ( res ) {
return res ;
}
}
}
if ( container - > type = = C_WORKSPACE ) {
return container_find ( container - > sway_workspace - > floating , test , data ) ;
}
return NULL ;
}
@ -743,26 +730,20 @@ struct sway_container *container_at(struct sway_container *workspace,
return NULL ;
}
void container_for_each_ descendant ( struct sway_container * container ,
void container_for_each_ child ( struct sway_container * container ,
void ( * f ) ( struct sway_container * container , void * data ) ,
void * data ) {
if ( ! container ) {
if ( ! sway_assert ( container - > type = = C_CONTAINER | |
container - > type = = C_VIEW , " Expected a container or view " ) ) {
return ;
}
f ( container , data ) ;
if ( container - > children ) {
for ( int i = 0 ; i < container - > children - > length ; + + i ) {
struct sway_container * child = container - > children - > items [ i ] ;
container_for_each_ descendant ( child , f , data ) ;
container_for_each_ child ( child , f , data ) ;
}
}
if ( container - > type = = C_WORKSPACE ) {
struct sway_container * floating = container - > sway_workspace - > floating ;
for ( int i = 0 ; i < floating - > children - > length ; + + i ) {
struct sway_container * child = floating - > children - > items [ i ] ;
container_for_each_descendant ( child , f , data ) ;
}
}
f ( container , data ) ;
}
bool container_has_ancestor ( struct sway_container * descendant ,
@ -1198,13 +1179,12 @@ void container_set_dirty(struct sway_container *container) {
list_add ( server . dirty_containers , container ) ;
}
static bool find_urgent_iterator ( struct sway_container * con ,
void * data ) {
static bool find_urgent_iterator ( struct sway_container * con , void * data ) {
return con - > type = = C_VIEW & & view_is_urgent ( con - > sway_view ) ;
}
bool container_has_urgent_child ( struct sway_container * container ) {
return container_find ( container , find_urgent_iterator , NULL ) ;
return container_find _child ( container , find_urgent_iterator , NULL ) ;
}
void container_end_mouse_operation ( struct sway_container * container ) {
@ -1236,7 +1216,7 @@ void container_set_fullscreen(struct sway_container *container, bool enable) {
container_set_fullscreen ( workspace - > sway_workspace - > fullscreen , false ) ;
}
container_for_each_ descendant ( container , set_fullscreen_iterator , & enable ) ;
container_for_each_ child ( container , set_fullscreen_iterator , & enable ) ;
container - > is_fullscreen = enable ;