refactor: execute update on idle
parent
4865a9ad6c
commit
aa385e28b6
|
@ -272,12 +272,15 @@ void waybar::Bar::getModules(const Factory& factory, const std::string& pos) {
|
|||
modules_right_.emplace_back(module);
|
||||
}
|
||||
module->dp.connect([module, &name] {
|
||||
// Fix https://github.com/Alexays/Waybar/issues/320, proper way?
|
||||
Glib::signal_idle().connect_once([module, &name] {
|
||||
try {
|
||||
module->update();
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << name.asString() + ": " + e.what() << std::endl;
|
||||
}
|
||||
});
|
||||
});
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << e.what() << std::endl;
|
||||
}
|
||||
|
|
|
@ -42,8 +42,6 @@ waybar::modules::Network::~Network() {
|
|||
nl_socket_drop_membership(ev_sock_, RTNLGRP_LINK);
|
||||
nl_socket_drop_membership(ev_sock_, RTNLGRP_IPV4_IFADDR);
|
||||
nl_socket_drop_membership(ev_sock_, RTNLGRP_IPV6_IFADDR);
|
||||
nl_socket_drop_membership(ev_sock_, RTNLGRP_IPV4_ROUTE);
|
||||
nl_socket_drop_membership(ev_sock_, RTNLGRP_IPV6_ROUTE);
|
||||
nl_close(ev_sock_);
|
||||
nl_socket_free(ev_sock_);
|
||||
}
|
||||
|
@ -64,8 +62,6 @@ void waybar::modules::Network::createInfoSocket() {
|
|||
nl_socket_add_membership(ev_sock_, RTNLGRP_LINK);
|
||||
nl_socket_add_membership(ev_sock_, RTNLGRP_IPV4_IFADDR);
|
||||
nl_socket_add_membership(ev_sock_, RTNLGRP_IPV6_IFADDR);
|
||||
nl_socket_add_membership(ev_sock_, RTNLGRP_IPV4_ROUTE);
|
||||
nl_socket_add_membership(ev_sock_, RTNLGRP_IPV6_ROUTE);
|
||||
efd_ = epoll_create1(EPOLL_CLOEXEC);
|
||||
if (efd_ < 0) {
|
||||
throw std::runtime_error("Can't create epoll");
|
||||
|
@ -108,10 +104,13 @@ void waybar::modules::Network::createEventSocket() {
|
|||
|
||||
void waybar::modules::Network::worker() {
|
||||
thread_timer_ = [this] {
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
if (ifid_ > 0) {
|
||||
getInfo();
|
||||
dp.emit();
|
||||
}
|
||||
}
|
||||
thread_timer_.sleep_for(interval_);
|
||||
};
|
||||
std::array<struct epoll_event, EPOLL_MAX> events{};
|
||||
|
@ -133,9 +132,7 @@ void waybar::modules::Network::worker() {
|
|||
auto waybar::modules::Network::update() -> void {
|
||||
std::string connectiontype;
|
||||
std::string tooltip_format;
|
||||
if (config_["tooltip-format"].isString()) {
|
||||
tooltip_format = config_["tooltip-format"].asString();
|
||||
}
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
if (ifid_ <= 0 || !linked_) {
|
||||
if (config_["format-disconnected"].isString()) {
|
||||
default_format_ = config_["format-disconnected"].asString();
|
||||
|
@ -187,8 +184,13 @@ auto waybar::modules::Network::update() -> void {
|
|||
fmt::arg("cidr", cidr_),
|
||||
fmt::arg("frequency", frequency_),
|
||||
fmt::arg("icon", getIcon(signal_strength_, connectiontype)));
|
||||
if (text != label_.get_label()) {
|
||||
label_.set_markup(text);
|
||||
}
|
||||
if (tooltipEnabled()) {
|
||||
if (tooltip_format.empty() && config_["tooltip-format"].isString()) {
|
||||
tooltip_format = config_["tooltip-format"].asString();
|
||||
}
|
||||
if (!tooltip_format.empty()) {
|
||||
auto tooltip_text = fmt::format(tooltip_format,
|
||||
fmt::arg("essid", essid_),
|
||||
|
@ -199,10 +201,11 @@ auto waybar::modules::Network::update() -> void {
|
|||
fmt::arg("ipaddr", ipaddr_),
|
||||
fmt::arg("cidr", cidr_),
|
||||
fmt::arg("frequency", frequency_),
|
||||
fmt::arg("icon", getIcon(signal_strength_,
|
||||
connectiontype)));
|
||||
fmt::arg("icon", getIcon(signal_strength_, connectiontype)));
|
||||
if (label_.get_tooltip_text() != text) {
|
||||
label_.set_tooltip_text(tooltip_text);
|
||||
} else {
|
||||
}
|
||||
} else if (label_.get_tooltip_text() != text) {
|
||||
label_.set_tooltip_text(text);
|
||||
}
|
||||
}
|
||||
|
@ -464,7 +467,7 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
|
|||
net->ifid_ = rtif->ifi_index;
|
||||
}
|
||||
// Check for valid interface
|
||||
if (rtif->ifi_index == static_cast<int>(net->ifid_)) {
|
||||
if (rtif->ifi_index == net->ifid_) {
|
||||
// Get Iface and WIFI info
|
||||
net->getInterfaceAddress();
|
||||
net->thread_timer_.wake_up();
|
||||
|
@ -472,7 +475,7 @@ int waybar::modules::Network::handleEvents(struct nl_msg *msg, void *data) {
|
|||
} else if (nh->nlmsg_type == RTM_DELADDR) {
|
||||
auto rtif = static_cast<struct ifinfomsg *>(NLMSG_DATA(nh));
|
||||
// Check for valid interface
|
||||
if (rtif->ifi_index == static_cast<int>(net->ifid_)) {
|
||||
if (rtif->ifi_index == net->ifid_) {
|
||||
net->ipaddr_.clear();
|
||||
net->netmask_.clear();
|
||||
net->cidr_ = 0;
|
||||
|
|
Loading…
Reference in New Issue