portal: include mapping_id in screencasts
This commit is contained in:
parent
edafe16742
commit
5df018046c
5 changed files with 31 additions and 5 deletions
|
|
@ -15,8 +15,8 @@ use {
|
||||||
wire_ei::{
|
wire_ei::{
|
||||||
ei_device::{
|
ei_device::{
|
||||||
ClientFrame, ClientStartEmulating, ClientStopEmulating, Destroyed, DeviceType,
|
ClientFrame, ClientStartEmulating, ClientStopEmulating, Destroyed, DeviceType,
|
||||||
Done, EiDeviceRequestHandler, Interface, Paused, Region, Release, Resumed,
|
Done, EiDeviceRequestHandler, Interface, Paused, Region, RegionMappingId, Release,
|
||||||
ServerFrame, ServerStartEmulating,
|
Resumed, ServerFrame, ServerStartEmulating,
|
||||||
},
|
},
|
||||||
EiDeviceId,
|
EiDeviceId,
|
||||||
},
|
},
|
||||||
|
|
@ -100,6 +100,13 @@ impl EiDevice {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn send_region_mapping_id(&self, mapping_id: &str) {
|
||||||
|
self.client.event(RegionMappingId {
|
||||||
|
self_id: self.id,
|
||||||
|
mapping_id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
#[expect(dead_code)]
|
#[expect(dead_code)]
|
||||||
pub fn send_paused(&self, serial: u32) {
|
pub fn send_paused(&self, serial: u32) {
|
||||||
self.client.event(Paused {
|
self.client.event(Paused {
|
||||||
|
|
|
||||||
|
|
@ -346,6 +346,7 @@ impl EiSeat {
|
||||||
apply!(EI_CAP_KEYBOARD, create_keyboard);
|
apply!(EI_CAP_KEYBOARD, create_keyboard);
|
||||||
apply!(EI_CAP_TOUCHSCREEN, create_touchscreen);
|
apply!(EI_CAP_TOUCHSCREEN, create_touchscreen);
|
||||||
for output in self.client.state.root.outputs.lock().values() {
|
for output in self.client.state.root.outputs.lock().values() {
|
||||||
|
device.send_region_mapping_id(&output.global.connector.name);
|
||||||
device.send_region(
|
device.send_region(
|
||||||
output.node_absolute_position(),
|
output.node_absolute_position(),
|
||||||
output.global.persistent.scale.get(),
|
output.global.persistent.scale.get(),
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ impl UsrJayEiSessionOwner for StartingRemoteDesktop {
|
||||||
Some(self.dpy.clone()),
|
Some(self.dpy.clone()),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
self.session.send_start_reply(None, None);
|
self.session.send_start_reply(None, None, None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,8 +159,19 @@ bitflags! {
|
||||||
|
|
||||||
impl PwClientNodeOwner for StartingScreencast {
|
impl PwClientNodeOwner for StartingScreencast {
|
||||||
fn bound_id(&self, node_id: u32) {
|
fn bound_id(&self, node_id: u32) {
|
||||||
self.session
|
{
|
||||||
.send_start_reply(Some(node_id), create_restore_data(&self.dpy, &self.target));
|
let output = match &self.target {
|
||||||
|
ScreencastTarget::Output(o) => Some(o),
|
||||||
|
ScreencastTarget::Workspace(o, _, _) => Some(o),
|
||||||
|
ScreencastTarget::Toplevel(_) => None,
|
||||||
|
};
|
||||||
|
let mapping_id = output.and_then(|o| o.wl.name.borrow().clone());
|
||||||
|
self.session.send_start_reply(
|
||||||
|
Some(node_id),
|
||||||
|
create_restore_data(&self.dpy, &self.target),
|
||||||
|
mapping_id.as_deref(),
|
||||||
|
);
|
||||||
|
}
|
||||||
let mut supported_formats = PwClientNodePortSupportedFormats {
|
let mut supported_formats = PwClientNodePortSupportedFormats {
|
||||||
media_type: Some(SPA_MEDIA_TYPE_video),
|
media_type: Some(SPA_MEDIA_TYPE_video),
|
||||||
media_sub_type: Some(SPA_MEDIA_SUBTYPE_raw),
|
media_sub_type: Some(SPA_MEDIA_SUBTYPE_raw),
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ impl PortalSession {
|
||||||
&self,
|
&self,
|
||||||
pw_node_id: Option<u32>,
|
pw_node_id: Option<u32>,
|
||||||
restore_data: Option<Variant<'static>>,
|
restore_data: Option<Variant<'static>>,
|
||||||
|
mapping_id: Option<&str>,
|
||||||
) {
|
) {
|
||||||
let inner_type = DynamicType::DictEntry(
|
let inner_type = DynamicType::DictEntry(
|
||||||
Box::new(DynamicType::String),
|
Box::new(DynamicType::String),
|
||||||
|
|
@ -133,6 +134,12 @@ impl PortalSession {
|
||||||
value: rd,
|
value: rd,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if let Some(mapping_id) = mapping_id {
|
||||||
|
variants.push(DictEntry {
|
||||||
|
key: "mapping_id".into(),
|
||||||
|
value: Variant::String(mapping_id.into()),
|
||||||
|
});
|
||||||
|
}
|
||||||
if let Some(reply) = self.start_reply.take() {
|
if let Some(reply) = self.start_reply.take() {
|
||||||
match reply {
|
match reply {
|
||||||
PortalSessionReply::RemoteDesktop(reply) => {
|
PortalSessionReply::RemoteDesktop(reply) => {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue