1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 16:10:06 +02:00

Use XDG dirs by default on Linux

Signed-off-by: Campbell Jones <git@serebit.com>
This commit is contained in:
Campbell Jones 2021-05-03 14:02:28 -04:00 committed by Sol Fisher Romanoff
parent 74f5f2ef98
commit c0c275ffaf
No known key found for this signature in database
GPG Key ID: 0E0ACA5D1C244E1F
4 changed files with 86 additions and 15 deletions

View File

@ -187,7 +187,11 @@ void AboutDialog::CreateInformationTab(ShuttleGui& AboutDialogGUI) {
#endif
// Location of settings
AddBuildInfoRow(&informationStr, XO("Settings folder:"), FileNames::DataDir());
AddBuildInfoRow(&informationStr, XO("Config folder:"), \
FileNames::ConfigDir());
// Location of data
AddBuildInfoRow(&informationStr, XO("Data folder:"), \
FileNames::DataDir());
informationStr
<< wxT("<h3>")

View File

@ -1048,6 +1048,9 @@ bool AudacityApp::OnInit() {
// AddHandler takes ownership
wxFileSystem::AddHandler(safenew wxZipFSHandler);
// encouraged by wxwidgets
wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout::FileLayout_XDG);
//
// Paths: set search path and temp dir path
//
@ -1197,7 +1200,7 @@ bool AudacityApp::OnInit() {
// Initialize preferences and language
{
wxFileName configFileName(FileNames::DataDir(), wxT("tenacity.cfg"));
wxFileName configFileName(FileNames::ConfigDir(), wxT("tenacity.cfg"));
auto appName = wxTheApp->GetAppName();
InitPreferences(AudacityFileConfig::Create(
appName, wxEmptyString,

View File

@ -47,6 +47,11 @@ used throughout Audacity into this one place.
#include <windows.h>
#endif
#if defined(__WXGTK__)
static wxString gOldUnixDataDir;
#endif
static wxString gConfigDir;
static wxString gDataDir;
const FileNames::FileType
@ -226,8 +231,49 @@ wxString FileNames::LowerCaseAppNameInPath( const wxString & dirIn){
return dir;
}
FilePath FileNames::ConfigDir()
{
#if defined(__WXGTK__)
if (gOldUnixDataDir.empty())
gOldUnixDataDir = wxFileName::GetHomeDir() + wxT("/.audacity-data");
#endif
if (gConfigDir.empty())
{
wxFileName exePath(PlatformCompatibility::GetExecutablePath());
#if defined(__WXMAC__)
// Path ends for example in "Audacity.app/Contents/MacOSX"
// just remove the MacOSX part.
exePath.RemoveLastDir();
#endif
wxFileName portablePrefsPath(exePath.GetPath(), wxT("Portable Settings"));
if (::wxDirExists(portablePrefsPath.GetFullPath()))
{
// Use "Portable Settings" folder
gConfigDir = portablePrefsPath.GetFullPath();
#if defined(__WXGTK__)
} else if (::wxDirExists(gOldUnixDataDir))
{
// Use old user data dir folder
gConfigDir = gOldUnixDataDir;
#endif
} else {
// Use OS-provided user data dir folder
wxString configDir(wxStandardPaths::Get().GetUserConfigDir() + wxT("/audacity"));
gConfigDir = FileNames::MkDir(configDir);
}
}
return gConfigDir;
}
FilePath FileNames::DataDir()
{
#if defined(__WXGTK__)
if (gOldUnixDataDir.empty())
gOldUnixDataDir = wxFileName::GetHomeDir() + wxT("/.audacity-data");
#endif
// LLL: Wouldn't you know that as of WX 2.6.2, there is a conflict
// between wxStandardPaths and wxConfig under Linux. The latter
// creates a normal file as "$HOME/.audacity", while the former
@ -251,12 +297,25 @@ FilePath FileNames::DataDir()
{
// Use "Portable Settings" folder
gDataDir = portablePrefsPath.GetFullPath();
#if defined(__WXGTK__)
} else if (::wxDirExists(gOldUnixDataDir))
{
// Use old user data dir folder
gDataDir = gOldUnixDataDir;
} else
{
wxString dataDir;
// see if XDG_DATA_HOME is defined. if it is, use its value. if it isn't, use the default
// XDG-specified value
if ( !wxGetEnv(wxS("XDG_DATA_HOME"), &dataDir) || dataDir.empty() )
dataDir = wxFileName::GetHomeDir() + wxT("/.local/share");
dataDir = dataDir + wxT("/audacity");
#else
} else
{
// Use OS-provided user data dir folder
wxString dataDir( LowerCaseAppNameInPath( wxStandardPaths::Get().GetUserDataDir() ));
#if defined( __WXGTK__ )
dataDir = dataDir + wxT("-data");
#endif
gDataDir = FileNames::MkDir(dataDir);
}
@ -317,12 +376,12 @@ FilePath FileNames::PlugInDir()
FilePath FileNames::PluginRegistry()
{
return wxFileName( DataDir(), wxT("pluginregistry.cfg") ).GetFullPath();
return wxFileName( ConfigDir(), wxT("pluginregistry.cfg") ).GetFullPath();
}
FilePath FileNames::PluginSettings()
{
return wxFileName( DataDir(), wxT("pluginsettings.cfg") ).GetFullPath();
return wxFileName( ConfigDir(), wxT("pluginsettings.cfg") ).GetFullPath();
}
FilePath FileNames::BaseDir()

View File

@ -112,10 +112,15 @@ namespace FileNames
FilePaths &otherNames, wxFileName &newName);
AUDACITY_DLL_API wxString LowerCaseAppNameInPath( const wxString & dirIn);
/** \brief Audacity user config directory
*
* Where audacity keeps its settigns squirreled away, by default ~/.config/audacity/
* on Unix, Application Data/Audacity on Windows */
FilePath ConfigDir();
/** \brief Audacity user data directory
*
* Where audacity keeps its settings and other user data squirreled away,
* by default ~/.audacity-data/ on Unix, Application Data/Audacity on
* by default ~/.local/share/audacity/ on Unix, Application Data/Audacity on
* windows system */
AUDACITY_DLL_API FilePath DataDir();
AUDACITY_DLL_API FilePath ResourcesDir();