summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/tree.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/apps/tree.c b/apps/tree.c
index e4c6110040..06aabb7d36 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -749,6 +749,11 @@ static bool dirbrowse(void)
749#ifdef TREE_RC_EXIT 749#ifdef TREE_RC_EXIT
750 case TREE_RC_EXIT: 750 case TREE_RC_EXIT:
751#endif 751#endif
752 if (*tc.dirfilter > NUM_FILTER_MODES && tc.dirlevel < 1) {
753 exit_func = true;
754 break;
755 }
756
752 if (!tc.dirlevel) 757 if (!tc.dirlevel)
753 break; 758 break;
754 759
@@ -1363,31 +1368,18 @@ bool create_playlist(void)
1363 1368
1364bool rockbox_browse(const char *root, int dirfilter) 1369bool rockbox_browse(const char *root, int dirfilter)
1365{ 1370{
1366 bool rc; 1371 static struct tree_context backup;
1367 int dircursor_save = tc.dircursor; 1372
1368 int dirstart_save = tc.dirstart; 1373 backup = tc;
1369 int dirlevel_save = tc.dirlevel;
1370 int dirpos_save = tc.dirpos[0];
1371 int cursorpos_save = tc.cursorpos[0];
1372 int* dirfilter_save = tc.dirfilter;
1373 static char currdir_save[MAX_PATH];
1374
1375 memcpy(currdir_save, tc.currdir, sizeof(tc.currdir));
1376 reload_dir = true; 1374 reload_dir = true;
1377 memcpy(tc.currdir, root, sizeof(tc.currdir)); 1375 memcpy(tc.currdir, root, sizeof(tc.currdir));
1378 start_wps = false; 1376 start_wps = false;
1379 tc.dirfilter = &dirfilter; 1377 tc.dirfilter = &dirfilter;
1380 1378
1381 rc = dirbrowse(); 1379 dirbrowse();
1382 1380
1383 memcpy(tc.currdir, currdir_save, sizeof(tc.currdir)); 1381 tc = backup;
1384 reload_dir = true; 1382 reload_dir = true;
1385 tc.dirstart = dirstart_save;
1386 tc.cursorpos[0] = cursorpos_save;
1387 tc.dirlevel = dirlevel_save;
1388 tc.dircursor = dircursor_save;
1389 tc.dirpos[0] = dirpos_save;
1390 tc.dirfilter = dirfilter_save;
1391 1383
1392 return false; 1384 return false;
1393} 1385}