Compare commits
1 commit
brightness
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 524e6365ca |
3 changed files with 15 additions and 76 deletions
15
src/app.rs
15
src/app.rs
|
|
@ -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> {
|
||||||
|
|
|
||||||
|
|
@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue