Publish theme snapshots through IPC from explicit live state

This commit is contained in:
Samuel Onoja committed 2026-10-03 00:05:29 +01:00
1 parent 8195b82073
commit ccf7497b6f
23 files changed
+287 -130

No files matched your search

+1 -1
View File
@@ -391,7 +391,7 @@ mod tests {
let resolved = ferese_config::theme::ResolvedTheme {
appearance: preset.appearance,
tokens: ferese_config::theme::preset(preset.id, preset.appearance).unwrap(),
..Default::default()
..ferese_config::theme::default_theme()
};
let palette = Palette::from_resolved(&resolved);
for enabled in [false, true] {
+2 -2
View File
@@ -122,7 +122,7 @@ mod tests {
for high_contrast in [false, true] {
let mut resolved = ferese_config::theme::ResolvedTheme {
appearance,
..Default::default()
..ferese_config::theme::default_theme()
};
resolved.accessibility.increase_contrast = high_contrast;
let palette = Palette::from_resolved(&resolved);
@@ -138,7 +138,7 @@ mod tests {
let mut resolved = ferese_config::theme::ResolvedTheme {
appearance: preset.appearance,
tokens: ferese_config::theme::preset(preset.id, preset.appearance).unwrap(),
..Default::default()
..ferese_config::theme::default_theme()
};
resolved.tokens.material.style = "translucent".into();
resolved.tokens.material.opacity = 0.25;
+25 -4
View File
@@ -1,8 +1,27 @@
use cosmic::iced::futures::SinkExt;
use ferese_config::theme::Snapshot;
use ferese_ipc::theme::Snapshot;
pub fn current() -> Snapshot {
ferese_ipc::theme::current()
ferese_ipc::theme::Connection::connect()
.ok()
.and_then(|mut connection| connection.get(ferese_config::families::builtins).ok())
.unwrap_or_else(fallback)
}
/// Standalone appearance; it does not represent compositor acceptance.
pub fn fallback() -> Snapshot {
let theme = ferese_config::theme::default_theme();
Snapshot {
version: ferese_ipc::theme::SCHEMA_VERSION,
revision: 0,
mode: ferese_config::theme::Mode::Dark,
presented: theme.clone(),
theme,
warnings: Vec::new(),
error: None,
families: ferese_config::families::builtins(),
fallback_note: None,
}
}
pub fn opacity(theme: &ferese_config::theme::ResolvedTheme) -> f32 {
@@ -30,13 +49,15 @@ fn stream() -> impl cosmic::iced::futures::Stream<Item = Snapshot> {
};
let (send, mut receive) = tokio::sync::watch::channel(None);
tokio::task::spawn_blocking(move || {
let Ok(mut snapshot) = connection.get() else { return };
let Ok(mut snapshot) = connection.get(ferese_config::families::builtins) else {
return;
};
loop {
let revision = snapshot.revision;
if send.send(Some(snapshot)).is_err() {
return;
}
match connection.watch(revision) {
match connection.watch(revision, ferese_config::families::builtins) {
Ok(next) => snapshot = next,
Err(_) => return,
}