git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commitd9134ae75a510d17a101d0149cac148694bcacf4
parent2e5ef85b9f
authorLucas Galante <[email protected]>
date2026-06-16 10:12
fix: re-apply scale to all windows right before scene graph render build, ensuring subsurfaces are scaled correctly

 src/server/output.rs | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/server/output.rs b/src/server/output.rs
index 402732e..573e9f2 100644
--- a/src/server/output.rs
+++ b/src/server/output.rs
@@ -6,6 +6,7 @@ use crate::server::{Server, WlListener, WlList, wl_signal_add, wl_listener_remov
 use crate::layer_shell::LayerShellOutput;
 use crate::lock_manager::{LockSurface, LockState};
 use crate::util;
+use crate::window::Window;
 
 #[derive(Debug, Clone, Copy, PartialEq)]
 pub enum OutputStateValue {
@@ -424,6 +425,14 @@ impl Output {
             return Ok(());
         }
 
+        // Re-apply scale to all windows in expose mode right before rendering
+        let wm = &(*self.server).wm;
+        for &window in wm.windows.iter() {
+            if !window.is_null() && (*window).scale != 1.0 {
+                (*window).render_finish();
+            }
+        }
+
         let mut state = std::mem::zeroed();
         ffi::wlr_output_state_init(&mut state);