Add popups { opacity } window and layer rule

This commit is contained in:
Ivan Molodetskikh
2026-04-12 10:38:10 +03:00
parent 9170161a0a
commit 5a24aae560
7 changed files with 65 additions and 6 deletions
+3
View File
@@ -1,5 +1,6 @@
use crate::appearance::{BackgroundEffectRule, BlockOutFrom, CornerRadius, ShadowRule};
use crate::utils::RegexEq;
use crate::window_rule::PopupsRule;
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
pub struct LayerRule {
@@ -22,6 +23,8 @@ pub struct LayerRule {
pub baba_is_float: Option<bool>,
#[knuffel(child, default)]
pub background_effect: BackgroundEffectRule,
#[knuffel(child, default)]
pub popups: PopupsRule,
}
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
+9 -1
View File
@@ -59,7 +59,9 @@ use crate::recent_windows::RecentWindowsPart;
pub use crate::recent_windows::{MruDirection, MruFilter, MruPreviews, MruScope, RecentWindows};
pub use crate::utils::FloatOrInt;
use crate::utils::{Flag, MergeWith as _};
pub use crate::window_rule::{FloatingPosition, RelativeTo, WindowRule};
pub use crate::window_rule::{
FloatingPosition, PopupsRule, RelativeTo, ResolvedPopupsRules, WindowRule,
};
pub use crate::workspace::{Workspace, WorkspaceLayoutPart};
const RECURSION_LIMIT: u8 = 10;
@@ -1860,6 +1862,9 @@ mod tests {
noise: None,
saturation: None,
},
popups: PopupsRule {
opacity: None,
},
},
],
layer_rules: [
@@ -1901,6 +1906,9 @@ mod tests {
noise: None,
saturation: None,
},
popups: PopupsRule {
opacity: None,
},
},
],
binds: Binds(
+25 -1
View File
@@ -4,7 +4,7 @@ use crate::appearance::{
BackgroundEffectRule, BlockOutFrom, BorderRule, CornerRadius, ShadowRule, TabIndicatorRule,
};
use crate::layout::DefaultPresetSize;
use crate::utils::RegexEq;
use crate::utils::{MergeWith, RegexEq};
use crate::FloatOrInt;
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
@@ -76,6 +76,30 @@ pub struct WindowRule {
pub tiled_state: Option<bool>,
#[knuffel(child, default)]
pub background_effect: BackgroundEffectRule,
#[knuffel(child, default)]
pub popups: PopupsRule,
}
/// Rules for popup surfaces.
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]
pub struct PopupsRule {
#[knuffel(child, unwrap(argument))]
pub opacity: Option<f32>,
}
/// Resolved popup-specific rules.
#[derive(Debug, Default, Clone, Copy, PartialEq)]
pub struct ResolvedPopupsRules {
/// Extra opacity to draw popups with.
pub opacity: Option<f32>,
}
impl MergeWith<PopupsRule> for ResolvedPopupsRules {
fn merge_with(&mut self, part: &PopupsRule) {
if let Some(x) = part.opacity {
self.opacity = Some(x);
}
}
}
#[derive(knuffel::Decode, Debug, Default, Clone, PartialEq)]