Compare commits

...
Sign in to create a new pull request.

1 commit

Author SHA1 Message Date
524e6365ca New pallete 2026-04-02 13:33:44 +02:00
3 changed files with 15 additions and 76 deletions

View file

@ -5,10 +5,10 @@ use crate::widgets::power_management::PowerManagementWidget;
use crate::widgets::powerbutton::ShutdownWidget; use crate::widgets::powerbutton::ShutdownWidget;
use crate::widgets::spacer::Spacer; use crate::widgets::spacer::Spacer;
use iced::Color;
use iced::Element;
use iced::Subscription; use iced::Subscription;
use iced::Task; use iced::Task;
use iced::{Color, Theme};
use iced::{Element, color};
pub struct App { pub struct App {
widgets: Vec<Box<dyn PanelWidget>>, widgets: Vec<Box<dyn PanelWidget>>,
@ -68,7 +68,16 @@ impl App {
} }
pub fn theme(&self, _id: iced::window::Id) -> iced::Theme { pub fn theme(&self, _id: iced::window::Id) -> iced::Theme {
iced::Theme::GruvboxDark let palette = iced::theme::Palette {
background: color!(0x282828), // dark BG_0
text: color!(0xfbf1c7), // dark FG0_29
primary: color!(0x8A493B), // dark BLUE_4
success: color!(0x98971a), // dark GREEN_2
warning: color!(0xd79921), // dark YELLOW_3
danger: color!(0xcc241d), // dark RED_1
};
Theme::custom("Better gruvbox", palette)
} }
pub fn subscription(&self) -> iced::Subscription<Message> { pub fn subscription(&self) -> iced::Subscription<Message> {

View file

@ -1,69 +0,0 @@
use iced::{Subscription, Task, futures::SinkExt};
use niri_ipc::{Event, Request, Response, Window, socket::Socket};
use crate::widget::{Message, PanelWidget};
pub struct FocusedWindowWidget {
focused_window: Option<u64>,
}
impl FocusedWindowWidget {
pub fn new() -> Self {
Self {
focused_window: None,
}
}
}
impl PanelWidget for FocusedWindowWidget {
fn update(&mut self, message: &Message) -> iced::Task<Message> {
let Message::FocusChanged(i) = message else {
return Task::none();
};
self.focused_window = *i;
Task::none()
}
fn subscribe(&self) -> Subscription<Message> {
Subscription::run(|| {
iced::stream::channel(16, async move |mut tx| {
use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader};
use tokio::net::UnixStream;
let socket_path = std::env::var("NIRI_SOCKET").unwrap();
let mut stream = UnixStream::connect(socket_path).await.unwrap();
// Send the EventStream request as newline-delimited JSON
let request = serde_json::to_string(&niri_ipc::Request::EventStream).unwrap();
stream
.write_all(format!("{request}\n").as_bytes())
.await
.unwrap();
let mut reader = BufReader::new(stream);
let mut line = String::new();
loop {
line.clear();
reader.read_line(&mut line).await.unwrap();
// First line back is the Reply, subsequent lines are Events
if let Ok(event) = serde_json::from_str::<niri_ipc::Event>(line.trim())
&& let niri_ipc::Event::WindowFocusChanged { id } = event
{
let _ = tx.send(Message::FocusChanged(id)).await;
}
}
})
})
}
fn view(&self, _id: iced::window::Id) -> iced::Element<'_, Message> {
iced::widget::text!(
"{}",
self.focused_window
.map_or("None".into(), |f| format!("{}", f))
)
.into()
}
}

View file

@ -55,14 +55,13 @@ impl PowerManagementWidget<'_> {
impl PanelWidget for PowerManagementWidget<'_> { impl PanelWidget for PowerManagementWidget<'_> {
fn update(&mut self, message: &crate::widget::Message) -> iced::Task<crate::widget::Message> { fn update(&mut self, message: &crate::widget::Message) -> iced::Task<crate::widget::Message> {
let Message::PowerManagement(msg) = message else {
return Task::none();
};
let Some(conn) = &mut self.connection else { let Some(conn) = &mut self.connection else {
return Task::none(); return Task::none();
}; };
let Message::PowerManagement(msg) = message else {
return Task::none();
};
match msg { match msg {
PowerManagement::ToggleWindow => match conn.window { PowerManagement::ToggleWindow => match conn.window {
Some(child) => { Some(child) => {