Modul-Split: Fachlogik nach domain/, OS-Code nach platform/, Tauri-Verdrahtung in app.rs/commands.rs

- lib.rs nur noch Prozessrollen-Dispatch + Panic-Tracer
- KWin-Script als KDE-Pendant zur GNOME-Extension (Popup ans Zeiger-
  Rechteck), wird von deb/rpm mit ausgeliefert
- SNI-Tray auf ksni (pure Rust), appindicator-Depends entfallen
This commit is contained in:
marcus hinz
2026-07-15 20:10:33 +02:00
parent cf844c45da
commit 9a99bca466
32 changed files with 4413 additions and 3572 deletions
+40
View File
@@ -0,0 +1,40 @@
//! D-Bus-Relay für die GNOME-Extension: Show()/Hide() steuern das
//! Popup-Fenster. Die Extension ruft Show() beim Panel-Klick und positioniert
//! das Fenster selbst (Anchor::Managed) — unter Wayland darf nur der
//! Compositor fremde Fenster platzieren.
use crate::platform::{Anchor, TrayCallbacks};
struct PopupService {
app: tauri::AppHandle,
cb: TrayCallbacks,
}
#[zbus::interface(name = "com.aicontrol.Popup1")]
impl PopupService {
fn show(&self) {
(self.cb.show)(&self.app, Anchor::Managed);
}
fn hide(&self) {
(self.cb.hide)(&self.app);
}
}
/// Hält den D-Bus-Namen com.aicontrol.Popup, solange die App läuft — die
/// Extension zeigt ihren Panel-Button nur, wenn der Name präsent ist.
pub(super) fn spawn_dbus_service(app: tauri::AppHandle, cb: TrayCallbacks) {
std::thread::spawn(move || {
let serve = move || -> zbus::Result<()> {
let _conn = zbus::blocking::connection::Builder::session()?
.name("com.aicontrol.Popup")?
.serve_at("/com/aicontrol/Popup", PopupService { app, cb })?
.build()?;
loop {
std::thread::park();
}
};
if let Err(e) = serve() {
eprintln!("D-Bus-Popup-Dienst: {e}");
}
});
}