Mercurial > mplayer.hg
diff libmenu/menu_filesel.c @ 23229:ae2a2d5ca64b
new -menu-keepdir option that allows libmenu file browser to always restart browsing from the last place we were instead of current dir
author | ben |
---|---|
date | Mon, 07 May 2007 16:46:24 +0000 |
parents | 543f6e8deeb6 |
children | 9bf57f60bf0a |
line wrap: on
line diff
--- a/libmenu/menu_filesel.c Mon May 07 15:59:53 2007 +0000 +++ b/libmenu/menu_filesel.c Mon May 07 16:46:24 2007 +0000 @@ -6,6 +6,7 @@ #include <string.h> #include <sys/types.h> #include <sys/stat.h> +#include <fcntl.h> #include <ctype.h> #include <unistd.h> #include <limits.h> @@ -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 @@ struct dirent *dp; struct stat st; int n; + int path_fp; char* p = NULL; list_entry_t* e; DIR* dirp; @@ -201,6 +207,14 @@ 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 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 @@ 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 @@ } else r = open_dir(menu,path); + if (freepath) + free(freepath); + return r; }