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]
|
||||
name = "cosmic-files"
|
||||
version = "0.1.0"
|
||||
version = "1.0.0"
|
||||
authors = ["Jeremy Soller <jeremy@system76.com>"]
|
||||
edition = "2024"
|
||||
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
|
||||
flate2 = "1.1"
|
||||
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"] }
|
||||
# Internationalization
|
||||
i18n-embed = { version = "0.16", features = [
|
||||
|
|
@ -56,7 +56,7 @@ i18n-embed-fl = "0.10"
|
|||
rust-embed = "8"
|
||||
slotmap = "1.0.7"
|
||||
recently-used-xbel = { git = "https://github.com/pop-os/recently-used-xbel.git" }
|
||||
zip = "6.0"
|
||||
zip = "7"
|
||||
uzers = "0.12.1"
|
||||
md-5 = "0.10.6"
|
||||
png = "0.18"
|
||||
|
|
@ -65,7 +65,7 @@ num_cpus = "1.17.0"
|
|||
|
||||
# Completion-based IO runtime to enable io_uring / IOCP file IO support.
|
||||
[dependencies.compio]
|
||||
version = "0.16.0"
|
||||
version = "0.17.0"
|
||||
default-features = false
|
||||
features = ["io", "macros", "polling", "runtime"]
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ inherits = "release"
|
|||
debug = true
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
fork = "0.4"
|
||||
fork = "0.6"
|
||||
|
||||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
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
|
||||
|
||||
* 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_direction = sort.1;
|
||||
|
||||
let mut tasks = Vec::with_capacity(2);
|
||||
|
||||
if let Some(selection_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 {
|
||||
Some(s) => match s.kind {
|
||||
ClipboardKind::Copy => Vec::new(),
|
||||
|
|
@ -4164,7 +4173,9 @@ impl Application for App {
|
|||
},
|
||||
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 {
|
||||
let mut items: MounterItems = (monitor.mounts().into_iter())
|
||||
.enumerate()
|
||||
// Hide shadowed mounts
|
||||
.filter(|(_, mount)| !mount.is_shadowed())
|
||||
.map(|(i, mount)| {
|
||||
let root = MountExt::root(&mount);
|
||||
let is_remote = root
|
||||
|
|
|
|||
|
|
@ -1664,6 +1664,7 @@ pub enum Message {
|
|||
Resize(Rectangle),
|
||||
Scroll(Viewport),
|
||||
ScrollTab(f32),
|
||||
ScrollToFocused,
|
||||
SearchContext(Location, SearchContextWrapper),
|
||||
SearchReady(bool),
|
||||
SelectAll,
|
||||
|
|
@ -3880,6 +3881,13 @@ impl Tab {
|
|||
.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) => {
|
||||
if location == self.location {
|
||||
self.search_context = context.0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue