Adds `orientation` and `justify` options to all modules and custom
widgets where it makes sense to do so.
Any modules without support document this. Widgets fully document the
options inline where present for now.
Resolves#296
When using spotify in wayland with hyprland, the spotify icon is not
pulled up correctly by the launcher module.
The class/app_id is "" while the name/title is "Spotify Premium". This
uses item.name as a fallback which ensure spotify icon shows up
correctly under wayland.
Refs: #228, #146
This does away with `lazy_static` singletons for all the clients, instead putting them all inside a `Clients` struct on the `Ironbar` struct.
Client code has been refactored in places to accommodate this, and module code has been updated to get the clients the new way.
The Wayland client has been re-written from the ground up to remove a lot of the needless complications, provide a nicer interface and reduce some duplicate data.
The MPD music client has been overhauled to use the `mpd_utils` crate, which simplifies the code within Ironbar and should offer more robustness and better recovery when connection is lost to the server.
The launcher module in particular has been affected by the refactor.
This is a major refactor which updates GTK, GLib and GTK Layer Shell to their latest versions.
GLib channels, previously used for receiving events on the GLib Main Context thread have been deprecated and a new method for running Futures on the main thread has been added instead. This commit also replaces all the deprecated code with this.
As part of the above, a bug was uncovered related to creating the GLib main context inside the Tokio runtime. Spawning of Tokio tasks has been refactored to fix this.
Previously images that could not be located were handled by throwing a
full report error, which incorrectly stated it was an invalid image
*type*.
This changes the image handling to instead log a single-line warning
directly in the image provider code, reducing the error handling
required by each consumer.
Resolves#146.
* feat: more positioning options
Can now display the bar on the left/right, and avoid anchoring to edges to centre the bar.
BREAKING CHANGE: The `left` and `right` config options have been renamed to `start` and `end`
* refactor: major module restructuring
Modules now implement a "controller", which allows for separation of logic from UI code and enforces a tighter structure around how modules should be written. The introduction of this change required major refactoring or even rewriting of all modules.
This also better integrates the popup into modules, making it easier for data to be passed around without fetching the same thing twice
The refactor also improves some client code, switching from `ksway` to the much more stable `swayipc-async`. Partial multi-monitor for the tray module has been added.
BREAKING CHANGE: The `mpd` module config has changed, moving the icons to their own object.
This completely rewrites the item open state handling code (again) in a more logical way that should prevent incorrect states, and removes some locking issues.