Save Pipewire tokens (#5)

This commit is contained in:
Aleksander
2024-02-05 17:45:59 +01:00
committed by GitHub
parent 78f395c764
commit 0cf824388f

View File

@@ -230,9 +230,7 @@ pub struct ScreenRenderer {
impl ScreenRenderer { impl ScreenRenderer {
pub fn new_wlr(output: &WlxOutput) -> Option<ScreenRenderer> { pub fn new_wlr(output: &WlxOutput) -> Option<ScreenRenderer> {
let Some(client) = WlxClient::new() else { let client = WlxClient::new()?;
return None;
};
let capture = WlrDmabufCapture::new(client, output.id); let capture = WlrDmabufCapture::new(client, output.id);
Some(ScreenRenderer { Some(ScreenRenderer {
@@ -249,20 +247,27 @@ impl ScreenRenderer {
output: &WlxOutput, output: &WlxOutput,
token: Option<&str>, token: Option<&str>,
_fallback: bool, _fallback: bool,
) -> Option<ScreenRenderer> { ) -> Option<(
ScreenRenderer,
Option<String>, /* pipewire restore token */
)> {
let name = output.name.clone(); let name = output.name.clone();
let node_id = futures::executor::block_on(pipewire_select_screen(token)).ok()?; let select_screen_result =
futures::executor::block_on(pipewire_select_screen(token)).ok()?;
let capture = PipewireCapture::new(name, node_id, 60); let capture = PipewireCapture::new(name, select_screen_result.node_id, 60);
Some(ScreenRenderer { Some((
ScreenRenderer {
name: output.name.clone(), name: output.name.clone(),
capture: Box::new(capture), capture: Box::new(capture),
pipeline: None, pipeline: None,
receiver: None, receiver: None,
last_view: None, last_view: None,
extent: extent_from_res(output.size), extent: extent_from_res(output.size),
}) },
select_screen_result.restore_token,
))
} }
pub fn new_xshm(screen: Arc<XshmScreen>) -> Option<ScreenRenderer> { pub fn new_xshm(screen: Arc<XshmScreen>) -> Option<ScreenRenderer> {
@@ -473,11 +478,20 @@ where
); );
} }
capture = ScreenRenderer::new_pw( if let Some((renderer, restore_token)) =
output, ScreenRenderer::new_pw(output, token, session.capture_method == "pw_fallback")
token.as_deref(), {
session.capture_method == "pw_fallback", capture = Some(renderer);
);
if let Some(token) = restore_token {
if pw_token_store
.insert(String::from(display_name), token.clone())
.is_none()
{
println!("Adding Pipewire token {}", token);
}
}
}
} }
if let Some(capture) = capture { if let Some(capture) = capture {
let backend = Box::new(SplitOverlayBackend { let backend = Box::new(SplitOverlayBackend {