test(gtk): live D-Bus/portal comparison against the original Ghostty
Adds scripts/live-dbus-test.sh (`just live-dbus`): each scenario runs the installed Ghostty 1.3.1 and the Rust build on a private dbus-run-session bus inside a private headless weston (the user's session bus is never written to), with Python/Gio mocks for org.freedesktop.Notifications, the GlobalShortcuts/Settings portal and org.freedesktop.systemd1, plus a real xdg-desktop-portal run. Scenarios: single-instance (+detect), +new-window with arguments, notifications, global shortcuts, color-scheme settings, cgroup scope creation, URL opening. tests/live_dbus.rs compares the Rust build against goldens recorded from the original (skips when tools or a fresh production build are missing). Two Rust bugs found and fixed (no upstream deviation): - GlobalShortcuts CreateSession/BindShortcuts payloads used the wrong D-Bus signatures ((v), double-boxed values), which a real portal rejects; signature tests added. - CreateSession was sent twice at startup; the config is now bound only after the D-Bus connection is set, as in Zig. All nine scenarios now behave identically to the original (docs/rewrite/notes/live-dbus.md). Test Plan: - just live-dbus - cargo test --test live_dbus (needs target/vp/production/ghostty)
This commit is contained in:
1 parent
e44b9271d6
commit
30863e1f0b
25 files changed
+1278
-31
No files matched your search
@@ -293,6 +293,12 @@ mod imp {
|
||||
/// The global shortcut logic.
|
||||
pub global_shortcuts: OnceCell<GlobalShortcuts>,
|
||||
|
||||
/// True once the shortcuts' `config` property is bound to ours
|
||||
/// (Zig: `bindProperty` in `startupGlobalShortcuts`, after the
|
||||
/// D-Bus connection was set; before that the config must not reach
|
||||
/// the shortcuts, or the portal session is created twice).
|
||||
pub global_shortcuts_bound: Cell<bool>,
|
||||
|
||||
/// Set to true so long as we request a window exactly once. This
|
||||
/// prevents quitting the app before we've shown one window.
|
||||
pub requested_window: Cell<bool>,
|
||||
@@ -827,7 +833,9 @@ impl Application {
|
||||
}
|
||||
|
||||
// Keep global shortcuts in sync with the config (property binding).
|
||||
if let Some(gs) = self.imp().global_shortcuts.get() {
|
||||
if self.imp().global_shortcuts_bound.get()
|
||||
&& let Some(gs) = self.imp().global_shortcuts.get()
|
||||
{
|
||||
gs.set_config(self.imp().config.borrow().as_ref());
|
||||
}
|
||||
}
|
||||
@@ -1075,6 +1083,7 @@ impl Application {
|
||||
gs.set_connection(self.dbus_connection().as_ref());
|
||||
|
||||
// Keep the shortcut config in sync with the app.
|
||||
self.imp().global_shortcuts_bound.set(true);
|
||||
gs.set_config(self.imp().config.borrow().as_ref());
|
||||
|
||||
// Setup the signal handler for global shortcut triggers
|
||||
|
||||
Reference in new issue
Block a user