1
0
Fork 0
forked from wry/wry

jay_compositior: add get_toplevel request

This commit is contained in:
Julian Orth 2024-10-10 13:51:01 +02:00
parent d4c0fb29ba
commit 4f431eec5c
3 changed files with 54 additions and 21 deletions

View file

@ -39,26 +39,32 @@ impl Drop for JayToplevelSelector {
if self.jst.destroyed.get() {
return;
}
let jtl = match self.tl.take() {
self.jst.done(self.tl.take());
}
}
impl JaySelectToplevel {
pub fn done(&self, tl: Option<Rc<dyn ToplevelNode>>) {
let jtl = match tl {
None => None,
Some(toplevel) => {
let id = match self.jst.client.new_id() {
let id = match self.client.new_id() {
Ok(id) => id,
Err(e) => {
self.jst.client.error(e);
self.client.error(e);
return;
}
};
let jtl = Rc::new(JayToplevel {
id,
client: self.jst.client.clone(),
client: self.client.clone(),
tracker: Default::default(),
toplevel,
destroyed: Cell::new(false),
version: self.jst.version,
version: self.version,
});
track!(self.jst.client, jtl);
self.jst.client.add_server_obj(&jtl);
track!(self.client, jtl);
self.client.add_server_obj(&jtl);
jtl.toplevel
.tl_data()
.jay_toplevels
@ -67,20 +73,28 @@ impl Drop for JayToplevelSelector {
}
};
match jtl {
None => self.jst.send_done(JayToplevelId::NONE),
None => self.send_done(JayToplevelId::NONE),
Some(jtl) => {
self.jst.send_done(jtl.id);
self.send_done(jtl.id);
if jtl.version >= ID_SINCE {
jtl.send_id();
jtl.send_done();
}
}
}
let _ = self.jst.client.remove_obj(&*self.jst);
let _ = self.client.remove_obj(self);
}
pub fn new(client: &Rc<Client>, id: JaySelectToplevelId, version: Version) -> Rc<Self> {
Rc::new(JaySelectToplevel {
id,
client: client.clone(),
tracker: Default::default(),
destroyed: Cell::new(false),
version,
})
}
}
impl JaySelectToplevel {
fn send_done(&self, id: JayToplevelId) {
self.client.event(Done {
self_id: self.id,