web_extensions/tabs/
on_moved.rs

1use super::prelude::*;
2
3/// <https://developer.chrome.com/docs/extensions/reference/tabs/#event-onMoved>
4pub fn on_moved() -> OnMoved {
5    OnMoved(tabs().on_moved())
6}
7
8/// <https://developer.chrome.com/docs/extensions/reference/tabs/#event-onMoved>
9pub struct OnMoved(sys::EventTarget);
10
11pub struct OnMovedEventListener<'a>(EventListener<'a, dyn FnMut(i32, sys::TabMoveInfo)>);
12
13impl OnMovedEventListener<'_> {
14    pub fn forget(self) {
15        self.0.forget()
16    }
17}
18
19impl OnMoved {
20    pub fn add_listener<L>(&self, mut listener: L) -> OnMovedEventListener
21    where
22        L: FnMut(TabId, MoveInfo) + 'static,
23    {
24        let listener = Closure::new(move |tab_id: i32, tab: sys::TabMoveInfo| {
25            listener(TabId::from(tab_id), MoveInfo::from(tab))
26        });
27        OnMovedEventListener(EventListener::raw_new(&self.0, listener))
28    }
29}
30
31#[derive(Debug, Deserialize)]
32#[serde(rename_all = "camelCase")]
33pub struct MoveInfo {
34    pub window_id: i32,
35    pub from_index: u32,
36    pub to_index: u32,
37}
38
39impl From<sys::TabMoveInfo> for MoveInfo {
40    fn from(info: sys::TabMoveInfo) -> Self {
41        Self {
42            from_index: info.from_index(),
43            to_index: info.to_index(),
44            window_id: info.window_id(),
45        }
46    }
47}