styling
This commit is contained in:
parent
2417ff6e31
commit
df6c2e5f02
4 changed files with 125 additions and 19 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -394,7 +394,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cosmic-panel-config"
|
name = "cosmic-panel-config"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"gtk4",
|
"gtk4",
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,106 @@
|
||||||
*.alert {
|
@define-color accent_color #001d6b;
|
||||||
background-color: #aa3000;
|
@define-color destructive_color #aa3000;
|
||||||
color: white;
|
@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;
|
||||||
}
|
}
|
||||||
|
|
@ -10,11 +10,6 @@ use wayland_client::{
|
||||||
|
|
||||||
use wayland_client::{Connection, Dispatch, QueueHandle};
|
use wayland_client::{Connection, Dispatch, QueueHandle};
|
||||||
|
|
||||||
pub enum WorkspaceState {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Generated protocol definitions
|
/// Generated protocol definitions
|
||||||
mod generated {
|
mod generated {
|
||||||
#![allow(dead_code, non_camel_case_types, unused_unsafe, unused_variables)]
|
#![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 {
|
while state.running {
|
||||||
|
let mut changed = false;
|
||||||
while let Ok(request) = workspaces_rx.try_recv() {
|
while let Ok(request) = workspaces_rx.try_recv() {
|
||||||
dbg!(&request);
|
dbg!(&request);
|
||||||
if let Some(w) = state.workspace_groups.iter().find_map(|g| {
|
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()
|
.iter()
|
||||||
.find(|w| w.name == request)
|
.find(|w| w.name == request)
|
||||||
}) {
|
}) {
|
||||||
println!("sending request");
|
|
||||||
w.workspace_handle.activate();
|
w.workspace_handle.activate();
|
||||||
}
|
}
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
if changed {
|
||||||
|
state.workspace_manager.as_ref().unwrap().commit();
|
||||||
}
|
}
|
||||||
event_queue.sync_roundtrip(&mut state).unwrap();
|
event_queue.sync_roundtrip(&mut state).unwrap();
|
||||||
|
|
||||||
|
|
@ -140,10 +139,8 @@ impl Dispatch<wl_registry::WlRegistry, ()> for State {
|
||||||
version,
|
version,
|
||||||
} = event
|
} = event
|
||||||
{
|
{
|
||||||
println!("[{}] {} (v{})", name, interface, version);
|
|
||||||
match &interface[..] {
|
match &interface[..] {
|
||||||
"zext_workspace_manager_v1" => {
|
"zext_workspace_manager_v1" => {
|
||||||
println!("binding to workspace manager");
|
|
||||||
let workspace_manager = registry
|
let workspace_manager = registry
|
||||||
.bind::<zext_workspace_manager_v1::ZextWorkspaceManagerV1, _, _>(
|
.bind::<zext_workspace_manager_v1::ZextWorkspaceManagerV1, _, _>(
|
||||||
name,
|
name,
|
||||||
|
|
@ -155,7 +152,6 @@ impl Dispatch<wl_registry::WlRegistry, ()> for State {
|
||||||
self.workspace_manager = Some(workspace_manager);
|
self.workspace_manager = Some(workspace_manager);
|
||||||
}
|
}
|
||||||
"wl_output" => {
|
"wl_output" => {
|
||||||
println!("binding to output");
|
|
||||||
registry.bind::<WlOutput, _, _>(name, 1, qh, ()).unwrap();
|
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 => {
|
zext_workspace_manager_v1::Event::Done => {
|
||||||
// TODO
|
// TODO
|
||||||
println!("sending event with workspace list state");
|
|
||||||
let _ = self.tx.send(self.clone());
|
let _ = self.tx.send(self.clone());
|
||||||
}
|
}
|
||||||
zext_workspace_manager_v1::Event::Finished => {
|
zext_workspace_manager_v1::Event::Finished => {
|
||||||
|
|
@ -293,6 +288,8 @@ impl Dispatch<ZextWorkspaceHandleV1, ()> for State {
|
||||||
if state.len() == 4 {
|
if state.len() == 4 {
|
||||||
// XXX is it little endian??
|
// XXX is it little endian??
|
||||||
w.state = u32::from_le_bytes(state.try_into().unwrap());
|
w.state = u32::from_le_bytes(state.try_into().unwrap());
|
||||||
|
} else {
|
||||||
|
w.state = 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,18 +28,25 @@ impl WorkspaceButton {
|
||||||
let old_button = imp.button.take();
|
let old_button = imp.button.take();
|
||||||
self.remove(&old_button);
|
self.remove(&old_button);
|
||||||
|
|
||||||
|
let is_active = obj.active() == 0;
|
||||||
let id = obj.id();
|
let id = obj.id();
|
||||||
let new_button = ToggleButton::with_label(&id);
|
let new_button = ToggleButton::with_label(&id);
|
||||||
new_button.set_active(obj.active() == 0);
|
new_button.set_sensitive(!is_active);
|
||||||
if obj.active() == 1 {
|
if obj.active() == 0 {
|
||||||
|
new_button.add_css_class("active");
|
||||||
|
} else if obj.active() == 1 {
|
||||||
new_button.add_css_class("alert");
|
new_button.add_css_class("alert");
|
||||||
|
} else {
|
||||||
|
new_button.add_css_class("inactive");
|
||||||
}
|
}
|
||||||
self.append(&new_button);
|
self.append(&new_button);
|
||||||
new_button.connect_clicked(move |_| {
|
new_button.connect_clicked(move |_| {
|
||||||
let id_clone = id.clone();
|
let id_clone = id.clone();
|
||||||
glib::MainContext::default().spawn_local(async move {
|
if !is_active {
|
||||||
TX.get().unwrap().send(id_clone).await.unwrap();
|
glib::MainContext::default().spawn_local(async move {
|
||||||
});
|
TX.get().unwrap().send(id_clone).await.unwrap();
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
imp.button.replace(new_button);
|
imp.button.replace(new_button);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue