summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-02-18 15:10:40 +0000
committerVaxry <vaxry@vaxry.net>2025-02-18 15:13:56 +0000
commitfb8eaba83f2d114fb346730e789a559ccc366887 (patch)
treed4fe951c24311577ccd9c950f17eb92527b4bd5a /src/render
parent3352317ca827dfb2dfd222274dfaf5941c78c086 (diff)
core: add an ANR dialog
for xdg-shell, we can ping the wm_base, and thus render an ANR dialog if an app dies for XWayland, there probably is a similar method, but I don't know about it and don't care.
Diffstat (limited to 'src/render')
-rw-r--r--src/render/OpenGL.cpp16
-rw-r--r--src/render/Renderer.cpp6
2 files changed, 17 insertions, 5 deletions
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index 3b641c36..1a296b65 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -1396,12 +1396,18 @@ void CHyprOpenGLImpl::renderTextureInternalWithDamage(SP<CTexture> tex, const CB
glUniform1f(shader->roundingPower, roundingPower);
if (allowDim && m_RenderData.currentWindow) {
- glUniform1i(shader->applyTint, 1);
- const auto DIM = m_RenderData.currentWindow->m_fDimPercent->value();
- glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM);
- } else {
+ if (m_RenderData.currentWindow->m_notRespondingTint->value() > 0) {
+ const auto DIM = m_RenderData.currentWindow->m_notRespondingTint->value();
+ glUniform1i(shader->applyTint, 1);
+ glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM);
+ } else if (m_RenderData.currentWindow->m_fDimPercent->value() > 0) {
+ glUniform1i(shader->applyTint, 1);
+ const auto DIM = m_RenderData.currentWindow->m_fDimPercent->value();
+ glUniform3f(shader->tint, 1.f - DIM, 1.f - DIM, 1.f - DIM);
+ } else
+ glUniform1i(shader->applyTint, 0);
+ } else
glUniform1i(shader->applyTint, 0);
- }
}
const float verts[] = {
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index b61f1c3e..f01a0d12 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -473,6 +473,12 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespe
if (ignorePosition) {
renderdata.pos.x = pMonitor->vecPosition.x;
renderdata.pos.y = pMonitor->vecPosition.y;
+ } else {
+ const bool ANR = pWindow->isNotResponding();
+ if (ANR && pWindow->m_notRespondingTint->goal() != 0.2F)
+ *pWindow->m_notRespondingTint = 0.2F;
+ else if (!ANR && pWindow->m_notRespondingTint->goal() != 0.F)
+ *pWindow->m_notRespondingTint = 0.F;
}
if (standalone)