From dd650c1f3025475a77032e668f778d66559bd40d Mon Sep 17 00:00:00 2001 From: Stefano Amorelli Date: Sun, 15 Mar 2026 18:47:46 +0200 Subject: [PATCH 1/2] feat(hyprbars): add bar_inactive_color config option Allow setting a different bar background color for inactive windows. The existing focus tracking (m_bWindowHasFocus) now runs unconditionally instead of only when inactive_button_color is set, so bar_inactive_color works independently. --- hyprbars/barDeco.cpp | 9 +++++++-- hyprbars/main.cpp | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/hyprbars/barDeco.cpp b/hyprbars/barDeco.cpp index e9fbb4fce..7f05d8bce 100644 --- a/hyprbars/barDeco.cpp +++ b/hyprbars/barDeco.cpp @@ -588,8 +588,9 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) { static auto* const PENABLEBLUR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_blur")->getDataStaticPtr(); static auto* const PENABLEBLURGLOBAL = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "decoration:blur:enabled")->getDataStaticPtr(); static auto* const PINACTIVECOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:inactive_button_color")->getDataStaticPtr(); + static auto* const PINACTIVEBARCOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_inactive_color")->getDataStaticPtr(); - if (**PINACTIVECOLOR > 0) { + { bool currentWindowFocus = PWINDOW == Desktop::focusState()->window(); if (currentWindowFocus != m_bWindowHasFocus) { m_bWindowHasFocus = currentWindowFocus; @@ -597,7 +598,11 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) { } } - const CHyprColor DEST_COLOR = m_bForcedBarColor.value_or(**PCOLOR); + CHyprColor DEST_COLOR; + if (**PINACTIVEBARCOLOR > 0 && !m_bWindowHasFocus) + DEST_COLOR = CHyprColor(**PINACTIVEBARCOLOR); + else + DEST_COLOR = m_bForcedBarColor.value_or(**PCOLOR); if (DEST_COLOR != m_cRealBarColor->goal()) *m_cRealBarColor = DEST_COLOR; diff --git a/hyprbars/main.cpp b/hyprbars/main.cpp index 7c3dd9bf8..1924734e7 100644 --- a/hyprbars/main.cpp +++ b/hyprbars/main.cpp @@ -131,6 +131,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:enabled", Hyprlang::INT{1}); HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:icon_on_hover", Hyprlang::INT{0}); HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:inactive_button_color", Hyprlang::INT{0}); // unset + HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_inactive_color", Hyprlang::INT{0}); // unset HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:on_double_click", Hyprlang::STRING{""}); HyprlandAPI::addConfigKeyword(PHANDLE, "plugin:hyprbars:hyprbars-button", onNewButton, Hyprlang::SHandlerOptions{}); From cacdc9f78c3f847997cd76e2b71c43d77bae0500 Mon Sep 17 00:00:00 2001 From: Stefano Amorelli Date: Sun, 15 Mar 2026 19:50:44 +0200 Subject: [PATCH 2/2] fix(hyprbars): use -1 sentinel for bar_inactive_color default The previous default of INT{0} collided with rgba(00000000), which also evaluates to 0. This meant fully transparent colors could never be used as bar_inactive_color, since the > 0 check treated them as "unset". Switching to -1 as the sentinel and != -1 as the guard allows any valid color value, including fully transparent ones. --- hyprbars/barDeco.cpp | 2 +- hyprbars/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hyprbars/barDeco.cpp b/hyprbars/barDeco.cpp index 7f05d8bce..3bbec2986 100644 --- a/hyprbars/barDeco.cpp +++ b/hyprbars/barDeco.cpp @@ -599,7 +599,7 @@ void CHyprBar::renderPass(PHLMONITOR pMonitor, const float& a) { } CHyprColor DEST_COLOR; - if (**PINACTIVEBARCOLOR > 0 && !m_bWindowHasFocus) + if (**PINACTIVEBARCOLOR != -1 && !m_bWindowHasFocus) DEST_COLOR = CHyprColor(**PINACTIVEBARCOLOR); else DEST_COLOR = m_bForcedBarColor.value_or(**PCOLOR); diff --git a/hyprbars/main.cpp b/hyprbars/main.cpp index 1924734e7..c91a3953b 100644 --- a/hyprbars/main.cpp +++ b/hyprbars/main.cpp @@ -131,7 +131,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) { HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:enabled", Hyprlang::INT{1}); HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:icon_on_hover", Hyprlang::INT{0}); HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:inactive_button_color", Hyprlang::INT{0}); // unset - HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_inactive_color", Hyprlang::INT{0}); // unset + HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_inactive_color", Hyprlang::INT{-1}); // unset HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:on_double_click", Hyprlang::STRING{""}); HyprlandAPI::addConfigKeyword(PHANDLE, "plugin:hyprbars:hyprbars-button", onNewButton, Hyprlang::SHandlerOptions{});