From ca908d6336f1ab5a089b8f53cdc1dbe5e5a36d2e Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Mon, 31 Oct 2022 20:57:09 +0100 Subject: [PATCH] =?UTF-8?q?Database:=20Fix=20FS#13368=20=E2=80=93=20use=20?= =?UTF-8?q?separate=20selected=20item=20history?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- apps/root_menu.c | 4 +++- apps/tagtree.c | 16 ++++++++++------ apps/tree.h | 2 -- 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