1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 13:48:12 +00:00

iLibGUI+Base: Show inaccessible directories with special icon in views

This commit is contained in:
Andreas Kling 2020-09-18 18:21:28 +02:00
parent fad6b8f267
commit e4c23b0151
5 changed files with 10 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

View file

@ -61,6 +61,7 @@ ENUMERATE_FILETYPES(__ENUMERATE_FILETYPE)
static Icon s_hard_disk_icon;
static Icon s_directory_icon;
static Icon s_directory_open_icon;
static Icon s_inaccessible_directory_icon;
static Icon s_home_directory_icon;
static Icon s_home_directory_open_icon;
static Icon s_file_icon;
@ -76,6 +77,7 @@ static void initialize_if_needed()
s_hard_disk_icon = Icon::default_icon("hard-disk");
s_directory_icon = Icon::default_icon("filetype-folder");
s_directory_open_icon = Icon::default_icon("filetype-folder-open");
s_inaccessible_directory_icon = Icon::default_icon("filetype-folder-inaccessible");
s_home_directory_icon = Icon::default_icon("home-directory");
s_home_directory_open_icon = Icon::default_icon("home-directory-open");
s_file_icon = Icon::default_icon("filetype-unknown");
@ -137,6 +139,8 @@ Icon FileIconProvider::icon_for_path(const String& path, mode_t mode)
if (S_ISDIR(mode)) {
if (path == Core::StandardPaths::home_directory())
return s_home_directory_icon;
if (access(path.characters(), R_OK | X_OK) < 0)
return s_inaccessible_directory_icon;
return s_directory_icon;
}
if (S_ISLNK(mode))

View file

@ -82,6 +82,10 @@ bool FileSystemModel::Node::fetch_data(const String& full_path, bool is_root)
perror("readlink");
}
if (S_ISDIR(mode)) {
is_accessible_directory = access(full_path.characters(), R_OK | X_OK) == 0;
}
return true;
}
@ -480,7 +484,7 @@ Icon FileSystemModel::icon_for(const Node& node) const
return FileIconProvider::home_directory_open_icon();
return FileIconProvider::home_directory_icon();
}
if (node.is_selected())
if (node.is_selected() && node.is_accessible_directory)
return FileIconProvider::directory_open_icon();
}

View file

@ -73,6 +73,7 @@ public:
gid_t gid { 0 };
ino_t inode { 0 };
time_t mtime { 0 };
bool is_accessible_directory { false };
size_t total_size { 0 };