feat: make ContextDrawer model accessible to pages
This commit is contained in:
parent
bb41b4985e
commit
45f1183d92
24 changed files with 210 additions and 223 deletions
156
Cargo.lock
generated
156
Cargo.lock
generated
|
|
@ -1175,9 +1175,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.36"
|
||||
version = "4.5.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04"
|
||||
checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
|
@ -1185,9 +1185,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.36"
|
||||
version = "4.5.37"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5"
|
||||
checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
|
@ -1522,7 +1522,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-config"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"atomicwrites",
|
||||
"cosmic-config-derive",
|
||||
|
|
@ -1544,7 +1544,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-config-derive"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
|
|
@ -1600,7 +1600,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-panel-config"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-panel#72581ce21346d85007e44ce43ae48c6ea92b5f61"
|
||||
source = "git+https://github.com/pop-os/cosmic-panel#307a75c9338a28870193ff8e01e5cad9b0a9ccb1"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"cosmic-config",
|
||||
|
|
@ -1689,7 +1689,7 @@ dependencies = [
|
|||
"downcast-rs",
|
||||
"eyre",
|
||||
"fixed_decimal",
|
||||
"fontdb 0.16.2",
|
||||
"fontdb 0.23.0",
|
||||
"freedesktop-desktop-entry",
|
||||
"futures",
|
||||
"gettext-rs",
|
||||
|
|
@ -1839,10 +1839,10 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-text"
|
||||
version = "0.14.2"
|
||||
source = "git+https://github.com/pop-os/cosmic-text.git#9e7a56f083db15f67510df4396351464df2e64bd"
|
||||
source = "git+https://github.com/pop-os/cosmic-text.git#b017d7c856aed4b1a3ef0952df75d02d889a1f7b"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"fontdb 0.16.2",
|
||||
"fontdb 0.23.0",
|
||||
"log",
|
||||
"rangemap",
|
||||
"rustc-hash 1.1.0",
|
||||
|
|
@ -1861,7 +1861,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cosmic-theme"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"almost",
|
||||
"cosmic-config",
|
||||
|
|
@ -2628,20 +2628,6 @@ dependencies = [
|
|||
"roxmltree",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fontdb"
|
||||
version = "0.16.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3"
|
||||
dependencies = [
|
||||
"fontconfig-parser",
|
||||
"log",
|
||||
"memmap2 0.9.5",
|
||||
"slotmap",
|
||||
"tinyvec",
|
||||
"ttf-parser 0.20.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fontdb"
|
||||
version = "0.18.0"
|
||||
|
|
@ -2656,6 +2642,20 @@ dependencies = [
|
|||
"ttf-parser 0.21.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fontdb"
|
||||
version = "0.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "457e789b3d1202543297a350643cf459f836cade38934e7a4cf6a39e7cde2905"
|
||||
dependencies = [
|
||||
"fontconfig-parser",
|
||||
"log",
|
||||
"memmap2 0.9.5",
|
||||
"slotmap",
|
||||
"tinyvec",
|
||||
"ttf-parser 0.25.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.5.0"
|
||||
|
|
@ -3235,7 +3235,7 @@ dependencies = [
|
|||
"js-sys",
|
||||
"log",
|
||||
"wasm-bindgen",
|
||||
"windows-core 0.61.0",
|
||||
"windows-core 0.57.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
@ -3250,7 +3250,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"dnd",
|
||||
"iced_accessibility",
|
||||
|
|
@ -3268,7 +3268,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_accessibility"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"accesskit",
|
||||
"accesskit_winit",
|
||||
|
|
@ -3277,7 +3277,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_core"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"bytes",
|
||||
|
|
@ -3302,7 +3302,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_futures"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"iced_core",
|
||||
|
|
@ -3328,7 +3328,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_graphics"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"bytemuck",
|
||||
|
|
@ -3350,7 +3350,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_renderer"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"iced_graphics",
|
||||
"iced_tiny_skia",
|
||||
|
|
@ -3362,7 +3362,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_runtime"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"cosmic-client-toolkit",
|
||||
|
|
@ -3378,7 +3378,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_tiny_skia"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"bytemuck",
|
||||
"cosmic-text",
|
||||
|
|
@ -3394,7 +3394,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_wgpu"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"as-raw-xcb-connection",
|
||||
"bitflags 2.9.0",
|
||||
|
|
@ -3425,7 +3425,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_widget"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"cosmic-client-toolkit",
|
||||
"dnd",
|
||||
|
|
@ -3444,7 +3444,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "iced_winit"
|
||||
version = "0.14.0-dev"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"cosmic-client-toolkit",
|
||||
"dnd",
|
||||
|
|
@ -4471,7 +4471,7 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
|
|||
[[package]]
|
||||
name = "libcosmic"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/libcosmic#1abd6d75786697b48e1d5922717febd0ebeb48ac"
|
||||
source = "git+https://github.com/pop-os/libcosmic#7aadfe6ba627236173405144c4deb4bdcff8208c"
|
||||
dependencies = [
|
||||
"apply",
|
||||
"ashpd 0.9.2",
|
||||
|
|
@ -4539,9 +4539,9 @@ checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
|
|||
|
||||
[[package]]
|
||||
name = "libpulse-binding"
|
||||
version = "2.29.0"
|
||||
version = "2.30.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "441092fb2d05962d74246a00c1b2f8c87c60fb6b38a5cc42227c229a702c0ce5"
|
||||
checksum = "909eb3049e16e373680fe65afe6e2a722ace06b671250cc4849557bc57d6a397"
|
||||
dependencies = [
|
||||
"bitflags 2.9.0",
|
||||
"libc",
|
||||
|
|
@ -4553,9 +4553,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "libpulse-sys"
|
||||
version = "1.22.0"
|
||||
version = "1.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8febf45075a6ac7e36d0c7aa62536217f476f24456854cdad296952852b5cd2"
|
||||
checksum = "d74371848b22e989f829cc1621d2ebd74960711557d8b45cfe740f60d0a05e61"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"num-derive",
|
||||
|
|
@ -6778,9 +6778,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
|
|||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.2"
|
||||
version = "1.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
|
||||
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
|
@ -7527,12 +7527,6 @@ dependencies = [
|
|||
"tracing-log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ttf-parser"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
|
||||
|
||||
[[package]]
|
||||
name = "ttf-parser"
|
||||
version = "0.21.1"
|
||||
|
|
@ -7544,6 +7538,9 @@ name = "ttf-parser"
|
|||
version = "0.25.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
|
||||
dependencies = [
|
||||
"core_maths",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "type-map"
|
||||
|
|
@ -8269,7 +8266,7 @@ version = "0.54.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65"
|
||||
dependencies = [
|
||||
"windows-result 0.1.2",
|
||||
"windows-result",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
|
|
@ -8281,23 +8278,10 @@ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
|
|||
dependencies = [
|
||||
"windows-implement 0.57.0",
|
||||
"windows-interface 0.57.0",
|
||||
"windows-result 0.1.2",
|
||||
"windows-result",
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-core"
|
||||
version = "0.61.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
|
||||
dependencies = [
|
||||
"windows-implement 0.60.0",
|
||||
"windows-interface 0.59.1",
|
||||
"windows-link",
|
||||
"windows-result 0.3.2",
|
||||
"windows-strings",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-implement"
|
||||
version = "0.53.0"
|
||||
|
|
@ -8320,17 +8304,6 @@ dependencies = [
|
|||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-implement"
|
||||
version = "0.60.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-interface"
|
||||
version = "0.53.0"
|
||||
|
|
@ -8353,17 +8326,6 @@ dependencies = [
|
|||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-interface"
|
||||
version = "0.59.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.100",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.1.1"
|
||||
|
|
@ -8379,24 +8341,6 @@ dependencies = [
|
|||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-result"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-strings"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.45.0"
|
||||
|
|
@ -8779,7 +8723,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "xdg-shell-wrapper-config"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/pop-os/cosmic-panel#72581ce21346d85007e44ce43ae48c6ea92b5f61"
|
||||
source = "git+https://github.com/pop-os/cosmic-panel#307a75c9338a28870193ff8e01e5cad9b0a9ccb1"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"wayland-protocols-wlr",
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ zbus = { version = "4.4.0", default-features = false, features = [
|
|||
"tokio",
|
||||
], optional = true }
|
||||
zbus_polkit = { version = "4.0.0", optional = true }
|
||||
fontdb = "=0.16.2"
|
||||
fontdb = "0.23.0"
|
||||
fixed_decimal = "0.5.6"
|
||||
mime = "0.3.17"
|
||||
rustix = { version = "1.0.3", features = ["process"] }
|
||||
|
|
|
|||
|
|
@ -146,7 +146,6 @@ impl SettingsApp {
|
|||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum Message {
|
||||
CloseContextDrawer,
|
||||
#[cfg(feature = "wayland")]
|
||||
DesktopInfo,
|
||||
Error(String),
|
||||
|
|
@ -370,6 +369,8 @@ impl cosmic::Application for SettingsApp {
|
|||
}
|
||||
|
||||
Message::PageMessage(message) => match message {
|
||||
crate::pages::Message::CloseContextDrawer => return self.close_context_drawer(),
|
||||
|
||||
#[cfg(feature = "page-accessibility")]
|
||||
crate::pages::Message::Accessibility(message) => {
|
||||
if let Some(page) = self.pages.page_mut::<accessibility::Page>() {
|
||||
|
|
@ -761,8 +762,6 @@ impl cosmic::Application for SettingsApp {
|
|||
self.context_title = Some(title.to_string());
|
||||
}
|
||||
|
||||
Message::CloseContextDrawer => return self.close_context_drawer(),
|
||||
|
||||
Message::Error(error) => {
|
||||
tracing::error!(error, "error occurred");
|
||||
}
|
||||
|
|
@ -814,10 +813,9 @@ impl cosmic::Application for SettingsApp {
|
|||
if self.core.window.show_context {
|
||||
self.active_context_page.and_then(|context_page| {
|
||||
self.pages.context_drawer(context_page).map(|cd| {
|
||||
let cd = cosmic::app::context_drawer::context_drawer(
|
||||
cd.map(Message::PageMessage),
|
||||
Message::CloseContextDrawer,
|
||||
);
|
||||
let cd = cd.map(Message::from);
|
||||
|
||||
// TODO: The page should handle this?
|
||||
if let Some(title) = self.context_title.as_ref() {
|
||||
cd.title(title)
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::iced::{Alignment, Length};
|
||||
use cosmic::widget::{button, icon, settings, text};
|
||||
use cosmic::{Apply, Element, Task, widget};
|
||||
|
|
@ -43,14 +44,13 @@ impl Default for Page {
|
|||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum Message {
|
||||
ShowApplicationSidebar(DirectoryType),
|
||||
UpdateStartupApplications(CachedApps),
|
||||
UpdateApplications(CachedApps),
|
||||
|
||||
ApplicationSearch(String),
|
||||
AddStartupApplication(DirectoryType, DesktopEntry),
|
||||
RemoveStartupApplication(DirectoryType, DesktopEntry, bool),
|
||||
ApplicationSearch(String),
|
||||
CancelRemoveStartupApplication,
|
||||
RemoveStartupApplication(DirectoryType, DesktopEntry, bool),
|
||||
ShowApplicationSidebar(DirectoryType),
|
||||
UpdateApplications(CachedApps),
|
||||
UpdateStartupApplications(CachedApps),
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq, Hash)]
|
||||
|
|
@ -110,11 +110,13 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(vec![sections.insert(apps())])
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<crate::pages::Message>> {
|
||||
match &self.context {
|
||||
Some(Context::AddApplication(directory_type)) => {
|
||||
Some(self.add_application_context_view(directory_type.clone()))
|
||||
}
|
||||
Some(Context::AddApplication(directory_type)) => Some(cosmic::app::context_drawer(
|
||||
self.add_application_context_view(directory_type.clone())
|
||||
.map(crate::pages::Message::from),
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
)),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ pub mod icon_themes;
|
|||
use std::borrow::Cow;
|
||||
use std::sync::Arc;
|
||||
|
||||
use cosmic::app::ContextDrawer;
|
||||
//TODO: use embedded cosmic-files for portability
|
||||
use cosmic::config::CosmicTk;
|
||||
use cosmic::cosmic_config::{Config, ConfigSet, CosmicConfigEntry};
|
||||
|
|
@ -1342,7 +1343,7 @@ impl Page {
|
|||
let task = match message {
|
||||
ColorPickerUpdate::AppliedColor | ColorPickerUpdate::Reset => {
|
||||
needs_update = true;
|
||||
cosmic::task::message(crate::app::Message::CloseContextDrawer)
|
||||
cosmic::task::message(crate::pages::Message::CloseContextDrawer)
|
||||
}
|
||||
|
||||
ColorPickerUpdate::ActionFinished => {
|
||||
|
|
@ -1351,7 +1352,7 @@ impl Page {
|
|||
}
|
||||
|
||||
ColorPickerUpdate::Cancel => {
|
||||
cosmic::task::message(crate::app::Message::CloseContextDrawer)
|
||||
cosmic::task::message(crate::pages::Message::CloseContextDrawer)
|
||||
}
|
||||
|
||||
ColorPickerUpdate::ToggleColorPicker => {
|
||||
|
|
@ -1621,7 +1622,7 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
cosmic::task::message(crate::pages::Message::Appearance(Message::Left))
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
let view = match self.context_view? {
|
||||
ContextView::AccentWindowHint => color_picker_context_view(
|
||||
None,
|
||||
|
|
@ -1710,7 +1711,10 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
ContextView::IconsAndToolkit => self.icons_and_toolkit(),
|
||||
};
|
||||
|
||||
Some(view)
|
||||
Some(cosmic::app::context_drawer(
|
||||
view,
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use cosmic::{
|
||||
Apply, Element, Task,
|
||||
app::ContextDrawer,
|
||||
cosmic_config::CosmicConfigEntry,
|
||||
iced::{Alignment, Length},
|
||||
widget::{button, container, row},
|
||||
|
|
@ -13,7 +14,7 @@ use crate::{
|
|||
app,
|
||||
pages::{
|
||||
self,
|
||||
desktop::panel::applets_inner::{self, AppletsPage, ContextDrawer, lists},
|
||||
desktop::panel::applets_inner::{self, AppletsPage, ContextDrawerVariant, lists},
|
||||
},
|
||||
};
|
||||
|
||||
|
|
@ -98,14 +99,17 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(content)
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<crate::pages::Message>> {
|
||||
Some(match self.inner.context {
|
||||
Some(ContextDrawer::AddApplet) => self
|
||||
.inner
|
||||
.add_applet_view(|msg| crate::pages::Message::DockApplet(Message(msg))),
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<crate::pages::Message>> {
|
||||
Some(cosmic::app::context_drawer(
|
||||
match self.inner.context {
|
||||
Some(ContextDrawerVariant::AddApplet) => self
|
||||
.inner
|
||||
.add_applet_view(|msg| crate::pages::Message::DockApplet(Message(msg))),
|
||||
|
||||
None => return None,
|
||||
})
|
||||
None => return None,
|
||||
},
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
))
|
||||
}
|
||||
|
||||
fn set_id(&mut self, entity: cosmic_settings_page::Entity) {
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::iced::Vector;
|
||||
use cosmic::iced::clipboard::dnd::{
|
||||
DndAction, DndDestinationRectangle, DndEvent, OfferEvent, SourceEvent,
|
||||
|
|
@ -56,7 +57,7 @@ pub struct Page {
|
|||
pub(crate) current_config: Option<CosmicPanelConfig>,
|
||||
pub(crate) reorder_widget_state: Option<(Applet<'static>, CosmicPanelConfig)>,
|
||||
pub(crate) search: String,
|
||||
pub(crate) context: Option<ContextDrawer>,
|
||||
pub(crate) context: Option<ContextDrawerVariant>,
|
||||
}
|
||||
|
||||
impl Default for Page {
|
||||
|
|
@ -132,14 +133,17 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(content)
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<pages::Message>> {
|
||||
Some(match self.context {
|
||||
Some(ContextDrawer::AddApplet) => {
|
||||
self.add_applet_view(crate::pages::Message::PanelApplet)
|
||||
}
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<pages::Message>> {
|
||||
Some(cosmic::app::context_drawer(
|
||||
match self.context {
|
||||
Some(ContextDrawerVariant::AddApplet) => {
|
||||
self.add_applet_view(crate::pages::Message::PanelApplet)
|
||||
}
|
||||
|
||||
None => return None,
|
||||
})
|
||||
None => return None,
|
||||
},
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
))
|
||||
}
|
||||
|
||||
fn on_enter(&mut self) -> Task<crate::pages::Message> {
|
||||
|
|
@ -196,7 +200,7 @@ impl Debug for Message {
|
|||
}
|
||||
}
|
||||
|
||||
pub enum ContextDrawer {
|
||||
pub enum ContextDrawerVariant {
|
||||
AddApplet,
|
||||
}
|
||||
|
||||
|
|
@ -416,7 +420,7 @@ impl Page {
|
|||
self.save();
|
||||
}
|
||||
Message::AddAppletDrawer => {
|
||||
self.context = Some(ContextDrawer::AddApplet);
|
||||
self.context = Some(ContextDrawerVariant::AddApplet);
|
||||
return cosmic::task::message(app::Message::OpenContextDrawer(
|
||||
self.entity,
|
||||
Cow::Owned(fl!("add-applet")),
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ use std::{
|
|||
|
||||
#[cfg(feature = "xdg-portal")]
|
||||
use cosmic::dialog::file_chooser;
|
||||
use cosmic::iced_runtime::core::image::Handle as ImageHandle;
|
||||
use cosmic::widget::{
|
||||
button, dropdown, list_column, row,
|
||||
segmented_button::{self, SingleSelectModel},
|
||||
|
|
@ -26,6 +25,7 @@ use cosmic::{
|
|||
Apply, Element, Task,
|
||||
widget::{ColorPickerModel, color_picker::ColorPickerUpdate, icon},
|
||||
};
|
||||
use cosmic::{app::ContextDrawer, iced_runtime::core::image::Handle as ImageHandle};
|
||||
use cosmic::{
|
||||
iced::{Alignment, Color, Length, window},
|
||||
surface,
|
||||
|
|
@ -276,15 +276,20 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Task::none()
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
self.context_view.map(|view| match view {
|
||||
ContextView::AddColor => crate::widget::color_picker_context_view(
|
||||
None,
|
||||
fl!("reset-to-default").into(),
|
||||
Message::ColorAdd,
|
||||
&self.color_model,
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.context_view.map(|view| {
|
||||
cosmic::app::context_drawer(
|
||||
match view {
|
||||
ContextView::AddColor => crate::widget::color_picker_context_view(
|
||||
None,
|
||||
fl!("reset-to-default").into(),
|
||||
Message::ColorAdd,
|
||||
&self.color_model,
|
||||
)
|
||||
.map(crate::pages::Message::DesktopWallpaper),
|
||||
},
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
)
|
||||
.map(crate::pages::Message::DesktopWallpaper),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ use std::cmp;
|
|||
|
||||
use cosmic::{
|
||||
Apply, Element, Task,
|
||||
app::ContextDrawer,
|
||||
cosmic_config::{self, ConfigSet},
|
||||
iced::{Alignment, Color, Length},
|
||||
iced_core::Border,
|
||||
|
|
@ -296,20 +297,21 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
.description(fl!("keyboard", "desc"))
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
match self.context {
|
||||
Some(Context::ShowInputSourcesContext) => Some(self.add_input_source_view()),
|
||||
Some(Context::SpecialCharacter(special_key)) => self
|
||||
.special_character_key_view(special_key)
|
||||
.map(crate::pages::Message::Keyboard)
|
||||
.apply(Some),
|
||||
Some(Context::NumlockState) => self
|
||||
.numlock_state_view()
|
||||
.map(crate::pages::Message::Keyboard)
|
||||
.apply(Some),
|
||||
|
||||
None => None,
|
||||
}
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.context.as_ref().map(|context| {
|
||||
cosmic::app::context_drawer(
|
||||
match context {
|
||||
Context::ShowInputSourcesContext => self.add_input_source_view(),
|
||||
Context::SpecialCharacter(special_key) => self
|
||||
.special_character_key_view(*special_key)
|
||||
.map(crate::pages::Message::Keyboard),
|
||||
Context::NumlockState => self
|
||||
.numlock_state_view()
|
||||
.map(crate::pages::Message::Keyboard),
|
||||
},
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
fn on_enter(&mut self) -> Task<crate::pages::Message> {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright 2024 System76 <info@system76.com>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::iced::{Alignment, Length};
|
||||
use cosmic::widget::{self, button, icon, settings, text};
|
||||
use cosmic::{Apply, Element, Task, theme};
|
||||
|
|
@ -168,15 +169,22 @@ impl Model {
|
|||
self.shortcuts_config_set(shortcuts);
|
||||
}
|
||||
|
||||
pub(super) fn context_drawer(&self) -> Option<Element<'_, ShortcutMessage>> {
|
||||
pub(super) fn context_drawer(
|
||||
&self,
|
||||
apply: fn(ShortcutMessage) -> crate::pages::Message,
|
||||
) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.shortcut_context.as_ref().map(|id| {
|
||||
context_drawer(
|
||||
&self.shortcut_title,
|
||||
&self.shortcut_models,
|
||||
self.editing,
|
||||
self.add_keybindings_button_id.clone(),
|
||||
*id,
|
||||
self.custom,
|
||||
cosmic::app::context_drawer(
|
||||
context_drawer(
|
||||
&self.shortcut_title,
|
||||
&self.shortcut_models,
|
||||
self.editing,
|
||||
self.add_keybindings_button_id.clone(),
|
||||
*id,
|
||||
self.custom,
|
||||
)
|
||||
.map(apply),
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ use std::str::FromStr;
|
|||
|
||||
use super::{ShortcutBinding, ShortcutMessage, ShortcutModel};
|
||||
|
||||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::iced::{Alignment, Length};
|
||||
use cosmic::widget::{self, button, icon};
|
||||
use cosmic::{Apply, Element, Task};
|
||||
|
|
@ -360,15 +361,18 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
.map(|el| el.map(|m| crate::pages::Message::CustomShortcuts(Message::Shortcut(m))))
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
if self.add_shortcut.active {
|
||||
Some(self.add_keybinding_context())
|
||||
Some(cosmic::app::context_drawer(
|
||||
self.add_keybinding_context()
|
||||
.map(crate::pages::Message::CustomShortcuts),
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
))
|
||||
} else {
|
||||
self.model
|
||||
.context_drawer()
|
||||
.map(|el| el.map(Message::Shortcut))
|
||||
self.model.context_drawer(|msg| {
|
||||
crate::pages::Message::CustomShortcuts(Message::Shortcut(msg))
|
||||
})
|
||||
}
|
||||
.map(|el| el.map(crate::pages::Message::CustomShortcuts))
|
||||
}
|
||||
|
||||
fn on_context_drawer_close(&mut self) -> Task<crate::pages::Message> {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use super::{ShortcutMessage, ShortcutModel};
|
||||
use cosmic::{Element, Task};
|
||||
use cosmic::{Element, Task, app::ContextDrawer};
|
||||
use cosmic_settings_config::shortcuts::Action;
|
||||
use cosmic_settings_config::shortcuts::action::ResizeDirection;
|
||||
use cosmic_settings_page::{self as page, Section, section};
|
||||
|
|
@ -47,10 +47,9 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(vec![sections.insert(shortcuts())])
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.model
|
||||
.context_drawer()
|
||||
.map(|el| el.map(crate::pages::Message::ManageWindowShortcuts))
|
||||
.context_drawer(crate::pages::Message::ManageWindowShortcuts)
|
||||
}
|
||||
|
||||
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ pub mod nav;
|
|||
pub mod system;
|
||||
pub mod tiling;
|
||||
|
||||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::iced::Length;
|
||||
use cosmic::widget::{self, icon, settings, text};
|
||||
use cosmic::{Apply, Element, Task, theme};
|
||||
|
|
@ -122,12 +123,12 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
.description(fl!("keyboard-shortcuts", "desc"))
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
if self.search_model.shortcut_models.is_empty() {
|
||||
None
|
||||
} else {
|
||||
self.search_model.context_drawer().map(|el| {
|
||||
el.map(|msg| crate::pages::Message::KeyboardShortcuts(Message::SearchShortcut(msg)))
|
||||
self.search_model.context_drawer(|msg| {
|
||||
crate::pages::Message::KeyboardShortcuts(Message::SearchShortcut(msg))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
//
|
||||
use super::{ShortcutMessage, ShortcutModel};
|
||||
use cosmic::{Element, Task};
|
||||
use cosmic::{Element, Task, app::ContextDrawer};
|
||||
use cosmic_settings_config::shortcuts::Action;
|
||||
use cosmic_settings_config::shortcuts::action::Direction;
|
||||
use cosmic_settings_page::{self as page, Section, section};
|
||||
|
|
@ -47,10 +47,9 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(vec![sections.insert(shortcuts())])
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.model
|
||||
.context_drawer()
|
||||
.map(|el| el.map(crate::pages::Message::MoveWindowShortcuts))
|
||||
.context_drawer(crate::pages::Message::MoveWindowShortcuts)
|
||||
}
|
||||
|
||||
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use super::{ShortcutMessage, ShortcutModel};
|
||||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::{Element, Task};
|
||||
use cosmic_settings_config::shortcuts::Action;
|
||||
use cosmic_settings_config::shortcuts::action::{Direction, FocusDirection};
|
||||
|
|
@ -47,10 +48,9 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(vec![sections.insert(shortcuts())])
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.model
|
||||
.context_drawer()
|
||||
.map(|el| el.map(crate::pages::Message::NavShortcuts))
|
||||
.context_drawer(crate::pages::Message::NavShortcuts)
|
||||
}
|
||||
|
||||
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use super::{ShortcutMessage, ShortcutModel};
|
||||
use cosmic::{Element, Task};
|
||||
use cosmic::{Element, Task, app::ContextDrawer};
|
||||
use cosmic_settings_config::shortcuts::Action;
|
||||
use cosmic_settings_config::shortcuts::action::System as SystemAction;
|
||||
use cosmic_settings_page::{self as page, Section, section};
|
||||
|
|
@ -47,10 +47,9 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(vec![sections.insert(shortcuts())])
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.model
|
||||
.context_drawer()
|
||||
.map(|el| el.map(crate::pages::Message::SystemShortcuts))
|
||||
.context_drawer(crate::pages::Message::SystemShortcuts)
|
||||
}
|
||||
|
||||
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use super::{ShortcutMessage, ShortcutModel};
|
||||
use cosmic::{Element, Task};
|
||||
use cosmic::{Element, Task, app::ContextDrawer};
|
||||
use cosmic_settings_config::shortcuts::Action;
|
||||
use cosmic_settings_config::shortcuts::action::Orientation;
|
||||
use cosmic_settings_page::{self as page, Section, section};
|
||||
|
|
@ -47,10 +47,9 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
Some(vec![sections.insert(shortcuts())])
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
self.model
|
||||
.context_drawer()
|
||||
.map(|el| el.map(crate::pages::Message::TilingShortcuts))
|
||||
.context_drawer(crate::pages::Message::TilingShortcuts)
|
||||
}
|
||||
|
||||
fn dialog(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ pub mod time;
|
|||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum Message {
|
||||
// Page-specific messages
|
||||
#[cfg(feature = "page-accessibility")]
|
||||
Accessibility(accessibility::Message),
|
||||
#[cfg(feature = "page-accessibility")]
|
||||
|
|
@ -96,6 +97,9 @@ pub enum Message {
|
|||
WindowManagement(desktop::window_management::Message),
|
||||
#[cfg(feature = "page-networking")]
|
||||
Wired(networking::wired::Message),
|
||||
|
||||
// Common page functionality
|
||||
CloseContextDrawer,
|
||||
}
|
||||
|
||||
impl From<Message> for crate::Message {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ use std::str::FromStr;
|
|||
use chrono::{Datelike, Timelike};
|
||||
use cosmic::{
|
||||
Apply, Element, Task,
|
||||
app::ContextDrawer,
|
||||
cosmic_config::{self, ConfigGet, ConfigSet},
|
||||
iced_core::text::Wrapping,
|
||||
surface,
|
||||
|
|
@ -165,9 +166,13 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
.map(crate::pages::Message::DateAndTime)
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<crate::pages::Message>> {
|
||||
if self.timezone_context {
|
||||
return Some(self.timezone_context_view());
|
||||
return Some(cosmic::app::context_drawer(
|
||||
self.timezone_context_view()
|
||||
.map(crate::pages::Message::from),
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
));
|
||||
}
|
||||
|
||||
None
|
||||
|
|
@ -259,14 +264,14 @@ impl Page {
|
|||
Message::Error(why) => {
|
||||
tracing::error!(why, "failed to set timezone");
|
||||
self.timezone_context = false;
|
||||
return cosmic::task::message(crate::Message::CloseContextDrawer);
|
||||
return cosmic::task::message(crate::pages::Message::CloseContextDrawer);
|
||||
}
|
||||
|
||||
Message::UpdateTime => {
|
||||
self.set_ntp(true);
|
||||
self.update_local_time();
|
||||
self.timezone_context = false;
|
||||
return cosmic::task::message(crate::Message::CloseContextDrawer);
|
||||
return cosmic::task::message(crate::pages::Message::CloseContextDrawer);
|
||||
}
|
||||
|
||||
Message::Refresh(info) => {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ use std::rc::Rc;
|
|||
use std::str::FromStr;
|
||||
use std::sync::Arc;
|
||||
|
||||
use cosmic::app::ContextDrawer;
|
||||
use cosmic::iced::{Alignment, Border, Color, Length};
|
||||
use cosmic::iced_core::text::Wrapping;
|
||||
use cosmic::widget::{self, button, container};
|
||||
|
|
@ -152,11 +153,15 @@ impl page::Page<crate::pages::Message> for Page {
|
|||
cosmic::Task::none()
|
||||
}
|
||||
|
||||
fn context_drawer(&self) -> Option<Element<'_, crate::pages::Message>> {
|
||||
Some(match self.context.as_ref()? {
|
||||
ContextView::AddLanguage => self.add_language_view(),
|
||||
ContextView::Region => self.region_view(),
|
||||
})
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, crate::pages::Message>> {
|
||||
Some(cosmic::app::context_drawer(
|
||||
match self.context.as_ref()? {
|
||||
ContextView::AddLanguage => self.add_language_view(),
|
||||
ContextView::Region => self.region_view(),
|
||||
}
|
||||
.map(crate::pages::Message::from),
|
||||
crate::pages::Message::CloseContextDrawer,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ use crate::section::{self, Section};
|
|||
use crate::{Content, Info, Page};
|
||||
use cosmic::Element;
|
||||
use cosmic::Task;
|
||||
use cosmic::app::ContextDrawer;
|
||||
use regex::Regex;
|
||||
use slotmap::{SecondaryMap, SlotMap, SparseSecondaryMap};
|
||||
use std::{
|
||||
|
|
@ -40,7 +41,7 @@ impl<Message> Default for Binder<Message> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message: 'static> Binder<Message> {
|
||||
impl<Message: Clone + 'static> Binder<Message> {
|
||||
/// Check if a page exists in the model.
|
||||
#[must_use]
|
||||
#[inline]
|
||||
|
|
@ -149,7 +150,7 @@ impl<Message: 'static> Binder<Message> {
|
|||
/// Create a context drawer for the given page.
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn context_drawer(&self, id: crate::Entity) -> Option<Element<'_, Message>> {
|
||||
pub fn context_drawer(&self, id: crate::Entity) -> Option<ContextDrawer<'_, Message>> {
|
||||
let page = self.page.get(id)?;
|
||||
page.context_drawer()
|
||||
}
|
||||
|
|
@ -239,7 +240,7 @@ impl<Message: 'static> Binder<Message> {
|
|||
}
|
||||
}
|
||||
|
||||
pub trait AutoBind<Message: 'static>: Page<Message> + Default + 'static {
|
||||
pub trait AutoBind<Message: Clone + 'static>: Page<Message> + Default + 'static {
|
||||
/// Attaches sub-pages to the page.
|
||||
#[allow(clippy::must_use_candidate)]
|
||||
#[inline]
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ pub struct Insert<'a, Message> {
|
|||
pub id: Entity,
|
||||
}
|
||||
|
||||
impl<Message: 'static> Insert<'_, Message> {
|
||||
impl<Message: Clone + 'static> Insert<'_, Message> {
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn id(self) -> Entity {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ mod binder;
|
|||
pub use binder::{AutoBind, Binder};
|
||||
|
||||
mod insert;
|
||||
use cosmic::{Element, Task};
|
||||
use cosmic::{Element, Task, app::ContextDrawer};
|
||||
use downcast_rs::{Downcast, impl_downcast};
|
||||
pub use insert::Insert;
|
||||
|
||||
|
|
@ -24,7 +24,7 @@ slotmap::new_key_type! {
|
|||
/// A collection of sections which a page may be comprised of.
|
||||
pub type Content = Vec<section::Entity>;
|
||||
|
||||
pub trait Page<Message: 'static>: Downcast {
|
||||
pub trait Page<Message: Clone + 'static>: Downcast {
|
||||
/// Information about the page
|
||||
fn info(&self) -> Info;
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ pub trait Page<Message: 'static>: Downcast {
|
|||
/// Display a context drawer for the page.
|
||||
#[must_use]
|
||||
#[inline]
|
||||
fn context_drawer(&self) -> Option<Element<'_, Message>> {
|
||||
fn context_drawer(&self) -> Option<ContextDrawer<'_, Message>> {
|
||||
None
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ pub trait Page<Message: 'static>: Downcast {
|
|||
}
|
||||
}
|
||||
|
||||
impl_downcast!(Page<Message>);
|
||||
impl_downcast!(Page<Message> where Message: Clone);
|
||||
|
||||
/// Information about a page; including its title, icon, and description.
|
||||
#[derive(Setters)]
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ impl<Message: 'static> Default for Section<Message> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Message: 'static> Section<Message> {
|
||||
impl<Message: Clone + 'static> Section<Message> {
|
||||
#[must_use]
|
||||
#[inline]
|
||||
pub fn search_matches(&self, rule: &Regex) -> bool {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue