Aparently Rust doesn't implicitly cast a `Result<Arc<T>>` to
`Result<Arc<dyn T>>`, so the `Result` was being mapped with a explicity
cast.
But unwrapping the `Result` with a `?` and then wrapping it back into
`Ok` make the implicit cast work. This avoid typing the entire type,
which was breaking the code in multiple lines.
* Fix compilation for many feature combinations
* fix: keep Mpris as the default music player type
* fix: update futures-lite comment
* fix: remove redundant "clap" feature dependency from "cli"
* fix: don't make IPC a dependency of sysinfo module
* refactor: move serde_json feature to "shared" section
* refactor: avoid cfgs inside listen_workspace_events
by splitting list_keyboards_events out of it, which manages its own
connection to the Hyprland IPC socket.
* refactor: sort multiline cfg any's
* Revert "refactor: avoid cfgs inside listen_workspace_events"
This reverts commit 1b4202ed80c9483c609ada8c4436e0fec26a9eef.
* refactor: split listen_workspace_events in more functions
* style: fix broken identation
Not sure why rustfmt didn't catch this.
This extends the existing `keys` module to be able to show the current keyboard layout, and cycle between layouts (using the `next` command) by clicking. The `keys` module has been renamed to `keyboard` to more accurately reflect its extended featureset.
Rewrites the module code to be better structured, in a similar pattern to the launcher. The code is now more robust and more maintainable, yay!
Fixes#705
Fixes an issue with moving favourite workspaces.
Fixes an issue with workspace visible state being incorrect.
Fixes an issue where the `inactive` class looked at hidden instead of closed favourites.
* feat: add sway-mode module
* refactor: Avoid making multiple connections to SwayIPC
Now `sway::Client` is store in `ironbar.clients`, and allow dynamically
registering event listeners, instead of hardcoding events for Workspace
updates.
Remove the use of `swayipc::Connection` from `sway-mode` module, and
replace it with the new event listener system.
#671
Renaming workspaces on Hyprland will now work as expected.
This also refactors the workspace code to depend on IDs rather than
names which should make it more robust against the same sort of issue
in future.
Fixes#469
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.