New pallete
This commit is contained in:
parent
83b396ae3e
commit
524e6365ca
3 changed files with 15 additions and 76 deletions
|
|
@ -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<'_> {
|
||||
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 {
|
||||
return Task::none();
|
||||
};
|
||||
|
||||
let Message::PowerManagement(msg) = message else {
|
||||
return Task::none();
|
||||
};
|
||||
match msg {
|
||||
PowerManagement::ToggleWindow => match conn.window {
|
||||
Some(child) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue