This commit adds two new features to hyprbars:
1. Button hover background effect:
- Added `button_hover_bg_color` config option for Windows 11-style hover effect
- Hover rectangles are properly centered on button icons
- Close button (rightmost) extends to window edge
- All buttons include half padding on each side for even spacing
- Hover effect scales with bar_button_padding setting
2. Separate bar colors for active/inactive windows:
- Added `bar_color_inactive` config option
- Bar color now changes based on window focus state
- Matches Hyprland's border behavior (active/inactive)
- Smooth animated transition between colors
- Falls back to `bar_color` if `bar_color_inactive` is not set
Config example:
plugin:hyprbars:button_hover_bg_color = rgba(ffffff22)
plugin:hyprbars:bar_color = rgba(33333388)
plugin:hyprbars:bar_color_inactive = rgba(2E2E32FF)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* hyprexpo: Fixes for 40d8fa8
* csgo-vulkan-fix: Fixes for 40d8fa8
* hyprbars: Fixes for 40d8fa8
I am not entirely sure whether I was supposed to use fullWindowFocus()
or rawWindowFocus() in hyprbars/barDeco.cpp at line 220
* xtra-dispatchers: Fixes for 40d8fa8
I am not entirely sure whether I was supposed to use fullWindowFocus()
or rawWindowFocus() in xtra-dispatchers/main.cpp at lines 47 and 106
* hyprscrolling: Fixes for 40d8fa8
A lot of repeated code can be removed if it's safe to store
`Desktop::focusState()`, `Desktop::focusState()->monitor()` and
`Desktop::focusState()->window()` at the top of the
`CScrollingLayout::findBestNeighbor` function.
This change requires further review as I don't know if any of those
change during this function so I didn't wanna introduce any unexpected
issues.
I am not entirely sure whether I was supposed to use fullWindowFocus()
or rawWindowFocus() in xtra-dispatchers/main.cpp at lines 786, 789 and
1344
Ensure the center workspace picker correctly wraps and displays contiguous workspaces when using named or negative workspace IDs. The previous condition if (i > 0 && currentID <= firstID) prevented wrapping, so when the selected workspace was at the high end users saw empty slots after the center instead of the next active workspaces. Replace the condition with if (i > 0 && currentID == firstID) so the picker continues filling the visible slots with the next available workspaces and preserves screen real estate.
Behavioral notes
- Named workspaces that use negative IDs (for example -1337 and below) no longer break the picker layout.
- The picker now shows as many contiguous active workspaces as possible around the selected workspace instead of leaving trailing empty cards.
- The change is local to the center picker loop logic and preserves existing ordering and selection rules.