aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar wm4 <wm4@nowhere>2015-05-01 21:38:39 +0200
committerGravatar wm4 <wm4@nowhere>2015-05-01 21:51:10 +0200
commit8192500716e3d151c1fec3b523df447683fe9724 (patch)
tree66eb6d91e8797460d7850e90f439667aaa63ef01
parent7381db60e28dbedfb9215ca5a4c69aad78b713a4 (diff)
path: add resolving desktop path to platform-specific paths
win32 has a special function for this. I'm not sure about OSX - it seems ~/Desktop can be hardcoded, and the OSX GUI actually localizes the _displayed_ path in its UI. For Unix, there is not much to be done, or is there.
-rw-r--r--DOCS/man/mpv.rst1
-rw-r--r--osdep/path-macosx.m2
-rw-r--r--osdep/path-unix.c2
-rw-r--r--osdep/path-win.c12
4 files changed, 15 insertions, 2 deletions
diff --git a/DOCS/man/mpv.rst b/DOCS/man/mpv.rst
index 455baac369..d7d50a4824 100644
--- a/DOCS/man/mpv.rst
+++ b/DOCS/man/mpv.rst
@@ -338,6 +338,7 @@ Name Meaning
``~home/`` same as ``~~/``
``~global/`` the global config path, if available
``~osxbundle/`` the OSX bundle resource path (OSX only)
+``~desktop/`` the path to the desktop (win32, OSX)
=============== ================================================================
diff --git a/osdep/path-macosx.m b/osdep/path-macosx.m
index 618f2038c8..52e2a2c771 100644
--- a/osdep/path-macosx.m
+++ b/osdep/path-macosx.m
@@ -28,5 +28,7 @@ const char *mp_get_platform_path_osx(void *talloc_ctx, const char *type)
[pool release];
return res;
}
+ if (strcmp(type, "desktop") == 0)
+ return mp_path_join(talloc_ctx, bstr0(getenv("HOME")), bstr0("Desktop"));
return NULL;
}
diff --git a/osdep/path-unix.c b/osdep/path-unix.c
index c3b70d7e06..cea4235c15 100644
--- a/osdep/path-unix.c
+++ b/osdep/path-unix.c
@@ -60,5 +60,7 @@ const char *mp_get_platform_path_unix(void *talloc_ctx, const char *type)
return old_home;
if (strcmp(type, "global") == 0)
return MPV_CONFDIR;
+ if (strcmp(type, "desktop") == 0)
+ return getenv("HOME");
return NULL;
}
diff --git a/osdep/path-win.c b/osdep/path-win.c
index 26f7ffa62e..52cce6a61e 100644
--- a/osdep/path-win.c
+++ b/osdep/path-win.c
@@ -47,7 +47,7 @@ static char *mp_get_win_exe_subdir(void *talloc_ctx)
return talloc_asprintf(talloc_ctx, "%s/mpv", mp_get_win_exe_dir(talloc_ctx));
}
-static char *mp_get_win_app_dir(void *talloc_ctx)
+static char *mp_get_win_shell_dir(void *talloc_ctx, int folder)
{
wchar_t w_appdir[MAX_PATH + 1] = {0};
@@ -55,7 +55,13 @@ static char *mp_get_win_app_dir(void *talloc_ctx)
SHGFP_TYPE_CURRENT, w_appdir) != S_OK)
return NULL;
- return talloc_asprintf(talloc_ctx, "%s/mpv", mp_to_utf8(talloc_ctx, w_appdir));
+ return mp_to_utf8(talloc_ctx, w_appdir);
+}
+
+static char *mp_get_win_app_dir(void *talloc_ctx)
+{
+ char *path = mp_get_win_shell_dir(talloc_ctx, CSIDL_APPDATA);
+ return path ? mp_path_join(talloc_ctx, bstr0(path), bstr0("mpv")) : NULL;
}
const char *mp_get_platform_path_win(void *talloc_ctx, const char *type)
@@ -67,5 +73,7 @@ const char *mp_get_platform_path_win(void *talloc_ctx, const char *type)
// Not really true, but serves as a way to return a lowest-priority dir.
if (strcmp(type, "global") == 0)
return mp_get_win_exe_subdir(talloc_ctx);
+ if (strcmp(type, "desktop") == 0)
+ return mp_get_win_shell_dir(talloc_ctx, CSIDL_DESKTOPDIRECTORY);
return NULL;
}