summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Soffke <christian.soffke@gmail.com>2022-10-31 20:57:09 +0100
committerAidan MacDonald <amachronic@protonmail.com>2022-11-02 07:19:36 -0400
commitca908d6336f1ab5a089b8f53cdc1dbe5e5a36d2e (patch)
treef22ee2b5758c7b5e3165e11c3fbf4d7bbc738cf8
parent59f3f43d10b58e787d23726db7ce5f22977dabf9 (diff)
downloadrockbox-ca908d6336.tar.gz
rockbox-ca908d6336.zip
Database: Fix FS#13368 – use separate selected item history
Database and File Browser were sharing each other’s selected item history before. Since the database isn’t browsed recursively, it’s probably unnecessary to include its own history in the tree context and its backups, saving.a little bit of memory. Change-Id: I87c9aed6f7056bc481b8b7299089851ef28f9bc5
-rw-r--r--apps/root_menu.c4
-rw-r--r--apps/tagtree.c16
-rw-r--r--apps/tree.h2
3 files changed, 13 insertions, 9 deletions
diff --git a/apps/root_menu.c b/apps/root_menu.c
index 95524e1ba3..227ed75ee3 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -122,7 +122,7 @@ static int browser(void* param)
static char last_folder[MAX_PATH] = "/";
/* and stuff for the database browser */
#ifdef HAVE_TAGCACHE
- static int last_db_dirlevel = 0, last_db_selection = 0;
+ static int last_db_dirlevel = 0, last_db_selection = 0, last_ft_dirlevel = 0;
#endif
switch ((intptr_t)param)
@@ -266,6 +266,7 @@ static int browser(void* param)
if (!tagcache_is_usable())
return GO_TO_PREVIOUS;
filter = SHOW_ID3DB;
+ last_ft_dirlevel = tc->dirlevel;
tc->dirlevel = last_db_dirlevel;
tc->selected_item = last_db_selection;
push_current_activity(ACTIVITY_DATABASEBROWSER);
@@ -291,6 +292,7 @@ static int browser(void* param)
case GO_TO_DBBROWSER:
last_db_dirlevel = tc->dirlevel;
last_db_selection = tc->selected_item;
+ tc->dirlevel = last_ft_dirlevel;
break;
#endif
}
diff --git a/apps/tagtree.c b/apps/tagtree.c
index b6d0c8ac06..19353cabbd 100644
--- a/apps/tagtree.c
+++ b/apps/tagtree.c
@@ -191,6 +191,10 @@ static int current_entry_count;
static struct tree_context *tc;
+static int selected_item_history[MAX_DIR_LEVELS];
+static int table_history[MAX_DIR_LEVELS];
+static int extra_history[MAX_DIR_LEVELS];
+
/* a few memory alloc helper */
static int tagtree_handle;
static size_t tagtree_bufsize, tagtree_buf_used;
@@ -1840,9 +1844,9 @@ int tagtree_enter(struct tree_context* c)
if (c->dirlevel >= MAX_DIR_LEVELS)
return 0;
- c->selected_item_history[c->dirlevel]=c->selected_item;
- c->table_history[c->dirlevel] = c->currtable;
- c->extra_history[c->dirlevel] = c->currextra;
+ selected_item_history[c->dirlevel]=c->selected_item;
+ table_history[c->dirlevel] = c->currtable;
+ extra_history[c->dirlevel] = c->currextra;
c->pos_history[c->dirlevel] = c->firstpos;
c->dirlevel++;
@@ -1987,10 +1991,10 @@ void tagtree_exit(struct tree_context* c)
c->dirfull = false;
if (c->dirlevel > 0)
c->dirlevel--;
- c->selected_item=c->selected_item_history[c->dirlevel];
+ c->selected_item=selected_item_history[c->dirlevel];
gui_synclist_select_item(&tree_lists, c->selected_item);
- c->currtable = c->table_history[c->dirlevel];
- c->currextra = c->extra_history[c->dirlevel];
+ c->currtable = table_history[c->dirlevel];
+ c->currextra = extra_history[c->dirlevel];
c->firstpos = c->pos_history[c->dirlevel];
}
diff --git a/apps/tree.h b/apps/tree.h
index a75e8d2260..e132fcc191 100644
--- a/apps/tree.h
+++ b/apps/tree.h
@@ -90,8 +90,6 @@ struct tree_context {
int dirsindir; /* file use */
int dirlength; /* total number of entries in dir, incl. those not loaded */
#ifdef HAVE_TAGCACHE
- int table_history[MAX_DIR_LEVELS]; /* db use */
- int extra_history[MAX_DIR_LEVELS]; /* db use */
int currtable; /* db use */
int currextra; /* db use */
#endif