From db48d5baff03fdcbfd130904c23da7a84ef2cc06 Mon Sep 17 00:00:00 2001 From: ben Date: Mon, 7 May 2007 16:46:24 +0000 Subject: new -menu-keepdir option that allows libmenu file browser to always restart browsing from the last place we were instead of current dir git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23247 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmenu/menu_filesel.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) (limited to 'libmenu') diff --git a/libmenu/menu_filesel.c b/libmenu/menu_filesel.c index 90d77f0c71..aed24071b9 100644 --- a/libmenu/menu_filesel.c +++ b/libmenu/menu_filesel.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -26,6 +27,10 @@ #include "input/input.h" #include "osdep/keycodes.h" +#define MENU_KEEP_PATH "/tmp/mp_current_path" + +int menu_keepdir = 0; + struct list_entry_s { struct list_entry p; int d; @@ -179,6 +184,7 @@ static int open_dir(menu_t* menu,char* args) { struct dirent *dp; struct stat st; int n; + int path_fp; char* p = NULL; list_entry_t* e; DIR* dirp; @@ -201,6 +207,14 @@ static int open_dir(menu_t* menu,char* args) { return 0; } + if (menu_keepdir) { + path_fp = open (MENU_KEEP_PATH, O_CREAT | O_WRONLY | O_TRUNC, 0666); + if (path_fp >= 0) { + write (path_fp, mpriv->dir, strlen (mpriv->dir)); + close (path_fp); + } + } + namelist = (char **) malloc(sizeof(char *)); extensions = get_extensions(menu); @@ -370,7 +384,7 @@ static void clos(menu_t* menu) { } static int open_fs(menu_t* menu, char* args) { - char *path = mpriv->path; + char *path = mpriv->path, *freepath = NULL; int r = 0; char wd[PATH_MAX+1]; args = NULL; // Warning kill @@ -380,6 +394,29 @@ static int open_fs(menu_t* menu, char* args) { menu->read_key = read_key; menu->close = clos; + if (menu_keepdir) { + if (!path || path[0] == '\0') { + struct stat st; + int path_fp; + + path_fp = open (MENU_KEEP_PATH, O_RDONLY); + if (path_fp >= 0) { + if (!fstat (path_fp, &st) && (st.st_size > 0)) { + path = malloc(st.st_size+1); + if ((read(path_fp, path, st.st_size) == st.st_size) && path[0] != '\0'){ + freepath = path; + path[st.st_size] = '\0'; + } + else { + free(path); + path = NULL; + } + } + close (path_fp); + } + } + } + getcwd(wd,PATH_MAX); if(!path || path[0] == '\0') { int l = strlen(wd) + 2; @@ -398,6 +435,9 @@ static int open_fs(menu_t* menu, char* args) { } else r = open_dir(menu,path); + if (freepath) + free(freepath); + return r; } -- cgit v1.2.3