This commit is contained in:
Ashley Wulber 2022-06-16 17:03:01 -04:00
parent 2417ff6e31
commit df6c2e5f02
4 changed files with 125 additions and 19 deletions

2
Cargo.lock generated
View file

@ -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",

View file

@ -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;
}

View file

@ -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<State>) -> mpsc::Sender<Activate> {
};
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<State>) -> mpsc::Sender<Activate> {
.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<wl_registry::WlRegistry, ()> 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::<zext_workspace_manager_v1::ZextWorkspaceManagerV1, _, _>(
name,
@ -155,7 +152,6 @@ impl Dispatch<wl_registry::WlRegistry, ()> for State {
self.workspace_manager = Some(workspace_manager);
}
"wl_output" => {
println!("binding to output");
registry.bind::<WlOutput, _, _>(name, 1, qh, ()).unwrap();
}
_ => {}
@ -183,7 +179,6 @@ impl Dispatch<zext_workspace_manager_v1::ZextWorkspaceManagerV1, ()> 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<ZextWorkspaceHandleV1, ()> 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;
}
}
}

View file

@ -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);