fix: Load systray items that are registered without a path #1230
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.
Description
In some environments (e.g. Budgie Desktop on Ultramarine Linux 40, or when using
home-manager
'sstatus-notifier-watcher
on Nix),StatusNotifierItem
s don't have their path as part of their registration, resulting in these items always failing to load in thesystray
widget.This fixes those "misbehaving" registrations, via DBus introspection; the node tree from the top is crawled until any node implementing
org.kde.StatusNotifierItem
is found, and the path to that node is used as the resulting systray item path.It also removes string slicing for the same code path that assumed
:
-prefixed addresses without paths must always be a total of 6 characters, when they can be shorter. (This unrelated issue was "hiding" the real issue in some circumstances.)Additional Notes
Because DBus introspection (including via
zbus
) spits out XML,quick-xml
was added as a dependency (andserde
promoted from a transient dependency to an explicit dependency) tonotifier_host
.The "crawl" mentioned earlier is implemented by way of a recursive function; given my (albeit naive) understanding of DBus, the trees will never be very deep, so I don't foresee this recursion being problematic.
Checklist
Please make sure you can check all the boxes that apply to this PR.
All widgets I've added are correctly documented.The documentation in thedocs/content/main
directory has been adjusted to reflect my changes.docs/content
directory doesn't seem to exist?)cargo fmt
to automatically format all code before committing