Merge pull request #35626 from ShlomiRex/file-dialog-add-home-desktop-as-drive

This commit is contained in:
Rémi Verschelde 2022-07-05 13:47:21 +02:00 committed by GitHub
commit 0cb12f27e7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -33,6 +33,7 @@
#if defined(UNIX_ENABLED) || defined(LIBC_FILEIO_ENABLED)
#include "core/os/memory.h"
#include "core/os/os.h"
#include "core/string/print_string.h"
#include "core/templates/list.h"
@ -212,10 +213,11 @@ static bool _filter_drive(struct mntent *mnt) {
#endif
static void _get_drives(List<String> *list) {
// Add root.
list->push_back("/");
#if defined(HAVE_MNTENT) && defined(X11_ENABLED)
// Check /etc/mtab for the list of mounted partitions
// Check /etc/mtab for the list of mounted partitions.
FILE *mtab = setmntent("/etc/mtab", "r");
if (mtab) {
struct mntent mnt;
@ -235,7 +237,7 @@ static void _get_drives(List<String> *list) {
}
#endif
// Add $HOME
// Add $HOME.
const char *home = getenv("HOME");
if (home) {
// Only add if it's not a duplicate
@ -244,7 +246,8 @@ static void _get_drives(List<String> *list) {
list->push_back(home_name);
}
// Check $HOME/.config/gtk-3.0/bookmarks
// Check GTK+3 bookmarks for both XDG locations (Documents, Downloads, etc.)
// and potential user-defined bookmarks.
char path[1024];
snprintf(path, 1024, "%s/.config/gtk-3.0/bookmarks", home);
FILE *fd = fopen(path, "r");
@ -253,7 +256,7 @@ static void _get_drives(List<String> *list) {
while (fgets(string, 1024, fd)) {
// Parse only file:// links
if (strncmp(string, "file://", 7) == 0) {
// Strip any unwanted edges on the strings and push_back if it's not a duplicate
// Strip any unwanted edges on the strings and push_back if it's not a duplicate.
String fpath = String::utf8(string + 7).strip_edges().split_spaces()[0].uri_decode();
if (!list->find(fpath)) {
list->push_back(fpath);
@ -263,6 +266,12 @@ static void _get_drives(List<String> *list) {
fclose(fd);
}
// Add Desktop dir.
String dpath = OS::get_singleton()->get_system_dir(OS::SystemDir::SYSTEM_DIR_DESKTOP);
if (dpath.length() > 0 && !list->find(dpath)) {
list->push_back(dpath);
}
}
list->sort();