Save Pipewire tokens (#5)
This commit is contained in:
@@ -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((
|
||||||
name: output.name.clone(),
|
ScreenRenderer {
|
||||||
capture: Box::new(capture),
|
name: output.name.clone(),
|
||||||
pipeline: None,
|
capture: Box::new(capture),
|
||||||
receiver: None,
|
pipeline: None,
|
||||||
last_view: None,
|
receiver: None,
|
||||||
extent: extent_from_res(output.size),
|
last_view: None,
|
||||||
})
|
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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user