commit
6d3abf431c
6 changed files with 540 additions and 445 deletions
944
Cargo.lock
generated
944
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
10
Cargo.toml
10
Cargo.toml
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "cosmic-files"
|
name = "cosmic-files"
|
||||||
version = "0.1.0"
|
version = "1.0.0"
|
||||||
authors = ["Jeremy Soller <jeremy@system76.com>"]
|
authors = ["Jeremy Soller <jeremy@system76.com>"]
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
license = "GPL-3.0-only"
|
license = "GPL-3.0-only"
|
||||||
|
|
@ -45,7 +45,7 @@ xdg-mime = { git = "https://github.com/ebassi/xdg-mime-rs" }
|
||||||
bzip2 = { version = "0.6", optional = true } #TODO: replace with pure Rust crate
|
bzip2 = { version = "0.6", optional = true } #TODO: replace with pure Rust crate
|
||||||
flate2 = "1.1"
|
flate2 = "1.1"
|
||||||
tar = "0.4.44"
|
tar = "0.4.44"
|
||||||
lzma-rust2 = { version = "0.15", optional = true }
|
lzma-rust2 = { version = "0.15.4", optional = true }
|
||||||
ordermap = { version = "1.0.0", features = ["serde"] }
|
ordermap = { version = "1.0.0", features = ["serde"] }
|
||||||
# Internationalization
|
# Internationalization
|
||||||
i18n-embed = { version = "0.16", features = [
|
i18n-embed = { version = "0.16", features = [
|
||||||
|
|
@ -56,7 +56,7 @@ i18n-embed-fl = "0.10"
|
||||||
rust-embed = "8"
|
rust-embed = "8"
|
||||||
slotmap = "1.0.7"
|
slotmap = "1.0.7"
|
||||||
recently-used-xbel = { git = "https://github.com/pop-os/recently-used-xbel.git" }
|
recently-used-xbel = { git = "https://github.com/pop-os/recently-used-xbel.git" }
|
||||||
zip = "6.0"
|
zip = "7"
|
||||||
uzers = "0.12.1"
|
uzers = "0.12.1"
|
||||||
md-5 = "0.10.6"
|
md-5 = "0.10.6"
|
||||||
png = "0.18"
|
png = "0.18"
|
||||||
|
|
@ -65,7 +65,7 @@ num_cpus = "1.17.0"
|
||||||
|
|
||||||
# Completion-based IO runtime to enable io_uring / IOCP file IO support.
|
# Completion-based IO runtime to enable io_uring / IOCP file IO support.
|
||||||
[dependencies.compio]
|
[dependencies.compio]
|
||||||
version = "0.16.0"
|
version = "0.17.0"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["io", "macros", "polling", "runtime"]
|
features = ["io", "macros", "polling", "runtime"]
|
||||||
|
|
||||||
|
|
@ -123,7 +123,7 @@ inherits = "release"
|
||||||
debug = true
|
debug = true
|
||||||
|
|
||||||
[target.'cfg(unix)'.dependencies]
|
[target.'cfg(unix)'.dependencies]
|
||||||
fork = "0.4"
|
fork = "0.6"
|
||||||
|
|
||||||
[target.'cfg(target_os = "linux")'.dependencies]
|
[target.'cfg(target_os = "linux")'.dependencies]
|
||||||
procfs = "0.18"
|
procfs = "0.18"
|
||||||
|
|
|
||||||
6
debian/changelog
vendored
6
debian/changelog
vendored
|
|
@ -1,3 +1,9 @@
|
||||||
|
cosmic-files (1.0.0) jammy; urgency=medium
|
||||||
|
|
||||||
|
* Stable release.
|
||||||
|
|
||||||
|
-- Jeremy Soller <jeremy@system76.com> Mon, 29 Dec 2025 15:12:39 -0700
|
||||||
|
|
||||||
cosmic-files (0.1.0) jammy; urgency=medium
|
cosmic-files (0.1.0) jammy; urgency=medium
|
||||||
|
|
||||||
* Initial release.
|
* Initial release.
|
||||||
|
|
|
||||||
15
src/app.rs
15
src/app.rs
|
|
@ -4153,10 +4153,19 @@ impl Application for App {
|
||||||
tab.sort_name = sort.0;
|
tab.sort_name = sort.0;
|
||||||
tab.sort_direction = sort.1;
|
tab.sort_direction = sort.1;
|
||||||
|
|
||||||
|
let mut tasks = Vec::with_capacity(2);
|
||||||
|
|
||||||
if let Some(selection_paths) = selection_paths {
|
if let Some(selection_paths) = selection_paths {
|
||||||
tab.select_paths(selection_paths);
|
tab.select_paths(selection_paths);
|
||||||
|
|
||||||
|
// Ensure selected path is scrolled to after redraw
|
||||||
|
tasks.push(Task::done(cosmic::action::app(Message::TabMessage(
|
||||||
|
Some(entity),
|
||||||
|
tab::Message::ScrollToFocused,
|
||||||
|
))));
|
||||||
}
|
}
|
||||||
return clipboard::read_data::<ClipboardPaste>().map(|p| {
|
|
||||||
|
tasks.push(clipboard::read_data::<ClipboardPaste>().map(|p| {
|
||||||
cosmic::action::app(Message::CutPaths(match p {
|
cosmic::action::app(Message::CutPaths(match p {
|
||||||
Some(s) => match s.kind {
|
Some(s) => match s.kind {
|
||||||
ClipboardKind::Copy => Vec::new(),
|
ClipboardKind::Copy => Vec::new(),
|
||||||
|
|
@ -4164,7 +4173,9 @@ impl Application for App {
|
||||||
},
|
},
|
||||||
None => Vec::new(),
|
None => Vec::new(),
|
||||||
}))
|
}))
|
||||||
});
|
}));
|
||||||
|
|
||||||
|
return Task::batch(tasks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,8 @@ fn gio_icon_to_path(icon: &gio::Icon, size: u16) -> Option<PathBuf> {
|
||||||
fn items(monitor: &gio::VolumeMonitor, sizes: IconSizes) -> MounterItems {
|
fn items(monitor: &gio::VolumeMonitor, sizes: IconSizes) -> MounterItems {
|
||||||
let mut items: MounterItems = (monitor.mounts().into_iter())
|
let mut items: MounterItems = (monitor.mounts().into_iter())
|
||||||
.enumerate()
|
.enumerate()
|
||||||
|
// Hide shadowed mounts
|
||||||
|
.filter(|(_, mount)| !mount.is_shadowed())
|
||||||
.map(|(i, mount)| {
|
.map(|(i, mount)| {
|
||||||
let root = MountExt::root(&mount);
|
let root = MountExt::root(&mount);
|
||||||
let is_remote = root
|
let is_remote = root
|
||||||
|
|
|
||||||
|
|
@ -1664,6 +1664,7 @@ pub enum Message {
|
||||||
Resize(Rectangle),
|
Resize(Rectangle),
|
||||||
Scroll(Viewport),
|
Scroll(Viewport),
|
||||||
ScrollTab(f32),
|
ScrollTab(f32),
|
||||||
|
ScrollToFocused,
|
||||||
SearchContext(Location, SearchContextWrapper),
|
SearchContext(Location, SearchContextWrapper),
|
||||||
SearchReady(bool),
|
SearchReady(bool),
|
||||||
SelectAll,
|
SelectAll,
|
||||||
|
|
@ -3880,6 +3881,13 @@ impl Tab {
|
||||||
.into(),
|
.into(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
Message::ScrollToFocused => {
|
||||||
|
if let Some(offset) = self.select_focus_scroll() {
|
||||||
|
commands.push(Command::Iced(
|
||||||
|
scrollable::scroll_to(self.scrollable_id.clone(), offset).into(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
Message::SearchContext(location, context) => {
|
Message::SearchContext(location, context) => {
|
||||||
if location == self.location {
|
if location == self.location {
|
||||||
self.search_context = context.0;
|
self.search_context = context.0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue