summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroutfoxxed <outfoxxed@outfoxxed.me>2025-01-12 09:10:36 -0800
committerGitHub <noreply@github.com>2025-01-12 17:10:36 +0000
commita6b263713a2b862ed41362082e2147e081934077 (patch)
tree2f6b32a7450b1210f9b9598f7de807f7ebd43269 /src
parent4f0f512cab5a8052c80b365449b69b953a97e169 (diff)
protocols: allow hyprland-toplevel-export to capture hidden windows (#9041)
Diffstat (limited to 'src')
-rw-r--r--src/protocols/ToplevelExport.cpp4
-rw-r--r--src/render/Renderer.cpp14
-rw-r--r--src/render/Renderer.hpp2
3 files changed, 10 insertions, 10 deletions
diff --git a/src/protocols/ToplevelExport.cpp b/src/protocols/ToplevelExport.cpp
index 68561533..0ddd84c8 100644
--- a/src/protocols/ToplevelExport.cpp
+++ b/src/protocols/ToplevelExport.cpp
@@ -87,7 +87,7 @@ CToplevelExportFrame::CToplevelExportFrame(SP<CHyprlandToplevelExportFrameV1> re
return;
}
- if (!pWindow->m_bIsMapped || pWindow->isHidden()) {
+ if (!pWindow->m_bIsMapped) {
LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable!", pWindow);
resource->sendFailed();
PROTO::toplevelExport->destroyResource(this);
@@ -148,7 +148,7 @@ void CToplevelExportFrame::copy(CHyprlandToplevelExportFrameV1* pFrame, wl_resou
return;
}
- if (!pWindow->m_bIsMapped || pWindow->isHidden()) {
+ if (!pWindow->m_bIsMapped) {
LOGM(ERR, "Client requested sharing of window handle {:x} which is not shareable (2)!", pWindow);
resource->sendFailed();
PROTO::toplevelExport->destroyResource(this);
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index b9c8dd98..d4523a31 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -417,8 +417,8 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo
}
}
-void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespec* time, bool decorate, eRenderPassMode mode, bool ignorePosition, bool ignoreAllGeometry) {
- if (pWindow->isHidden())
+void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespec* time, bool decorate, eRenderPassMode mode, bool ignorePosition, bool standalone) {
+ if (pWindow->isHidden() && !standalone)
return;
if (pWindow->m_bFadingOut) {
@@ -450,7 +450,7 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespe
renderdata.pos.y = pMonitor->vecPosition.y;
}
- if (ignoreAllGeometry)
+ if (standalone)
decorate = false;
// whether to use m_fMovingToWorkspaceAlpha, only if fading out into an invisible ws
@@ -463,12 +463,12 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, timespe
(USE_WORKSPACE_FADE_ALPHA ? pWindow->m_fMovingToWorkspaceAlpha->value() : 1.F) * pWindow->m_fMovingFromWorkspaceAlpha->value();
renderdata.alpha = pWindow->m_fActiveInactiveAlpha->value();
renderdata.decorate = decorate && !pWindow->m_bX11DoesntWantBorders && !pWindow->isEffectiveInternalFSMode(FSMODE_FULLSCREEN);
- renderdata.rounding = ignoreAllGeometry || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->scale;
- renderdata.roundingPower = ignoreAllGeometry || renderdata.dontRound ? 2.0f : pWindow->roundingPower();
- renderdata.blur = !ignoreAllGeometry && *PBLUR && !DONT_BLUR;
+ renderdata.rounding = standalone || renderdata.dontRound ? 0 : pWindow->rounding() * pMonitor->scale;
+ renderdata.roundingPower = standalone || renderdata.dontRound ? 2.0f : pWindow->roundingPower();
+ renderdata.blur = !standalone && *PBLUR && !DONT_BLUR;
renderdata.pWindow = pWindow;
- if (ignoreAllGeometry) {
+ if (standalone) {
renderdata.alpha = 1.f;
renderdata.fadeAlpha = 1.f;
}
diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp
index f3e0c5a2..8b4988c3 100644
--- a/src/render/Renderer.hpp
+++ b/src/render/Renderer.hpp
@@ -117,7 +117,7 @@ class CHyprRenderer {
void arrangeLayerArray(PHLMONITOR, const std::vector<PHLLSREF>&, bool, CBox*);
void renderWorkspaceWindowsFullscreen(PHLMONITOR, PHLWORKSPACE, timespec*); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special)
void renderWorkspaceWindows(PHLMONITOR, PHLWORKSPACE, timespec*); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special)
- void renderWindow(PHLWINDOW, PHLMONITOR, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool ignoreAllGeometry = false);
+ void renderWindow(PHLWINDOW, PHLMONITOR, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool standalone = false);
void renderLayer(PHLLS, PHLMONITOR, timespec*, bool popups = false);
void renderSessionLockSurface(SSessionLockSurface*, PHLMONITOR, timespec*);
void renderDragIcon(PHLMONITOR, timespec*);