Add automatic system tray support to FluxTuner GTK - #219
Merged
Merged
Conversation
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.
Summary
Closes #216.
Adds Linux system tray support to the FluxTuner GTK frontend using
StatusNotifierItem and DBusMenu directly through Gio/D-Bus.
The implementation is isolated from the core playback architecture and does
not introduce an additional runtime dependency.
Behavior
When a compatible Linux StatusNotifierWatcher is available:
Stopstops playback;Quitexplicitly terminates FluxTuner.If tray registration is unavailable, FluxTuner gracefully keeps the existing
close-window behavior.
Tray icon
The tray uses the FluxTuner application icon through SNI
IconPixmap, withthe standard audio-radio icon retained as a fallback.
The application icon is now included as packaged GTK data so it also works
when running directly from the source tree.
Lifecycle
The tray uses
GApplication.hold()/release()rather than hidden dummywindows.
The Linux SNI backend uses its own D-Bus connection so that destroying the
tray notifier cleanly removes it from the desktop without interfering with
GTK's shared application bus.
Scope
This initial implementation is Linux-only.
macOS keeps its existing GTK lifecycle. Native macOS menu-bar support can be
implemented separately later.
The initial menu intentionally remains small:
Play/pause, volume, favorites and other controls remain possible future
enhancements.
Testing
make gatepasses cleanly.