diff --git a/src/base.rs b/src/base.rs index f576d34..e08881e 100644 --- a/src/base.rs +++ b/src/base.rs @@ -1319,6 +1319,9 @@ pub struct ChatStore { /// Whether to ring the terminal bell on the next redraw. pub ring_bell: bool, + + /// Whether the application is currently focused + pub focused: bool, } impl ChatStore { @@ -1341,6 +1344,7 @@ impl ChatStore { sync_info: Default::default(), draw_curr: None, ring_bell: false, + focused: true, } } diff --git a/src/main.rs b/src/main.rs index 2311a3c..4105236 100644 --- a/src/main.rs +++ b/src/main.rs @@ -355,9 +355,13 @@ impl Application { // Do nothing for now. }, Event::FocusGained => { + let mut store = self.store.lock().await; + store.application.focused = true; self.focused = true; }, Event::FocusLost => { + let mut store = self.store.lock().await; + store.application.focused = false; self.focused = false; }, Event::Resize(_, _) => { diff --git a/src/notifications.rs b/src/notifications.rs index 194e6a0..9f86575 100644 --- a/src/notifications.rs +++ b/src/notifications.rs @@ -44,7 +44,7 @@ pub async fn register_notifications( return; } - if is_open(&store, room.room_id()).await { + if is_focused(&store).await && is_open(&store, room.room_id()).await { return; } @@ -139,6 +139,11 @@ async fn is_open(store: &AsyncProgramStore, room_id: &RoomId) -> bool { false } +async fn is_focused(store: &AsyncProgramStore) -> bool { + let locked = store.lock().await; + locked.application.focused +} + pub async fn parse_notification( notification: Notification, room: MatrixRoom,