1
0
Fork 0
forked from len0rd/rockbox

[BugFix] Tree doesn't stop scrolling on exit

https://forums.rockbox.org/index.php/topic,53862.msg248780.html#msg248780

add an intermediary function to stop tree_list scroll when changing screens

Change-Id: I7376ea28fb1e1bbc09fce83209e0147711af92b4
This commit is contained in:
William Wilgus 2025-01-13 19:30:09 -05:00
parent 0493ee19c3
commit 7a281eca83

View file

@ -695,6 +695,12 @@ void set_current_file(const char *path)
} }
static int exit_to_new_screen(int screen)
{
gui_synclist_scroll_stop(&tree_lists);
return screen;
}
/* main loop, handles key events */ /* main loop, handles key events */
static int dirbrowse(void) static int dirbrowse(void)
{ {
@ -727,12 +733,12 @@ static int dirbrowse(void)
numentries = update_dir(); numentries = update_dir();
reload_dir = false; reload_dir = false;
if (numentries == -1) if (numentries == -1)
return GO_TO_PREVIOUS; /* currdir is not a directory */ return exit_to_new_screen(GO_TO_PREVIOUS); /* currdir is not a directory */
if (*tc.dirfilter > NUM_FILTER_MODES && numentries==0) if (*tc.dirfilter > NUM_FILTER_MODES && numentries==0)
{ {
splash(HZ*2, ID2P(LANG_NO_FILES)); splash(HZ*2, ID2P(LANG_NO_FILES));
return GO_TO_PREVIOUS; /* No files found for rockbox_browse() */ return exit_to_new_screen(GO_TO_PREVIOUS); /* No files found for rockbox_browse() */
} }
while(tc.browse && tc.is_browsing) { while(tc.browse && tc.is_browsing) {
@ -776,7 +782,7 @@ static int dirbrowse(void)
{ {
tc.browse->flags |= BROWSE_SELECTED; tc.browse->flags |= BROWSE_SELECTED;
get_current_file(tc.browse->buf, tc.browse->bufsize); get_current_file(tc.browse->buf, tc.browse->bufsize);
return GO_TO_PREVIOUS; return exit_to_new_screen(GO_TO_PREVIOUS);
} }
} }
#ifdef HAVE_TAGCACHE #ifdef HAVE_TAGCACHE
@ -787,12 +793,12 @@ static int dirbrowse(void)
{ {
case GO_TO_FILEBROWSER: reload_dir = true; break; case GO_TO_FILEBROWSER: reload_dir = true; break;
case GO_TO_PLUGIN: case GO_TO_PLUGIN:
return GO_TO_PLUGIN; return exit_to_new_screen(GO_TO_PLUGIN);
case GO_TO_WPS: case GO_TO_WPS:
return GO_TO_WPS; return exit_to_new_screen(GO_TO_WPS);
#if CONFIG_TUNER #if CONFIG_TUNER
case GO_TO_FM: case GO_TO_FM:
return GO_TO_FM; return exit_to_new_screen(GO_TO_FM);
#endif #endif
case GO_TO_ROOT: exit_func = true; break; case GO_TO_ROOT: exit_func = true; break;
default: default:
@ -802,6 +808,7 @@ static int dirbrowse(void)
break; break;
case ACTION_STD_CANCEL: case ACTION_STD_CANCEL:
exit_to_new_screen(0);
if (*tc.dirfilter > NUM_FILTER_MODES && tc.dirlevel < 1) { if (*tc.dirfilter > NUM_FILTER_MODES && tc.dirlevel < 1) {
exit_func = true; exit_func = true;
break; break;
@ -812,7 +819,7 @@ static int dirbrowse(void)
if (oldbutton == ACTION_TREE_PGLEFT) if (oldbutton == ACTION_TREE_PGLEFT)
break; break;
else else
return GO_TO_ROOT; return exit_to_new_screen(GO_TO_ROOT);
} }
#ifdef HAVE_TAGCACHE #ifdef HAVE_TAGCACHE
@ -832,16 +839,16 @@ static int dirbrowse(void)
break; break;
case ACTION_STD_MENU: case ACTION_STD_MENU:
return GO_TO_ROOT; return exit_to_new_screen(GO_TO_ROOT);
break; break;
#ifdef HAVE_RECORDING #ifdef HAVE_RECORDING
case ACTION_STD_REC: case ACTION_STD_REC:
return GO_TO_RECSCREEN; return exit_to_new_screen(GO_TO_RECSCREEN);
#endif #endif
case ACTION_TREE_WPS: case ACTION_TREE_WPS:
return GO_TO_PREVIOUS_MUSIC; return exit_to_new_screen(GO_TO_PREVIOUS_MUSIC);
break; break;
#ifdef HAVE_QUICKSCREEN #ifdef HAVE_QUICKSCREEN
case ACTION_STD_QUICKSCREEN: case ACTION_STD_QUICKSCREEN:
@ -866,7 +873,7 @@ static int dirbrowse(void)
if (shortcut_ret == GO_TO_PREVIOUS) if (shortcut_ret == GO_TO_PREVIOUS)
global_status.last_screen = last_screen; global_status.last_screen = last_screen;
else else
return shortcut_ret; return exit_to_new_screen(shortcut_ret);
} }
else if (enter_shortcuts_menu) /* currently disabled */ else if (enter_shortcuts_menu) /* currently disabled */
{ {
@ -932,7 +939,7 @@ static int dirbrowse(void)
switch (onplay_result) switch (onplay_result)
{ {
case ONPLAY_MAINMENU: case ONPLAY_MAINMENU:
return GO_TO_ROOT; return exit_to_new_screen(GO_TO_ROOT);
break; break;
case ONPLAY_OK: case ONPLAY_OK:
@ -944,11 +951,11 @@ static int dirbrowse(void)
break; break;
case ONPLAY_START_PLAY: case ONPLAY_START_PLAY:
return GO_TO_WPS; return exit_to_new_screen(GO_TO_WPS);
break; break;
case ONPLAY_PLUGIN: case ONPLAY_PLUGIN:
return GO_TO_PLUGIN; return exit_to_new_screen(GO_TO_PLUGIN);
break; break;
} }
break; break;
@ -978,7 +985,7 @@ static int dirbrowse(void)
break; break;
} }
if (start_wps) if (start_wps)
return GO_TO_WPS; return exit_to_new_screen(GO_TO_WPS);
if (button && !IS_SYSEVENT(button)) if (button && !IS_SYSEVENT(button))
{ {
storage_spin(); storage_spin();
@ -1017,9 +1024,11 @@ static int dirbrowse(void)
} }
if (exit_func) if (exit_func)
return GO_TO_PREVIOUS; return exit_to_new_screen(GO_TO_PREVIOUS);
if (restore || reload_dir) { if (restore || reload_dir) {
FOR_NB_SCREENS(i)
screens[i].scroll_stop();
/* restore display */ /* restore display */
numentries = update_dir(); numentries = update_dir();
reload_dir = false; reload_dir = false;
@ -1030,7 +1039,7 @@ static int dirbrowse(void)
} }
} }
} }
return GO_TO_ROOT; return exit_to_new_screen(GO_TO_ROOT);
} }
int create_playlist(void) int create_playlist(void)