diff --git a/crates/hotkey/src/linux.rs b/crates/hotkey/src/linux.rs index 73fc19d..6bf64e9 100644 --- a/crates/hotkey/src/linux.rs +++ b/crates/hotkey/src/linux.rs @@ -317,10 +317,26 @@ async fn device_listener( && alt_held == combo.alt && super_held == combo.super_key { - if pressed { - let _ = event_tx.send(HotkeyEvent::Pressed).await; + let to_send = if pressed { + Some(HotkeyEvent::Pressed) } else if released { - let _ = event_tx.send(HotkeyEvent::Released).await; + Some(HotkeyEvent::Released) + } else { + None + }; + if let Some(event) = to_send { + if event_tx.send(event).await.is_err() { + // Receiver was dropped without an + // explicit None-on-hotkey-rx + // shutdown. Log once and exit so + // the listener doesn't spin + // sending into a closed channel. + log::warn!( + "Hotkey event channel closed; \ + listener for device exiting" + ); + return Ok(()); + } } } }