Compare commits

...
Sign in to create a new pull request.

11 commits

Author SHA1 Message Date
ab5016c9bc
systemd: declare known incompatible desktop environments 2026-08-02 13:43:59 -07:00
Fedora Release Engineering
9d96345347 Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild 2026-07-17 08:42:18 +00:00
František Zatloukal
0ddcc56e20 Rebuilt for fmt/spdlog 2026-06-25 12:41:56 +02:00
Jerry James
ed30418b47 Migrate from FontAwesome 6.x to 7.x 2026-05-27 11:42:19 -06:00
028d43f0ba
Rebuild (jsoncpp) 2026-03-22 16:36:09 +01:00
Tomasz Hołubowicz
c5fe285571 Add patch fixing hot update loop 2026-02-10 09:25:28 +01:00
Tomasz Hołubowicz
63cf240c0e Update to 0.15.0 2026-02-07 13:52:58 +01:00
Fedora Release Engineering
4346efe1b4 Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild 2026-01-17 20:08:02 +00:00
Jitka Plesnikova
14a6c5fd9a Rebuild for new gpsd 2026-01-14 11:47:55 +01:00
7364ba7c37
Update to 0.14.0 (#2387223) 2025-08-10 15:44:40 -07:00
Fedora Release Engineering
82b6a9d129 Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild 2025-07-25 20:18:16 +00:00
8 changed files with 228 additions and 91 deletions

View file

@ -0,0 +1,142 @@
From c9a7cbbdb385521f992d60539daa6a94d403d253 Mon Sep 17 00:00:00 2001
From: Austin Horstman <khaneliman12@gmail.com>
Date: Mon, 9 Feb 2026 15:26:23 -0600
Subject: [PATCH 1/2] fix(image): treat missing interval as once
PR #4390 enabled millisecond intervals but changed image interval parsing so a missing interval could resolve to 1ms. That creates a hot update loop and can spike CPU and destabilize rendering in drawer/group setups (issue #4835).
Use explicit semantics: missing, null, non-numeric, or <=0 interval is treated as "once" (max sleep), while positive numeric values still support ms precision with a 1ms floor. This keeps the intended feature (sub-second polling when requested) without defaulting to busy looping.
Also align waybar-image(5) docs with runtime behavior.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
---
man/waybar-image.5.scd | 3 ++-
src/modules/image.cpp | 27 ++++++++++++++++-----------
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/man/waybar-image.5.scd b/man/waybar-image.5.scd
index 8c991265e..8be182a6f 100644
--- a/man/waybar-image.5.scd
+++ b/man/waybar-image.5.scd
@@ -26,7 +26,8 @@ The *image* module displays an image from a path.
*interval*: ++
typeof: integer or float ++
The interval (in seconds) to re-render the image. ++
- Minimum value is 0.001 (1ms). Values smaller than 1ms will be set to 1ms. ++
+ If set to a positive value, the minimum is 0.001 (1ms). Values smaller than 1ms will be set to 1ms. ++
+ Zero or negative values are treated as "once". ++
This is useful if the contents of *path* changes. ++
If no *interval* is defined, the image will only be rendered once.
diff --git a/src/modules/image.cpp b/src/modules/image.cpp
index 189deee6a..98bf3c46f 100644
--- a/src/modules/image.cpp
+++ b/src/modules/image.cpp
@@ -14,22 +14,27 @@ waybar::modules::Image::Image(const std::string& id, const Json::Value& config)
size_ = config["size"].asInt();
- interval_ = config_["interval"] == "once"
- ? std::chrono::milliseconds::max()
- : std::chrono::milliseconds(std::max(
- 1L, // Minimum 1ms due to millisecond precision
- static_cast<long>(
- (config_["interval"].isNumeric() ? config_["interval"].asDouble() : 0) *
- 1000)));
+ const auto once = std::chrono::milliseconds::max();
+ if (!config_.isMember("interval") || config_["interval"].isNull() ||
+ config_["interval"] == "once") {
+ interval_ = once;
+ } else if (config_["interval"].isNumeric()) {
+ const auto interval_seconds = config_["interval"].asDouble();
+ if (interval_seconds <= 0) {
+ interval_ = once;
+ } else {
+ interval_ =
+ std::chrono::milliseconds(std::max(1L, // Minimum 1ms due to millisecond precision
+ static_cast<long>(interval_seconds * 1000)));
+ }
+ } else {
+ interval_ = once;
+ }
if (size_ == 0) {
size_ = 16;
}
- if (interval_.count() == 0) {
- interval_ = std::chrono::milliseconds::max();
- }
-
delayWorker();
}
From 3b478ee6a53f153f35f35729c26bf11b15f692a2 Mon Sep 17 00:00:00 2001
From: Austin Horstman <khaneliman12@gmail.com>
Date: Mon, 9 Feb 2026 15:53:44 -0600
Subject: [PATCH 2/2] chore: format
Some unrelated files failed formatting.
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
---
include/util/command.hpp | 4 +---
src/modules/hyprland/window.cpp | 4 +---
src/modules/hyprland/windowcount.cpp | 6 ++----
3 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/include/util/command.hpp b/include/util/command.hpp
index 58c59a965..89d4372a1 100644
--- a/include/util/command.hpp
+++ b/include/util/command.hpp
@@ -172,8 +172,6 @@ inline int32_t forkExec(const std::string& cmd, const std::string& output_name)
return pid;
}
-inline int32_t forkExec(const std::string& cmd) {
- return forkExec(cmd, "");
-}
+inline int32_t forkExec(const std::string& cmd) { return forkExec(cmd, ""); }
} // namespace waybar::util::command
diff --git a/src/modules/hyprland/window.cpp b/src/modules/hyprland/window.cpp
index e02a76917..197ed0920 100644
--- a/src/modules/hyprland/window.cpp
+++ b/src/modules/hyprland/window.cpp
@@ -237,9 +237,7 @@ void Window::queryActiveWorkspace() {
}
}
-void Window::onEvent(const std::string& ev) {
- dp.emit();
-}
+void Window::onEvent(const std::string& ev) { dp.emit(); }
void Window::setClass(const std::string& classname, bool enable) {
if (enable) {
diff --git a/src/modules/hyprland/windowcount.cpp b/src/modules/hyprland/windowcount.cpp
index 487b00834..d881a3616 100644
--- a/src/modules/hyprland/windowcount.cpp
+++ b/src/modules/hyprland/windowcount.cpp
@@ -38,7 +38,7 @@ WindowCount::~WindowCount() {
auto WindowCount::update() -> void {
std::lock_guard<std::mutex> lg(mutex_);
-
+
queryActiveWorkspace();
std::string format = config_["format"].asString();
@@ -125,9 +125,7 @@ void WindowCount::queryActiveWorkspace() {
}
}
-void WindowCount::onEvent(const std::string& ev) {
- dp.emit();
-}
+void WindowCount::onEvent(const std::string& ev) { dp.emit(); }
void WindowCount::setClass(const std::string& classname, bool enable) {
if (enable) {

View file

@ -1 +1 @@
SHA512 (waybar-0.13.0.tar.gz) = 362b82fa0f2e0a3e882ab17f1234ca27bc76eb80267385fb56397c23ffe88b4a8376bb62f4ff94202f7b3995795c4010ebb57aa39b8c2722c8b196c09dd0938e
SHA512 (waybar-0.15.0.tar.gz) = f267c1ad2af1e4e74c3d8c966009a013c0b5c2849bfaf312b3b91e9d6f6856dc5466118f308208948118ea1de0cf70986cc3b592cc830f84d634b8518c5b8c9e

View file

@ -1,25 +0,0 @@
From 460b19ba1b83b873795e2e65ce60efadc7a3a906 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martynas=20Maciulevi=C4=8Dius?=
<martynas.maciulevicius@pm.me>
Date: Thu, 26 Jun 2025 20:34:18 +0300
Subject: [PATCH] Fix default icon in tray module
---
src/util/gtk_icon.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/util/gtk_icon.cpp b/src/util/gtk_icon.cpp
index 4b4d3d69d..73f77284e 100644
--- a/src/util/gtk_icon.cpp
+++ b/src/util/gtk_icon.cpp
@@ -25,6 +25,10 @@ Glib::RefPtr<Gdk::Pixbuf> DefaultGtkIconThemeWrapper::load_icon(
auto icon_info = default_theme->lookup_icon(name, tmp_size, flags);
+ if (icon_info == nullptr) {
+ return default_theme->load_icon(name, tmp_size, flags);
+ }
+
if (style.get() == nullptr) {
return icon_info.load_icon();
}

View file

@ -1,28 +0,0 @@
From b6c13ba58be6eb68e446c4bda9cf981ab20a5b7d Mon Sep 17 00:00:00 2001
From: peelz <peelz.dev@gmail.com>
Date: Tue, 1 Jul 2025 10:37:31 -0400
Subject: [PATCH] fix: 'ethernet' network state should have precedence over
'disabled'
---
src/modules/network.cpp | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/modules/network.cpp b/src/modules/network.cpp
index 955f9f1de..cc096f727 100644
--- a/src/modules/network.cpp
+++ b/src/modules/network.cpp
@@ -272,11 +272,9 @@ void waybar::modules::Network::worker() {
const std::string waybar::modules::Network::getNetworkState() const {
#ifdef WANT_RFKILL
- if (rfkill_.getState()) return "disabled";
+ if (rfkill_.getState() && ifid_ == -1) return "disabled";
#endif
- if (ifid_ == -1) {
- return "disconnected";
- }
+ if (ifid_ == -1) return "disconnected";
if (!carrier_) return "disconnected";
if (ipaddr_.empty() && ipaddr6_.empty()) return "linked";
if (essid_.empty()) return "ethernet";

View file

@ -1,30 +0,0 @@
From 7505e2c3f3cc92bdbc1ef3a2650a2c32170f8b9e Mon Sep 17 00:00:00 2001
From: mexanoz <mexanoz@proton.me>
Date: Fri, 27 Jun 2025 20:54:38 +0500
Subject: [PATCH] fix hyprland/language layout parsing
---
src/modules/hyprland/language.cpp | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/modules/hyprland/language.cpp b/src/modules/hyprland/language.cpp
index 2989926a6..3f141bbd8 100644
--- a/src/modules/hyprland/language.cpp
+++ b/src/modules/hyprland/language.cpp
@@ -70,8 +70,14 @@ void Language::onEvent(const std::string& ev) {
// Last comma before variants parenthesis, eg:
// activelayout>>micro-star-int'l-co.,-ltd.-msi-gk50-elite-gaming-keyboard,English (US, intl.,
// with dead keys)
- std::string beforParenthesis(begin(ev), begin(ev) + ev.find_last_of('('));
- auto layoutName = ev.substr(beforParenthesis.find_last_of(',') + 1);
+ std::string beforeParenthesis;
+ auto parenthesisPos = ev.find_last_of('(');
+ if (parenthesisPos == std::string::npos) {
+ beforeParenthesis = ev;
+ } else {
+ beforeParenthesis = std::string(begin(ev), begin(ev) + parenthesisPos);
+ }
+ auto layoutName = ev.substr(beforeParenthesis.find_last_of(',') + 1);
if (config_.isMember("keyboard-name") && kbName != config_["keyboard-name"].asString())
return; // ignore

View file

@ -21,7 +21,7 @@ index 7e830285..e0310372 100644
* {
- /* `otf-font-awesome` is required to be installed for icons */
- font-family: FontAwesome, Roboto, Helvetica, Arial, sans-serif;
+ font-family: 'Noto Sans Mono', 'Font Awesome 6 Free', 'Font Awesome 6 Brands', monospace;
+ font-family: 'Noto Sans Mono', 'Font Awesome 7 Free', 'Font Awesome 7 Brands', monospace;
font-size: 13px;
}

View file

@ -0,0 +1,39 @@
From f67dcce02d02ef1dc8e78efc565647b6fe8656d4 Mon Sep 17 00:00:00 2001
From: Aleksei Bavshin <alebastr89@gmail.com>
Date: Sat, 4 Jul 2026 22:51:31 -0700
Subject: [PATCH] systemd: declare known incompatible desktop environments
Waybar can be used with many different Wayland compositors. Some of
those provide distinct user session targets, some aren't. The usual
recommendation for the latter ones is to allow manual startup of the
graphical-session.target and run "systemd --user start ..." command on
init.
To ensure that all of the above is supported, we have to keep the
service bound to the graphical-session.target. However, this may impact
unrelated sessions on machines with multiple DEs installed.
Instead of listing dozens of supported Wayland compositors and breaking
any configs that explicitly use graphical-session.target, keep a list
of known sessions where Waybar is not wanted.
---
resources/waybar.service.in | 3 +++
1 file changed, 3 insertions(+)
diff --git a/resources/waybar.service.in b/resources/waybar.service.in
index 18bac54c..9a54e5ba 100644
--- a/resources/waybar.service.in
+++ b/resources/waybar.service.in
@@ -6,6 +6,9 @@ After=graphical-session.target
Requisite=graphical-session.target
[Service]
+ExecCondition=sh -c '[ -n "$WAYLAND_DISPLAY" ]'
+# Known incompatible Wayland sessions
+ExecCondition=/usr/lib/systemd/systemd-xdg-autostart-condition "" "GNOME:KDE:COSMIC:X-Cinnamon"
ExecStart=@prefix@/bin/waybar
ExecReload=kill -SIGUSR2 $MAINPID
Restart=on-failure
--
2.55.0

View file

@ -1,6 +1,6 @@
Name: waybar
Version: 0.13.0
Release: 2%{?dist}
Version: 0.15.0
Release: 6%{?dist}
Summary: Highly customizable Wayland bar for Sway and Wlroots based compositors
# Source files/overall project licensed as MIT, but
# - BSL-1.0
@ -21,10 +21,14 @@ Source: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
# - Remove several modules from the config
# - Switch font to monospace
Patch: waybar-fedora-config-changes.patch
# Fixes for some 0.13.0 regressions
Patch: %{url}/commit/460b19ba.patch#/waybar-0.13.0-Fix-default-icon-in-tray-module.patch
Patch: %{url}/commit/7505e2c3.patch#/waybar-0.13.0-fix-hyprland-language-layout-parsing.patch
Patch: %{url}/commit/b6c13ba5.patch#/waybar-0.13.0-fix-ethernet-network-state-should-have-precedence-ov.patch
# Downstream changes to the systemd service:
# - Check that the environment is Wayland and is not listed as unsupported
Patch: waybar-fedora-systemd-target-conflicts.patch
# Fix for hot update loop that can spike CPU and
# destabilize rendering in drawer/group setups
# https://github.com/Alexays/Waybar/pull/4838
Patch: fix-treat-missing-interval-as-once.patch
BuildRequires: gcc
BuildRequires: gcc-c++
@ -62,8 +66,13 @@ BuildRequires: pkgconfig(wireplumber-0.5)
BuildRequires: pkgconfig(xkbregistry)
Enhances: sway
%if 0%{?fedora} < 45
Recommends: font(fontawesome6free)
Recommends: font(fontawesome6brands)
%else
Recommends: font(fontawesome7free)
Recommends: font(fontawesome7brands)
%endif
%description
%{summary}.
@ -101,6 +110,36 @@ Recommends: font(fontawesome6brands)
%{_userunitdir}/%{name}.service
%changelog
* Sun Aug 02 2026 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.15.0-6
- systemd: declare known incompatible desktop environments
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.15.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
* Thu Jun 25 2026 František Zatloukal <fzatlouk@redhat.com> - 0.15.0-4
- Rebuilt for fmt/spdlog
* Wed May 27 2026 Jerry James <loganjerry@gmail.com> - 0.15.0-3
- Migrate from FontAwesome 6.x to 7.x
* Sun Mar 22 2026 Björn Esser <besser82@fedoraproject.org> - 0.15.0-2
- Rebuild (jsoncpp)
* Sat Feb 07 2026 Tomasz Hołubowicz <mail@alternateved.com> - 0.15.0-1
- Update to 0.15.0
* Sat Jan 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 0.14.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Wed Jan 14 2026 Jitka Plesnikova <jplesnik@redhat.com> - 0.14.0-2
- Rebuild for new gpsd
* Sun Aug 10 2025 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.14.0-1
- Update to 0.14.0 (#2387223)
* Fri Jul 25 2025 Fedora Release Engineering <releng@fedoraproject.org> - 0.13.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Sat Jul 12 2025 Aleksei Bavshin <alebastr@fedoraproject.org> - 0.13.0-2
- Add patches for known 0.13.0 regressions (#2379698)