From df6c2e5f02283c701c690bef0fa5632708e9be59 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 16 Jun 2022 17:03:01 -0400 Subject: [PATCH] styling --- Cargo.lock | 2 +- .../data/resources/style.css | 108 +++++++++++++++++- .../cosmic-applet-workspaces/src/wayland.rs | 17 ++- .../src/workspace_button/mod.rs | 17 ++- 4 files changed, 125 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8ff3ab2f..d9daebb3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -394,7 +394,7 @@ dependencies = [ [[package]] name = "cosmic-panel-config" version = "0.1.0" -source = "git+https://github.com/pop-os/cosmic-panel#8787823d807ea9a9d7b96ecacf017d695ba7b58a" +source = "git+https://github.com/pop-os/cosmic-panel/#8787823d807ea9a9d7b96ecacf017d695ba7b58a" dependencies = [ "anyhow", "gtk4", diff --git a/applets/cosmic-applet-workspaces/data/resources/style.css b/applets/cosmic-applet-workspaces/data/resources/style.css index 7484d22f..8d1c87ed 100644 --- a/applets/cosmic-applet-workspaces/data/resources/style.css +++ b/applets/cosmic-applet-workspaces/data/resources/style.css @@ -1,4 +1,106 @@ -*.alert { - background-color: #aa3000; - color: white; +@define-color accent_color #001d6b; +@define-color destructive_color #aa3000; +@define-color view_bg_color #00000044; +@define-color destructive_fg_color white; +@define-color accent_fg_color white; +@define-color view_fg_color white; + +button.alert { + border-radius: 0; + padding: 0px; + background-color: @destructive_color; + background-image: none; + color: @destructive_fg_color; + border-color: transparent; + outline-color: transparent; +} + +button.active { + border-radius: 0; + padding: 0px; + background-color: @accent_color; + background-image: none; + color: @accent_fg_color; + border-color: transparent; + outline-color: transparent; +} + +button.inactive { + border-radius: 0; + padding: 0px; + background-color: @view_bg_color; + background-image: none; + color: @view_fg_color; + border-color: transparent; + outline-color: transparent; +} + +button.alert:hover { + border-radius: 0; + padding: 0px; + background-color: darken(@destructive_color); + background-image: none; + color: @destructive_fg_color; + border-color: transparent; + outline-color: transparent; +} + +button.active:hover { + border-radius: 0; + padding: 0px; + background-color: darken(@accent_color); + background-image: none; + color: @accent_fg_color; + border-color: transparent; + outline-color: transparent; +} + +button.inactive:hover { + border-radius: 0; + padding: 0px; + background-color: darken(@view_bg_color); + background-image: none; + color: @view_bg_color; + border-color: transparent; + outline-color: transparent; +} + +window { + background: transparent; +} + +listview { + border-color: transparent; + background: transparent; + outline-color: transparent; +} + +listview row { + padding-left: 0px; + padding-right: 0px; + padding-top: 0px; + padding-bottom: 0px; + background: transparent; + border-color: transparent; + outline-color: transparent; +} + +listview row:hover { + padding-left: 0px; + padding-right: 0px; + padding-top: 0px; + padding-bottom: 0px; + background: transparent; + border-color: transparent; + outline-color: transparent; +} + +label { + padding: 0px; + background-color: transparent; +} + +box { + padding: 0px; + background-color: transparent; } \ No newline at end of file diff --git a/applets/cosmic-applet-workspaces/src/wayland.rs b/applets/cosmic-applet-workspaces/src/wayland.rs index 9008b8e5..d84fa0cc 100644 --- a/applets/cosmic-applet-workspaces/src/wayland.rs +++ b/applets/cosmic-applet-workspaces/src/wayland.rs @@ -10,11 +10,6 @@ use wayland_client::{ use wayland_client::{Connection, Dispatch, QueueHandle}; -pub enum WorkspaceState { - -} - - /// Generated protocol definitions mod generated { #![allow(dead_code, non_camel_case_types, unused_unsafe, unused_variables)] @@ -72,6 +67,7 @@ pub fn spawn_workspaces(tx: glib::Sender) -> mpsc::Sender { }; while state.running { + let mut changed = false; while let Ok(request) = workspaces_rx.try_recv() { dbg!(&request); if let Some(w) = state.workspace_groups.iter().find_map(|g| { @@ -79,9 +75,12 @@ pub fn spawn_workspaces(tx: glib::Sender) -> mpsc::Sender { .iter() .find(|w| w.name == request) }) { - println!("sending request"); w.workspace_handle.activate(); } + changed = true; + } + if changed { + state.workspace_manager.as_ref().unwrap().commit(); } event_queue.sync_roundtrip(&mut state).unwrap(); @@ -140,10 +139,8 @@ impl Dispatch for State { version, } = event { - println!("[{}] {} (v{})", name, interface, version); match &interface[..] { "zext_workspace_manager_v1" => { - println!("binding to workspace manager"); let workspace_manager = registry .bind::( name, @@ -155,7 +152,6 @@ impl Dispatch for State { self.workspace_manager = Some(workspace_manager); } "wl_output" => { - println!("binding to output"); registry.bind::(name, 1, qh, ()).unwrap(); } _ => {} @@ -183,7 +179,6 @@ impl Dispatch for State { } zext_workspace_manager_v1::Event::Done => { // TODO - println!("sending event with workspace list state"); let _ = self.tx.send(self.clone()); } zext_workspace_manager_v1::Event::Finished => { @@ -293,6 +288,8 @@ impl Dispatch for State { if state.len() == 4 { // XXX is it little endian?? w.state = u32::from_le_bytes(state.try_into().unwrap()); + } else { + w.state = 3; } } } diff --git a/applets/cosmic-applet-workspaces/src/workspace_button/mod.rs b/applets/cosmic-applet-workspaces/src/workspace_button/mod.rs index 16683355..d609c96e 100644 --- a/applets/cosmic-applet-workspaces/src/workspace_button/mod.rs +++ b/applets/cosmic-applet-workspaces/src/workspace_button/mod.rs @@ -28,18 +28,25 @@ impl WorkspaceButton { let old_button = imp.button.take(); self.remove(&old_button); + let is_active = obj.active() == 0; let id = obj.id(); let new_button = ToggleButton::with_label(&id); - new_button.set_active(obj.active() == 0); - if obj.active() == 1 { + new_button.set_sensitive(!is_active); + if obj.active() == 0 { + new_button.add_css_class("active"); + } else if obj.active() == 1 { new_button.add_css_class("alert"); + } else { + new_button.add_css_class("inactive"); } self.append(&new_button); new_button.connect_clicked(move |_| { let id_clone = id.clone(); - glib::MainContext::default().spawn_local(async move { - TX.get().unwrap().send(id_clone).await.unwrap(); - }); + if !is_active { + glib::MainContext::default().spawn_local(async move { + TX.get().unwrap().send(id_clone).await.unwrap(); + }); + } }); imp.button.replace(new_button);