feat(theme): exportación a GTK + inyección de entorno en el compositor
Segunda mitad de la uniformización del tema. nahual-theme::toolkit traduce el Theme activo a gtk-3.0/gtk.css y gtk-4.0/gtk.css con overrides @define-color (acento exacto + neutro claro/oscuro sintetizado). Theme::set/install_default exportan best-effort; guarda de no-pisar respeta un gtk.css ajeno. El compositor inyecta XDG_CURRENT_DESKTOP=mirada y QT_QPA_PLATFORMTHEME=gtk3 a cada hijo, así GTK y Qt siguen el tema. 8 tests nuevos en toolkit; ejemplo dump-toolkit-css. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -722,16 +722,33 @@ fn cursor_hotspot(surface: &WlSurface) -> (i32, i32) {
|
||||
})
|
||||
}
|
||||
|
||||
/// Variables de entorno de tema que el compositor inyecta a cada hijo,
|
||||
/// para uniformizar GTK y Qt:
|
||||
/// - `XDG_CURRENT_DESKTOP=mirada` hace que `xdg-desktop-portal` enrute
|
||||
/// hacia `mirada-portal` (el backend de `org.freedesktop.appearance`).
|
||||
/// - `QT_QPA_PLATFORMTHEME=gtk3` hace que las apps Qt sigan el tema GTK,
|
||||
/// y por tanto el `gtk.css` que genera `nahual-theme`.
|
||||
const THEME_ENV: &[(&str, &str)] = &[
|
||||
("XDG_CURRENT_DESKTOP", "mirada"),
|
||||
("QT_QPA_PLATFORMTHEME", "gtk3"),
|
||||
];
|
||||
|
||||
/// Lanza un comando como proceso hijo, vía `sh -c`. El hijo hereda el
|
||||
/// entorno —`WAYLAND_DISPLAY` incluido—, así que el cliente que abra se
|
||||
/// conecta a este compositor. Lo usan la acción `spawn:…` del keymap, la
|
||||
/// variable `MIRADA_STARTUP` y el autoarranque.
|
||||
/// conecta a este compositor; además se le inyecta [`THEME_ENV`] para
|
||||
/// que GTK y Qt adopten el tema del escritorio. Lo usan la acción
|
||||
/// `spawn:…` del keymap, la variable `MIRADA_STARTUP` y el autoarranque.
|
||||
fn spawn_command(cmd: &str) {
|
||||
let cmd = cmd.trim();
|
||||
if cmd.is_empty() {
|
||||
return;
|
||||
}
|
||||
match std::process::Command::new("sh").arg("-c").arg(cmd).spawn() {
|
||||
match std::process::Command::new("sh")
|
||||
.arg("-c")
|
||||
.arg(cmd)
|
||||
.envs(THEME_ENV.iter().copied())
|
||||
.spawn()
|
||||
{
|
||||
Ok(child) => println!("mirada-compositor · lanzado (pid {}): {cmd}", child.id()),
|
||||
Err(e) => eprintln!("mirada-compositor · no pude lanzar «{cmd}»: {e}"),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user