diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-14 14:33:58 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-14 14:33:58 +0300 |
| commit | 2339fd48a0f7a29e63c801b2ad6c6ba54b68e9ca (patch) | |
| tree | 1c46ef0ced1e72dee2b7475bdc9196afc8cfba95 /src/c | |
| parent | 8577a835c2c9d34a20262316a369a481498e6e68 (diff) | |
fix: debug menu items had NULL callbacks after window appear
debug_refresh_menu() set all SimpleMenuItem.callback fields to NULL.
debug_window_load() then set them to debug_menu_select_callback in a
separate loop — but that loop ran *before* the debug_refresh_menu()
call that immediately cleared them again. debug_window_appear also
calls debug_refresh_menu(), so every re-focus wiped the callbacks.
Fix: move the callback assignment into debug_refresh_menu() itself
(adding a forward declaration so the function is in scope), and remove
the now-redundant loop from debug_window_load().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/c')
| -rw-r--r-- | src/c/fastforge.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/c/fastforge.c b/src/c/fastforge.c index 71c5852..f128592 100644 --- a/src/c/fastforge.c +++ b/src/c/fastforge.c @@ -358,39 +358,43 @@ static void settings_toggle_developer_mode(void) { #endif #ifdef DEBUG +static void debug_menu_select_callback(int index, void *context); + static void debug_refresh_menu(void) { snprintf(s_debug_menu_clock_text, sizeof(s_debug_menu_clock_text), "Debug %+ldh %s", (long)(s_fake_time_offset_seconds / 3600), s_fake_time_enabled ? "fake" : "real"); + /* Callbacks must be set here (not in load) because debug_refresh_menu is + * also called from debug_window_appear, which would otherwise clobber them. */ s_debug_menu_items[0] = (SimpleMenuItem) { .title = "+1 Hour", .subtitle = "Advance debug clock", - .callback = NULL + .callback = debug_menu_select_callback }; s_debug_menu_items[1] = (SimpleMenuItem) { .title = "+6 Hours", .subtitle = "Jump to next stage", - .callback = NULL + .callback = debug_menu_select_callback }; s_debug_menu_items[2] = (SimpleMenuItem) { .title = "+24 Hours", .subtitle = "Cross whole-day boundary", - .callback = NULL + .callback = debug_menu_select_callback }; s_debug_menu_items[3] = (SimpleMenuItem) { .title = "Use Real Clock", .subtitle = "Clear fake-time offset", - .callback = NULL + .callback = debug_menu_select_callback }; s_debug_menu_items[4] = (SimpleMenuItem) { .title = "Force Goal Alarm", .subtitle = "Trigger goal-hit flow now", - .callback = NULL + .callback = debug_menu_select_callback }; s_debug_menu_items[5] = (SimpleMenuItem) { .title = "Show Raw State", .subtitle = "Open debug snapshot", - .callback = NULL + .callback = debug_menu_select_callback }; s_debug_menu_sections[0] = (SimpleMenuSection) { .title = s_debug_menu_clock_text, @@ -469,9 +473,6 @@ static void debug_menu_select_callback(int index, void *context) { static void debug_window_load(Window *window) { Layer *window_layer = window_get_root_layer(window); GRect bounds = layer_get_bounds(window_layer); - for (size_t i = 0; i < ARRAY_LENGTH(s_debug_menu_items); i++) { - s_debug_menu_items[i].callback = debug_menu_select_callback; - } debug_refresh_menu(); s_debug_menu_layer = simple_menu_layer_create(bounds, window, s_debug_menu_sections, 1, NULL); layer_add_child(window_layer, simple_menu_layer_get_layer(s_debug_menu_layer)); |
