mirror of
https://github.com/rad4day/Waybar.git
synced 2023-12-21 10:22:59 +01:00
refactor(rfkill): poll rfkill events from Glib main loop
Open rfkill device only once per module. Remove rfkill threads and use `Glib::signal_io` as a more efficient way to poll the rfkill device. Handle runtime errors from rfkill and stop polling of the device instead of crashing waybar.
This commit is contained in:
@ -1,19 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include <glibmm/iochannel.h>
|
||||
#include <linux/rfkill.h>
|
||||
#include <sigc++/signal.h>
|
||||
#include <sigc++/trackable.h>
|
||||
|
||||
namespace waybar::util {
|
||||
|
||||
class Rfkill {
|
||||
class Rfkill : public sigc::trackable {
|
||||
public:
|
||||
Rfkill(enum rfkill_type rfkill_type);
|
||||
~Rfkill() = default;
|
||||
void waitForEvent();
|
||||
~Rfkill();
|
||||
bool getState() const;
|
||||
|
||||
sigc::signal<void(struct rfkill_event&)> on_update;
|
||||
|
||||
private:
|
||||
enum rfkill_type rfkill_type_;
|
||||
int state_ = 0;
|
||||
bool state_ = false;
|
||||
int fd_ = -1;
|
||||
|
||||
bool on_event(Glib::IOCondition cond);
|
||||
};
|
||||
|
||||
} // namespace waybar::util
|
||||
|
Reference in New Issue
Block a user