winrt_xaml/winrt/xaml/
application.rs1use crate::winrt::{IInspectable, IActivationFactory};
4use crate::error::Result;
5use windows::core::IInspectable as CoreIInspectable;
6
7#[derive(Clone)]
9pub struct XamlApplication {
10 inspectable: IInspectable,
11}
12
13impl XamlApplication {
14 pub fn new() -> Result<Self> {
16 let factory = IActivationFactory::get("Windows.UI.Xaml.Application")
18 .map_err(|e| crate::error::Error::initialization(format!("Failed to get XAML Application factory: {}", e)))?;
19
20 let inspectable: CoreIInspectable = factory.activate_instance()
21 .map_err(|e| crate::error::Error::initialization(format!("Failed to activate XAML Application: {}", e)))?;
22
23 Ok(XamlApplication {
24 inspectable: IInspectable::from(inspectable),
25 })
26 }
27
28 pub fn current() -> Result<Self> {
30 Self::new()
33 }
34
35 pub fn run(&self) -> Result<()> {
37 let app = crate::app::Application::current()
40 .ok_or_else(|| crate::error::Error::application("No application instance available"))?;
41 app.run()
42 }
43
44 pub fn exit(&self, code: i32) -> Result<()> {
46 let app = crate::app::Application::current()
47 .ok_or_else(|| crate::error::Error::application("No application instance available"))?;
48 app.exit_with_code(code);
49 Ok(())
50 }
51
52 pub fn as_inspectable(&self) -> &IInspectable {
54 &self.inspectable
55 }
56}
57
58impl Default for XamlApplication {
59 fn default() -> Self {
60 Self::new().expect("Failed to create XAML Application")
61 }
62}
63
64unsafe impl Send for XamlApplication {}
65unsafe impl Sync for XamlApplication {}
66