feat: Tao-only TrayApp with transparent standalone popup panel (Windows)#414
Open
kdroidFilter wants to merge 2 commits into
Open
feat: Tao-only TrayApp with transparent standalone popup panel (Windows)#414kdroidFilter wants to merge 2 commits into
kdroidFilter wants to merge 2 commits into
Conversation
Drops the AWT path entirely — TrayApp now requires the Nucleus Tao backend (nucleusApplication) and consumes the published 2.0.0-alpha-202607120006 from Maven Central (mavenLocal wiring removed). TrayApp: - Windows: the popup renders in TaoStandalonePopup — an ownerless, topmost, per-pixel transparent native panel. No backing window in the taskbar/Alt-Tab/task view; slide+fade animations composite over the desktop; outside-click dismissal works over other applications and the desktop; full keyboard support (text input incl. AltGr, Backspace, arrows) and per-control cursors. - macOS/Linux: opaque DecoratedWindow with focus-based dismissal, same API. Porting plan for the transparent panel lives in docs/PLAN_MACOS_LINUX_PANEL.md. - All public overloads moved to NucleusApplicationScope receivers; screen geometry is AWT-free (TrayScreenGeometry/TrayPosition on Nucleus TaoScreenGeometry). Removed: AwtTrayInitializer, AwtTrayMenuBuilderImpl, the three per-platform OutsideClickWatchers, WindowVisibilityMonitor, WindowRaise. Demo: all entry points converted to nucleusApplication; TrayAppDemo uses MaterialDecoratedWindow/MaterialTitleBar, single instance enabled with SingleInstanceRestoreEffect re-opening the tray popup on second launch. Validated on Windows 11 on JVM and GraalVM native image.
Nucleus 2.0.0-alpha-202607120312 ships the macOS standalone popup panel (ownerless NSPanel + CAMetalLayer), so macOS now joins Windows on TrayAppImplPanel; Linux stays on the opaque Tao window. - TrayApp: per-platform default transitions restored (Windows slide+fade, macOS/Linux plain fade, near-instant on KDE); the Windows-only tray stabilization wait + refreshPosition is gated to Windows; the position poll loop falls back to the corner heuristic if the tray never becomes ready before the deadline - TrayPosition (mac/linux): anchor the popup at the work-area edge — the Tao work area already excludes the menu bar/panel, so the old 28px bar guess (calibrated against AWT full-screen bounds) double-counted it and pushed the popup ~30pt too low; while the mac tray handle or status-item rect isn't available yet (async init), report WindowPosition.PlatformDefault so the visibleOnStart poll loop keeps polling instead of latching a screen-corner fallback
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
TrayApp is now Tao-only: it must run inside
nucleusApplication(Nucleus Tao backend) and the AWT implementation is gone. On Windows, the popup renders in a per-pixel transparent, ownerless, topmost native panel (TaoStandalonePopupfrom Nucleus2.0.0-alpha-202607120006, published to Maven Central by NucleusFramework/Nucleus#301).Behavior
Windows
macOS / Linux
DecoratedWindowwith focus-based dismissal, identical API. Same animation defaults (they run over the window background until the panel is ported). The porting plan is indocs/PLAN_MACOS_LINUX_PANEL.md.API changes (breaking)
TrayAppoverloads are nowNucleusApplicationScope.TrayApp(...);contentlost its scope receiver.require(backend == NucleusBackend.Tao)).AwtTrayInitializer,AwtTrayMenuBuilderImpl, the three per-platformOutsideClickWatchers,WindowVisibilityMonitor,WindowRaise.TrayScreenGeometry/TrayPositionon NucleusTaoScreenGeometry).Dependencies
2.0.0-alpha-202607120006(Maven Central / Plugin Portal);mavenLocalwiring removed — a fresh clone builds.nucleus.decorated-window-material3for the demo'sMaterialDecoratedWindow.Demo
nucleusApplication.TrayAppDemo:MaterialDecoratedWindow+MaterialTitleBar, single instance enabled,SingleInstanceRestoreEffectre-opens the tray popup when a second instance launches.Testing
Validated on Windows 11, JVM and GraalVM native image (Liberica NIK 25): popup display, animations, tray-click toggle, outside-click on other apps/desktop, text input (incl. AltGr), Backspace/arrows, cursor changes, topmost, single-instance restore. macOS/Linux paths compile but need a run on real machines.
Note:
README.mdstill documents the pre-Tao API — follow-up PR.