hyprbars: add enabled config option

This commit is contained in:
Vaxry 2025-05-17 15:08:30 +02:00
parent c491d28314
commit b8c75de20a
No known key found for this signature in database
GPG Key ID: 665806380871D640
4 changed files with 29 additions and 17 deletions

View File

@ -22,6 +22,8 @@ plugin {
}
```
`enabled` -> (bool) whether to enable the bars
`bar_color` -> (col) bar's background color
`bar_height` -> (int) bar's height (default `15`)

View File

@ -20,7 +20,7 @@ CHyprBar::CHyprBar(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow) {
static auto* const PCOLOR = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->getDataStaticPtr();
const auto PMONITOR = pWindow->m_monitor.lock();
PMONITOR->m_scheduledRecalc = true;
PMONITOR->m_scheduledRecalc = true;
//button events
m_pMouseButtonCallback = HyprlandAPI::registerCallbackDynamic(
@ -54,6 +54,7 @@ CHyprBar::~CHyprBar() {
SDecorationPositioningInfo CHyprBar::getPositioningInfo() {
static auto* const PHEIGHT = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_height")->getDataStaticPtr();
static auto* const PENABLED = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:enabled")->getDataStaticPtr();
static auto* const PPRECEDENCE = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_precedence_over_border")->getDataStaticPtr();
SDecorationPositioningInfo info;
@ -61,7 +62,7 @@ SDecorationPositioningInfo CHyprBar::getPositioningInfo() {
info.edges = DECORATION_EDGE_TOP;
info.priority = **PPRECEDENCE ? 10005 : 5000;
info.reserved = true;
info.desiredExtents = {{0, m_hidden ? 0 : **PHEIGHT}, {0, 0}};
info.desiredExtents = {{0, m_hidden || !**PENABLED ? 0 : **PHEIGHT}, {0, 0}};
return info;
}
@ -495,7 +496,14 @@ void CHyprBar::renderBarButtonsText(CBox* barBox, const float scale, const float
}
void CHyprBar::draw(PHLMONITOR pMonitor, const float& a) {
if (m_hidden || !validMapped(m_pWindow))
static auto* const PENABLED = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:enabled")->getDataStaticPtr();
if (m_bLastEnabledState != **PENABLED) {
m_bLastEnabledState = **PENABLED;
g_pDecorationPositioner->repositionDeco(this);
}
if (m_hidden || !validMapped(m_pWindow) || !**PENABLED)
return;
const auto PWINDOW = m_pWindow.lock();
@ -678,7 +686,7 @@ void CHyprBar::updateRules() {
m_bForcedBarColor = std::nullopt;
m_bForcedTitleColor = std::nullopt;
m_hidden = false;
m_hidden = false;
for (auto& r : rules) {
applyRule(r);

View File

@ -57,9 +57,10 @@ class CHyprBar : public IHyprWindowDecoration {
SP<CTexture> m_pButtonsTex;
bool m_bWindowSizeChanged = false;
bool m_hidden = false;
bool m_hidden = false;
bool m_bTitleColorChanged = false;
bool m_bButtonHovered = false;
bool m_bLastEnabledState = false;
std::optional<CHyprColor> m_bForcedBarColor;
std::optional<CHyprColor> m_bForcedTitleColor;
@ -83,23 +84,23 @@ class CHyprBar : public IHyprWindowDecoration {
void handleDownEvent(SCallbackInfo& info, std::optional<ITouch::SDownEvent> touchEvent);
void handleUpEvent(SCallbackInfo& info);
void handleMovement();
bool doButtonPress(Hyprlang::INT* const* PBARPADDING, Hyprlang::INT* const* PBARBUTTONPADDING, Hyprlang::INT* const* PHEIGHT, Vector2D COORDS, bool BUTTONSRIGHT);
bool doButtonPress(Hyprlang::INT* const* PBARPADDING, Hyprlang::INT* const* PBARBUTTONPADDING, Hyprlang::INT* const* PHEIGHT, Vector2D COORDS, bool BUTTONSRIGHT);
CBox assignedBoxGlobal();
CBox assignedBoxGlobal();
SP<HOOK_CALLBACK_FN> m_pMouseButtonCallback;
SP<HOOK_CALLBACK_FN> m_pTouchDownCallback;
SP<HOOK_CALLBACK_FN> m_pTouchUpCallback;
SP<HOOK_CALLBACK_FN> m_pMouseButtonCallback;
SP<HOOK_CALLBACK_FN> m_pTouchDownCallback;
SP<HOOK_CALLBACK_FN> m_pTouchUpCallback;
SP<HOOK_CALLBACK_FN> m_pTouchMoveCallback;
SP<HOOK_CALLBACK_FN> m_pMouseMoveCallback;
SP<HOOK_CALLBACK_FN> m_pTouchMoveCallback;
SP<HOOK_CALLBACK_FN> m_pMouseMoveCallback;
std::string m_szLastTitle;
std::string m_szLastTitle;
bool m_bDraggingThis = false;
bool m_bTouchEv = false;
bool m_bDragPending = false;
bool m_bCancelledDown = false;
bool m_bDraggingThis = false;
bool m_bTouchEv = false;
bool m_bDragPending = false;
bool m_bCancelledDown = false;
// store hover state for buttons as a bitfield
unsigned int m_iButtonHoverState = 0;

View File

@ -140,6 +140,7 @@ APICALL EXPORT PLUGIN_DESCRIPTION_INFO PLUGIN_INIT(HANDLE handle) {
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_buttons_alignment", Hyprlang::STRING{"right"});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_padding", Hyprlang::INT{7});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:bar_button_padding", Hyprlang::INT{5});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:enabled", Hyprlang::INT{1});
HyprlandAPI::addConfigValue(PHANDLE, "plugin:hyprbars:icon_on_hover", Hyprlang::INT{0});
HyprlandAPI::addConfigKeyword(PHANDLE, "hyprbars-button", onNewButton, Hyprlang::SHandlerOptions{});