gio/auto/
desktop_app_info.rs1use gio_sys;
6use glib;
7use glib::object::IsA;
8use glib::translate::*;
9use glib::GString;
10use std;
11use std::fmt;
12use AppInfo;
13use AppLaunchContext;
14
15glib_wrapper! {
16 pub struct DesktopAppInfo(Object<gio_sys::GDesktopAppInfo, gio_sys::GDesktopAppInfoClass, DesktopAppInfoClass>) @implements AppInfo;
17
18 match fn {
19 get_type => || gio_sys::g_desktop_app_info_get_type(),
20 }
21}
22
23impl DesktopAppInfo {
24 pub fn new(desktop_id: &str) -> Option<DesktopAppInfo> {
25 unsafe { from_glib_full(gio_sys::g_desktop_app_info_new(desktop_id.to_glib_none().0)) }
26 }
27
28 pub fn new_from_filename<P: AsRef<std::path::Path>>(filename: P) -> Option<DesktopAppInfo> {
29 unsafe {
30 from_glib_full(gio_sys::g_desktop_app_info_new_from_filename(
31 filename.as_ref().to_glib_none().0,
32 ))
33 }
34 }
35
36 pub fn new_from_keyfile(key_file: &glib::KeyFile) -> Option<DesktopAppInfo> {
37 unsafe {
38 from_glib_full(gio_sys::g_desktop_app_info_new_from_keyfile(
39 key_file.to_glib_none().0,
40 ))
41 }
42 }
43
44 pub fn get_implementations(interface: &str) -> Vec<DesktopAppInfo> {
45 unsafe {
46 FromGlibPtrContainer::from_glib_full(gio_sys::g_desktop_app_info_get_implementations(
47 interface.to_glib_none().0,
48 ))
49 }
50 }
51}
52
53pub const NONE_DESKTOP_APP_INFO: Option<&DesktopAppInfo> = None;
54
55pub trait DesktopAppInfoExt: 'static {
56 fn get_action_name(&self, action_name: &str) -> Option<GString>;
57
58 fn get_boolean(&self, key: &str) -> bool;
59
60 fn get_categories(&self) -> Option<GString>;
61
62 fn get_filename(&self) -> Option<std::path::PathBuf>;
63
64 fn get_generic_name(&self) -> Option<GString>;
65
66 fn get_is_hidden(&self) -> bool;
67
68 fn get_keywords(&self) -> Vec<GString>;
69
70 #[cfg(any(feature = "v2_56", feature = "dox"))]
71 fn get_locale_string(&self, key: &str) -> Option<GString>;
72
73 fn get_nodisplay(&self) -> bool;
74
75 fn get_show_in(&self, desktop_env: Option<&str>) -> bool;
76
77 fn get_startup_wm_class(&self) -> Option<GString>;
78
79 fn get_string(&self, key: &str) -> Option<GString>;
80
81 fn has_key(&self, key: &str) -> bool;
82
83 fn launch_action<P: IsA<AppLaunchContext>>(
84 &self,
85 action_name: &str,
86 launch_context: Option<&P>,
87 );
88
89 fn list_actions(&self) -> Vec<GString>;
95}
96
97impl<O: IsA<DesktopAppInfo>> DesktopAppInfoExt for O {
98 fn get_action_name(&self, action_name: &str) -> Option<GString> {
99 unsafe {
100 from_glib_full(gio_sys::g_desktop_app_info_get_action_name(
101 self.as_ref().to_glib_none().0,
102 action_name.to_glib_none().0,
103 ))
104 }
105 }
106
107 fn get_boolean(&self, key: &str) -> bool {
108 unsafe {
109 from_glib(gio_sys::g_desktop_app_info_get_boolean(
110 self.as_ref().to_glib_none().0,
111 key.to_glib_none().0,
112 ))
113 }
114 }
115
116 fn get_categories(&self) -> Option<GString> {
117 unsafe {
118 from_glib_none(gio_sys::g_desktop_app_info_get_categories(
119 self.as_ref().to_glib_none().0,
120 ))
121 }
122 }
123
124 fn get_filename(&self) -> Option<std::path::PathBuf> {
125 unsafe {
126 from_glib_none(gio_sys::g_desktop_app_info_get_filename(
127 self.as_ref().to_glib_none().0,
128 ))
129 }
130 }
131
132 fn get_generic_name(&self) -> Option<GString> {
133 unsafe {
134 from_glib_none(gio_sys::g_desktop_app_info_get_generic_name(
135 self.as_ref().to_glib_none().0,
136 ))
137 }
138 }
139
140 fn get_is_hidden(&self) -> bool {
141 unsafe {
142 from_glib(gio_sys::g_desktop_app_info_get_is_hidden(
143 self.as_ref().to_glib_none().0,
144 ))
145 }
146 }
147
148 fn get_keywords(&self) -> Vec<GString> {
149 unsafe {
150 FromGlibPtrContainer::from_glib_none(gio_sys::g_desktop_app_info_get_keywords(
151 self.as_ref().to_glib_none().0,
152 ))
153 }
154 }
155
156 #[cfg(any(feature = "v2_56", feature = "dox"))]
157 fn get_locale_string(&self, key: &str) -> Option<GString> {
158 unsafe {
159 from_glib_full(gio_sys::g_desktop_app_info_get_locale_string(
160 self.as_ref().to_glib_none().0,
161 key.to_glib_none().0,
162 ))
163 }
164 }
165
166 fn get_nodisplay(&self) -> bool {
167 unsafe {
168 from_glib(gio_sys::g_desktop_app_info_get_nodisplay(
169 self.as_ref().to_glib_none().0,
170 ))
171 }
172 }
173
174 fn get_show_in(&self, desktop_env: Option<&str>) -> bool {
175 unsafe {
176 from_glib(gio_sys::g_desktop_app_info_get_show_in(
177 self.as_ref().to_glib_none().0,
178 desktop_env.to_glib_none().0,
179 ))
180 }
181 }
182
183 fn get_startup_wm_class(&self) -> Option<GString> {
184 unsafe {
185 from_glib_none(gio_sys::g_desktop_app_info_get_startup_wm_class(
186 self.as_ref().to_glib_none().0,
187 ))
188 }
189 }
190
191 fn get_string(&self, key: &str) -> Option<GString> {
192 unsafe {
193 from_glib_full(gio_sys::g_desktop_app_info_get_string(
194 self.as_ref().to_glib_none().0,
195 key.to_glib_none().0,
196 ))
197 }
198 }
199
200 fn has_key(&self, key: &str) -> bool {
201 unsafe {
202 from_glib(gio_sys::g_desktop_app_info_has_key(
203 self.as_ref().to_glib_none().0,
204 key.to_glib_none().0,
205 ))
206 }
207 }
208
209 fn launch_action<P: IsA<AppLaunchContext>>(
210 &self,
211 action_name: &str,
212 launch_context: Option<&P>,
213 ) {
214 unsafe {
215 gio_sys::g_desktop_app_info_launch_action(
216 self.as_ref().to_glib_none().0,
217 action_name.to_glib_none().0,
218 launch_context.map(|p| p.as_ref()).to_glib_none().0,
219 );
220 }
221 }
222
223 fn list_actions(&self) -> Vec<GString> {
233 unsafe {
234 FromGlibPtrContainer::from_glib_none(gio_sys::g_desktop_app_info_list_actions(
235 self.as_ref().to_glib_none().0,
236 ))
237 }
238 }
239}
240
241impl fmt::Display for DesktopAppInfo {
242 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
243 write!(f, "DesktopAppInfo")
244 }
245}