diff --git a/Cargo.lock b/Cargo.lock index acc4bf0f1..98297800e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1268,7 +1268,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -1578,7 +1578,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -2875,7 +2875,7 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d463f34ca3c400fde3a054da0e0b8c6ffa21e4590922f3e18281bb5eeef4cbdc" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -3499,7 +3499,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.59.0", ] [[package]] @@ -4342,9 +4342,9 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.37.5" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" dependencies = [ "memchr", ] @@ -4685,7 +4685,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys 0.11.0", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4992,7 +4992,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" [[package]] name = "smithay" version = "0.7.0" -source = "git+https://github.com/smithay/smithay.git?rev=8148d67#8148d67ea3ee3959a84970e8f80f591e068e65ce" +source = "git+https://github.com/ids1024/smithay?branch=dpms#3042f62c2b82a605effef03e4c690733da179f9b" dependencies = [ "aliasable", "appendlist", @@ -5331,7 +5331,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix 1.1.2", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -6033,9 +6033,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +checksum = "fee64194ccd96bf648f42a65a7e589547096dfa702f7cadef84347b66ad164f9" dependencies = [ "cc", "downcast-rs", @@ -6158,9 +6158,9 @@ dependencies = [ [[package]] name = "wayland-scanner" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +checksum = "5423e94b6a63e68e439803a3e153a9252d5ead12fd853334e2ad33997e3889e3" dependencies = [ "proc-macro2", "quick-xml", @@ -6169,9 +6169,9 @@ dependencies = [ [[package]] name = "wayland-server" -version = "0.31.10" +version = "0.31.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbd4f3aba6c9fba70445ad2a484c0ef0356c1a9459b1e8e435bedc1971a6222" +checksum = "9297ab90f8d1f597711d36455c5b1b2290eca59b8134485e377a296b80b118c9" dependencies = [ "bitflags 2.9.4", "downcast-rs", @@ -6182,9 +6182,9 @@ dependencies = [ [[package]] name = "wayland-sys" -version = "0.31.7" +version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +checksum = "1e6dbfc3ac5ef974c92a2235805cc0114033018ae1290a72e474aa8b28cbbdfd" dependencies = [ "dlib", "log", @@ -6352,7 +6352,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.48.0", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index e5cca7998..82952ac83 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -147,4 +147,5 @@ cosmic-protocols = { git = "https://github.com/pop-os//cosmic-protocols", branch cosmic-client-toolkit = { git = "https://github.com/pop-os//cosmic-protocols", branch = "main" } [patch.crates-io] -smithay = { git = "https://github.com/smithay/smithay.git", rev = "8148d67" } +# smithay = { git = "https://github.com/smithay/smithay.git", rev = "8148d67" } +smithay = { git = "https://github.com/ids1024/smithay", branch = "dpms" } diff --git a/src/backend/kms/device.rs b/src/backend/kms/device.rs index 926af3748..762a234b3 100644 --- a/src/backend/kms/device.rs +++ b/src/backend/kms/device.rs @@ -655,29 +655,39 @@ impl LockedDevice<'_> { .surfaces .iter() .filter(|(_, s)| s.is_active()) - .map(|(crtc, surface)| (*crtc, surface.output.clone())) + .map(|(crtc, surface)| (*crtc, (surface.output.clone(), surface.get_dpms()))) .collect::>(); for (crtc, compositor) in self.drm.compositors().iter() { - let elements = match output_map.get(crtc) { - Some(output) => output_elements( - Some(&self.inner.render_node), - renderer, - shell, - now, - output, - CursorMode::All, - None, - ) - .with_context(|| "Failed to render outputs")?, - None => Vec::new(), + let (elements, dpms) = match output_map.get(crtc) { + Some((output, dpms)) => ( + output_elements( + Some(&self.inner.render_node), + renderer, + shell, + now, + output, + CursorMode::All, + None, + ) + .with_context(|| "Failed to render outputs")?, + *dpms, + ), + None => (Vec::new(), true), }; - let mut compositor = compositor.lock().unwrap(); - compositor.render_frame(renderer, &elements, CLEAR_COLOR, FrameFlags::empty())?; - if let Err(err) = compositor.commit_frame() { - if !matches!(err, FrameError::EmptyFrame) { - return Err(err.into()); + if dpms { + let mut compositor = compositor.lock().unwrap(); + compositor.render_frame( + renderer, + &elements, + CLEAR_COLOR, + FrameFlags::empty(), + )?; + if let Err(err) = compositor.commit_frame() { + if !matches!(err, FrameError::EmptyFrame) { + return Err(err.into()); + } } } } diff --git a/src/backend/kms/surface/mod.rs b/src/backend/kms/surface/mod.rs index 63873b64f..4ec930fc4 100644 --- a/src/backend/kms/surface/mod.rs +++ b/src/backend/kms/surface/mod.rs @@ -448,7 +448,7 @@ impl Surface { .send(ThreadCommand::Resume { compositor }); } - pub fn get_dpms(&mut self) -> bool { + pub fn get_dpms(&self) -> bool { self.dpms }