gio/auto/
desktop_app_info.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/gtk-rs/gir-files)
3// DO NOT EDIT
4
5use crate::{ffi, AppInfo, AppLaunchContext};
6use glib::{prelude::*, translate::*};
7use std::boxed::Box as Box_;
8
9glib::wrapper! {
10    #[doc(alias = "GDesktopAppInfo")]
11    pub struct DesktopAppInfo(Object<ffi::GDesktopAppInfo, ffi::GDesktopAppInfoClass>) @implements AppInfo;
12
13    match fn {
14        type_ => || ffi::g_desktop_app_info_get_type(),
15    }
16}
17
18impl DesktopAppInfo {
19    #[doc(alias = "g_desktop_app_info_new")]
20    pub fn new(desktop_id: &str) -> Option<DesktopAppInfo> {
21        unsafe { from_glib_full(ffi::g_desktop_app_info_new(desktop_id.to_glib_none().0)) }
22    }
23
24    #[doc(alias = "g_desktop_app_info_new_from_filename")]
25    #[doc(alias = "new_from_filename")]
26    pub fn from_filename(filename: impl AsRef<std::path::Path>) -> Option<DesktopAppInfo> {
27        unsafe {
28            from_glib_full(ffi::g_desktop_app_info_new_from_filename(
29                filename.as_ref().to_glib_none().0,
30            ))
31        }
32    }
33
34    #[doc(alias = "g_desktop_app_info_new_from_keyfile")]
35    #[doc(alias = "new_from_keyfile")]
36    pub fn from_keyfile(key_file: &glib::KeyFile) -> Option<DesktopAppInfo> {
37        unsafe {
38            from_glib_full(ffi::g_desktop_app_info_new_from_keyfile(
39                key_file.to_glib_none().0,
40            ))
41        }
42    }
43
44    #[doc(alias = "g_desktop_app_info_get_action_name")]
45    #[doc(alias = "get_action_name")]
46    pub fn action_name(&self, action_name: &str) -> glib::GString {
47        unsafe {
48            from_glib_full(ffi::g_desktop_app_info_get_action_name(
49                self.to_glib_none().0,
50                action_name.to_glib_none().0,
51            ))
52        }
53    }
54
55    #[doc(alias = "g_desktop_app_info_get_boolean")]
56    #[doc(alias = "get_boolean")]
57    pub fn boolean(&self, key: &str) -> bool {
58        unsafe {
59            from_glib(ffi::g_desktop_app_info_get_boolean(
60                self.to_glib_none().0,
61                key.to_glib_none().0,
62            ))
63        }
64    }
65
66    #[doc(alias = "g_desktop_app_info_get_categories")]
67    #[doc(alias = "get_categories")]
68    pub fn categories(&self) -> Option<glib::GString> {
69        unsafe {
70            from_glib_none(ffi::g_desktop_app_info_get_categories(
71                self.to_glib_none().0,
72            ))
73        }
74    }
75
76    #[doc(alias = "g_desktop_app_info_get_filename")]
77    #[doc(alias = "get_filename")]
78    pub fn filename(&self) -> Option<std::path::PathBuf> {
79        unsafe { from_glib_none(ffi::g_desktop_app_info_get_filename(self.to_glib_none().0)) }
80    }
81
82    #[doc(alias = "g_desktop_app_info_get_generic_name")]
83    #[doc(alias = "get_generic_name")]
84    pub fn generic_name(&self) -> Option<glib::GString> {
85        unsafe {
86            from_glib_none(ffi::g_desktop_app_info_get_generic_name(
87                self.to_glib_none().0,
88            ))
89        }
90    }
91
92    #[doc(alias = "g_desktop_app_info_get_is_hidden")]
93    #[doc(alias = "get_is_hidden")]
94    pub fn is_hidden(&self) -> bool {
95        unsafe { from_glib(ffi::g_desktop_app_info_get_is_hidden(self.to_glib_none().0)) }
96    }
97
98    #[doc(alias = "g_desktop_app_info_get_keywords")]
99    #[doc(alias = "get_keywords")]
100    pub fn keywords(&self) -> Vec<glib::GString> {
101        unsafe {
102            FromGlibPtrContainer::from_glib_none(ffi::g_desktop_app_info_get_keywords(
103                self.to_glib_none().0,
104            ))
105        }
106    }
107
108    #[doc(alias = "g_desktop_app_info_get_locale_string")]
109    #[doc(alias = "get_locale_string")]
110    pub fn locale_string(&self, key: &str) -> Option<glib::GString> {
111        unsafe {
112            from_glib_full(ffi::g_desktop_app_info_get_locale_string(
113                self.to_glib_none().0,
114                key.to_glib_none().0,
115            ))
116        }
117    }
118
119    #[doc(alias = "g_desktop_app_info_get_nodisplay")]
120    #[doc(alias = "get_nodisplay")]
121    pub fn is_nodisplay(&self) -> bool {
122        unsafe { from_glib(ffi::g_desktop_app_info_get_nodisplay(self.to_glib_none().0)) }
123    }
124
125    #[doc(alias = "g_desktop_app_info_get_show_in")]
126    #[doc(alias = "get_show_in")]
127    pub fn shows_in(&self, desktop_env: Option<&str>) -> bool {
128        unsafe {
129            from_glib(ffi::g_desktop_app_info_get_show_in(
130                self.to_glib_none().0,
131                desktop_env.to_glib_none().0,
132            ))
133        }
134    }
135
136    #[doc(alias = "g_desktop_app_info_get_startup_wm_class")]
137    #[doc(alias = "get_startup_wm_class")]
138    pub fn startup_wm_class(&self) -> Option<glib::GString> {
139        unsafe {
140            from_glib_none(ffi::g_desktop_app_info_get_startup_wm_class(
141                self.to_glib_none().0,
142            ))
143        }
144    }
145
146    #[doc(alias = "g_desktop_app_info_get_string")]
147    #[doc(alias = "get_string")]
148    pub fn string(&self, key: &str) -> Option<glib::GString> {
149        unsafe {
150            from_glib_full(ffi::g_desktop_app_info_get_string(
151                self.to_glib_none().0,
152                key.to_glib_none().0,
153            ))
154        }
155    }
156
157    #[cfg(feature = "v2_60")]
158    #[cfg_attr(docsrs, doc(cfg(feature = "v2_60")))]
159    #[doc(alias = "g_desktop_app_info_get_string_list")]
160    #[doc(alias = "get_string_list")]
161    pub fn string_list(&self, key: &str) -> Vec<glib::GString> {
162        unsafe {
163            let mut length = std::mem::MaybeUninit::uninit();
164            let ret = FromGlibContainer::from_glib_full_num(
165                ffi::g_desktop_app_info_get_string_list(
166                    self.to_glib_none().0,
167                    key.to_glib_none().0,
168                    length.as_mut_ptr(),
169                ),
170                length.assume_init() as _,
171            );
172            ret
173        }
174    }
175
176    #[doc(alias = "g_desktop_app_info_has_key")]
177    pub fn has_key(&self, key: &str) -> bool {
178        unsafe {
179            from_glib(ffi::g_desktop_app_info_has_key(
180                self.to_glib_none().0,
181                key.to_glib_none().0,
182            ))
183        }
184    }
185
186    #[doc(alias = "g_desktop_app_info_launch_action")]
187    pub fn launch_action(
188        &self,
189        action_name: &str,
190        launch_context: Option<&impl IsA<AppLaunchContext>>,
191    ) {
192        unsafe {
193            ffi::g_desktop_app_info_launch_action(
194                self.to_glib_none().0,
195                action_name.to_glib_none().0,
196                launch_context.map(|p| p.as_ref()).to_glib_none().0,
197            );
198        }
199    }
200
201    #[doc(alias = "g_desktop_app_info_launch_uris_as_manager")]
202    pub fn launch_uris_as_manager(
203        &self,
204        uris: &[&str],
205        launch_context: Option<&impl IsA<AppLaunchContext>>,
206        spawn_flags: glib::SpawnFlags,
207        user_setup: Option<Box_<dyn FnOnce() + 'static>>,
208        pid_callback: Option<&mut dyn FnMut(&DesktopAppInfo, glib::Pid)>,
209    ) -> Result<(), glib::Error> {
210        let user_setup_data: Box_<Option<Box_<dyn FnOnce() + 'static>>> = Box_::new(user_setup);
211        unsafe extern "C" fn user_setup_func(data: glib::ffi::gpointer) {
212            let callback = Box_::from_raw(data as *mut Option<Box_<dyn FnOnce() + 'static>>);
213            let callback = (*callback).expect("cannot get closure...");
214            callback()
215        }
216        let user_setup = if user_setup_data.is_some() {
217            Some(user_setup_func as _)
218        } else {
219            None
220        };
221        let mut pid_callback_data: Option<&mut dyn FnMut(&DesktopAppInfo, glib::Pid)> =
222            pid_callback;
223        unsafe extern "C" fn pid_callback_func(
224            appinfo: *mut ffi::GDesktopAppInfo,
225            pid: glib::ffi::GPid,
226            user_data: glib::ffi::gpointer,
227        ) {
228            let appinfo = from_glib_borrow(appinfo);
229            let pid = from_glib(pid);
230            let callback = user_data as *mut Option<&mut dyn FnMut(&DesktopAppInfo, glib::Pid)>;
231            if let Some(ref mut callback) = *callback {
232                callback(&appinfo, pid)
233            } else {
234                panic!("cannot get closure...")
235            }
236        }
237        let pid_callback = if pid_callback_data.is_some() {
238            Some(pid_callback_func as _)
239        } else {
240            None
241        };
242        let super_callback0: Box_<Option<Box_<dyn FnOnce() + 'static>>> = user_setup_data;
243        let super_callback1: &mut Option<&mut dyn FnMut(&DesktopAppInfo, glib::Pid)> =
244            &mut pid_callback_data;
245        unsafe {
246            let mut error = std::ptr::null_mut();
247            let is_ok = ffi::g_desktop_app_info_launch_uris_as_manager(
248                self.to_glib_none().0,
249                uris.to_glib_none().0,
250                launch_context.map(|p| p.as_ref()).to_glib_none().0,
251                spawn_flags.into_glib(),
252                user_setup,
253                Box_::into_raw(super_callback0) as *mut _,
254                pid_callback,
255                super_callback1 as *mut _ as *mut _,
256                &mut error,
257            );
258            debug_assert_eq!(is_ok == glib::ffi::GFALSE, !error.is_null());
259            if error.is_null() {
260                Ok(())
261            } else {
262                Err(from_glib_full(error))
263            }
264        }
265    }
266
267    #[doc(alias = "g_desktop_app_info_list_actions")]
268    pub fn list_actions(&self) -> Vec<glib::GString> {
269        unsafe {
270            FromGlibPtrContainer::from_glib_none(ffi::g_desktop_app_info_list_actions(
271                self.to_glib_none().0,
272            ))
273        }
274    }
275
276    #[doc(alias = "g_desktop_app_info_get_implementations")]
277    #[doc(alias = "get_implementations")]
278    pub fn implementations(interface: &str) -> Vec<DesktopAppInfo> {
279        unsafe {
280            FromGlibPtrContainer::from_glib_full(ffi::g_desktop_app_info_get_implementations(
281                interface.to_glib_none().0,
282            ))
283        }
284    }
285}