diff --git a/common/flatpak-run.c b/common/flatpak-run.c
index b1226728..41a91ade 100644
--- a/common/flatpak-run.c
+++ b/common/flatpak-run.c
@@ -1842,13 +1842,16 @@ flatpak_run_apply_env_appid (FlatpakBwrap *bwrap,
g_autoptr(GFile) app_dir_data = NULL;
g_autoptr(GFile) app_dir_config = NULL;
g_autoptr(GFile) app_dir_cache = NULL;
+ g_autoptr(GFile) app_dir_state = NULL;
app_dir_data = g_file_get_child (app_dir, "data");
app_dir_config = g_file_get_child (app_dir, "config");
app_dir_cache = g_file_get_child (app_dir, "cache");
+ app_dir_state = g_file_get_child (app_dir, ".local/state");
flatpak_bwrap_set_env (bwrap, "XDG_DATA_HOME", flatpak_file_get_path_cached (app_dir_data), TRUE);
flatpak_bwrap_set_env (bwrap, "XDG_CONFIG_HOME", flatpak_file_get_path_cached (app_dir_config), TRUE);
flatpak_bwrap_set_env (bwrap, "XDG_CACHE_HOME", flatpak_file_get_path_cached (app_dir_cache), TRUE);
+ flatpak_bwrap_set_env (bwrap, "XDG_STATE_HOME", flatpak_file_get_path_cached (app_dir_state), TRUE);
if (g_getenv ("XDG_DATA_HOME"))
flatpak_bwrap_set_env (bwrap, "HOST_XDG_DATA_HOME", g_getenv ("XDG_DATA_HOME"), TRUE);
@@ -1856,6 +1859,8 @@ flatpak_run_apply_env_appid (FlatpakBwrap *bwrap,
flatpak_bwrap_set_env (bwrap, "HOST_XDG_CONFIG_HOME", g_getenv ("XDG_CONFIG_HOME"), TRUE);
if (g_getenv ("XDG_CACHE_HOME"))
flatpak_bwrap_set_env (bwrap, "HOST_XDG_CACHE_HOME", g_getenv ("XDG_CACHE_HOME"), TRUE);
+ if (g_getenv ("XDG_STATE_HOME"))
+ flatpak_bwrap_set_env (bwrap, "HOST_XDG_STATE_HOME", g_getenv ("XDG_STATE_HOME"), TRUE);
}
void
diff --git a/doc/flatpak-run.xml b/doc/flatpak-run.xml
index a9c2c947..87918252 100644
--- a/doc/flatpak-run.xml
+++ b/doc/flatpak-run.xml
@@ -98,6 +98,7 @@
XDG_DATA_HOME
XDG_CONFIG_HOME
XDG_CACHE_HOME
+ XDG_STATE_HOME
The host values of these variables are made available inside the sandbox via these
@@ -107,6 +108,7 @@
HOST_XDG_DATA_HOME
HOST_XDG_CONFIG_HOME
HOST_XDG_CACHE_HOME
+ HOST_XDG_STATE_HOME
Flatpak sets the environment variable FLATPAK_ID to the application
diff --git a/tests/libtest.sh b/tests/libtest.sh
index e12907f8..44f196b8 100644
--- a/tests/libtest.sh
+++ b/tests/libtest.sh
@@ -100,6 +100,7 @@ export HOME=${TEST_DATA_DIR}/home
export XDG_CACHE_HOME=${TEST_DATA_DIR}/home/cache
export XDG_CONFIG_HOME=${TEST_DATA_DIR}/home/config
export XDG_DATA_HOME=${TEST_DATA_DIR}/home/share
+export XDG_STATE_HOME=${TEST_DATA_DIR}/home/state
export XDG_RUNTIME_DIR=${TEST_DATA_DIR}/runtime
export XDG_DESKTOP_PORTAL_DIR=${test_builddir}/share/xdg-desktop-portal/portals
diff --git a/tests/testlib.c b/tests/testlib.c
index 28c97a4d..1e5d9428 100644
--- a/tests/testlib.c
+++ b/tests/testlib.c
@@ -44,6 +44,7 @@ isolated_test_dir_global_setup (void)
g_autofree char *cachedir = NULL;
g_autofree char *configdir = NULL;
g_autofree char *datadir = NULL;
+ g_autofree char *statedir = NULL;
g_autofree char *homedir = NULL;
g_autofree char *runtimedir = NULL;
@@ -72,6 +73,11 @@ isolated_test_dir_global_setup (void)
g_setenv ("XDG_DATA_HOME", datadir, TRUE);
g_test_message ("setting XDG_DATA_HOME=%s", datadir);
+ statedir = g_strconcat (isolated_test_dir, "/home/state", NULL);
+ g_assert_no_errno (g_mkdir_with_parents (statedir, S_IRWXU | S_IRWXG | S_IRWXO));
+ g_setenv ("XDG_STATE_HOME", statedir, TRUE);
+ g_test_message ("setting XDG_STATE_HOME=%s", statedir);
+
runtimedir = g_strconcat (isolated_test_dir, "/runtime", NULL);
g_assert_no_errno (g_mkdir_with_parents (runtimedir, S_IRWXU));
g_setenv ("XDG_RUNTIME_DIR", runtimedir, TRUE);
@@ -82,6 +88,7 @@ isolated_test_dir_global_setup (void)
g_assert_cmpstr (g_get_user_cache_dir (), ==, cachedir);
g_assert_cmpstr (g_get_user_config_dir (), ==, configdir);
g_assert_cmpstr (g_get_user_data_dir (), ==, datadir);
+ g_assert_cmpstr (g_getenv ("XDG_STATE_HOME"), ==, statedir);
g_assert_cmpstr (g_get_user_runtime_dir (), ==, runtimedir);
}
diff --git a/tests/testlibrary.c b/tests/testlibrary.c
index cac8a893..a52892db 100644
--- a/tests/testlibrary.c
+++ b/tests/testlibrary.c
@@ -2705,6 +2705,7 @@ global_setup (void)
g_autofree char *cachedir = NULL;
g_autofree char *configdir = NULL;
g_autofree char *datadir = NULL;
+ g_autofree char *statedir = NULL;
g_autofree char *homedir = NULL;
g_autofree char *services_dir = NULL;
@@ -2733,6 +2734,11 @@ global_setup (void)
g_setenv ("XDG_DATA_HOME", datadir, TRUE);
g_test_message ("setting XDG_DATA_HOME=%s", datadir);
+ statedir = g_strconcat (testdir, "/home/state", NULL);
+ g_mkdir_with_parents (statedir, S_IRWXU | S_IRWXG | S_IRWXO);
+ g_setenv ("XDG_STATE_HOME", statedir, TRUE);
+ g_test_message ("setting XDG_STATE_HOME=%s", statedir);
+
flatpak_runtimedir = g_strconcat (testdir, "/runtime", NULL);
g_mkdir_with_parents (flatpak_runtimedir, S_IRWXU | S_IRWXG | S_IRWXO);
g_setenv ("XDG_RUNTIME_DIR", flatpak_runtimedir, TRUE);