diff --git a/cosmic-notifications-config/src/lib.rs b/cosmic-notifications-config/src/lib.rs index 43cb5c2..b1801ba 100644 --- a/cosmic-notifications-config/src/lib.rs +++ b/cosmic-notifications-config/src/lib.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use cosmic_config::{CosmicConfigEntry, cosmic_config_derive::CosmicConfigEntry}; pub const ID: &str = "com.system76.CosmicNotifications"; @@ -19,6 +21,8 @@ pub enum Anchor { #[version = 1] pub struct NotificationsConfig { pub do_not_disturb: bool, + /// App IDs allowed to bypass DND. + pub do_not_disturb_overrides: HashSet, pub anchor: Anchor, /// The maximum number of notifications that can be displayed at once. pub max_notifications: u32, @@ -36,6 +40,7 @@ impl Default for NotificationsConfig { fn default() -> Self { Self { do_not_disturb: false, + do_not_disturb_overrides: HashSet::default(), anchor: Anchor::default(), max_notifications: 3, max_per_app: 2, diff --git a/src/app.rs b/src/app.rs index ad77cce..b9832bc 100644 --- a/src/app.rs +++ b/src/app.rs @@ -265,7 +265,13 @@ impl CosmicNotifications { iced::Task::none() }]; - if self.cards.is_empty() && !self.config.do_not_disturb { + if self.cards.is_empty() + && (!self.config.do_not_disturb + || self + .config + .do_not_disturb_overrides + .contains(¬ification.app_name)) + { let (anchor, _output) = self.anchor.clone().unwrap_or((Anchor::TOP, None)); self.active_surface = true; tasks.push(get_layer_surface(SctkLayerSurfaceSettings {