Waybar/include/modules/backlight.hpp

70 lines
1.9 KiB
C++
Raw Normal View History

#pragma once
#include <optional>
#include <string>
#include <string_view>
#include <vector>
2022-11-24 11:28:52 +00:00
#include "ALabel.hpp"
#include "giomm/dbusproxy.h"
#include "util/json.hpp"
#include "util/sleeper_thread.hpp"
struct udev;
struct udev_device;
namespace waybar::modules {
2022-11-24 11:28:52 +00:00
class Backlight : public ALabel {
class BacklightDev {
2019-04-18 15:52:00 +00:00
public:
BacklightDev() = default;
BacklightDev(std::string name, int actual, int max, bool powered);
2022-04-06 06:37:19 +00:00
std::string_view name() const;
int get_actual() const;
void set_actual(int actual);
int get_max() const;
void set_max(int max);
bool get_powered() const;
void set_powered(bool powered);
2019-04-18 15:52:00 +00:00
friend inline bool operator==(const BacklightDev &lhs, const BacklightDev &rhs) {
return lhs.name_ == rhs.name_ && lhs.actual_ == rhs.actual_ && lhs.max_ == rhs.max_;
}
2019-04-18 15:52:00 +00:00
private:
std::string name_;
2022-04-06 06:37:19 +00:00
int actual_ = 1;
int max_ = 1;
bool powered_ = true;
};
2019-04-18 15:52:00 +00:00
public:
Backlight(const std::string &, const Json::Value &);
2023-03-02 13:57:07 +00:00
virtual ~Backlight();
auto update() -> void override;
2019-04-18 15:52:00 +00:00
private:
template <class ForwardIt>
2019-04-18 15:52:00 +00:00
static const BacklightDev *best_device(ForwardIt first, ForwardIt last, std::string_view);
template <class ForwardIt, class Inserter>
2019-04-18 15:52:00 +00:00
static void upsert_device(ForwardIt first, ForwardIt last, Inserter inserter, udev_device *dev);
template <class ForwardIt, class Inserter>
2019-04-18 15:52:00 +00:00
static void enumerate_devices(ForwardIt first, ForwardIt last, Inserter inserter, udev *udev);
2023-03-02 13:57:07 +00:00
bool handleScroll(GdkEventScroll *e) override;
2022-04-06 06:37:19 +00:00
const std::string preferred_device_;
static constexpr int EPOLL_MAX_EVENTS = 16;
std::optional<BacklightDev> previous_best_;
2022-04-06 06:37:19 +00:00
std::string previous_format_;
2022-04-06 06:37:19 +00:00
std::mutex udev_thread_mutex_;
std::vector<BacklightDev> devices_;
// thread must destruct before shared data
2019-05-29 15:53:22 +00:00
util::SleeperThread udev_thread_;
Glib::RefPtr<Gio::DBus::Proxy> login_proxy_;
};
2019-04-18 15:52:00 +00:00
} // namespace waybar::modules