From 2b3d6f3c16342a25e852aa86c0f5ab3bc214a4ca Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Fri, 19 Mar 2021 10:59:04 -0400 Subject: main-menu, help: Handle quit through call stack --- (limited to 'src/main-menu.c') diff --git a/src/main-menu.c b/src/main-menu.c index 8782c3e..685ea8c 100644 --- a/src/main-menu.c +++ b/src/main-menu.c @@ -40,7 +40,7 @@ struct _db_main_menu_button { struct _db_main_menu_button *r; struct _db_main_menu_button *p; struct _db_main_menu_button *n; - void (*action)(void *); + int (*action)(void *); void *user_data; }; @@ -71,19 +71,21 @@ _db_main_menu_text(TTF_Font *font, const char *text, SDL_Color *color, return texture; } -static void +static int _db_main_menu_action_help(void *user_data __attribute__((__unused__))) { - db_help(); + return db_help(); } -static void +static int _db_main_menu_action_quit(void *user_data __attribute__((__unused__))) { _db_main_menu_quit = 1; + + return 0; } -static void +static int _db_main_menu_action_game(void *user_data) { struct db_game *game; @@ -91,9 +93,11 @@ _db_main_menu_action_game(void *user_data) game = user_data; db_dbg("Loading game \"%s\"", db_game_get_name(game)); + + return 0; } -void +int db_main_menu(void) { const char *games_dir; @@ -132,7 +136,7 @@ db_main_menu(void) if (font == NULL) { db_err("Failed to open font (%s)", TTF_GetError()); free(font_path); - return; + return -1; } texture_title = _db_main_menu_text(font, "Dodge Balls", &text_color, 0, renderer, &dest_rect); @@ -147,7 +151,7 @@ db_main_menu(void) if (font == NULL) { db_err("Failed to open font (%s)", TTF_GetError()); free(font_path); - return; + return -1; } /* Find games */ @@ -324,8 +328,12 @@ db_main_menu(void) break; case SDLK_RETURN: case SDLK_KP_ENTER: - active->action( - active->user_data); + if (active->action(active-> + user_data) + > 0) + { + _db_main_menu_quit = 2; + } break; default: break; @@ -352,7 +360,10 @@ db_main_menu(void) if (db_pt_in_rect(event.button.x, event.button.y, &active->rect)) { - active->action(active->user_data); + if (active->action(active->user_data) > + 0) { + _db_main_menu_quit = 2; + } } break; default: @@ -373,7 +384,7 @@ db_main_menu(void) } } SDL_RenderPresent(renderer); - if (_db_main_menu_quit == 1) { + if (_db_main_menu_quit > 0) { break; } } @@ -382,4 +393,6 @@ db_main_menu(void) free(font_path); TTF_CloseFont(font); SDL_DestroyTexture(texture_title); + + return _db_main_menu_quit - 1; } -- cgit v0.9.1