Integrate cosmic-files dialog

This commit is contained in:
Jeremy Soller 2024-02-13 13:05:49 -07:00
parent c9ebbd59b0
commit 4df5c5882a
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
3 changed files with 255 additions and 88 deletions

235
Cargo.lock generated
View file

@ -203,6 +203,54 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "anstream"
version = "0.6.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
[[package]]
name = "anstyle-parse"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
dependencies = [
"anstyle",
"windows-sys 0.52.0",
]
[[package]] [[package]]
name = "any_ascii" name = "any_ascii"
version = "0.1.7" version = "0.1.7"
@ -821,6 +869,7 @@ dependencies = [
"iana-time-zone", "iana-time-zone",
"js-sys", "js-sys",
"num-traits", "num-traits",
"pure-rust-locales",
"wasm-bindgen", "wasm-bindgen",
"windows-targets 0.52.0", "windows-targets 0.52.0",
] ]
@ -847,18 +896,18 @@ dependencies = [
[[package]] [[package]]
name = "clipboard_wayland" name = "clipboard_wayland"
version = "0.2.1" version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8134163bd07c47ae3cc29babc42c255fdb315facc790950ae2d0e561ea6f2ec0" checksum = "003f886bc4e2987729d10c1db3424e7f80809f3fc22dbc16c685738887cb37b8"
dependencies = [ dependencies = [
"smithay-clipboard", "smithay-clipboard",
] ]
[[package]] [[package]]
name = "clipboard_x11" name = "clipboard_x11"
version = "0.4.1" version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cf45b436634fee64c6d3981639b46a87eeea3c64e422643273fcefd1baef56c" checksum = "4274ea815e013e0f9f04a2633423e14194e408a0576c943ce3d14ca56c50031c"
dependencies = [ dependencies = [
"thiserror", "thiserror",
"x11rb", "x11rb",
@ -926,6 +975,12 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
[[package]]
name = "colorchoice"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]] [[package]]
name = "com" name = "com"
version = "0.6.0" version = "0.6.0"
@ -1093,7 +1148,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-config" name = "cosmic-config"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"atomicwrites", "atomicwrites",
"cosmic-config-derive", "cosmic-config-derive",
@ -1110,7 +1165,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-config-derive" name = "cosmic-config-derive"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"quote", "quote",
"syn 1.0.109", "syn 1.0.109",
@ -1120,9 +1175,10 @@ dependencies = [
name = "cosmic-edit" name = "cosmic-edit"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"cosmic-files",
"cosmic-syntax-theme", "cosmic-syntax-theme",
"cosmic-text", "cosmic-text",
"env_logger", "env_logger 0.10.2",
"fork", "fork",
"grep", "grep",
"i18n-embed", "i18n-embed",
@ -1133,7 +1189,6 @@ dependencies = [
"log", "log",
"notify", "notify",
"patch", "patch",
"rfd",
"rust-embed", "rust-embed",
"serde", "serde",
"smol_str", "smol_str",
@ -1143,6 +1198,31 @@ dependencies = [
"two-face", "two-face",
] ]
[[package]]
name = "cosmic-files"
version = "0.1.0"
source = "git+https://github.com/pop-os/cosmic-files#5dc65515fcdb700095193a32b05dae032f2b4eca"
dependencies = [
"chrono",
"dirs",
"env_logger 0.11.1",
"fork",
"i18n-embed",
"i18n-embed-fl",
"lexical-sort",
"libcosmic",
"log",
"notify",
"once_cell",
"paste",
"rust-embed",
"serde",
"smol_str",
"systemicons",
"tokio",
"trash",
]
[[package]] [[package]]
name = "cosmic-syntax-theme" name = "cosmic-syntax-theme"
version = "0.1.0" version = "0.1.0"
@ -1181,7 +1261,7 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-theme" name = "cosmic-theme"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"almost", "almost",
"cosmic-config", "cosmic-config",
@ -1658,6 +1738,16 @@ dependencies = [
"syn 2.0.48", "syn 2.0.48",
] ]
[[package]]
name = "env_filter"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea"
dependencies = [
"log",
"regex",
]
[[package]] [[package]]
name = "env_logger" name = "env_logger"
version = "0.10.2" version = "0.10.2"
@ -1671,6 +1761,19 @@ dependencies = [
"termcolor", "termcolor",
] ]
[[package]]
name = "env_logger"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05e7cf40684ae96ade6232ed84582f40ce0a66efcd43a5117aef610534f8e0b8"
dependencies = [
"anstream",
"anstyle",
"env_filter",
"humantime",
"log",
]
[[package]] [[package]]
name = "equivalent" name = "equivalent"
version = "1.0.1" version = "1.0.1"
@ -2020,9 +2123,9 @@ dependencies = [
[[package]] [[package]]
name = "freedesktop-icons" name = "freedesktop-icons"
version = "0.2.5" version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5339cbd60b2ff6b95ef212ab96bc80bf1a9dff2821b9966c417cdfae2808796" checksum = "a8ef34245e0540c9a3ce7a28340b98d2c12b75da0d446da4e8224923fcaa0c16"
dependencies = [ dependencies = [
"dirs", "dirs",
"once_cell", "once_cell",
@ -2569,9 +2672,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
version = "0.3.5" version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
[[package]] [[package]]
name = "hex" name = "hex"
@ -2687,7 +2790,7 @@ dependencies = [
[[package]] [[package]]
name = "iced" name = "iced"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"iced_accessibility", "iced_accessibility",
"iced_core", "iced_core",
@ -2702,7 +2805,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_accessibility" name = "iced_accessibility"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"accesskit", "accesskit",
"accesskit_winit", "accesskit_winit",
@ -2711,7 +2814,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_core" name = "iced_core"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"log", "log",
@ -2728,7 +2831,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_futures" name = "iced_futures"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"futures", "futures",
"iced_core", "iced_core",
@ -2741,7 +2844,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_graphics" name = "iced_graphics"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"bytemuck", "bytemuck",
@ -2765,7 +2868,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_renderer" name = "iced_renderer"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"iced_graphics", "iced_graphics",
"iced_tiny_skia", "iced_tiny_skia",
@ -2777,7 +2880,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_runtime" name = "iced_runtime"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"iced_core", "iced_core",
"iced_futures", "iced_futures",
@ -2787,7 +2890,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_style" name = "iced_style"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"iced_core", "iced_core",
"once_cell", "once_cell",
@ -2797,7 +2900,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_tiny_skia" name = "iced_tiny_skia"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"cosmic-text", "cosmic-text",
@ -2814,7 +2917,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_wgpu" name = "iced_wgpu"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 1.3.2",
"bytemuck", "bytemuck",
@ -2833,7 +2936,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_widget" name = "iced_widget"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"iced_renderer", "iced_renderer",
"iced_runtime", "iced_runtime",
@ -2847,7 +2950,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_winit" name = "iced_winit"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"iced_graphics", "iced_graphics",
"iced_runtime", "iced_runtime",
@ -3208,7 +3311,7 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
[[package]] [[package]]
name = "libcosmic" name = "libcosmic"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/libcosmic#6adc037f40841b305522daad43b9a37891436c6b" source = "git+https://github.com/pop-os/libcosmic#b430656966a24158270912a2ff827c77aae39de4"
dependencies = [ dependencies = [
"apply", "apply",
"ashpd", "ashpd",
@ -4421,12 +4524,6 @@ dependencies = [
"windows-sys 0.52.0", "windows-sys 0.52.0",
] ]
[[package]]
name = "pollster"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2"
[[package]] [[package]]
name = "powerfmt" name = "powerfmt"
version = "0.2.0" version = "0.2.0"
@ -4512,6 +4609,12 @@ version = "1.0.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f0f7f43585c34e4fdd7497d746bc32e14458cf11c69341cc0587b1d825dde42" checksum = "0f0f7f43585c34e4fdd7497d746bc32e14458cf11c69341cc0587b1d825dde42"
[[package]]
name = "pure-rust-locales"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1190fd18ae6ce9e137184f207593877e70f39b015040156b1e05081cdfe3733a"
[[package]] [[package]]
name = "qoi" name = "qoi"
version = "0.4.1" version = "0.4.1"
@ -4754,9 +4857,7 @@ dependencies = [
"objc", "objc",
"objc-foundation", "objc-foundation",
"objc_id", "objc_id",
"pollster",
"raw-window-handle 0.5.2", "raw-window-handle 0.5.2",
"urlencoding",
"wasm-bindgen", "wasm-bindgen",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"web-sys", "web-sys",
@ -5603,7 +5704,7 @@ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"toml_edit 0.22.4", "toml_edit 0.22.5",
] ]
[[package]] [[package]]
@ -5623,7 +5724,7 @@ checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"toml_datetime", "toml_datetime",
"winnow", "winnow 0.5.40",
] ]
[[package]] [[package]]
@ -5634,20 +5735,20 @@ checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"toml_datetime", "toml_datetime",
"winnow", "winnow 0.5.40",
] ]
[[package]] [[package]]
name = "toml_edit" name = "toml_edit"
version = "0.22.4" version = "0.22.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951" checksum = "99e68c159e8f5ba8a28c4eb7b0c0c190d77bb479047ca713270048145a9ad28a"
dependencies = [ dependencies = [
"indexmap", "indexmap",
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"winnow", "winnow 0.6.0",
] ]
[[package]] [[package]]
@ -5681,6 +5782,22 @@ dependencies = [
"once_cell", "once_cell",
] ]
[[package]]
name = "trash"
version = "3.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c658458d46d9d5a153a3b5cdd88d8579ad50d4fb85d53961e4526c8fc7c55a57"
dependencies = [
"chrono",
"libc",
"log",
"objc",
"once_cell",
"scopeguard",
"url",
"windows 0.44.0",
]
[[package]] [[package]]
name = "ttf-parser" name = "ttf-parser"
version = "0.15.2" version = "0.15.2"
@ -5851,12 +5968,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "urlencoding"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
[[package]] [[package]]
name = "usvg" name = "usvg"
version = "0.37.0" version = "0.37.0"
@ -5918,6 +6029,12 @@ dependencies = [
"tiny-skia-path", "tiny-skia-path",
] ]
[[package]]
name = "utf8parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]] [[package]]
name = "version-compare" name = "version-compare"
version = "0.1.1" version = "0.1.1"
@ -6382,9 +6499,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]] [[package]]
name = "window_clipboard" name = "window_clipboard"
version = "0.4.0" version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6a197337269a469b5b2583d65dd7dfe475fd79a525be0aa647ff6d37ac6612c" checksum = "f6d692d46038c433f9daee7ad8757e002a4248c20b0a3fbc991d99521d3bcb6d"
dependencies = [ dependencies = [
"clipboard-win", "clipboard-win",
"clipboard_macos", "clipboard_macos",
@ -6394,6 +6511,15 @@ dependencies = [
"thiserror", "thiserror",
] ]
[[package]]
name = "windows"
version = "0.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
dependencies = [
"windows-targets 0.42.2",
]
[[package]] [[package]]
name = "windows" name = "windows"
version = "0.48.0" version = "0.48.0"
@ -6725,9 +6851,18 @@ dependencies = [
[[package]] [[package]]
name = "winnow" name = "winnow"
version = "0.5.39" version = "0.5.40"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
dependencies = [
"memchr",
]
[[package]]
name = "winnow"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b1dbce9e90e5404c5a52ed82b1d13fc8cfbdad85033b6f57546ffd1265f8451"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]

View file

@ -24,6 +24,10 @@ i18n-embed = { version = "0.14", features = ["fluent-system", "desktop-requester
i18n-embed-fl = "0.7" i18n-embed-fl = "0.7"
rust-embed = "8" rust-embed = "8"
[dependencies.cosmic-files]
git = "https://github.com/pop-os/cosmic-files"
default-features = false
[dependencies.cosmic-syntax-theme] [dependencies.cosmic-syntax-theme]
git = "https://github.com/pop-os/cosmic-syntax-theme" git = "https://github.com/pop-os/cosmic-syntax-theme"
@ -34,13 +38,7 @@ features = ["syntect", "vi"]
[dependencies.libcosmic] [dependencies.libcosmic]
git = "https://github.com/pop-os/libcosmic" git = "https://github.com/pop-os/libcosmic"
default-features = false default-features = false
features = ["tokio", "winit"] features = ["multi-window", "tokio", "winit"]
[dependencies.rfd]
version = "0.13.0"
default-features = false
features = ["tokio", "xdg-portal"]
optional = true
[dependencies.smol_str] [dependencies.smol_str]
version = "0.2.1" version = "0.2.1"
@ -54,8 +52,8 @@ git = "https://github.com/jackpot51/systemicons"
fork = "0.1" fork = "0.1"
[features] [features]
default = ["rfd", "wgpu"] default = ["wgpu"]
wgpu = ["libcosmic/wgpu"] wgpu = ["libcosmic/wgpu", "cosmic-files/wgpu"]
[profile.release-with-debug] [profile.release-with-debug]
inherits = "release" inherits = "release"

View file

@ -17,6 +17,7 @@ use cosmic::{
widget::{self, button, icon, nav_bar, segmented_button, view_switcher}, widget::{self, button, icon, nav_bar, segmented_button, view_switcher},
Application, ApplicationExt, Apply, Element, Application, ApplicationExt, Apply, Element,
}; };
use cosmic_files::dialog::{Dialog, DialogMessage, DialogResult};
use cosmic_text::{Cursor, Edit, Family, FontSystem, Selection, SwashCache, SyntaxSystem, ViMode}; use cosmic_text::{Cursor, Edit, Family, FontSystem, Selection, SwashCache, SyntaxSystem, ViMode};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::{ use std::{
@ -279,6 +280,7 @@ pub enum Message {
Cut, Cut,
DefaultFont(usize), DefaultFont(usize),
DefaultFontSize(usize), DefaultFontSize(usize),
DialogMessage(DialogMessage),
Find(Option<bool>), Find(Option<bool>),
FindNext, FindNext,
FindPrevious, FindPrevious,
@ -293,11 +295,12 @@ pub enum Message {
NewWindow, NewWindow,
NotifyEvent(notify::Event), NotifyEvent(notify::Event),
NotifyWatcher(WatcherWrapper), NotifyWatcher(WatcherWrapper),
OpenFileDialog,
OpenFile(PathBuf), OpenFile(PathBuf),
OpenFileDialog,
OpenFileResult(DialogResult),
OpenGitDiff(PathBuf, GitDiff), OpenGitDiff(PathBuf, GitDiff),
OpenProjectDialog, OpenProjectDialog,
OpenProject(PathBuf), OpenProjectResult(DialogResult),
OpenSearchResult(usize, usize), OpenSearchResult(usize, usize),
Paste, Paste,
PasteValue(String), PasteValue(String),
@ -371,6 +374,7 @@ pub struct App {
theme_names: Vec<String>, theme_names: Vec<String>,
context_page: ContextPage, context_page: ContextPage,
text_box_id: widget::Id, text_box_id: widget::Id,
dialog_opt: Option<Dialog<Message>>,
find_opt: Option<bool>, find_opt: Option<bool>,
find_replace_id: widget::Id, find_replace_id: widget::Id,
find_replace_value: String, find_replace_value: String,
@ -637,7 +641,10 @@ impl App {
let window_title = format!("{title} - COSMIC Text Editor"); let window_title = format!("{title} - COSMIC Text Editor");
self.set_header_title(title.clone()); self.set_header_title(title.clone());
Command::batch([self.set_window_title(window_title), self.update_focus()]) Command::batch([
self.set_window_title(window_title, self.main_window_id()),
self.update_focus(),
])
} }
fn document_statistics(&self) -> Element<Message> { fn document_statistics(&self) -> Element<Message> {
@ -1078,6 +1085,7 @@ impl Application for App {
theme_names, theme_names,
context_page: ContextPage::Settings, context_page: ContextPage::Settings,
text_box_id: widget::Id::unique(), text_box_id: widget::Id::unique(),
dialog_opt: None,
find_opt: None, find_opt: None,
find_replace_id: widget::Id::unique(), find_replace_id: widget::Id::unique(),
find_replace_value: String::new(), find_replace_value: String::new(),
@ -1322,6 +1330,11 @@ impl Application for App {
log::warn!("failed to find font with index {}", index); log::warn!("failed to find font with index {}", index);
} }
}, },
Message::DialogMessage(dialog_message) => {
if let Some(dialog) = &mut self.dialog_opt {
return dialog.update(dialog_message);
}
}
Message::Find(find_opt) => { Message::Find(find_opt) => {
self.find_opt = find_opt; self.find_opt = find_opt;
@ -1454,23 +1467,30 @@ impl Application for App {
log::warn!("message did not contain notify watcher"); log::warn!("message did not contain notify watcher");
} }
}, },
Message::OpenFileDialog => {
#[cfg(feature = "rfd")]
return Command::perform(
async {
if let Some(handle) = rfd::AsyncFileDialog::new().pick_file().await {
message::app(Message::OpenFile(handle.path().to_owned()))
} else {
message::none()
}
},
|x| x,
);
}
Message::OpenFile(path) => { Message::OpenFile(path) => {
self.open_tab(Some(path)); self.open_tab(Some(path));
return self.update_tab(); return self.update_tab();
} }
Message::OpenFileDialog => {
if self.dialog_opt.is_none() {
let (dialog, command) =
Dialog::new(Message::DialogMessage, Message::OpenFileResult);
self.dialog_opt = Some(dialog);
return command;
}
}
Message::OpenFileResult(result) => {
self.dialog_opt = None;
match result {
DialogResult::Cancel => {}
DialogResult::Open(paths) => {
for path in paths {
self.open_tab(Some(path));
}
return self.update_tab();
}
}
}
Message::OpenGitDiff(project_path, diff) => { Message::OpenGitDiff(project_path, diff) => {
let relative_path = match diff.path.strip_prefix(project_path.clone()) { let relative_path = match diff.path.strip_prefix(project_path.clone()) {
Ok(ok) => ok, Ok(ok) => ok,
@ -1505,20 +1525,23 @@ impl Application for App {
return self.update_tab(); return self.update_tab();
} }
Message::OpenProjectDialog => { Message::OpenProjectDialog => {
#[cfg(feature = "rfd")] if self.dialog_opt.is_none() {
return Command::perform( let (dialog, command) =
async { Dialog::new(Message::DialogMessage, Message::OpenProjectResult);
if let Some(handle) = rfd::AsyncFileDialog::new().pick_folder().await { self.dialog_opt = Some(dialog);
message::app(Message::OpenProject(handle.path().to_owned())) return command;
} else { }
message::none()
}
},
|x| x,
);
} }
Message::OpenProject(path) => { Message::OpenProjectResult(result) => {
self.open_project(path); self.dialog_opt = None;
match result {
DialogResult::Cancel => {}
DialogResult::Open(paths) => {
for path in paths {
self.open_project(path);
}
}
}
} }
Message::OpenSearchResult(file_i, line_i) => { Message::OpenSearchResult(file_i, line_i) => {
let path_cursor_opt = match &self.project_search_result { let path_cursor_opt = match &self.project_search_result {
@ -2158,6 +2181,13 @@ impl Application for App {
content content
} }
fn view_window(&self, window_id: window::Id) -> Element<Message> {
match &self.dialog_opt {
Some(dialog) => dialog.view(window_id),
None => widget::text("Unknown window ID").into(),
}
}
fn subscription(&self) -> subscription::Subscription<Message> { fn subscription(&self) -> subscription::Subscription<Message> {
struct WatcherSubscription; struct WatcherSubscription;
struct ConfigSubscription; struct ConfigSubscription;
@ -2259,6 +2289,10 @@ impl Application for App {
Message::SystemThemeModeChange(update.config) Message::SystemThemeModeChange(update.config)
}), }),
match &self.dialog_opt {
Some(dialog) => dialog.subscription(),
None => subscription::Subscription::none(),
},
]) ])
} }
} }