mirror of
https://github.com/dankamongmen/notcurses
synced 2025-03-10 01:29:05 -04:00
zoo: propagate return codes out of selector demos #835
This commit is contained in:
parent
d6e2ae5262
commit
4a8d56cbfc
@ -57,7 +57,7 @@ static struct ncmselector_item mselect_items[] = {
|
||||
|
||||
static struct ncmultiselector*
|
||||
multiselector_demo(struct ncplane* n, struct ncplane* under, int dimx,
|
||||
int y, pthread_mutex_t* lock){
|
||||
int y, pthread_mutex_t* lock, int* res){
|
||||
struct notcurses* nc = ncplane_notcurses(n);
|
||||
ncmultiselector_options mopts = {
|
||||
.maxdisplay = 8,
|
||||
@ -89,7 +89,7 @@ multiselector_demo(struct ncplane* n, struct ncplane* under, int dimx,
|
||||
pthread_mutex_unlock(lock);
|
||||
ncinput ni;
|
||||
for(int i = -length + 1 ; i < dimx - (length + 1) ; ++i){
|
||||
if(locked_demo_render(nc, lock)){
|
||||
if( (*res = locked_demo_render(nc, lock)) ){
|
||||
ncmultiselector_destroy(mselector);
|
||||
return NULL;
|
||||
}
|
||||
@ -102,7 +102,7 @@ multiselector_demo(struct ncplane* n, struct ncplane* under, int dimx,
|
||||
ncmultiselector_offer_input(mselector, &ni);
|
||||
}
|
||||
}
|
||||
if(locked_demo_render(nc, lock)){
|
||||
if( (*res = locked_demo_render(nc, lock)) ){
|
||||
ncmultiselector_destroy(mselector);
|
||||
return NULL;
|
||||
}
|
||||
@ -152,7 +152,7 @@ draw_background(struct notcurses* nc){
|
||||
|
||||
static struct ncselector*
|
||||
selector_demo(struct ncplane* n, struct ncplane* under, int dimx,
|
||||
int y, pthread_mutex_t* lock){
|
||||
int y, pthread_mutex_t* lock, int* ret){
|
||||
struct notcurses* nc = ncplane_notcurses(n);
|
||||
ncselector_options sopts = {
|
||||
.title = "single-item selector",
|
||||
@ -182,9 +182,13 @@ selector_demo(struct ncplane* n, struct ncplane* under, int dimx,
|
||||
ncinput ni;
|
||||
for(int i = dimx - 1 ; i > 1 ; --i){
|
||||
pthread_mutex_lock(lock);
|
||||
demo_render(nc);
|
||||
*ret = demo_render(nc);
|
||||
ncplane_move_yx(splane, y, i);
|
||||
pthread_mutex_unlock(lock);
|
||||
if(*ret){
|
||||
ncselector_destroy(selector, NULL);
|
||||
return NULL;
|
||||
}
|
||||
char32_t wc = demo_getc(nc, &swoopdelay, &ni);
|
||||
if(wc == (char32_t)-1){
|
||||
ncselector_destroy(selector, NULL);
|
||||
@ -195,7 +199,7 @@ selector_demo(struct ncplane* n, struct ncplane* under, int dimx,
|
||||
pthread_mutex_unlock(lock);
|
||||
}
|
||||
}
|
||||
if(locked_demo_render(nc, lock)){
|
||||
if( (*ret = locked_demo_render(nc, lock)) ){
|
||||
ncselector_destroy(selector, NULL);
|
||||
return NULL;
|
||||
}
|
||||
@ -380,12 +384,15 @@ int zoo_demo(struct notcurses* nc){
|
||||
pthread_mutex_destroy(&lock);
|
||||
return -1;
|
||||
}
|
||||
struct ncselector* selector = selector_demo(n, ncreader_plane(reader), dimx, 2, &lock);
|
||||
struct ncmultiselector* mselector = multiselector_demo(n, ncreader_plane(reader), dimx, 8, &lock); // FIXME calculate from splane
|
||||
if(selector == NULL || mselector == NULL){
|
||||
int ret = 0;
|
||||
struct ncselector* selector = selector_demo(n, ncreader_plane(reader), dimx, 2, &lock, &ret);
|
||||
if(selector == NULL || ret){
|
||||
goto err;
|
||||
}
|
||||
struct ncmultiselector* mselector = multiselector_demo(n, ncreader_plane(reader), dimx, 8, &lock, &ret); // FIXME calculate from splane
|
||||
if(mselector == NULL || ret){
|
||||
goto err;
|
||||
}
|
||||
int ret = 0;
|
||||
ret |= zap_reader(readertid, reader, false); // let the thread do its thang
|
||||
ret |= pthread_mutex_destroy(&lock);
|
||||
ncselector_destroy(selector, NULL);
|
||||
@ -397,5 +404,5 @@ err:
|
||||
pthread_mutex_destroy(&lock);
|
||||
ncselector_destroy(selector, NULL);
|
||||
ncmultiselector_destroy(mselector);
|
||||
return -1;
|
||||
return ret ? ret : -1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user