mirror of
https://github.com/rad4day/Waybar.git
synced 2025-07-13 14:42:29 +02:00

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.
50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <fmt/format.h>
|
|
|
|
#include "ALabel.hpp"
|
|
#include "giomm/dbusproxy.h"
|
|
|
|
namespace waybar::modules {
|
|
|
|
struct Profile {
|
|
std::string name;
|
|
std::string driver;
|
|
};
|
|
|
|
class PowerProfilesDaemon : public ALabel {
|
|
public:
|
|
PowerProfilesDaemon(const std::string &, const Json::Value &);
|
|
~PowerProfilesDaemon() override;
|
|
auto update() -> void override;
|
|
void profileChangedCb(const Gio::DBus::Proxy::MapChangedProperties &,
|
|
const std::vector<Glib::ustring> &);
|
|
void busConnectedCb(Glib::RefPtr<Gio::AsyncResult> &r);
|
|
void getAllPropsCb(Glib::RefPtr<Gio::AsyncResult> &r);
|
|
void setPropCb(Glib::RefPtr<Gio::AsyncResult> &r);
|
|
void populateInitState();
|
|
bool handleToggle(GdkEventButton *const &e) override;
|
|
|
|
private:
|
|
// True if we're connected to the dbug interface. False if we're
|
|
// not.
|
|
bool connected_;
|
|
// Look for a profile name in the list of available profiles and
|
|
// switch activeProfile_ to it.
|
|
void switchToProfile(std::string const &);
|
|
// Used to toggle/display the profiles
|
|
std::vector<Profile> availableProfiles_;
|
|
// Points to the active profile in the profiles list
|
|
std::vector<Profile>::iterator activeProfile_;
|
|
// Current CSS class applied to the label
|
|
std::string currentStyle_;
|
|
// Format strings
|
|
std::string labelFormat_;
|
|
std::string tooltipFormat_;
|
|
// DBus Proxy used to track the current active profile
|
|
Glib::RefPtr<Gio::DBus::Proxy> powerProfilesProxy_;
|
|
sigc::connection powerProfileChangeSignal_;
|
|
};
|
|
|
|
} // namespace waybar::modules
|