From 82b96d19516ac1a338272aa766ad52a6908c7479 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 7 Mar 2024 03:49:49 +0100 Subject: [PATCH] feat(desktop/options): implement window controls --- app/src/pages/desktop/mod.rs | 40 ++++++++++++++++++++++++++++---- app/src/pages/desktop/options.rs | 6 ++--- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/app/src/pages/desktop/mod.rs b/app/src/pages/desktop/mod.rs index 1daf743..50560b1 100644 --- a/app/src/pages/desktop/mod.rs +++ b/app/src/pages/desktop/mod.rs @@ -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, + 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 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); + } + } } } } diff --git a/app/src/pages/desktop/options.rs b/app/src/pages/desktop/options.rs index d381438..9d73bcf 100644 --- a/app/src/pages/desktop/options.rs +++ b/app/src/pages/desktop/options.rs @@ -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 { &*descriptions[0], toggler( None, - desktop.show_minimize_button, + desktop.cosmic_tk.show_minimize, Message::ShowMinimizeButton, ), )) @@ -98,7 +98,7 @@ pub fn window_controls() -> Section { &*descriptions[1], toggler( None, - desktop.show_maximize_button, + desktop.cosmic_tk.show_maximize, Message::ShowMaximizeButton, ), ))