mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 18:05:07 +00:00
LibGUI: Add symlink targets as a column in GFileSystemModel
Also make sure to hide this column by default where we don't expect to see it.
This commit is contained in:
parent
fcb7f6f233
commit
f7b394af7d
4 changed files with 23 additions and 0 deletions
|
@ -115,6 +115,7 @@ int main(int argc, char** argv)
|
||||||
tree_view->set_column_hidden(GFileSystemModel::Column::Permissions, true);
|
tree_view->set_column_hidden(GFileSystemModel::Column::Permissions, true);
|
||||||
tree_view->set_column_hidden(GFileSystemModel::Column::ModificationTime, true);
|
tree_view->set_column_hidden(GFileSystemModel::Column::ModificationTime, true);
|
||||||
tree_view->set_column_hidden(GFileSystemModel::Column::Inode, true);
|
tree_view->set_column_hidden(GFileSystemModel::Column::Inode, true);
|
||||||
|
tree_view->set_column_hidden(GFileSystemModel::Column::SymlinkTarget, true);
|
||||||
tree_view->set_size_policy(SizePolicy::Fixed, SizePolicy::Fill);
|
tree_view->set_size_policy(SizePolicy::Fixed, SizePolicy::Fill);
|
||||||
tree_view->set_preferred_size(150, 0);
|
tree_view->set_preferred_size(150, 0);
|
||||||
auto directory_view = DirectoryView::construct(splitter);
|
auto directory_view = DirectoryView::construct(splitter);
|
||||||
|
|
|
@ -110,6 +110,7 @@ GFilePicker::GFilePicker(Mode mode, const StringView& file_name, const StringVie
|
||||||
m_view->set_column_hidden(GFileSystemModel::Column::Group, true);
|
m_view->set_column_hidden(GFileSystemModel::Column::Group, true);
|
||||||
m_view->set_column_hidden(GFileSystemModel::Column::Permissions, true);
|
m_view->set_column_hidden(GFileSystemModel::Column::Permissions, true);
|
||||||
m_view->set_column_hidden(GFileSystemModel::Column::Inode, true);
|
m_view->set_column_hidden(GFileSystemModel::Column::Inode, true);
|
||||||
|
m_view->set_column_hidden(GFileSystemModel::Column::SymlinkTarget, true);
|
||||||
m_model->set_root_path(path);
|
m_model->set_root_path(path);
|
||||||
|
|
||||||
location_textbox->on_return_pressed = [&] {
|
location_textbox->on_return_pressed = [&] {
|
||||||
|
|
|
@ -68,6 +68,17 @@ bool GFileSystemModel::Node::fetch_data(const String& full_path, bool is_root)
|
||||||
gid = st.st_gid;
|
gid = st.st_gid;
|
||||||
inode = st.st_ino;
|
inode = st.st_ino;
|
||||||
mtime = st.st_mtime;
|
mtime = st.st_mtime;
|
||||||
|
|
||||||
|
if (S_ISLNK(mode)) {
|
||||||
|
char buffer[PATH_MAX];
|
||||||
|
int length = readlink(full_path.characters(), buffer, sizeof(buffer));
|
||||||
|
if (length < 0) {
|
||||||
|
perror("readlink");
|
||||||
|
} else {
|
||||||
|
symlink_target = String(buffer, length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -360,6 +371,8 @@ GVariant GFileSystemModel::data(const GModelIndex& index, Role role) const
|
||||||
return node.mtime;
|
return node.mtime;
|
||||||
case Column::Inode:
|
case Column::Inode:
|
||||||
return (int)node.inode;
|
return (int)node.inode;
|
||||||
|
case Column::SymlinkTarget:
|
||||||
|
return node.symlink_target;
|
||||||
}
|
}
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -382,6 +395,8 @@ GVariant GFileSystemModel::data(const GModelIndex& index, Role role) const
|
||||||
return timestamp_string(node.mtime);
|
return timestamp_string(node.mtime);
|
||||||
case Column::Inode:
|
case Column::Inode:
|
||||||
return (int)node.inode;
|
return (int)node.inode;
|
||||||
|
case Column::SymlinkTarget:
|
||||||
|
return node.symlink_target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -508,6 +523,8 @@ String GFileSystemModel::column_name(int column) const
|
||||||
return "Modified";
|
return "Modified";
|
||||||
case Column::Inode:
|
case Column::Inode:
|
||||||
return "Inode";
|
return "Inode";
|
||||||
|
case Column::SymlinkTarget:
|
||||||
|
return "Symlink target";
|
||||||
}
|
}
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -531,6 +548,8 @@ GModel::ColumnMetadata GFileSystemModel::column_metadata(int column) const
|
||||||
return { 65, TextAlignment::CenterLeft };
|
return { 65, TextAlignment::CenterLeft };
|
||||||
case Column::Inode:
|
case Column::Inode:
|
||||||
return { 60, TextAlignment::CenterRight };
|
return { 60, TextAlignment::CenterRight };
|
||||||
|
case Column::SymlinkTarget:
|
||||||
|
return { 120, TextAlignment::CenterLeft };
|
||||||
}
|
}
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ public:
|
||||||
Permissions,
|
Permissions,
|
||||||
ModificationTime,
|
ModificationTime,
|
||||||
Inode,
|
Inode,
|
||||||
|
SymlinkTarget,
|
||||||
__Count,
|
__Count,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -60,6 +61,7 @@ public:
|
||||||
~Node() { close(m_watch_fd); }
|
~Node() { close(m_watch_fd); }
|
||||||
|
|
||||||
String name;
|
String name;
|
||||||
|
String symlink_target;
|
||||||
size_t size { 0 };
|
size_t size { 0 };
|
||||||
mode_t mode { 0 };
|
mode_t mode { 0 };
|
||||||
uid_t uid { 0 };
|
uid_t uid { 0 };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue