aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-06-28 09:50:50 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-06-28 10:39:36 +0400
commita43f30b7f5e5853a402e78122a87bbbc49c6f829 (patch)
treea2da1de073cdbf24c36ef4b5fbdfea1fcea54485
parent88f7b08e5682b568f710fcb79f6be34848d01bee (diff)
downloadniri-a43f30b7f5e5853a402e78122a87bbbc49c6f829.tar.gz
niri-a43f30b7f5e5853a402e78122a87bbbc49c6f829.tar.bz2
niri-a43f30b7f5e5853a402e78122a87bbbc49c6f829.zip
Ignore compositor opacity for window screencasts
When using opacity as unfocused indicator, it will show up on the screencast, which is undesired. This is not a problem for window screen*shot*s where the window is focused.
-rw-r--r--src/niri.rs14
-rw-r--r--src/pw_utils.rs36
2 files changed, 22 insertions, 28 deletions
diff --git a/src/niri.rs b/src/niri.rs
index 5b6b1df0..7314bdb4 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -3518,17 +3518,12 @@ impl Niri {
continue;
}
- let alpha = if mapped.is_fullscreen() {
- 1.
- } else {
- mapped.rules().opacity.unwrap_or(1.).clamp(0., 1.)
- };
// FIXME: pointer.
let elements = mapped.render(
renderer,
mapped.window.geometry().loc.to_f64(),
scale,
- alpha,
+ 1.,
RenderTarget::Screencast,
);
let geo = elements
@@ -3615,17 +3610,12 @@ impl Niri {
}
let (elements, geo) = elements.get_or_insert_with(|| {
- let alpha = if mapped.is_fullscreen() {
- 1.
- } else {
- mapped.rules().opacity.unwrap_or(1.).clamp(0., 1.)
- };
// FIXME: pointer.
let elements = mapped.render(
renderer,
mapped.window.geometry().loc.to_f64(),
scale,
- alpha,
+ 1.,
RenderTarget::Screencast,
);
let geo = elements
diff --git a/src/pw_utils.rs b/src/pw_utils.rs
index 309edca5..f9c927ad 100644
--- a/src/pw_utils.rs
+++ b/src/pw_utils.rs
@@ -89,17 +89,24 @@ pub enum CastTarget {
}
macro_rules! make_params {
- ($size:expr, $refresh:expr, $alpha:expr, $b1:expr, $b2:expr) => {{
+ ($params:ident, $size:expr, $refresh:expr, $alpha:expr) => {
+ let mut b1 = Vec::new();
+ let mut b2 = Vec::new();
+
let o1 = make_video_params($size, $refresh, false);
- let pod1 = make_pod($b1, o1);
+ let pod1 = make_pod(&mut b1, o1);
- if $alpha {
+ let mut p1;
+ let mut p2;
+ $params = if $alpha {
let o2 = make_video_params($size, $refresh, true);
- &mut [pod1, make_pod($b2, o2)][..]
+ p2 = [pod1, make_pod(&mut b2, o2)];
+ &mut p2[..]
} else {
- &mut [pod1][..]
- }
- }};
+ p1 = [pod1];
+ &mut p1[..]
+ };
+ };
}
impl PipeWire {
@@ -424,9 +431,8 @@ impl PipeWire {
trace!("starting pw stream with size={pending_size:?}, refresh={refresh}");
- let mut b1 = Vec::new();
- let mut b2 = Vec::new();
- let params = make_params!(pending_size, refresh, alpha, &mut b1, &mut b2);
+ let params;
+ make_params!(params, pending_size, refresh, alpha);
stream
.connect(
Direction::Output,
@@ -471,9 +477,8 @@ impl Cast {
self.size.set(current_size.with_pending(size));
- let mut b1 = Vec::new();
- let mut b2 = Vec::new();
- let params = make_params!(size, self.refresh, self.offer_alpha, &mut b1, &mut b2);
+ let params;
+ make_params!(params, size, self.refresh, self.offer_alpha);
self.stream
.update_params(params)
.context("error updating stream params")?;
@@ -491,9 +496,8 @@ impl Cast {
self.refresh = refresh;
let size = self.size.get().expected_format_size();
- let mut b1 = Vec::new();
- let mut b2 = Vec::new();
- let params = make_params!(size, self.refresh, self.offer_alpha, &mut b1, &mut b2);
+ let params;
+ make_params!(params, size, self.refresh, self.offer_alpha);
self.stream
.update_params(params)
.context("error updating stream params")?;