freya_webview/
lifecycle.rs

1use std::sync::{
2    Arc,
3    Mutex,
4};
5
6use freya_core::prelude::try_consume_root_context;
7use torin::prelude::Area;
8
9use crate::registry::{
10    WebViewConfig,
11    WebViewId,
12};
13
14#[derive(Debug, Clone)]
15pub enum WebViewLifecycleEvent {
16    Resized {
17        id: WebViewId,
18        area: Area,
19        config: WebViewConfig,
20    },
21    Close {
22        id: WebViewId,
23    },
24    Hide {
25        id: WebViewId,
26    },
27}
28
29pub type WebViewEvents = Arc<Mutex<Vec<WebViewLifecycleEvent>>>;
30
31pub struct WebViewManager;
32
33impl WebViewManager {
34    fn get() -> WebViewEvents {
35        try_consume_root_context()
36            .expect("WebViewManager failed to initialize. You must load the WebViewPlugin.")
37    }
38
39    pub fn close(id: WebViewId) {
40        Self::get()
41            .lock()
42            .unwrap()
43            .push(WebViewLifecycleEvent::Close { id });
44    }
45}