You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(linux): dlopen appindicator at runtime so release trays are never stubs (#73)
The Linux cef/webview release artifacts shipped the tray as a stub
(trayId always 0): CMake probed for appindicator3-0.1 / ayatana, but
tray_linux.cc unconditionally included the legacy
<libappindicator/app-indicator.h>, so installing the Ayatana dev
package broke the build and CI deliberately built without it.
Load the library at runtime instead: tray_linux.cc dlopen()s
libayatana-appindicator3.so.1, falling back to libappindicator3.so.1,
declaring the four ABI-stable symbols it uses locally. This removes
the appindicator build dependency everywhere (probes and
LAUFEY_HAVE_APPINDICATOR dropped from backend-common/webview/cef
CMakeLists, dead include dropped from cef runtime_loader_linux.cc),
keeps release binaries free of a hard DT_NEEDED on a library many
distros don't preinstall, works with whichever flavor the system has,
and degrades to trayId 0 — now with a one-time g_warning naming the
missing libraries instead of failing silently.
Gate the regression: native_e2e grows LAUFEY_E2E_REQUIRE_TRAY, which
turns a stub tray into a FAIL instead of N/A; the native-e2e cef/linux
leg sets it and installs the Ayatana runtime lib, so a backend whose
tray creation path regresses to trayId 0 can no longer pass CI.
Verified in an Ubuntu 24.04 container: compiles with no appindicator
dev headers; CreateTrayIconLinux returns a nonzero id with only
libayatana-appindicator3-1 installed (the dlopened app_indicator_new
executes) and 0 with no appindicator lib present; the webview backend
builds and links with no appindicator DT_NEEDED.
docs/tray.md now documents the runtime dependency for .deb/.rpm
packagers and the StatusNotifier-host requirement.
Fixes#63
Copy file name to clipboardExpand all lines: docs/architecture.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -87,7 +87,7 @@ Currently shared:
87
87
|**Dock**|`dock_mac.mm` (badge / bounce / visible / dock menu storage / reopen handler) | per-backend (FlashWindowEx) + `title_badge.cc` for the badge | per-backend (gtk_window_set_urgency_hint) + `title_badge.cc` for the badge |
88
88
|**Key mapping**|`keymap_mac.mm` (NSEvent → W3C) |`keymap_vk.cc` (VK → W3C; CEF uses on every platform) |`keymap_gdk.cc` (GDK → W3C) |
|**Option parsing**|`parse_options.cc` (compiled on every platform; bridges `laufey_value_t` → plain structs) |||
92
92
|**Title-prefix badge bookkeeping**|`title_badge.cc` (`ApplyTitlePrefixBadge` — used by CEF Win+Linux and webview Win+Linux for Dock-badge fallback) |||
0 commit comments