feat: sync state with greeter

This commit is contained in:
Ashley Wulber 2025-08-08 13:28:37 -04:00 committed by Ashley Wulber
parent 74e90f793f
commit b3a67bca50
4 changed files with 125 additions and 10 deletions

94
Cargo.lock generated
View file

@ -826,6 +826,7 @@ dependencies = [
"cosmic-config", "cosmic-config",
"cosmic-protocols", "cosmic-protocols",
"cosmic-settings-config", "cosmic-settings-config",
"cosmic-settings-daemon-config",
"cosmic-text", "cosmic-text",
"egui", "egui",
"egui_plot", "egui_plot",
@ -850,7 +851,7 @@ dependencies = [
"rand 0.9.1", "rand 0.9.1",
"regex", "regex",
"reis", "reis",
"ron", "ron 0.9.0",
"rust-embed", "rust-embed",
"rustix 0.38.44", "rustix 0.38.44",
"sanitize-filename", "sanitize-filename",
@ -899,7 +900,7 @@ dependencies = [
"known-folders", "known-folders",
"notify", "notify",
"once_cell", "once_cell",
"ron", "ron 0.9.0",
"serde", "serde",
"tracing", "tracing",
"xdg", "xdg",
@ -944,10 +945,10 @@ dependencies = [
[[package]] [[package]]
name = "cosmic-settings-config" name = "cosmic-settings-config"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/pop-os/cosmic-settings-daemon#54b4418e1e7757d965166ae9dc00c522aebf4451" source = "git+https://github.com/pop-os/cosmic-settings-daemon#151780eee4262a08ff3abf63d8d7d1c69b575dc0"
dependencies = [ dependencies = [
"cosmic-config", "cosmic-config",
"ron", "ron 0.9.0",
"serde", "serde",
"serde_with", "serde_with",
"thiserror 2.0.12", "thiserror 2.0.12",
@ -955,6 +956,17 @@ dependencies = [
"xkbcommon 0.7.0", "xkbcommon 0.7.0",
] ]
[[package]]
name = "cosmic-settings-daemon-config"
version = "0.1.0"
source = "git+https://github.com/pop-os/cosmic-settings-daemon?branch=greeter#44ae8813ee2cef186a8817377f529801199972c4"
dependencies = [
"cosmic-config",
"cosmic-theme",
"ron 0.8.1",
"serde",
]
[[package]] [[package]]
name = "cosmic-text" name = "cosmic-text"
version = "0.14.2" version = "0.14.2"
@ -988,7 +1000,7 @@ dependencies = [
"dirs 6.0.0", "dirs 6.0.0",
"lazy_static", "lazy_static",
"palette", "palette",
"ron", "ron 0.9.0",
"serde", "serde",
"serde_json", "serde_json",
"thiserror 2.0.12", "thiserror 2.0.12",
@ -1332,6 +1344,12 @@ dependencies = [
"linux-raw-sys 0.6.5", "linux-raw-sys 0.6.5",
] ]
[[package]]
name = "dyn-clone"
version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
[[package]] [[package]]
name = "ecolor" name = "ecolor"
version = "0.31.1" version = "0.31.1"
@ -4270,6 +4288,26 @@ dependencies = [
"thiserror 2.0.12", "thiserror 2.0.12",
] ]
[[package]]
name = "ref-cast"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a0ae411dbe946a674d89546582cea4ba2bb8defac896622d6496f14c23ba5cf"
dependencies = [
"ref-cast-impl",
]
[[package]]
name = "ref-cast-impl"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1165225c21bff1f3bbce98f5a1f889949bc902d3575308cc7b0de30b4f6d27c7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.101",
]
[[package]] [[package]]
name = "regex" name = "regex"
version = "1.11.1" version = "1.11.1"
@ -4369,6 +4407,18 @@ dependencies = [
"bytemuck", "bytemuck",
] ]
[[package]]
name = "ron"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
dependencies = [
"base64 0.21.7",
"bitflags 2.9.1",
"serde",
"serde_derive",
]
[[package]] [[package]]
name = "ron" name = "ron"
version = "0.9.0" version = "0.9.0"
@ -4519,6 +4569,30 @@ dependencies = [
"regex", "regex",
] ]
[[package]]
name = "schemars"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f"
dependencies = [
"dyn-clone",
"ref-cast",
"serde",
"serde_json",
]
[[package]]
name = "schemars"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82d20c4491bc164fa2f6c5d44565947a52ad80b9505d8e36f8d54c27c739fcd0"
dependencies = [
"dyn-clone",
"ref-cast",
"serde",
"serde_json",
]
[[package]] [[package]]
name = "scoped-tls" name = "scoped-tls"
version = "1.0.1" version = "1.0.1"
@ -4616,15 +4690,17 @@ dependencies = [
[[package]] [[package]]
name = "serde_with" name = "serde_with"
version = "3.12.0" version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" checksum = "f2c45cd61fefa9db6f254525d46e392b852e0e61d9a1fd36e5bd183450a556d5"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"chrono", "chrono",
"hex", "hex",
"indexmap 1.9.3", "indexmap 1.9.3",
"indexmap 2.9.0", "indexmap 2.9.0",
"schemars 0.9.0",
"schemars 1.0.4",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
@ -4634,9 +4710,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_with_macros" name = "serde_with_macros"
version = "3.12.0" version = "3.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" checksum = "de90945e6565ce0d9a25098082ed4ee4002e047cb59892c318d66821e14bb30f"
dependencies = [ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",

View file

@ -20,6 +20,7 @@ cosmic-comp-config = {path = "cosmic-comp-config", features = ["libdisplay-info"
cosmic-config = {git = "https://github.com/pop-os/libcosmic/", features = ["calloop", "macro"]} cosmic-config = {git = "https://github.com/pop-os/libcosmic/", features = ["calloop", "macro"]}
cosmic-protocols = {git = "https://github.com/pop-os/cosmic-protocols", rev = "e706814", default-features = false, features = ["server"]} cosmic-protocols = {git = "https://github.com/pop-os/cosmic-protocols", rev = "e706814", default-features = false, features = ["server"]}
cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon" } cosmic-settings-config = { git = "https://github.com/pop-os/cosmic-settings-daemon" }
cosmic-settings-daemon-config = { git = "https://github.com/pop-os/cosmic-settings-daemon", branch = "greeter", features = ["greeter"] }
cosmic-text = { git = "https://github.com/pop-os/cosmic-text.git", features = ["shape-run-cache"] } cosmic-text = { git = "https://github.com/pop-os/cosmic-text.git", features = ["shape-run-cache"] }
libdisplay-info = "0.2.0" libdisplay-info = "0.2.0"
egui = {version = "0.31.0", optional = true} egui = {version = "0.31.0", optional = true}

View file

@ -1,8 +1,11 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
use crate::state::State; use crate::wayland::protocols::a11y::A11yHandler;
use crate::{config::ScreenFilter, state::State};
use anyhow::{anyhow, Context, Result}; use anyhow::{anyhow, Context, Result};
use cosmic_comp_config::NumlockState; use cosmic_comp_config::NumlockState;
use cosmic_config::CosmicConfigEntry;
use cosmic_settings_daemon_config::greeter;
use smithay::reexports::{calloop::EventLoop, wayland_server::DisplayHandle}; use smithay::reexports::{calloop::EventLoop, wayland_server::DisplayHandle};
use tracing::{info, warn}; use tracing::{info, warn};
@ -70,6 +73,37 @@ pub fn init_backend_auto(
.seats .seats
.add_seat(initial_seat.clone()); .add_seat(initial_seat.clone());
let helper = greeter::GreeterAccessibilityState::config()?;
let greeter_state = match greeter::GreeterAccessibilityState::get_entry(&helper) {
Ok(s) => s,
Err((errs, s)) => {
for err in errs {
tracing::error!("Error loading greeter state: {err:?}");
}
s
}
};
if let Some(magnifier) = greeter_state.magnifier {
let mut zoom = state.common.config.cosmic_conf.accessibility_zoom;
zoom.start_on_login = magnifier;
if let Err(err) = state
.common
.config
.cosmic_conf
.set_accessibility_zoom(&state.common.config.cosmic_helper, zoom)
{
tracing::error!("Failed to set screen filter: {err:?}");
}
}
if let Some(inverted) = greeter_state.invert_colors {
if inverted != state.a11y_state().screen_inverted() {
state.request_screen_invert(inverted);
}
}
if state if state
.common .common
.config .config

View file

@ -81,6 +81,10 @@ impl A11yState {
self.global.clone() self.global.clone()
} }
pub fn screen_inverted(&self) -> bool {
self.screen_inverted
}
pub fn set_screen_magnifier(&mut self, enabled: bool) { pub fn set_screen_magnifier(&mut self, enabled: bool) {
self.magnifier_state = enabled; self.magnifier_state = enabled;