summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-20 18:49:40 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-20 18:49:40 +0100
commit0b2bf23d69dd2fcd0ef7346343c4f994098e6542 (patch)
tree678bf4a2971b6f631dff70b213095366888f1d08 /src/render
parent1f639f2aba28a7a949a095f1fa2f323027ad4645 (diff)
fixed multimon render again
Diffstat (limited to 'src/render')
-rw-r--r--src/render/Renderer.cpp35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 6b01a00f..6800d586 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -32,6 +32,29 @@ void renderSurface(struct wlr_surface* surface, int x, int y, void* data) {
wlr_presentation_surface_sampled_on_output(g_pCompositor->m_sWLRPresentation, surface, RDATA->output);
}
+bool shouldRenderWindow(CWindow* pWindow, SMonitor* pMonitor) {
+ wlr_box geometry = {pWindow->m_vRealPosition.x, pWindow->m_vRealPosition.y, pWindow->m_vRealSize.x, pWindow->m_vRealSize.y};
+
+ if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, pMonitor->output, &geometry))
+ return false;
+
+ // now check if it has the same workspace
+ if (pWindow->m_iWorkspaceID == pMonitor->activeWorkspace)
+ return true;
+
+ // if not, check if it maybe is active on a different monitor.
+ for (auto& m : g_pCompositor->m_lMonitors) {
+ if (&m == pMonitor)
+ continue;
+
+
+ if (m.activeWorkspace == pWindow->m_iWorkspaceID)
+ return true;
+ }
+
+ return false;
+}
+
void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
const auto PMONITOR = g_pCompositor->getMonitorFromID(ID);
@@ -50,12 +73,10 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
for (auto& w : g_pCompositor->m_lWindows) {
- if (w.m_bIsX11 || w.m_iWorkspaceID != PMONITOR->activeWorkspace)
+ if (w.m_bIsX11)
continue;
- wlr_box geometry = { w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y };
-
- if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &geometry))
+ if (!shouldRenderWindow(&w, PMONITOR))
continue;
// render the bad boy
@@ -71,15 +92,13 @@ void CHyprRenderer::renderAllClientsForMonitor(const int& ID, timespec* time) {
for (auto& w : g_pCompositor->m_lWindows) {
- if (!w.m_bIsX11 || w.m_iWorkspaceID != PMONITOR->activeWorkspace)
+ if (!w.m_bIsX11)
continue;
if (!g_pCompositor->windowValidMapped(&w))
continue;
- wlr_box geometry = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
-
- if (!wlr_output_layout_intersects(g_pCompositor->m_sWLROutputLayout, PMONITOR->output, &geometry))
+ if (!shouldRenderWindow(&w, PMONITOR))
continue;
// render the bad boy