diff --git a/src/Window.hpp b/src/Window.hpp index c159340c..ffa447fc 100644 --- a/src/Window.hpp +++ b/src/Window.hpp @@ -16,6 +16,7 @@ struct SWindowAdditionalConfigData { std::string animationStyle = ""; int rounding = -1; // -1 means no bool forceNoBlur = false; + bool forceOpaque = false; }; class CWindow { diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 15ff0533..cdc8f93f 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -35,6 +35,7 @@ CKeybindManager::CKeybindManager() { m_mDispatchers["submap"] = setSubmap; m_mDispatchers["pass"] = pass; m_mDispatchers["layoutmsg"] = layoutmsg; + m_mDispatchers["toggleopaque"] = toggleOpaque; m_tScrollTimer.reset(); } @@ -1309,4 +1310,15 @@ void CKeybindManager::pass(std::string regexp) { void CKeybindManager::layoutmsg(std::string msg) { SLayoutMessageHeader hd = {g_pCompositor->m_pLastWindow}; g_pLayoutManager->getCurrentLayout()->layoutMessage(hd, msg); +} + +void CKeybindManager::toggleOpaque(std::string unused) { + const auto PWINDOW = g_pCompositor->m_pLastWindow; + + if (!g_pCompositor->windowValidMapped(PWINDOW)) + return; + + PWINDOW->m_sAdditionalConfigData.forceOpaque = !PWINDOW->m_sAdditionalConfigData.forceOpaque; + + g_pHyprRenderer->damageWindow(PWINDOW); } \ No newline at end of file diff --git a/src/managers/KeybindManager.hpp b/src/managers/KeybindManager.hpp index 5ac98534..2e97d747 100644 --- a/src/managers/KeybindManager.hpp +++ b/src/managers/KeybindManager.hpp @@ -97,6 +97,7 @@ private: static void setSubmap(std::string); static void pass(std::string); static void layoutmsg(std::string); + static void toggleOpaque(std::string); friend class CCompositor; }; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 658091c4..87d66b6c 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -197,6 +197,10 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* else renderdata.alpha *= pWindow == g_pCompositor->m_pLastWindow ? pWindow->m_sSpecialRenderData.alpha : pWindow->m_sSpecialRenderData.alphaInactive; + // apply opaque + if (pWindow->m_sAdditionalConfigData.forceOpaque) + renderdata.alpha = 1.f; + g_pHyprOpenGL->m_pCurrentWindow = pWindow; // render window decorations first, if not fullscreen full