2 changes to address the review feedback:
1. Aleksei pointed out in this
comment (https://github.com/Alexays/Waybar/pull/2971#issuecomment-1972364896)
that there's no way to tell if a proxy is alive other than trying to
call a method on it. We perform a little dance to check whether or
not power-profiles-daemon is available on the system by calling
properties.GetAll. If something responds, we assume
power-profiles-daemon is installed, it's then safe to draw the
widget and attach the callback to the active profile.
2. We replaced all the synchronous DBus operations by their async
counterparts.
We introduce a module in charge to display and toggle on click the
power profiles via power-profiles-daemon.
https://gitlab.freedesktop.org/upower/power-profiles-daemon
This daemon is pretty widespread. It's the component used by Gnome and
KDE to manage the power profiles. The power management daemon is a
pretty important software component for laptops and other
battery-powered devices.
We're using the daemon DBus interface to:
- Fetch the available power profiles.
- Track the active power profile.
- Change the active power profile.
The original author recently gave up maintenance on the project. The
Upower group took over the maintenance burden… …and created a new
DBus name for the project. The old name is still advertised for now.
We use the old name for compatibility sake: most distributions did not
release 0.20, which introduces this new DBus name. We'll likely revisit
this in the future and point to the new bus name. See the inline
comment for more details.
Given how widespread this daemon is, I activated the module in the
default configuration.
The `<experimental/filesystem>` and `-lc++experimental` aren't needed
since LLVM 9.0. And since we now require C++20, checking for the
`<filesystem>` support shouldn't be necessary either.
1. Fix warnings reported by clang tidy
2. Use unique lock instead of manully lock/unlock on mutex.
The RAII style locking makes sure mutex is unlocked when exceptions are thrown
1. Utilize `m_mutex` to safeguard member fields of `hyprland::Workspaces` as they are modified by multiple threads, including the event listener thread and UI thread. This applies to all member fields, not just `m_workspacesToCreate`.
2. Tidy up the create/remove workspace code.