mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-11-04 09:42:42 +01:00 
			
		
		
		
	Merge branch 'master' into master
This commit is contained in:
		@@ -88,8 +88,9 @@ void waybar::modules::Battery::refreshBatteries() {
 | 
			
		||||
      auto dir_name = node.path().filename();
 | 
			
		||||
      auto bat_defined = config_["bat"].isString();
 | 
			
		||||
      if (((bat_defined && dir_name == config_["bat"].asString()) || !bat_defined) &&
 | 
			
		||||
          fs::exists(node.path() / "capacity") && fs::exists(node.path() / "uevent") &&
 | 
			
		||||
          fs::exists(node.path() / "status") && fs::exists(node.path() / "type")) {
 | 
			
		||||
          (fs::exists(node.path() / "capacity") || fs::exists(node.path() / "charge_now")) &&
 | 
			
		||||
          fs::exists(node.path() / "uevent") && fs::exists(node.path() / "status") &&
 | 
			
		||||
          fs::exists(node.path() / "type")) {
 | 
			
		||||
        std::string type;
 | 
			
		||||
        std::ifstream(node.path() / "type") >> type;
 | 
			
		||||
 | 
			
		||||
@@ -168,14 +169,21 @@ const std::tuple<uint8_t, float, std::string, float> waybar::modules::Battery::g
 | 
			
		||||
 | 
			
		||||
      // Some battery will report current and charge in μA/μAh.
 | 
			
		||||
      // Scale these by the voltage to get μW/μWh.
 | 
			
		||||
      if (fs::exists(bat / "current_now")) {
 | 
			
		||||
      if (fs::exists(bat / "current_now") || fs::exists(bat / "current_avg")) {
 | 
			
		||||
        uint32_t voltage_now;
 | 
			
		||||
        uint32_t current_now;
 | 
			
		||||
        uint32_t charge_now;
 | 
			
		||||
        uint32_t charge_full;
 | 
			
		||||
        uint32_t charge_full_design;
 | 
			
		||||
        std::ifstream(bat / "voltage_now") >> voltage_now;
 | 
			
		||||
        std::ifstream(bat / "current_now") >> current_now;
 | 
			
		||||
        // Some batteries have only *_avg, not *_now
 | 
			
		||||
        if (fs::exists(bat / "voltage_now"))
 | 
			
		||||
          std::ifstream(bat / "voltage_now") >> voltage_now;
 | 
			
		||||
        else
 | 
			
		||||
          std::ifstream(bat / "voltage_avg") >> voltage_now;
 | 
			
		||||
        if (fs::exists(bat / "current_now"))
 | 
			
		||||
          std::ifstream(bat / "current_now") >> current_now;
 | 
			
		||||
        else
 | 
			
		||||
          std::ifstream(bat / "current_avg") >> current_now;
 | 
			
		||||
        std::ifstream(bat / "charge_full") >> charge_full;
 | 
			
		||||
        std::ifstream(bat / "charge_full_design") >> charge_full_design;
 | 
			
		||||
        if (fs::exists(bat / "charge_now"))
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@ UPower::UPower(const std::string& id, const Json::Value& config)
 | 
			
		||||
      showAltText(false) {
 | 
			
		||||
  box_.pack_start(icon_);
 | 
			
		||||
  box_.pack_start(label_);
 | 
			
		||||
  box_.set_name(name_);
 | 
			
		||||
  event_box_.add(box_);
 | 
			
		||||
 | 
			
		||||
  // Icon Size
 | 
			
		||||
@@ -67,6 +68,14 @@ UPower::UPower(const std::string& id, const Json::Value& config)
 | 
			
		||||
    box_.signal_query_tooltip().connect(sigc::mem_fun(*this, &UPower::show_tooltip_callback));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  upowerWatcher_id = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
 | 
			
		||||
                                      "org.freedesktop.UPower",
 | 
			
		||||
                                      G_BUS_NAME_WATCHER_FLAGS_AUTO_START,
 | 
			
		||||
                                      upowerAppear,
 | 
			
		||||
                                      upowerDisappear,
 | 
			
		||||
                                      this,
 | 
			
		||||
                                      NULL);
 | 
			
		||||
 | 
			
		||||
  GError* error = NULL;
 | 
			
		||||
  client = up_client_new_full(NULL, &error);
 | 
			
		||||
  if (client == NULL) {
 | 
			
		||||
@@ -105,6 +114,7 @@ UPower::~UPower() {
 | 
			
		||||
    g_dbus_connection_signal_unsubscribe(login1_connection, login1_id);
 | 
			
		||||
    login1_id = 0;
 | 
			
		||||
  }
 | 
			
		||||
  g_bus_unwatch_name(upowerWatcher_id);
 | 
			
		||||
  removeDevices();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -141,6 +151,17 @@ void UPower::prepareForSleep_cb(GDBusConnection* system_bus, const gchar* sender
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
void UPower::upowerAppear(GDBusConnection* conn, const gchar* name, const gchar* name_owner,
 | 
			
		||||
                          gpointer data) {
 | 
			
		||||
  UPower* up = static_cast<UPower*>(data);
 | 
			
		||||
  up->upowerRunning = true;
 | 
			
		||||
  up->event_box_.set_visible(true);
 | 
			
		||||
}
 | 
			
		||||
void UPower::upowerDisappear(GDBusConnection* conn, const gchar* name, gpointer data) {
 | 
			
		||||
  UPower* up = static_cast<UPower*>(data);
 | 
			
		||||
  up->upowerRunning = false;
 | 
			
		||||
  up->event_box_.set_visible(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void UPower::removeDevice(const gchar* objectPath) {
 | 
			
		||||
  std::lock_guard<std::mutex> guard(m_Mutex);
 | 
			
		||||
@@ -226,11 +247,13 @@ const std::string UPower::getDeviceStatus(UpDeviceState& state) {
 | 
			
		||||
    case UP_DEVICE_STATE_CHARGING:
 | 
			
		||||
    case UP_DEVICE_STATE_PENDING_CHARGE:
 | 
			
		||||
      return "charging";
 | 
			
		||||
    case UP_DEVICE_STATE_EMPTY:
 | 
			
		||||
    case UP_DEVICE_STATE_FULLY_CHARGED:
 | 
			
		||||
    case UP_DEVICE_STATE_DISCHARGING:
 | 
			
		||||
    case UP_DEVICE_STATE_PENDING_DISCHARGE:
 | 
			
		||||
      return "discharging";
 | 
			
		||||
    case UP_DEVICE_STATE_FULLY_CHARGED:
 | 
			
		||||
      return "full";
 | 
			
		||||
    case UP_DEVICE_STATE_EMPTY:
 | 
			
		||||
      return "empty";
 | 
			
		||||
    default:
 | 
			
		||||
      return "unknown-status";
 | 
			
		||||
  }
 | 
			
		||||
@@ -258,6 +281,9 @@ std::string UPower::timeToString(gint64 time) {
 | 
			
		||||
auto UPower::update() -> void {
 | 
			
		||||
  std::lock_guard<std::mutex> guard(m_Mutex);
 | 
			
		||||
 | 
			
		||||
  // Don't update widget if the UPower service isn't running
 | 
			
		||||
  if (!upowerRunning) return;
 | 
			
		||||
 | 
			
		||||
  UpDeviceKind  kind;
 | 
			
		||||
  UpDeviceState state;
 | 
			
		||||
  double        percentage;
 | 
			
		||||
@@ -344,7 +370,7 @@ auto UPower::update() -> void {
 | 
			
		||||
  label_.set_markup(onlySpaces ? "" : label_format);
 | 
			
		||||
 | 
			
		||||
  // Set icon
 | 
			
		||||
  if (!Gtk::IconTheme::get_default()->has_icon(icon_name)) {
 | 
			
		||||
  if (icon_name == NULL || !Gtk::IconTheme::get_default()->has_icon(icon_name)) {
 | 
			
		||||
    icon_name = (char*)"battery-missing-symbolic";
 | 
			
		||||
  }
 | 
			
		||||
  icon_.set_from_icon_name(icon_name, Gtk::ICON_SIZE_INVALID);
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,9 @@ uint UPowerTooltip::updateTooltip(Devices& devices) {
 | 
			
		||||
                 NULL);
 | 
			
		||||
 | 
			
		||||
    // Skip Line_Power and BAT0 devices
 | 
			
		||||
    if (kind == UP_DEVICE_KIND_LINE_POWER || strcmp(native_path, "BAT0") == 0) continue;
 | 
			
		||||
    if (kind == UP_DEVICE_KIND_LINE_POWER || native_path == NULL || strlen(native_path) == 0 ||
 | 
			
		||||
        strcmp(native_path, "BAT0") == 0)
 | 
			
		||||
      continue;
 | 
			
		||||
 | 
			
		||||
    Gtk::Box* modelBox = new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL);
 | 
			
		||||
    box->add(*modelBox);
 | 
			
		||||
@@ -77,6 +79,7 @@ uint UPowerTooltip::updateTooltip(Devices& devices) {
 | 
			
		||||
    modelBox->add(*deviceIcon);
 | 
			
		||||
 | 
			
		||||
    // Set model
 | 
			
		||||
    if (model == NULL) model = (gchar*)"";
 | 
			
		||||
    Gtk::Label* modelLabel = new Gtk::Label(model);
 | 
			
		||||
    modelBox->add(*modelLabel);
 | 
			
		||||
 | 
			
		||||
@@ -86,7 +89,7 @@ uint UPowerTooltip::updateTooltip(Devices& devices) {
 | 
			
		||||
    // Set icon
 | 
			
		||||
    Gtk::Image* icon = new Gtk::Image();
 | 
			
		||||
    icon->set_pixel_size(iconSize);
 | 
			
		||||
    if (!Gtk::IconTheme::get_default()->has_icon(icon_name)) {
 | 
			
		||||
    if (icon_name == NULL || !Gtk::IconTheme::get_default()->has_icon(icon_name)) {
 | 
			
		||||
      icon_name = (char*)"battery-missing-symbolic";
 | 
			
		||||
    }
 | 
			
		||||
    icon->set_from_icon_name(icon_name, Gtk::ICON_SIZE_INVALID);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user