diff --git a/Cargo.lock b/Cargo.lock index a2d95e5..8e8b856 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e08104bebc65a46f8bc7aa733d39ea6874bfa7156f41a46b805785e3af1587d" +checksum = "6f90148830dac590fac7ccfe78ec4a8ea404c60f75a24e16407a71f0f40de775" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -38,8 +38,8 @@ source = "git+https://github.com/wash2/accesskit.git?branch=winit-0.29#5f9b61c82 dependencies = [ "accesskit", "accesskit_consumer", - "icrate 0.1.0", - "objc2 0.5.0", + "icrate 0.1.2", + "objc2 0.5.1", "once_cell", ] @@ -83,7 +83,7 @@ dependencies = [ "accesskit_macos", "accesskit_unix", "accesskit_windows", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "winit", ] @@ -345,9 +345,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +checksum = "136d4d23bcc79e27423727b36823d86233aad06dfea531837b038394d11e9928" dependencies = [ "concurrent-queue", "event-listener 5.3.0", @@ -358,11 +358,10 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f98c37cf288e302c16ef6c8472aad1e034c6c84ce5ea7b8101c98eb4a802fee" +checksum = "b10202063978b3351199d68f8b22c4e47e4b1b822f8d43fd862d5ea8c006b29a" dependencies = [ - "async-lock 3.3.0", "async-task", "concurrent-queue", "fastrand 2.0.2", @@ -414,8 +413,8 @@ dependencies = [ "futures-io", "futures-lite 2.3.0", "parking", - "polling 3.6.0", - "rustix 0.38.32", + "polling 3.7.0", + "rustix 0.38.34", "slab", "tracing", "windows-sys 0.52.0", @@ -454,7 +453,7 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.32", + "rustix 0.38.34", "windows-sys 0.48.0", ] @@ -466,25 +465,25 @@ checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] name = "async-signal" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +checksum = "afe66191c335039c7bb78f99dc7520b0cbb166b3a1cb33a03f53d8a1c6f2afda" dependencies = [ "async-io 2.3.2", - "async-lock 2.8.0", + "async-lock 3.3.0", "atomic-waker", "cfg-if", "futures-core", "futures-io", - "rustix 0.38.32", + "rustix 0.38.34", "signal-hook-registry", "slab", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -501,7 +500,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -527,7 +526,7 @@ name = "atomicwrites" version = "0.4.2" source = "git+https://github.com/jackpot51/rust-atomicwrites#043ab4859d53ffd3d55334685303d8df39c9f768" dependencies = [ - "rustix 0.38.32", + "rustix 0.38.34", "tempfile", "windows-sys 0.48.0", ] @@ -684,7 +683,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e58aa60e59d8dbfcc36138f5f18be5f24394d33b38b24f7fd0b1caa33095f22f" dependencies = [ "block-sys", - "objc2 0.5.0", + "objc2 0.5.1", ] [[package]] @@ -726,7 +725,7 @@ checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -759,8 +758,8 @@ checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" dependencies = [ "bitflags 2.5.0", "log", - "polling 3.6.0", - "rustix 0.38.32", + "polling 3.7.0", + "rustix 0.38.34", "slab", "thiserror", ] @@ -773,8 +772,8 @@ checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ "bitflags 2.5.0", "log", - "polling 3.6.0", - "rustix 0.38.32", + "polling 3.7.0", + "rustix 0.38.34", "slab", "thiserror", ] @@ -786,7 +785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" dependencies = [ "calloop 0.12.4", - "rustix 0.38.32", + "rustix 0.38.34", "wayland-backend", "wayland-client", ] @@ -798,19 +797,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ "calloop 0.13.0", - "rustix 0.38.32", + "rustix 0.38.34", "wayland-backend", "wayland-client", ] [[package]] name = "cc" -version = "1.0.92" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2678b2e3449475e95b0aa6f9b506a28e61b3dc8996592b983695e8ebb58a8b41" +checksum = "d32a725bc159af97c3e629873bb9f88fb8cf8a4867175f76dc987815ea07c83b" dependencies = [ "jobserver", "libc", + "once_cell", ] [[package]] @@ -849,9 +849,9 @@ checksum = "77e53693616d3075149f4ead59bdeecd204ac6b8192d8969757601b74bddf00f" [[package]] name = "chrono" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d04d43504c61aa6c7531f1871dd0d418d91130162063b789da00fd7057a5e" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -864,9 +864,9 @@ dependencies = [ [[package]] name = "clipboard-win" -version = "5.3.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d517d4b86184dbb111d3556a10f1c8a04da7428d2987bf1081602bf11c3aa9ee" +checksum = "79f4473f5144e20d9aceaf2972478f06ddf687831eafeeb434fbaf0acc4144ad" dependencies = [ "error-code", ] @@ -1065,7 +1065,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1082,7 +1082,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "quote", "syn 1.0.109", @@ -1115,6 +1115,7 @@ dependencies = [ "rust-embed", "serde", "shlex", + "slotmap", "smol_str", "tempfile", "test-log", @@ -1151,7 +1152,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "almost", "cosmic-config", @@ -1250,12 +1251,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad291aa74992b9b7a7e88c38acbbf6ad7e107f1d90ee8775b7bc1fc3394f485c" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -1295,7 +1296,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -1306,7 +1307,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -1357,7 +1358,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -1446,7 +1447,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -1474,7 +1475,7 @@ source = "git+https://github.com/pop-os/window_clipboard.git?tag=pop-dnd-4#6ca3c dependencies = [ "bitflags 2.5.0", "mime 0.1.0", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "smithay-client-toolkit 0.18.0", "smithay-clipboard", ] @@ -1495,7 +1496,7 @@ dependencies = [ "bytemuck", "drm-ffi", "drm-fourcc", - "rustix 0.38.32", + "rustix 0.38.34", ] [[package]] @@ -1505,7 +1506,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41334f8405792483e32ad05fbb9c5680ff4e84491883d2947a4757dc54cb2ac6" dependencies = [ "drm-sys", - "rustix 0.38.32", + "rustix 0.38.34", ] [[package]] @@ -1548,7 +1549,7 @@ checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -1881,7 +1882,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -2054,7 +2055,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -2287,7 +2288,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -2580,7 +2581,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.58", + "syn 2.0.60", "unic-langid", ] @@ -2594,7 +2595,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -2623,7 +2624,7 @@ dependencies = [ [[package]] name = "iced" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "dnd", "iced_accessibility", @@ -2641,7 +2642,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "accesskit", "accesskit_winit", @@ -2650,7 +2651,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "bitflags 2.5.0", "dnd", @@ -2658,7 +2659,7 @@ dependencies = [ "mime 0.1.0", "num-traits", "palette", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "serde", "smol_str", "thiserror", @@ -2670,7 +2671,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "futures", "iced_core", @@ -2683,7 +2684,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "bitflags 2.5.0", "bytemuck", @@ -2697,7 +2698,7 @@ dependencies = [ "log", "lyon_path", "once_cell", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "rustc-hash", "thiserror", "unicode-segmentation", @@ -2707,7 +2708,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2719,7 +2720,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "dnd", "iced_core", @@ -2731,7 +2732,7 @@ dependencies = [ [[package]] name = "iced_style" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "iced_core", "once_cell", @@ -2741,7 +2742,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "bytemuck", "cosmic-text", @@ -2758,7 +2759,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "bitflags 2.5.0", "bytemuck", @@ -2777,7 +2778,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "dnd", "iced_renderer", @@ -2793,7 +2794,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "dnd", "iced_graphics", @@ -2821,12 +2822,12 @@ dependencies = [ [[package]] name = "icrate" -version = "0.1.0" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e286f4b975ac6c054971a0600a9b76438b332edace54bff79c71c9d3adfc9772" +checksum = "3fb69199826926eb864697bddd27f73d9fddcffc004f5733131e15b465e30642" dependencies = [ "block2 0.4.0", - "objc2 0.5.0", + "objc2 0.5.1", ] [[package]] @@ -2987,9 +2988,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.30" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" dependencies = [ "libc", ] @@ -3119,7 +3120,7 @@ checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic.git#c5bd7cf28a67a6c0ce791e9d27f1593cf04c492c" +source = "git+https://github.com/pop-os/libcosmic.git#1adeadacf60c7f7381ec270710fcdab706d4175e" dependencies = [ "apply", "ashpd 0.7.0", @@ -3303,9 +3304,9 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c7c67b5bc8123b352b2e7e742b47d1f236a13fe77619433be9568fbd888e9c0" +checksum = "4470bd0b1f29eda66068ab1fd47719facda0a136b829bcca69287ed0ac40a134" dependencies = [ "float_next_after", "lyon_path", @@ -3458,7 +3459,7 @@ dependencies = [ "log", "ndk-sys", "num_enum", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "thiserror", ] @@ -3664,7 +3665,7 @@ dependencies = [ "proc-macro-crate 3.1.0", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -3699,9 +3700,9 @@ dependencies = [ [[package]] name = "objc-sys" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c71324e4180d0899963fc83d9d241ac39e699609fc1025a850aadac8257459" +checksum = "da284c198fb9b7b0603f8635185e85fbd5b64ee154b1ed406d489077de2d6d60" [[package]] name = "objc2" @@ -3715,12 +3716,12 @@ dependencies = [ [[package]] name = "objc2" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a9c7f0d511a4ce26b078183179dca908171cfc69f88986fe36c5138e1834476" +checksum = "b4b25e1034d0e636cd84707ccdaa9f81243d399196b8a773946dcffec0401659" dependencies = [ "objc-sys", - "objc2-encode 4.0.0", + "objc2-encode 4.0.1", ] [[package]] @@ -3731,9 +3732,9 @@ checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" [[package]] name = "objc2-encode" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ff06a6505cde0766484f38d8479ac8e6d31c66fbc2d5492f65ca8c091456379" +checksum = "88658da63e4cc2c8adb1262902cd6af51094df0488b760d6fd27194269c0950a" [[package]] name = "objc_exception" @@ -3835,7 +3836,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -3868,7 +3869,7 @@ checksum = "e8890702dbec0bad9116041ae586f84805b13eecd1d8b1df27c29998a9969d6d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -3985,7 +3986,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -4063,15 +4064,15 @@ dependencies = [ [[package]] name = "polling" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6" +checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3" dependencies = [ "cfg-if", "concurrent-queue", "hermit-abi", "pin-project-lite", - "rustix 0.38.32", + "rustix 0.38.34", "tracing", "windows-sys 0.52.0", ] @@ -4139,9 +4140,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" +checksum = "3d1597b0c024618f09a9c3b8655b7e430397a36d23fdafec26d6965e9eec3eba" dependencies = [ "unicode-ident", ] @@ -4235,9 +4236,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "raw-window-handle" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" +checksum = "8cc3bcbdb1ddfc11e700e62968e6b4cc9c75bb466464ad28fb61c5b2c964418b" [[package]] name = "rayon" @@ -4436,7 +4437,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.58", + "syn 2.0.60", "walkdir", ] @@ -4488,9 +4489,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.32" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ "bitflags 2.5.0", "errno", @@ -4579,22 +4580,22 @@ checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba" [[package]] name = "serde" -version = "1.0.197" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.197" +version = "1.0.198" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -4605,7 +4606,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -4647,9 +4648,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] @@ -4711,7 +4712,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 0.38.32", + "rustix 0.38.34", "thiserror", "wayland-backend", "wayland-client", @@ -4736,7 +4737,7 @@ dependencies = [ "libc", "log", "memmap2", - "rustix 0.38.32", + "rustix 0.38.34", "thiserror", "wayland-backend", "wayland-client", @@ -4754,7 +4755,7 @@ version = "0.8.0" source = "git+https://github.com/pop-os/smithay-clipboard?tag=pop-dnd-3#2f2430bec35f0adb9cb93e85e648ff8449d44dad" dependencies = [ "libc", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "smithay-client-toolkit 0.18.0", "wayland-backend", ] @@ -4805,9 +4806,9 @@ dependencies = [ "log", "memmap2", "objc", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "redox_syscall 0.4.1", - "rustix 0.38.32", + "rustix 0.38.34", "tiny-xlib", "wasm-bindgen", "wayland-backend", @@ -4897,9 +4898,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.58" +version = "2.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44cfb93f38070beee36b3fef7d4f5a16f27751d94b187b666a5cc5e9b0d30687" +checksum = "909518bc7b1c9b779f1bbf07f2929d35af9f0f37e47c6e9ef7f9dddc1e1821f3" dependencies = [ "proc-macro2", "quote", @@ -4959,7 +4960,7 @@ checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand 2.0.2", - "rustix 0.38.32", + "rustix 0.38.34", "windows-sys 0.52.0", ] @@ -4990,27 +4991,27 @@ checksum = "c8f546451eaa38373f549093fe9fd05e7d2bade739e2ddf834b9968621d60107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -5164,7 +5165,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.22.9", + "toml_edit 0.22.12", ] [[package]] @@ -5200,9 +5201,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.9" +version = "0.22.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e40bb779c5187258fd7aad0eb68cb8706a0a81fa712fbea808ab43c4b8374c4" +checksum = "d3328d4f68a705b2a4498da1d580585d39a6510f98318a2cec3018a7ec61ddef" dependencies = [ "indexmap", "serde", @@ -5230,7 +5231,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] @@ -5539,7 +5540,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", "wasm-bindgen-shared", ] @@ -5573,7 +5574,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5607,7 +5608,7 @@ checksum = "9d50fa61ce90d76474c87f5fc002828d81b32677340112b4ef08079a9d459a40" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.32", + "rustix 0.38.34", "scoped-tls", "smallvec", "wayland-sys", @@ -5620,7 +5621,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82fb96ee935c2cea6668ccb470fb7771f6215d1691746c2d896b447a00ad3f1f" dependencies = [ "bitflags 2.5.0", - "rustix 0.38.32", + "rustix 0.38.34", "wayland-backend", "wayland-scanner", ] @@ -5642,7 +5643,7 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71ce5fa868dd13d11a0d04c5e2e65726d0897be8de247c0c5a65886e283231ba" dependencies = [ - "rustix 0.38.32", + "rustix 0.38.34", "wayland-client", "xcursor", ] @@ -5747,7 +5748,7 @@ dependencies = [ "naga", "parking_lot 0.12.1", "profiling", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "smallvec", "static_assertions", "wasm-bindgen", @@ -5774,7 +5775,7 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "profiling", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "rustc-hash", "smallvec", "thiserror", @@ -5815,7 +5816,7 @@ dependencies = [ "parking_lot 0.12.1", "profiling", "range-alloc", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "renderdoc-sys", "rustc-hash", "smallvec", @@ -5884,7 +5885,7 @@ dependencies = [ "clipboard_x11", "dnd", "mime 0.1.0", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "thiserror", ] @@ -6180,9 +6181,9 @@ dependencies = [ "once_cell", "orbclient", "percent-encoding", - "raw-window-handle 0.6.0", + "raw-window-handle 0.6.1", "redox_syscall 0.3.5", - "rustix 0.38.32", + "rustix 0.38.34", "sctk-adwaita", "smithay-client-toolkit 0.18.1", "smol_str", @@ -6241,7 +6242,7 @@ dependencies = [ "libc", "libloading 0.8.3", "once_cell", - "rustix 0.38.32", + "rustix 0.38.34", "x11rb-protocol", ] @@ -6419,7 +6420,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.58", + "syn 2.0.60", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1a81774..077194b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,7 @@ i18n-embed = { version = "0.14", features = [ ] } i18n-embed-fl = "0.7" rust-embed = "8" +slotmap = "1.0.7" [dependencies.libcosmic] git = "https://github.com/pop-os/libcosmic.git" diff --git a/i18n/en/cosmic_files.ftl b/i18n/en/cosmic_files.ftl index 20b5d57..40a78c4 100644 --- a/i18n/en/cosmic_files.ftl +++ b/i18n/en/cosmic_files.ftl @@ -21,6 +21,8 @@ cancel = Cancel open = Open open-file = Open file open-folder = Open folder +open-in-new-tab = Open in new tab +open-in-new-window = Open in new window open-multiple-files = Open multiple files open-multiple-folders = Open multiple folders save = Save diff --git a/src/app.rs b/src/app.rs index c6960e3..ace4040 100644 --- a/src/app.rs +++ b/src/app.rs @@ -29,6 +29,7 @@ use notify_debouncer_full::{ notify::{self, RecommendedWatcher, Watcher}, DebouncedEvent, Debouncer, FileIdMap, }; +use slotmap::Key as SlotMapKey; use std::{ any::TypeId, collections::{BTreeMap, HashMap, HashSet, VecDeque}, @@ -121,7 +122,7 @@ impl MenuAction for Action { Action::OpenWith => Message::ToggleContextPage(ContextPage::OpenWith), Action::Operations => Message::ToggleContextPage(ContextPage::Operations), Action::Paste => Message::Paste(entity_opt), - Action::Properties => Message::ToggleContextPage(ContextPage::Properties), + Action::Properties => Message::ToggleContextPage(ContextPage::Properties(None)), Action::Rename => Message::Rename(entity_opt), Action::RestoreFromTrash => Message::RestoreFromTrash(entity_opt), Action::SelectAll => Message::TabMessage(entity_opt, tab::Message::SelectAll), @@ -144,6 +145,27 @@ impl MenuAction for Action { } } +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +enum ContextItem { + NavBar(segmented_button::Entity), + TabBar(segmented_button::Entity), +} + +#[derive(Copy, Clone, Debug, Eq, PartialEq)] +pub enum NavMenuAction { + OpenInNewTab(segmented_button::Entity), + OpenInNewWindow(segmented_button::Entity), + Properties(segmented_button::Entity), +} + +impl MenuAction for NavMenuAction { + type Message = cosmic::app::Message; + + fn message(&self, _entity: Option) -> Self::Message { + cosmic::app::Message::App(Message::NavMenuAction(*self)) + } +} + /// Messages that are used specifically by our [`App`]. #[derive(Clone, Debug)] pub enum Message { @@ -160,6 +182,8 @@ pub enum Message { Modifiers(Modifiers), MoveToTrash(Option), MounterItems(MounterKey, MounterItems), + NavBarContext(Entity), + NavMenuAction(NavMenuAction), NewItem(Option, bool), NotifyEvents(Vec), NotifyWatcher(WatcherWrapper), @@ -200,7 +224,7 @@ pub enum ContextPage { About, OpenWith, Operations, - Properties, + Properties(Option), Settings, } @@ -210,7 +234,7 @@ impl ContextPage { Self::About => String::new(), Self::OpenWith => fl!("open-with"), Self::Operations => fl!("operations"), - Self::Properties => fl!("properties"), + Self::Properties(..) => fl!("properties"), Self::Settings => fl!("settings"), } } @@ -259,6 +283,7 @@ impl PartialEq for WatcherWrapper { /// The [`App`] stores application-specific state. pub struct App { core: Core, + nav_bar_context_id: segmented_button::Entity, nav_model: segmented_button::SingleSelectModel, tab_model: segmented_button::Model, config_handler: Option, @@ -511,9 +536,35 @@ impl App { widget::settings::view_column(children).into() } - fn properties(&self) -> Element { + fn properties(&self, entity: Option) -> Element { + match entity { + None => self.tab_properties(self.tab_model.active()), + + Some(ContextItem::TabBar(entity)) => self.tab_properties(entity), + + Some(ContextItem::NavBar(item)) => { + let mut children = Vec::new(); + + if let Some(location) = self.nav_model.data::(item) { + if let Location::Path(path) = location { + let parent = path.parent().unwrap_or(path); + + for item in Location::Path(parent.to_owned()).scan(IconSizes::default()) { + if item.path_opt.as_deref() == Some(path) { + children.push(item.property_view(IconSizes::default())); + } + } + }; + } + + widget::settings::view_column(children).into() + } + } + } + + fn tab_properties(&self, entity: segmented_button::Entity) -> Element { let mut children = Vec::new(); - let entity = self.tab_model.active(); + if let Some(tab) = self.tab_model.data::(entity) { if let Some(items) = tab.items_opt() { for item in items.iter() { @@ -526,6 +577,7 @@ impl App { } } } + widget::settings::view_column(children).into() } @@ -672,16 +724,18 @@ impl Application for App { let nav_model = self.nav_model()?; - let mut nav = cosmic::widget::nav_bar_dnd( - nav_model, - |entity| cosmic::app::Message::Cosmic(cosmic::app::cosmic::Message::NavBar(entity)), - |entity, _| cosmic::app::Message::App(Message::DndEnterNav(entity)), - |_| cosmic::app::Message::App(Message::DndExitNav), - |entity, data, action| { - cosmic::app::Message::App(Message::DndDropNav(entity, data, action)) - }, - self.nav_drag_id, - ); + let mut nav = cosmic::widget::nav_bar(nav_model, |entity| { + cosmic::app::Message::Cosmic(cosmic::app::cosmic::Message::NavBar(entity)) + }) + .drag_id(self.nav_drag_id) + .on_dnd_enter(|entity, _| cosmic::app::Message::App(Message::DndEnterNav(entity))) + .on_dnd_leave(|_| cosmic::app::Message::App(Message::DndExitNav)) + .on_dnd_drop(|entity, data, action| { + cosmic::app::Message::App(Message::DndDropNav(entity, data, action)) + }) + .on_context(|entity| cosmic::app::Message::App(Message::NavBarContext(entity))) + .context_menu(self.nav_context_menu(self.nav_bar_context_id)) + .into_container(); if !self.core().is_condensed() { nav = nav.max_width(280); @@ -734,6 +788,7 @@ impl Application for App { let mut app = App { core, + nav_bar_context_id: segmented_button::Entity::null(), nav_model: nav_model.build(), tab_model: segmented_button::ModelBuilder::default().build(), config_handler: flags.config_handler, @@ -787,6 +842,30 @@ impl Application for App { (app, Command::batch(commands)) } + fn nav_context_menu( + &self, + id: widget::nav_bar::Id, + ) -> Option>>> { + Some(cosmic::widget::menu::items( + &HashMap::new(), + vec![ + cosmic::widget::menu::Item::Button( + fl!("open-in-new-tab"), + NavMenuAction::OpenInNewTab(id), + ), + cosmic::widget::menu::Item::Button( + fl!("open-in-new-window"), + NavMenuAction::OpenInNewWindow(id), + ), + cosmic::widget::menu::Item::Divider, + cosmic::widget::menu::Item::Button( + fl!("properties"), + NavMenuAction::Properties(id), + ), + ], + )) + } + fn nav_model(&self) -> Option<&segmented_button::SingleSelectModel> { Some(&self.nav_model) } @@ -1570,6 +1649,47 @@ impl Application for App { return self.update(Message::TabActivate(entity)); } } + + // Tracks which nav bar item to show a context menu for. + Message::NavBarContext(entity) => { + self.nav_bar_context_id = entity; + } + + // Applies selected nav bar context menu operation. + Message::NavMenuAction(action) => match action { + NavMenuAction::OpenInNewTab(entity) => { + match self.nav_model.data::(entity) { + Some(Location::Path(ref path)) => { + return self.open_tab(Location::Path(path.clone())); + } + _ => {} + } + } + + // Open the selected path in a new cosmic-files window. + NavMenuAction::OpenInNewWindow(entity) => { + if let Some(&Location::Path(ref path)) = self.nav_model.data::(entity) + { + match env::current_exe() { + Ok(exe) => match process::Command::new(&exe).arg(path).spawn() { + Ok(_child) => {} + Err(err) => { + log::error!("failed to execute {:?}: {}", exe, err); + } + }, + Err(err) => { + log::error!("failed to get current executable path: {}", err); + } + } + } + } + + NavMenuAction::Properties(entity) => { + self.context_page = ContextPage::Properties(Some(ContextItem::NavBar(entity))); + self.core.window.show_context = true; + self.set_context_title(self.context_page.title()); + } + }, } Command::none() @@ -1584,7 +1704,7 @@ impl Application for App { ContextPage::About => self.about(), ContextPage::OpenWith => self.open_with(), ContextPage::Operations => self.operations(), - ContextPage::Properties => self.properties(), + ContextPage::Properties(entity) => self.properties(entity), ContextPage::Settings => self.settings(), }) } diff --git a/src/menu.rs b/src/menu.rs index 51a511c..b233925 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -1,15 +1,12 @@ // SPDX-License-Identifier: GPL-3.0-only use cosmic::widget::menu::key_bind::KeyBind; -use cosmic::widget::menu::menu_tree::{menu_items, menu_root, MenuItem}; +use cosmic::widget::menu::{self, ItemHeight, ItemWidth, MenuBar}; use cosmic::{ //TODO: export iced::widget::horizontal_rule in cosmic::widget iced::{widget::horizontal_rule, Alignment, Background, Border, Length}, theme, - widget::{ - self, - menu::{ItemHeight, ItemWidth, MenuBar, MenuTree}, - }, + widget, Element, }; use std::collections::HashMap; @@ -173,53 +170,53 @@ pub fn context_menu<'a>( pub fn menu_bar<'a>(key_binds: &HashMap) -> Element<'a, Message> { MenuBar::new(vec![ - MenuTree::with_children( - menu_root(fl!("file")), - menu_items( + menu::Tree::with_children( + menu::root(fl!("file")), + menu::items( key_binds, vec![ - MenuItem::Button(fl!("new-tab"), Action::TabNew), - MenuItem::Button(fl!("new-window"), Action::WindowNew), - MenuItem::Button(fl!("new-file"), Action::NewFile), - MenuItem::Button(fl!("new-folder"), Action::NewFolder), - MenuItem::Button(fl!("open"), Action::Open), - MenuItem::Divider, - MenuItem::Button(fl!("rename"), Action::Rename), + menu::Item::Button(fl!("new-tab"), Action::TabNew), + menu::Item::Button(fl!("new-window"), Action::WindowNew), + menu::Item::Button(fl!("new-file"), Action::NewFile), + menu::Item::Button(fl!("new-folder"), Action::NewFolder), + menu::Item::Button(fl!("open"), Action::Open), + menu::Item::Divider, + menu::Item::Button(fl!("rename"), Action::Rename), //TOOD: add to sidebar, then divider - MenuItem::Divider, - MenuItem::Button(fl!("move-to-trash"), Action::MoveToTrash), - MenuItem::Divider, - MenuItem::Button(fl!("close-tab"), Action::TabClose), - MenuItem::Button(fl!("quit"), Action::WindowClose), + menu::Item::Divider, + menu::Item::Button(fl!("move-to-trash"), Action::MoveToTrash), + menu::Item::Divider, + menu::Item::Button(fl!("close-tab"), Action::TabClose), + menu::Item::Button(fl!("quit"), Action::WindowClose), ], ), ), - MenuTree::with_children( - menu_root(fl!("edit")), - menu_items( + menu::Tree::with_children( + menu::root(fl!("edit")), + menu::items( key_binds, vec![ - MenuItem::Button(fl!("cut"), Action::Cut), - MenuItem::Button(fl!("copy"), Action::Copy), - MenuItem::Button(fl!("paste"), Action::Paste), - MenuItem::Button(fl!("select-all"), Action::SelectAll), - MenuItem::Divider, + menu::Item::Button(fl!("cut"), Action::Cut), + menu::Item::Button(fl!("copy"), Action::Copy), + menu::Item::Button(fl!("paste"), Action::Paste), + menu::Item::Button(fl!("select-all"), Action::SelectAll), + menu::Item::Divider, //TODO: edit history - MenuItem::Button(fl!("operations"), Action::Operations), + menu::Item::Button(fl!("operations"), Action::Operations), ], ), ), - MenuTree::with_children( - menu_root(fl!("view")), - menu_items( + menu::Tree::with_children( + menu::root(fl!("view")), + menu::items( key_binds, vec![ - MenuItem::Button(fl!("grid-view"), Action::TabViewGrid), - MenuItem::Button(fl!("list-view"), Action::TabViewList), - MenuItem::Divider, - MenuItem::Button(fl!("menu-settings"), Action::Settings), - MenuItem::Divider, - MenuItem::Button(fl!("menu-about"), Action::About), + menu::Item::Button(fl!("grid-view"), Action::TabViewGrid), + menu::Item::Button(fl!("list-view"), Action::TabViewList), + menu::Item::Divider, + menu::Item::Button(fl!("menu-settings"), Action::Settings), + menu::Item::Divider, + menu::Item::Button(fl!("menu-about"), Action::About), ], ), ), diff --git a/src/tab.rs b/src/tab.rs index d057d68..962d1b2 100644 --- a/src/tab.rs +++ b/src/tab.rs @@ -523,7 +523,7 @@ pub struct Item { } impl Item { - fn preview(&self, sizes: IconSizes) -> Element { + fn preview(&self, sizes: IconSizes) -> Element<'static, app::Message> { // This loads the image only if thumbnailing worked let icon = widget::icon::icon(self.icon_handle_grid.clone()) .content_fit(ContentFit::Contain) @@ -598,7 +598,7 @@ impl Item { column.into() } - pub fn property_view(&self, sizes: IconSizes) -> Element { + pub fn property_view(&self, sizes: IconSizes) -> Element<'static, app::Message> { let cosmic_theme::Spacing { space_xxxs, .. } = theme::active().cosmic().spacing; let mut column = widget::column().spacing(space_xxxs);