mirror of
https://github.com/Zedfrigg/ironbar.git
synced 2025-08-17 23:01:04 +02:00
refactor: replace channel macros with ext trait methods
This commit is contained in:
parent
d5744f597c
commit
f929aef2d9
50 changed files with 658 additions and 476 deletions
|
@ -1,5 +1,6 @@
|
|||
use super::wayland::{self, ClipboardItem};
|
||||
use crate::{arc_mut, lock, register_client, spawn, try_send};
|
||||
use crate::channels::AsyncSenderExt;
|
||||
use crate::{arc_mut, lock, register_client, spawn};
|
||||
use indexmap::IndexMap;
|
||||
use indexmap::map::Iter;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
@ -46,7 +47,7 @@ impl Client {
|
|||
let senders = lock!(senders);
|
||||
let iter = senders.iter();
|
||||
for (tx, _) in iter {
|
||||
try_send!(tx, ClipboardEvent::Add(item.clone()));
|
||||
tx.send_spawn(ClipboardEvent::Add(item.clone()));
|
||||
}
|
||||
|
||||
lock!(cache).insert(item, senders.len());
|
||||
|
@ -74,16 +75,17 @@ impl Client {
|
|||
let removed_id = lock!(cache)
|
||||
.remove_ref_first()
|
||||
.expect("Clipboard cache unexpectedly empty");
|
||||
try_send!(tx, ClipboardEvent::Remove(removed_id));
|
||||
|
||||
tx.send_spawn(ClipboardEvent::Remove(removed_id));
|
||||
}
|
||||
try_send!(tx, ClipboardEvent::Add(item.clone()));
|
||||
tx.send_spawn(ClipboardEvent::Add(item.clone()));
|
||||
}
|
||||
},
|
||||
|existing_id| {
|
||||
let senders = lock!(senders);
|
||||
let iter = senders.iter();
|
||||
for (tx, _) in iter {
|
||||
try_send!(tx, ClipboardEvent::Activate(existing_id));
|
||||
tx.send_spawn(ClipboardEvent::Activate(existing_id));
|
||||
}
|
||||
},
|
||||
);
|
||||
|
@ -106,7 +108,7 @@ impl Client {
|
|||
|
||||
let iter = cache.iter();
|
||||
for (_, (item, _)) in iter {
|
||||
try_send!(tx, ClipboardEvent::Add(item.clone()));
|
||||
tx.send_spawn(ClipboardEvent::Add(item.clone()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,7 +132,7 @@ impl Client {
|
|||
let senders = lock!(self.senders);
|
||||
let iter = senders.iter();
|
||||
for (tx, _) in iter {
|
||||
try_send!(tx, ClipboardEvent::Activate(id));
|
||||
tx.send_spawn(ClipboardEvent::Activate(id));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -140,7 +142,7 @@ impl Client {
|
|||
let senders = lock!(self.senders);
|
||||
let iter = senders.iter();
|
||||
for (tx, _) in iter {
|
||||
try_send!(tx, ClipboardEvent::Remove(id));
|
||||
tx.send_spawn(ClipboardEvent::Remove(id));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,8 @@ use super::{BindModeClient, BindModeUpdate};
|
|||
#[cfg(feature = "keyboard+hyprland")]
|
||||
use super::{KeyboardLayoutClient, KeyboardLayoutUpdate};
|
||||
use super::{Visibility, Workspace};
|
||||
use crate::{arc_mut, lock, send, spawn_blocking};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::{arc_mut, lock, spawn_blocking};
|
||||
use color_eyre::Result;
|
||||
use hyprland::ctl::switch_xkb_layout;
|
||||
use hyprland::data::{Devices, Workspace as HWorkspace, Workspaces};
|
||||
|
@ -121,7 +122,7 @@ impl Client {
|
|||
|
||||
match workspace {
|
||||
Ok(Some(workspace)) => {
|
||||
send!(tx, WorkspaceUpdate::Add(workspace));
|
||||
tx.send_expect(WorkspaceUpdate::Add(workspace));
|
||||
}
|
||||
Err(e) => error!("Failed to get workspace: {e:#}"),
|
||||
_ => {}
|
||||
|
@ -230,13 +231,10 @@ impl Client {
|
|||
let _lock = lock!(lock);
|
||||
debug!("Received workspace rename: {data:?}");
|
||||
|
||||
send!(
|
||||
tx,
|
||||
WorkspaceUpdate::Rename {
|
||||
id: data.id as i64,
|
||||
name: data.name
|
||||
}
|
||||
);
|
||||
tx.send_expect(WorkspaceUpdate::Rename {
|
||||
id: data.id as i64,
|
||||
name: data.name,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -247,7 +245,7 @@ impl Client {
|
|||
event_listener.add_workspace_deleted_handler(move |data| {
|
||||
let _lock = lock!(lock);
|
||||
debug!("Received workspace destroy: {data:?}");
|
||||
send!(tx, WorkspaceUpdate::Remove(data.id as i64));
|
||||
tx.send_expect(WorkspaceUpdate::Remove(data.id as i64));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -271,13 +269,10 @@ impl Client {
|
|||
error!("Unable to locate client");
|
||||
},
|
||||
|c| {
|
||||
send!(
|
||||
tx,
|
||||
WorkspaceUpdate::Urgent {
|
||||
id: c.workspace.id as i64,
|
||||
urgent: true,
|
||||
}
|
||||
);
|
||||
tx.send_expect(WorkspaceUpdate::Urgent {
|
||||
id: c.workspace.id as i64,
|
||||
urgent: true,
|
||||
});
|
||||
},
|
||||
);
|
||||
});
|
||||
|
@ -333,8 +328,7 @@ impl Client {
|
|||
};
|
||||
|
||||
debug!("Received layout: {layout:?}");
|
||||
|
||||
send!(tx, KeyboardLayoutUpdate(layout));
|
||||
tx.send_expect(KeyboardLayoutUpdate(layout));
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -351,13 +345,10 @@ impl Client {
|
|||
let _lock = lock!(lock);
|
||||
debug!("Received bind mode: {bind_mode:?}");
|
||||
|
||||
send!(
|
||||
tx,
|
||||
BindModeUpdate {
|
||||
name: bind_mode,
|
||||
pango_markup: false,
|
||||
}
|
||||
);
|
||||
tx.send_expect(BindModeUpdate {
|
||||
name: bind_mode,
|
||||
pango_markup: false,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -369,21 +360,15 @@ impl Client {
|
|||
workspace: Workspace,
|
||||
tx: &Sender<WorkspaceUpdate>,
|
||||
) {
|
||||
send!(
|
||||
tx,
|
||||
WorkspaceUpdate::Focus {
|
||||
old: prev_workspace.take(),
|
||||
new: workspace.clone(),
|
||||
}
|
||||
);
|
||||
tx.send_expect(WorkspaceUpdate::Focus {
|
||||
old: prev_workspace.take(),
|
||||
new: workspace.clone(),
|
||||
});
|
||||
|
||||
send!(
|
||||
tx,
|
||||
WorkspaceUpdate::Urgent {
|
||||
id: workspace.id,
|
||||
urgent: false,
|
||||
}
|
||||
);
|
||||
tx.send_expect(WorkspaceUpdate::Urgent {
|
||||
id: workspace.id,
|
||||
urgent: false,
|
||||
});
|
||||
|
||||
prev_workspace.replace(workspace);
|
||||
}
|
||||
|
@ -439,7 +424,9 @@ impl super::WorkspaceClient for Client {
|
|||
})
|
||||
.collect();
|
||||
|
||||
send!(self.workspace.tx, WorkspaceUpdate::Init(workspaces));
|
||||
self.workspace
|
||||
.tx
|
||||
.send_expect(WorkspaceUpdate::Init(workspaces));
|
||||
}
|
||||
Err(e) => {
|
||||
error!("Failed to get workspaces: {e:#}");
|
||||
|
@ -486,7 +473,9 @@ impl KeyboardLayoutClient for Client {
|
|||
.map(|k| k.active_keymap.clone())
|
||||
}) {
|
||||
Ok(Some(layout)) => {
|
||||
send!(self.keyboard_layout.tx, KeyboardLayoutUpdate(layout));
|
||||
self.keyboard_layout
|
||||
.tx
|
||||
.send_expect(KeyboardLayoutUpdate(layout));
|
||||
}
|
||||
Ok(None) => error!("Failed to get current keyboard layout hyprland"),
|
||||
Err(err) => error!("Failed to get devices: {err:#?}"),
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use crate::{clients::compositor::Visibility, send, spawn};
|
||||
use crate::{clients::compositor::Visibility, spawn};
|
||||
use color_eyre::Report;
|
||||
use tracing::{error, warn};
|
||||
|
||||
|
@ -7,6 +7,7 @@ use tokio::sync::broadcast;
|
|||
use super::{Workspace as IronWorkspace, WorkspaceClient, WorkspaceUpdate};
|
||||
mod connection;
|
||||
|
||||
use crate::channels::SyncSenderExt;
|
||||
use connection::{Action, Connection, Event, Request, WorkspaceReferenceArg};
|
||||
|
||||
#[derive(Debug)]
|
||||
|
@ -151,7 +152,7 @@ impl Client {
|
|||
};
|
||||
|
||||
for event in events {
|
||||
send!(tx, event);
|
||||
tx.send_expect(event);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use super::{Visibility, Workspace};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::clients::sway::Client;
|
||||
use crate::{await_sync, error, send, spawn};
|
||||
use crate::{await_sync, error, spawn};
|
||||
use color_eyre::Report;
|
||||
use swayipc_async::{InputChange, InputEvent, Node, WorkspaceChange, WorkspaceEvent};
|
||||
use tokio::sync::broadcast::{Receiver, channel};
|
||||
|
@ -8,7 +9,7 @@ use tokio::sync::broadcast::{Receiver, channel};
|
|||
#[cfg(feature = "workspaces")]
|
||||
use super::WorkspaceUpdate;
|
||||
|
||||
#[cfg(feature = "workspaces")]
|
||||
#[cfg(feature = "workspaces+sway")]
|
||||
impl super::WorkspaceClient for Client {
|
||||
fn focus(&self, id: i64) {
|
||||
let client = self.connection().clone();
|
||||
|
@ -49,13 +50,13 @@ impl super::WorkspaceClient for Client {
|
|||
let event =
|
||||
WorkspaceUpdate::Init(workspaces.into_iter().map(Workspace::from).collect());
|
||||
|
||||
send!(tx, event);
|
||||
tx.send_expect(event);
|
||||
|
||||
drop(client);
|
||||
|
||||
self.add_listener::<WorkspaceEvent>(move |event| {
|
||||
let update = WorkspaceUpdate::from(event.clone());
|
||||
send!(tx, update);
|
||||
tx.send_expect(update);
|
||||
})
|
||||
.await
|
||||
.expect("to add listener");
|
||||
|
@ -198,7 +199,7 @@ impl KeyboardLayoutClient for Client {
|
|||
let inputs = client.get_inputs().await.expect("to get inputs");
|
||||
|
||||
if let Some(layout) = inputs.into_iter().find_map(|i| i.xkb_active_layout_name) {
|
||||
send!(tx, KeyboardLayoutUpdate(layout));
|
||||
tx.send_expect(KeyboardLayoutUpdate(layout));
|
||||
} else {
|
||||
error!("Failed to get keyboard layout from Sway!");
|
||||
}
|
||||
|
@ -207,7 +208,7 @@ impl KeyboardLayoutClient for Client {
|
|||
|
||||
self.add_listener::<InputEvent>(move |event| {
|
||||
if let Ok(layout) = KeyboardLayoutUpdate::try_from(event.clone()) {
|
||||
send!(tx, layout);
|
||||
tx.send_expect(layout);
|
||||
}
|
||||
})
|
||||
.await
|
||||
|
@ -255,13 +256,10 @@ impl BindModeClient for Client {
|
|||
mode.change.clone()
|
||||
};
|
||||
|
||||
send!(
|
||||
tx,
|
||||
BindModeUpdate {
|
||||
name,
|
||||
pango_markup: mode.pango_markup,
|
||||
}
|
||||
);
|
||||
tx.send_expect(BindModeUpdate {
|
||||
name,
|
||||
pango_markup: mode.pango_markup,
|
||||
});
|
||||
})
|
||||
.await
|
||||
})?;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
use crate::{Ironbar, arc_rw, read_lock, send, spawn, write_lock};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::{Ironbar, arc_rw, read_lock, spawn, write_lock};
|
||||
use color_eyre::{Report, Result};
|
||||
use colpetto::event::{AsRawEvent, DeviceEvent, KeyState, KeyboardEvent};
|
||||
use colpetto::{DeviceCapability, Libinput};
|
||||
|
@ -179,7 +180,7 @@ impl Client {
|
|||
device_path.display()
|
||||
);
|
||||
write_lock!(self.known_devices).push(device_path.to_path_buf());
|
||||
send!(self.tx, Event::Device);
|
||||
self.tx.send_expect(Event::Device);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -208,7 +209,7 @@ impl Client {
|
|||
let data = KeyData { device_path, key };
|
||||
|
||||
if let Ok(event) = data.try_into() {
|
||||
send!(tx, event);
|
||||
tx.send_expect(event);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
use super::{
|
||||
MusicClient, PlayerState, PlayerUpdate, ProgressTick, Status, TICK_INTERVAL_MS, Track,
|
||||
};
|
||||
use crate::{Ironbar, await_sync, send, spawn};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::{Ironbar, await_sync, spawn};
|
||||
use color_eyre::Report;
|
||||
use color_eyre::Result;
|
||||
use mpd_client::client::{ConnectionEvent, Subsystem};
|
||||
|
@ -97,7 +98,7 @@ impl Client {
|
|||
let status = Status::from(status);
|
||||
|
||||
let update = PlayerUpdate::Update(Box::new(track), status);
|
||||
send!(tx, update);
|
||||
tx.send_expect(update);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
@ -113,7 +114,7 @@ impl Client {
|
|||
elapsed: status.elapsed,
|
||||
});
|
||||
|
||||
send!(tx, update);
|
||||
tx.send_expect(update);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use super::{MusicClient, PlayerState, PlayerUpdate, Status, TICK_INTERVAL_MS, Track};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::clients::music::ProgressTick;
|
||||
use crate::{arc_mut, lock, send, spawn_blocking};
|
||||
use crate::{arc_mut, lock, spawn_blocking};
|
||||
use color_eyre::Result;
|
||||
use mpris::{DBusError, Event, Metadata, PlaybackStatus, Player, PlayerFinder};
|
||||
use std::cmp;
|
||||
|
@ -137,7 +138,7 @@ impl Client {
|
|||
let mut players_locked = lock!(players);
|
||||
players_locked.remove(identity);
|
||||
if players_locked.is_empty() {
|
||||
send!(tx, PlayerUpdate::Update(Box::new(None), Status::default()));
|
||||
tx.send_expect(PlayerUpdate::Update(Box::new(None), Status::default()));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -212,7 +213,7 @@ impl Client {
|
|||
let track = Track::from(metadata);
|
||||
|
||||
let player_update = PlayerUpdate::Update(Box::new(Some(track)), status);
|
||||
send!(tx, player_update);
|
||||
tx.send_expect(player_update);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -242,7 +243,7 @@ impl Client {
|
|||
duration: metadata.length(),
|
||||
});
|
||||
|
||||
send!(tx, update);
|
||||
tx.send_expect(update);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -327,7 +328,9 @@ impl MusicClient for Client {
|
|||
state: PlayerState::Stopped,
|
||||
volume_percent: None,
|
||||
};
|
||||
send!(self.tx, PlayerUpdate::Update(Box::new(None), status));
|
||||
|
||||
self.tx
|
||||
.send_expect(PlayerUpdate::Update(Box::new(None), status));
|
||||
}
|
||||
|
||||
rx
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
mod dbus;
|
||||
|
||||
use crate::{register_fallible_client, send, spawn};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::{register_fallible_client, spawn};
|
||||
use color_eyre::{Report, Result};
|
||||
use dbus::SwayNcProxy;
|
||||
use serde::Deserialize;
|
||||
|
@ -60,7 +61,7 @@ impl Client {
|
|||
.deserialize::<Event>()
|
||||
.expect("to deserialize");
|
||||
debug!("Received event: {ev:?}");
|
||||
send!(tx, ev);
|
||||
tx.send_expect(ev);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
mod sink;
|
||||
mod sink_input;
|
||||
|
||||
use crate::{APP_ID, arc_mut, lock, register_client, send, spawn_blocking};
|
||||
use crate::{APP_ID, arc_mut, lock, register_client, spawn_blocking};
|
||||
use libpulse_binding::callbacks::ListResult;
|
||||
use libpulse_binding::context::introspect::{Introspector, ServerInfo};
|
||||
use libpulse_binding::context::subscribe::{Facility, InterestMaskSet, Operation};
|
||||
|
@ -14,6 +14,7 @@ use std::sync::{Arc, Mutex};
|
|||
use tokio::sync::broadcast;
|
||||
use tracing::{debug, error, info, trace, warn};
|
||||
|
||||
use crate::channels::SyncSenderExt;
|
||||
pub use sink::Sink;
|
||||
pub use sink_input::SinkInput;
|
||||
|
||||
|
@ -271,7 +272,7 @@ fn set_default_sink(
|
|||
{
|
||||
sink.active = true;
|
||||
debug!("Set sink active: {}", sink.name);
|
||||
send!(tx, Event::UpdateSink(sink.clone()));
|
||||
tx.send_expect(Event::UpdateSink(sink.clone()));
|
||||
} else {
|
||||
warn!("Couldn't find sink: {}", default_sink_name);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use super::{ArcMutVec, Client, ConnectionState, Event, percent_to_volume, volume_to_percent};
|
||||
use crate::{lock, send};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::lock;
|
||||
use libpulse_binding::callbacks::ListResult;
|
||||
use libpulse_binding::context::Context;
|
||||
use libpulse_binding::context::introspect::SinkInfo;
|
||||
|
@ -62,7 +63,7 @@ impl Client {
|
|||
let ListResult::Item(info) = info else {
|
||||
return;
|
||||
};
|
||||
send!(tx, info.volume);
|
||||
tx.send_expect(info.volume);
|
||||
});
|
||||
|
||||
let new_volume = percent_to_volume(volume_percent);
|
||||
|
@ -129,7 +130,7 @@ pub fn add(info: ListResult<&SinkInfo>, sinks: &ArcMutVec<Sink>, tx: &broadcast:
|
|||
trace!("adding {info:?}");
|
||||
|
||||
lock!(sinks).push(info.into());
|
||||
send!(tx, Event::AddSink(info.into()));
|
||||
tx.send_expect(Event::AddSink(info.into()));
|
||||
}
|
||||
|
||||
fn update(
|
||||
|
@ -170,7 +171,7 @@ fn update(
|
|||
}
|
||||
}
|
||||
|
||||
send!(tx, Event::UpdateSink(sink));
|
||||
tx.send_expect(Event::UpdateSink(sink));
|
||||
}
|
||||
|
||||
fn remove(index: u32, sinks: &ArcMutVec<Sink>, tx: &broadcast::Sender<Event>) {
|
||||
|
@ -180,6 +181,6 @@ fn remove(index: u32, sinks: &ArcMutVec<Sink>, tx: &broadcast::Sender<Event>) {
|
|||
|
||||
if let Some(pos) = sinks.iter().position(|s| s.index == index) {
|
||||
let info = sinks.remove(pos);
|
||||
send!(tx, Event::RemoveSink(info.name));
|
||||
tx.send_expect(Event::RemoveSink(info.name));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
use super::{ArcMutVec, Client, ConnectionState, Event, percent_to_volume, volume_to_percent};
|
||||
use crate::{lock, send};
|
||||
use crate::channels::SyncSenderExt;
|
||||
use crate::lock;
|
||||
use libpulse_binding::callbacks::ListResult;
|
||||
use libpulse_binding::context::Context;
|
||||
use libpulse_binding::context::introspect::SinkInputInfo;
|
||||
|
@ -49,7 +50,7 @@ impl Client {
|
|||
let ListResult::Item(info) = info else {
|
||||
return;
|
||||
};
|
||||
send!(tx, info.volume);
|
||||
tx.send_expect(info.volume);
|
||||
});
|
||||
|
||||
let new_volume = percent_to_volume(volume_percent);
|
||||
|
@ -118,7 +119,7 @@ pub fn add(
|
|||
trace!("adding {info:?}");
|
||||
|
||||
lock!(inputs).push(info.into());
|
||||
send!(tx, Event::AddInput(info.into()));
|
||||
tx.send_expect(Event::AddInput(info.into()));
|
||||
}
|
||||
|
||||
fn update(
|
||||
|
@ -142,7 +143,7 @@ fn update(
|
|||
inputs[pos] = info.into();
|
||||
}
|
||||
|
||||
send!(tx, Event::UpdateInput(info.into()));
|
||||
tx.send_expect(Event::UpdateInput(info.into()));
|
||||
}
|
||||
|
||||
fn remove(index: u32, inputs: &ArcMutVec<SinkInput>, tx: &broadcast::Sender<Event>) {
|
||||
|
@ -152,6 +153,6 @@ fn remove(index: u32, inputs: &ArcMutVec<SinkInput>, tx: &broadcast::Sender<Even
|
|||
|
||||
if let Some(pos) = inputs.iter().position(|s| s.index == index) {
|
||||
let info = inputs.remove(pos);
|
||||
send!(tx, Event::RemoveInput(info.index));
|
||||
tx.send_expect(Event::RemoveInput(info.index));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,10 +3,11 @@ mod wl_output;
|
|||
mod wl_seat;
|
||||
|
||||
use crate::error::{ERR_CHANNEL_RECV, ExitCode};
|
||||
use crate::{arc_mut, lock, register_client, send, spawn, spawn_blocking};
|
||||
use crate::{arc_mut, lock, register_client, spawn, spawn_blocking};
|
||||
use std::process::exit;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use crate::channels::SyncSenderExt;
|
||||
use calloop_channel::Event::Msg;
|
||||
use cfg_if::cfg_if;
|
||||
use color_eyre::{Help, Report};
|
||||
|
@ -151,11 +152,11 @@ impl Client {
|
|||
spawn(async move {
|
||||
while let Some(event) = event_rx.recv().await {
|
||||
match event {
|
||||
Event::Output(event) => send!(output_tx, event),
|
||||
Event::Output(event) => output_tx.send_expect(event),
|
||||
#[cfg(any(feature = "focused", feature = "launcher"))]
|
||||
Event::Toplevel(event) => send!(toplevel_tx, event),
|
||||
Event::Toplevel(event) => toplevel_tx.send_expect(event),
|
||||
#[cfg(feature = "clipboard")]
|
||||
Event::Clipboard(item) => send!(clipboard_tx, item),
|
||||
Event::Clipboard(item) => clipboard_tx.send_expect(item),
|
||||
};
|
||||
}
|
||||
});
|
||||
|
@ -176,7 +177,7 @@ impl Client {
|
|||
/// Sends a request to the environment event loop,
|
||||
/// and returns the response.
|
||||
fn send_request(&self, request: Request) -> Response {
|
||||
send!(self.tx, request);
|
||||
self.tx.send_expect(request);
|
||||
lock!(self.rx).recv().expect(ERR_CHANNEL_RECV)
|
||||
}
|
||||
|
||||
|
@ -333,12 +334,12 @@ impl Environment {
|
|||
match event {
|
||||
Msg(Request::Roundtrip) => {
|
||||
debug!("received roundtrip request");
|
||||
send!(env.response_tx, Response::Ok);
|
||||
env.response_tx.send_expect(Response::Ok);
|
||||
}
|
||||
#[cfg(feature = "ipc")]
|
||||
Msg(Request::OutputInfoAll) => {
|
||||
let infos = env.output_info_all();
|
||||
send!(env.response_tx, Response::OutputInfoAll(infos));
|
||||
env.response_tx.send_expect(Response::OutputInfoAll(infos));
|
||||
}
|
||||
#[cfg(any(feature = "focused", feature = "launcher"))]
|
||||
Msg(Request::ToplevelInfoAll) => {
|
||||
|
@ -347,7 +348,9 @@ impl Environment {
|
|||
.iter()
|
||||
.filter_map(ToplevelHandle::info)
|
||||
.collect();
|
||||
send!(env.response_tx, Response::ToplevelInfoAll(infos));
|
||||
|
||||
env.response_tx
|
||||
.send_expect(Response::ToplevelInfoAll(infos));
|
||||
}
|
||||
#[cfg(feature = "launcher")]
|
||||
Msg(Request::ToplevelFocus(id)) => {
|
||||
|
@ -361,7 +364,7 @@ impl Environment {
|
|||
handle.focus(&seat);
|
||||
}
|
||||
|
||||
send!(env.response_tx, Response::Ok);
|
||||
env.response_tx.send_expect(Response::Ok);
|
||||
}
|
||||
#[cfg(feature = "launcher")]
|
||||
Msg(Request::ToplevelMinimize(id)) => {
|
||||
|
@ -374,17 +377,17 @@ impl Environment {
|
|||
handle.minimize();
|
||||
}
|
||||
|
||||
send!(env.response_tx, Response::Ok);
|
||||
env.response_tx.send_expect(Response::Ok);
|
||||
}
|
||||
#[cfg(feature = "clipboard")]
|
||||
Msg(Request::CopyToClipboard(item)) => {
|
||||
env.copy_to_clipboard(item);
|
||||
send!(env.response_tx, Response::Ok);
|
||||
env.response_tx.send_expect(Response::Ok);
|
||||
}
|
||||
#[cfg(feature = "clipboard")]
|
||||
Msg(Request::ClipboardItem) => {
|
||||
let item = lock!(env.clipboard).clone();
|
||||
send!(env.response_tx, Response::ClipboardItem(item));
|
||||
env.response_tx.send_expect(Response::ClipboardItem(item));
|
||||
}
|
||||
calloop_channel::Event::Closed => error!("request channel unexpectedly closed"),
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
use super::{Client, Environment, Event};
|
||||
use crate::try_send;
|
||||
use crate::channels::AsyncSenderExt;
|
||||
use smithay_client_toolkit::output::{OutputHandler, OutputInfo, OutputState};
|
||||
use tokio::sync::broadcast;
|
||||
use tracing::{debug, error};
|
||||
|
@ -63,13 +63,10 @@ impl OutputHandler for Environment {
|
|||
fn new_output(&mut self, _conn: &Connection, _qh: &QueueHandle<Self>, output: WlOutput) {
|
||||
debug!("Handler received new output");
|
||||
if let Some(info) = self.output_state.info(&output) {
|
||||
try_send!(
|
||||
self.event_tx,
|
||||
Event::Output(OutputEvent {
|
||||
output: info,
|
||||
event_type: OutputEventType::New
|
||||
})
|
||||
);
|
||||
self.event_tx.send_spawn(Event::Output(OutputEvent {
|
||||
output: info,
|
||||
event_type: OutputEventType::New,
|
||||
}));
|
||||
} else {
|
||||
error!("Output is missing information!");
|
||||
}
|
||||
|
@ -78,13 +75,10 @@ impl OutputHandler for Environment {
|
|||
fn update_output(&mut self, _conn: &Connection, _qh: &QueueHandle<Self>, output: WlOutput) {
|
||||
debug!("Handle received output update");
|
||||
if let Some(info) = self.output_state.info(&output) {
|
||||
try_send!(
|
||||
self.event_tx,
|
||||
Event::Output(OutputEvent {
|
||||
output: info,
|
||||
event_type: OutputEventType::Update
|
||||
})
|
||||
);
|
||||
self.event_tx.send_spawn(Event::Output(OutputEvent {
|
||||
output: info,
|
||||
event_type: OutputEventType::Update,
|
||||
}));
|
||||
} else {
|
||||
error!("Output is missing information!");
|
||||
}
|
||||
|
@ -93,13 +87,10 @@ impl OutputHandler for Environment {
|
|||
fn output_destroyed(&mut self, _conn: &Connection, _qh: &QueueHandle<Self>, output: WlOutput) {
|
||||
debug!("Handle received output destruction");
|
||||
if let Some(info) = self.output_state.info(&output) {
|
||||
try_send!(
|
||||
self.event_tx,
|
||||
Event::Output(OutputEvent {
|
||||
output: info,
|
||||
event_type: OutputEventType::Destroyed
|
||||
})
|
||||
);
|
||||
self.event_tx.send_spawn(Event::Output(OutputEvent {
|
||||
output: info,
|
||||
event_type: OutputEventType::Destroyed,
|
||||
}));
|
||||
} else {
|
||||
error!("Output is missing information!");
|
||||
}
|
||||
|
|
|
@ -7,7 +7,8 @@ use self::device::{DataControlDeviceDataExt, DataControlDeviceHandler};
|
|||
use self::offer::{DataControlDeviceOffer, DataControlOfferHandler};
|
||||
use self::source::DataControlSourceHandler;
|
||||
use super::{Client, Environment, Event, Request, Response};
|
||||
use crate::{Ironbar, lock, spawn, try_send};
|
||||
use crate::channels::AsyncSenderExt;
|
||||
use crate::{Ironbar, lock, spawn};
|
||||
use color_eyre::Result;
|
||||
use device::DataControlDevice;
|
||||
use glib::Bytes;
|
||||
|
@ -219,14 +220,12 @@ impl DataControlDeviceHandler for Environment {
|
|||
let Some(mime_type) = MimeType::parse_multiple(&mime_types) else {
|
||||
lock!(self.clipboard).take();
|
||||
// send an event so the clipboard module is aware it's changed
|
||||
try_send!(
|
||||
self.event_tx,
|
||||
Event::Clipboard(ClipboardItem {
|
||||
id: usize::MAX,
|
||||
mime_type: String::new().into(),
|
||||
value: Arc::new(ClipboardValue::Other)
|
||||
})
|
||||
);
|
||||
self.event_tx.send_spawn(Event::Clipboard(ClipboardItem {
|
||||
id: usize::MAX,
|
||||
mime_type: String::new().into(),
|
||||
value: Arc::new(ClipboardValue::Other),
|
||||
}));
|
||||
|
||||
return;
|
||||
};
|
||||
|
||||
|
@ -239,7 +238,7 @@ impl DataControlDeviceHandler for Environment {
|
|||
match Self::read_file(&mime_type, &mut read_pipe).await {
|
||||
Ok(item) => {
|
||||
lock!(clipboard).replace(item.clone());
|
||||
try_send!(tx, Event::Clipboard(item));
|
||||
tx.send_spawn(Event::Clipboard(item));
|
||||
}
|
||||
Err(err) => error!("{err:?}"),
|
||||
}
|
||||
|
|
|
@ -4,11 +4,11 @@ pub mod manager;
|
|||
use self::handle::ToplevelHandleHandler;
|
||||
use self::manager::ToplevelManagerHandler;
|
||||
use super::{Client, Environment, Event, Request, Response};
|
||||
use crate::try_send;
|
||||
use tokio::sync::broadcast;
|
||||
use tracing::{debug, error, trace};
|
||||
use wayland_client::{Connection, QueueHandle};
|
||||
|
||||
use crate::channels::AsyncSenderExt;
|
||||
pub use handle::{ToplevelHandle, ToplevelInfo};
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
@ -71,7 +71,8 @@ impl ToplevelHandleHandler for Environment {
|
|||
trace!("Adding new handle: {info:?}");
|
||||
self.handles.push(handle.clone());
|
||||
if let Some(info) = handle.info() {
|
||||
try_send!(self.event_tx, Event::Toplevel(ToplevelEvent::New(info)));
|
||||
self.event_tx
|
||||
.send_spawn(Event::Toplevel(ToplevelEvent::New(info)));
|
||||
}
|
||||
}
|
||||
None => {
|
||||
|
@ -92,7 +93,8 @@ impl ToplevelHandleHandler for Environment {
|
|||
Some(info) => {
|
||||
trace!("Updating handle: {info:?}");
|
||||
if let Some(info) = handle.info() {
|
||||
try_send!(self.event_tx, Event::Toplevel(ToplevelEvent::Update(info)));
|
||||
self.event_tx
|
||||
.send_spawn(Event::Toplevel(ToplevelEvent::Update(info)));
|
||||
}
|
||||
}
|
||||
None => {
|
||||
|
@ -111,7 +113,8 @@ impl ToplevelHandleHandler for Environment {
|
|||
|
||||
self.handles.retain(|h| h != &handle);
|
||||
if let Some(info) = handle.info() {
|
||||
try_send!(self.event_tx, Event::Toplevel(ToplevelEvent::Remove(info)));
|
||||
self.event_tx
|
||||
.send_spawn(Event::Toplevel(ToplevelEvent::Remove(info)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue