feat(desktop/options): implement window controls

This commit is contained in:
Michael Aaron Murphy 2024-03-07 03:49:49 +01:00 committed by Michael Murphy
parent 958d9ba164
commit 82b96d1951
2 changed files with 38 additions and 8 deletions

View file

@ -9,13 +9,34 @@ pub mod panel;
pub mod wallpaper;
pub mod workspaces;
use cosmic::{config::CosmicTk, cosmic_config::CosmicConfigEntry};
use cosmic_settings_page as page;
#[derive(Debug, Default)]
#[derive(Debug)]
#[allow(clippy::struct_excessive_bools)]
pub struct Page {
pub show_minimize_button: bool,
pub show_maximize_button: bool,
pub cosmic_config: Option<cosmic::cosmic_config::Config>,
pub cosmic_tk: CosmicTk,
}
impl Default for Page {
fn default() -> Self {
let (cosmic_tk, cosmic_config) = CosmicTk::config().map_or_else(
|why| {
tracing::error!(?why, "failed to read CosmicTk config");
(CosmicTk::default(), None)
},
|config| match CosmicTk::get_entry(&config) {
Ok(tk) => (tk, Some(config)),
Err((_errors, tk)) => (tk, Some(config)),
},
);
Self {
cosmic_config,
cosmic_tk,
}
}
}
impl page::Page<crate::pages::Message> for Page {
@ -43,8 +64,17 @@ pub enum Message {
impl Page {
pub fn update(&mut self, message: Message) {
match message {
Message::ShowMaximizeButton(value) => self.show_maximize_button = value,
Message::ShowMinimizeButton(value) => self.show_minimize_button = value,
Message::ShowMaximizeButton(value) => {
if let Some(config) = self.cosmic_config.as_mut() {
let _res = self.cosmic_tk.set_show_maximize(config, value);
}
}
Message::ShowMinimizeButton(value) => {
if let Some(config) = self.cosmic_config.as_mut() {
let _res = self.cosmic_tk.set_show_minimize(config, value);
}
}
}
}
}

View file

@ -6,7 +6,7 @@ use apply::Apply;
use cosmic::{
iced::Length,
theme,
widget::{button, container, horizontal_space, icon, list, row, settings, toggler},
widget::{button, container, horizontal_space, icon, row, settings, toggler},
Element,
};
@ -90,7 +90,7 @@ pub fn window_controls() -> Section<crate::pages::Message> {
&*descriptions[0],
toggler(
None,
desktop.show_minimize_button,
desktop.cosmic_tk.show_minimize,
Message::ShowMinimizeButton,
),
))
@ -98,7 +98,7 @@ pub fn window_controls() -> Section<crate::pages::Message> {
&*descriptions[1],
toggler(
None,
desktop.show_maximize_button,
desktop.cosmic_tk.show_maximize,
Message::ShowMaximizeButton,
),
))