use std::sync::Mutex;
static OVERLAY_WINDOWS: Mutex<Vec<String>> = Mutex::new(Vec::new());
pub(crate) fn register(label: &str) {
if let Ok(mut windows) = OVERLAY_WINDOWS.lock() {
let label = label.to_string();
if !windows.contains(&label) {
windows.push(label);
}
}
}
pub(crate) fn contains(label: &str) -> bool {
OVERLAY_WINDOWS
.lock()
.is_ok_and(|w| w.iter().any(|l| l == label))
}
pub(crate) fn labels() -> Vec<String> {
OVERLAY_WINDOWS
.lock()
.map(|w| w.clone())
.unwrap_or_default()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn registry_is_idempotent() {
let label = "overlay-test-window";
register(label);
register(label);
assert!(contains(label));
}
#[test]
fn registry_is_negative_for_unknown_label() {
assert!(!contains("unknown-overlay-label"));
}
}