From 0713223a4db87200636214d422914d94d53b187d Mon Sep 17 00:00:00 2001 From: Wouter Wijsman Date: Mon, 26 Aug 2024 09:29:18 +0200 Subject: [PATCH] Fix finding home and use XDG standard when looking for SurrealEngine.pk3 --- SurrealEngine/UI/WidgetResourceData.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/SurrealEngine/UI/WidgetResourceData.cpp b/SurrealEngine/UI/WidgetResourceData.cpp index 8fb2682..e173337 100644 --- a/SurrealEngine/UI/WidgetResourceData.cpp +++ b/SurrealEngine/UI/WidgetResourceData.cpp @@ -3,6 +3,8 @@ #include "Utils/File.h" #include #include "Utils/Exception.h" +#include +#include static mz_zip_archive widgetResources; @@ -13,10 +15,20 @@ void InitWidgetResources() // On Linux, SurrealEngine.pk3 can additionally be put in some other folders given below. if (!result) result = mz_zip_reader_init_file(&widgetResources, FilePath::combine("/usr/share/surrealengine", "SurrealEngine.pk3").c_str(), 0); - if (!result) - result = mz_zip_reader_init_file(&widgetResources, FilePath::combine("~/.local/share/surrealengine", "SurrealEngine.pk3").c_str(), 0); - if (!result) - result = mz_zip_reader_init_file(&widgetResources, FilePath::combine("~/.surrealengine", "SurrealEngine.pk3").c_str(), 0); + if (!result) { + char * home = std::getenv("HOME"); + std::string directory = FilePath::combine(std::string(home) , ".local/share/surrealengine"); + char * xdg_data_home = std::getenv("XDG_DATA_HOME"); + if (xdg_data_home != NULL) { + directory = FilePath::combine(std::string(xdg_data_home), "surrealengine"); + } + result = mz_zip_reader_init_file(&widgetResources, FilePath::combine(directory, "SurrealEngine.pk3").c_str(), 0); + } + if (!result) { + char * home = std::getenv("HOME"); + std::string directory = FilePath::combine(std::string(home) , ".surrealengine"); + result = mz_zip_reader_init_file(&widgetResources, FilePath::combine(directory, "SurrealEngine.pk3").c_str(), 0); + } #endif if (!result) Exception::Throw("Could not open SurrealEngine.pk3");