1
0
Fork 0
forked from wry/wry

portal: send toplevel identifier in jay_toplevel

This commit is contained in:
Julian Orth 2024-10-10 12:57:27 +02:00
parent 8d6aaf79a7
commit d4c0fb29ba
7 changed files with 92 additions and 15 deletions

View file

@ -71,7 +71,7 @@ impl Global for JayCompositorGlobal {
}
fn version(&self) -> u32 {
11
12
}
fn required_caps(&self) -> ClientCaps {
@ -369,6 +369,7 @@ impl JayCompositorRequestHandler for JayCompositor {
client: self.client.clone(),
tracker: Default::default(),
destroyed: Cell::new(false),
version: self.version,
});
track!(self.client, obj);
self.client.add_client_obj(&obj)?;

View file

@ -1,7 +1,10 @@
use {
crate::{
client::{Client, ClientError},
ifs::{jay_toplevel::JayToplevel, wl_seat::ToplevelSelector},
ifs::{
jay_toplevel::{JayToplevel, ID_SINCE},
wl_seat::ToplevelSelector,
},
leaks::Tracker,
object::{Object, Version},
tree::ToplevelNode,
@ -17,6 +20,7 @@ pub struct JaySelectToplevel {
pub client: Rc<Client>,
pub tracker: Tracker<Self>,
pub destroyed: Cell<bool>,
pub version: Version,
}
pub struct JayToplevelSelector {
@ -35,8 +39,8 @@ impl Drop for JayToplevelSelector {
if self.jst.destroyed.get() {
return;
}
let id = match self.tl.take() {
None => JayToplevelId::NONE,
let jtl = match self.tl.take() {
None => None,
Some(toplevel) => {
let id = match self.jst.client.new_id() {
Ok(id) => id,
@ -51,6 +55,7 @@ impl Drop for JayToplevelSelector {
tracker: Default::default(),
toplevel,
destroyed: Cell::new(false),
version: self.jst.version,
});
track!(self.jst.client, jtl);
self.jst.client.add_server_obj(&jtl);
@ -58,10 +63,19 @@ impl Drop for JayToplevelSelector {
.tl_data()
.jay_toplevels
.set((jtl.client.id, jtl.id), jtl.clone());
jtl.id
Some(jtl)
}
};
self.jst.send_done(id);
match jtl {
None => self.jst.send_done(JayToplevelId::NONE),
Some(jtl) => {
self.jst.send_done(jtl.id);
if jtl.version >= ID_SINCE {
jtl.send_id();
jtl.send_done();
}
}
}
let _ = self.jst.client.remove_obj(&*self.jst);
}
}

View file

@ -10,12 +10,15 @@ use {
thiserror::Error,
};
pub const ID_SINCE: Version = Version(12);
pub struct JayToplevel {
pub id: JayToplevelId,
pub client: Rc<Client>,
pub tracker: Tracker<Self>,
pub toplevel: Rc<dyn ToplevelNode>,
pub destroyed: Cell<bool>,
pub version: Version,
}
impl JayToplevel {
@ -35,6 +38,18 @@ impl JayToplevel {
fn send_destroyed(&self) {
self.client.event(Destroyed { self_id: self.id });
}
pub fn send_id(&self) {
let s = self.toplevel.tl_data().identifier.get().to_string();
self.client.event(Id {
self_id: self.id,
id: &s,
})
}
pub fn send_done(&self) {
self.client.event(Done { self_id: self.id })
}
}
impl JayToplevelRequestHandler for JayToplevel {