web_extensions/tabs/
on_highlighted.rs1use super::prelude::*;
2use gloo_utils::format::JsValueSerdeExt;
3
4pub fn on_highlighted() -> OnHighlighted {
6 OnHighlighted(tabs().on_highlighted())
7}
8
9pub struct OnHighlighted(sys::EventTarget);
11
12pub struct OnHighlightedEventListener<'a>(EventListener<'a, dyn FnMut(sys::TabHighlightInfo)>);
13
14impl OnHighlightedEventListener<'_> {
15 pub fn forget(self) {
16 self.0.forget()
17 }
18}
19
20impl OnHighlighted {
21 pub fn add_listener<L>(&self, mut listener: L) -> OnHighlightedEventListener
22 where
23 L: FnMut(HighlightInfo) + 'static,
24 {
25 let listener =
26 Closure::new(move |info: sys::TabHighlightInfo| listener(HighlightInfo::from(info)));
27 OnHighlightedEventListener(EventListener::raw_new(&self.0, listener))
28 }
29}
30
31#[derive(Debug, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct HighlightInfo {
34 pub window_id: i32,
35 pub tab_ids: Vec<TabId>,
36}
37
38impl From<sys::TabHighlightInfo> for HighlightInfo {
39 fn from(info: sys::TabHighlightInfo) -> Self {
40 let tab_ids = info.tab_ids().into_serde().expect("Tab IDs");
41 Self {
42 tab_ids,
43 window_id: info.window_id(),
44 }
45 }
46}