web_extensions/tabs/
on_removed.rs1use super::prelude::*;
2
3pub fn on_removed() -> OnRemoved {
5 OnRemoved(tabs().on_removed())
6}
7
8pub struct OnRemoved(sys::EventTarget);
10
11pub struct OnRemovedEventListener<'a>(EventListener<'a, dyn FnMut(i32, sys::TabRemoveInfo)>);
12
13impl OnRemovedEventListener<'_> {
14 pub fn forget(self) {
15 self.0.forget()
16 }
17}
18
19impl OnRemoved {
20 pub fn add_listener<L>(&self, mut listener: L) -> OnRemovedEventListener
21 where
22 L: FnMut(TabId, RemoveInfo) + 'static,
23 {
24 let listener = Closure::new(move |tab_id: i32, info: sys::TabRemoveInfo| {
25 listener(TabId::from(tab_id), RemoveInfo::from(info))
26 });
27 OnRemovedEventListener(EventListener::raw_new(&self.0, listener))
28 }
29}
30
31#[derive(Debug, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct RemoveInfo {
34 pub window_id: i32,
35 pub is_window_closing: bool,
36}
37
38impl From<sys::TabRemoveInfo> for RemoveInfo {
39 fn from(info: sys::TabRemoveInfo) -> Self {
40 Self {
41 window_id: info.window_id(),
42 is_window_closing: info.is_window_closing(),
43 }
44 }
45}