diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-01-28 23:12:32 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-01-30 11:36:35 +0900 |
commit | ea1da131d3eda406c2775a9b538a3e3cbd581007 (patch) | |
tree | 4d821eeb81f7353aea1b8b807dd1246687b80cb3 /tdecore/tdeglobalsettings.cpp | |
parent | 352be1b977a470e6d666275df3cd0f0e2ffd1185 (diff) | |
download | tdelibs-ea1da131d3eda406c2775a9b538a3e3cbd581007.tar.gz tdelibs-ea1da131d3eda406c2775a9b538a3e3cbd581007.zip |
Improved support for XDG folders without requiring xdg-user-dirs to be installed.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 394c9f5c0e1b464aa8bc22bd65c5268acd43994d)
Diffstat (limited to 'tdecore/tdeglobalsettings.cpp')
-rw-r--r-- | tdecore/tdeglobalsettings.cpp | 194 |
1 files changed, 120 insertions, 74 deletions
diff --git a/tdecore/tdeglobalsettings.cpp b/tdecore/tdeglobalsettings.cpp index e2fbac2c7..e88902fcd 100644 --- a/tdecore/tdeglobalsettings.cpp +++ b/tdecore/tdeglobalsettings.cpp @@ -87,42 +87,90 @@ TQColor *TDEGlobalSettings::alternateColor = 0; TDEGlobalSettings::KMouseSettings *TDEGlobalSettings::s_mouseSettings = 0; -// helper function for reading xdg user dirs: it is required in order to take -// care of locale stuff -void readXdgUserDirs(TQString *desktop, TQString *documents, TQString *videos, TQString *music, - TQString *download, TQString *pictures, TQString *templates, TQString *publicShare) +// Helper function for reading xdg user dirs. +// Returns sane values in case the user dir file can't be read +static void readXdgUserDirs(TQString *desktop, TQString *documents, TQString *download, TQString *music, + TQString *pictures, TQString *publicShare, TQString *templates, TQString *videos) { - TQFile f( TQDir::homeDirPath() + "/.config/user-dirs.dirs" ); - - if (!f.open(IO_ReadOnly)) - return; - - // set the codec for the current locale - TQTextStream s(&f); - s.setCodec( TQTextCodec::codecForLocale() ); - - TQString line = s.readLine(); - while (!line.isNull()) + TQFile dirsFile(TQDir::homeDirPath() + "/.config/user-dirs.dirs"); + if (dirsFile.open(IO_ReadOnly)) { - if (line.startsWith("XDG_DESKTOP_DIR=")) - *desktop = line.remove("XDG_DESKTOP_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_DOCUMENTS_DIR=")) - *documents = line.remove("XDG_DOCUMENTS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_MUSIC_DIR=")) - *videos = line.remove("XDG_MUSIC_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_DOWNLOAD_DIR=")) - *download = line.remove("XDG_DOWNLOAD_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_VIDEOS_DIR=")) - *music = line.remove("XDG_VIDEOS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_PICTURES_DIR=")) - *pictures = line.remove("XDG_PICTURES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_TEMPLATES_DIR=")) - *templates = line.remove("XDG_TEMPLATES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - else if (line.startsWith("XDG_PUBLICSHARE_DIR=")) - *publicShare = line.remove("XDG_PUBLICSHARE_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); - - line = s.readLine(); + // set the codec for the current locale + TQTextStream stream(&dirsFile); + stream.setCodec(TQTextCodec::codecForLocale()); + + while (!stream.atEnd()) + { + TQString line = stream.readLine(); + if (line.startsWith("XDG_DESKTOP_DIR=")) + { + *desktop = line.remove("XDG_DESKTOP_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_DOCUMENTS_DIR=")) + { + *documents = line.remove("XDG_DOCUMENTS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_DOWNLOAD_DIR=")) + { + *download = line.remove("XDG_DOWNLOAD_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_MUSIC_DIR=")) + { + *music = line.remove("XDG_MUSIC_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_PICTURES_DIR=")) + { + *pictures = line.remove("XDG_PICTURES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_PUBLICSHARE_DIR=")) + { + *publicShare = line.remove("XDG_PUBLICSHARE_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_TEMPLATES_DIR=")) + { + *templates = line.remove("XDG_TEMPLATES_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + else if (line.startsWith("XDG_VIDEOS_DIR=")) + { + *videos = line.remove("XDG_VIDEOS_DIR=").remove("\"").replace("$HOME", TQDir::homeDirPath()); + } + } + dirsFile.close(); } + + // Use sane values in case some paths are missing + if (desktop->isEmpty()) + { + *desktop = TQDir::homeDirPath() + "/" + i18n("Desktop") + "/"; + } + if (documents->isEmpty()) + { + *documents = TQDir::homeDirPath() + "/" + i18n("Documents") + "/"; + } + if (download->isEmpty()) + { + *download = TQDir::homeDirPath() + "/" + i18n("Downloads") + "/"; + } + if (music->isEmpty()) + { + *music = TQDir::homeDirPath() + "/" + i18n("Music") + "/"; + } + if (pictures->isEmpty()) + { + *pictures = TQDir::homeDirPath() + "/" + i18n("Pictures") + "/"; + } + if (publicShare->isEmpty()) + { + *publicShare = TQDir::homeDirPath() + "/" + i18n("Public") + "/"; + } + if (templates->isEmpty()) + { + *templates = TQDir::homeDirPath() + "/" + i18n("Templates") + "/"; + } + if (videos->isEmpty()) + { + *videos = TQDir::homeDirPath() + "/" + i18n("Videos") + "/"; + } } int TDEGlobalSettings::dndEventDelay() @@ -525,63 +573,61 @@ TQFont TDEGlobalSettings::largeFont(const TQString &text) return *_largeFont; } -void TDEGlobalSettings::initStatic() // should be called initPaths(). Don't put anything else here. +void TDEGlobalSettings::initPaths() { - if ( s_desktopPath != 0 ) - return; + if (s_desktopPath) + { + return; + } - s_desktopPath = new TQString(); s_autostartPath = new TQString(); s_trashPath = new TQString(); + s_desktopPath = new TQString(); s_documentPath = new TQString(); - s_videosPath = new TQString(); - s_musicPath = new TQString(); s_downloadPath = new TQString(); + s_musicPath = new TQString(); s_picturesPath = new TQString(); - s_templatesPath = new TQString(); s_publicSharePath = new TQString(); + s_templatesPath = new TQString(); + s_videosPath = new TQString(); TDEConfigGroup g( TDEGlobal::config(), "Paths" ); - // Read desktop and documents path using XDG_USER_DIRS - readXdgUserDirs(s_desktopPath, s_documentPath, s_musicPath, s_videosPath, - s_downloadPath, s_picturesPath, s_templatesPath, s_publicSharePath); - - if (s_desktopPath->isEmpty() == true) { - *s_desktopPath = TQDir::homeDirPath() + "/Desktop/"; - } + // Read xdg folder paths + readXdgUserDirs(s_desktopPath, s_documentPath, s_downloadPath, s_musicPath, + s_picturesPath, s_publicSharePath, s_templatesPath, s_videosPath); - *s_desktopPath = TQDir::cleanDirPath( *s_desktopPath ); - if ( !s_desktopPath->endsWith("/") ) + *s_desktopPath = TQDir::cleanDirPath(*s_desktopPath); + if (!s_desktopPath->endsWith("/")) s_desktopPath->append('/'); - *s_documentPath = TQDir::cleanDirPath( *s_documentPath ); - if ( !s_documentPath->endsWith("/")) + *s_documentPath = TQDir::cleanDirPath(*s_documentPath); + if (!s_documentPath->endsWith("/")) s_documentPath->append('/'); - *s_musicPath = TQDir::cleanDirPath( *s_musicPath ); - if ( !s_musicPath->endsWith("/")) - s_musicPath->append('/'); - - *s_videosPath = TQDir::cleanDirPath( *s_videosPath ); - if ( !s_videosPath->endsWith("/")) - s_videosPath->append('/'); - - *s_downloadPath = TQDir::cleanDirPath( *s_downloadPath ); - if ( !s_downloadPath->endsWith("/")) + *s_downloadPath = TQDir::cleanDirPath(*s_downloadPath); + if (!s_downloadPath->endsWith("/")) s_downloadPath->append('/'); - *s_picturesPath = TQDir::cleanDirPath( *s_picturesPath ); - if ( !s_picturesPath->endsWith("/")) + *s_musicPath = TQDir::cleanDirPath(*s_musicPath); + if (!s_musicPath->endsWith("/")) + s_musicPath->append('/'); + + *s_picturesPath = TQDir::cleanDirPath(*s_picturesPath); + if (!s_picturesPath->endsWith("/")) s_picturesPath->append('/'); - *s_templatesPath = TQDir::cleanDirPath( *s_templatesPath ); - if ( !s_templatesPath->endsWith("/")) + *s_publicSharePath = TQDir::cleanDirPath(*s_publicSharePath); + if (!s_publicSharePath->endsWith("/")) + s_publicSharePath->append('/'); + + *s_templatesPath = TQDir::cleanDirPath(*s_templatesPath); + if (!s_templatesPath->endsWith("/")) s_templatesPath->append('/'); - *s_publicSharePath = TQDir::cleanDirPath( *s_publicSharePath ); - if ( !s_publicSharePath->endsWith("/")) - s_publicSharePath->append('/'); + *s_videosPath = TQDir::cleanDirPath(*s_videosPath); + if (!s_videosPath->endsWith("/")) + s_videosPath->append('/'); // Trash Path - TODO remove in KDE4 (tdeio_trash can't use it for interoperability reasons) *s_trashPath = *s_desktopPath + i18n("Trash") + "/"; @@ -647,18 +693,18 @@ void TDEGlobalSettings::rereadPathSettings() s_desktopPath = 0L; delete s_documentPath; s_documentPath = 0L; - delete s_videosPath; - s_videosPath = 0L; - delete s_picturesPath; - s_picturesPath = 0L; delete s_downloadPath; s_downloadPath = 0L; delete s_musicPath; s_musicPath = 0L; - delete s_templatesPath; - s_templatesPath = 0L; + delete s_picturesPath; + s_picturesPath = 0L; delete s_publicSharePath; s_publicSharePath = 0L; + delete s_templatesPath; + s_templatesPath = 0L; + delete s_videosPath; + s_videosPath = 0L; } TDEGlobalSettings::KMouseSettings & TDEGlobalSettings::mouseSettings() |