summaryrefslogtreecommitdiffstats
path: root/libmenu
diff options
context:
space:
mode:
authorben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-05-07 16:46:24 +0000
committerben <ben@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-05-07 16:46:24 +0000
commitdb48d5baff03fdcbfd130904c23da7a84ef2cc06 (patch)
tree71fda7b30eede7eb34dd53b07f3b92fabffd5885 /libmenu
parent0e71ae2f5fb67cb928d914840ad5fbce4d81c43a (diff)
downloadmpv-db48d5baff03fdcbfd130904c23da7a84ef2cc06.tar.bz2
mpv-db48d5baff03fdcbfd130904c23da7a84ef2cc06.tar.xz
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
Diffstat (limited to 'libmenu')
-rw-r--r--libmenu/menu_filesel.c42
1 files changed, 41 insertions, 1 deletions
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 <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 @@ 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;
}