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 
5 use cairo;
6 use gdk;
7 use gdk_pixbuf;
8 use gio;
9 use glib;
10 use glib::object::Cast;
11 use glib::object::IsA;
12 use glib::signal::connect_raw;
13 use glib::signal::SignalHandlerId;
14 use glib::translate::*;
15 use glib::GString;
16 use glib_sys;
17 use gtk_sys;
18 use std;
19 use std::boxed::Box as Box_;
20 use std::fmt;
21 use std::mem::transmute;
22 use std::ptr;
23 use IconInfo;
24 use IconLookupFlags;
25 
26 glib_wrapper! {
27     pub struct IconTheme(Object<gtk_sys::GtkIconTheme, gtk_sys::GtkIconThemeClass, IconThemeClass>);
28 
29     match fn {
30         get_type => || gtk_sys::gtk_icon_theme_get_type(),
31     }
32 }
33 
34 impl IconTheme {
new() -> IconTheme35     pub fn new() -> IconTheme {
36         assert_initialized_main_thread!();
37         unsafe { from_glib_full(gtk_sys::gtk_icon_theme_new()) }
38     }
39 
get_default() -> Option<IconTheme>40     pub fn get_default() -> Option<IconTheme> {
41         assert_initialized_main_thread!();
42         unsafe { from_glib_none(gtk_sys::gtk_icon_theme_get_default()) }
43     }
44 
get_for_screen(screen: &gdk::Screen) -> Option<IconTheme>45     pub fn get_for_screen(screen: &gdk::Screen) -> Option<IconTheme> {
46         assert_initialized_main_thread!();
47         unsafe {
48             from_glib_none(gtk_sys::gtk_icon_theme_get_for_screen(
49                 screen.to_glib_none().0,
50             ))
51         }
52     }
53 }
54 
55 impl Default for IconTheme {
default() -> Self56     fn default() -> Self {
57         Self::new()
58     }
59 }
60 
61 pub const NONE_ICON_THEME: Option<&IconTheme> = None;
62 
63 pub trait IconThemeExt: 'static {
add_resource_path(&self, path: &str)64     fn add_resource_path(&self, path: &str);
65 
append_search_path<P: AsRef<std::path::Path>>(&self, path: P)66     fn append_search_path<P: AsRef<std::path::Path>>(&self, path: P);
67 
get_example_icon_name(&self) -> Option<GString>68     fn get_example_icon_name(&self) -> Option<GString>;
69 
has_icon(&self, icon_name: &str) -> bool70     fn has_icon(&self, icon_name: &str) -> bool;
71 
list_contexts(&self) -> Vec<GString>72     fn list_contexts(&self) -> Vec<GString>;
73 
list_icons(&self, context: Option<&str>) -> Vec<GString>74     fn list_icons(&self, context: Option<&str>) -> Vec<GString>;
75 
load_icon( &self, icon_name: &str, size: i32, flags: IconLookupFlags, ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error>76     fn load_icon(
77         &self,
78         icon_name: &str,
79         size: i32,
80         flags: IconLookupFlags,
81     ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error>;
82 
load_icon_for_scale( &self, icon_name: &str, size: i32, scale: i32, flags: IconLookupFlags, ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error>83     fn load_icon_for_scale(
84         &self,
85         icon_name: &str,
86         size: i32,
87         scale: i32,
88         flags: IconLookupFlags,
89     ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error>;
90 
load_surface<P: IsA<gdk::Window>>( &self, icon_name: &str, size: i32, scale: i32, for_window: Option<&P>, flags: IconLookupFlags, ) -> Result<Option<cairo::Surface>, glib::Error>91     fn load_surface<P: IsA<gdk::Window>>(
92         &self,
93         icon_name: &str,
94         size: i32,
95         scale: i32,
96         for_window: Option<&P>,
97         flags: IconLookupFlags,
98     ) -> Result<Option<cairo::Surface>, glib::Error>;
99 
lookup_by_gicon<P: IsA<gio::Icon>>( &self, icon: &P, size: i32, flags: IconLookupFlags, ) -> Option<IconInfo>100     fn lookup_by_gicon<P: IsA<gio::Icon>>(
101         &self,
102         icon: &P,
103         size: i32,
104         flags: IconLookupFlags,
105     ) -> Option<IconInfo>;
106 
lookup_by_gicon_for_scale<P: IsA<gio::Icon>>( &self, icon: &P, size: i32, scale: i32, flags: IconLookupFlags, ) -> Option<IconInfo>107     fn lookup_by_gicon_for_scale<P: IsA<gio::Icon>>(
108         &self,
109         icon: &P,
110         size: i32,
111         scale: i32,
112         flags: IconLookupFlags,
113     ) -> Option<IconInfo>;
114 
lookup_icon(&self, icon_name: &str, size: i32, flags: IconLookupFlags) -> Option<IconInfo>115     fn lookup_icon(&self, icon_name: &str, size: i32, flags: IconLookupFlags) -> Option<IconInfo>;
116 
lookup_icon_for_scale( &self, icon_name: &str, size: i32, scale: i32, flags: IconLookupFlags, ) -> Option<IconInfo>117     fn lookup_icon_for_scale(
118         &self,
119         icon_name: &str,
120         size: i32,
121         scale: i32,
122         flags: IconLookupFlags,
123     ) -> Option<IconInfo>;
124 
prepend_search_path<P: AsRef<std::path::Path>>(&self, path: P)125     fn prepend_search_path<P: AsRef<std::path::Path>>(&self, path: P);
126 
rescan_if_needed(&self) -> bool127     fn rescan_if_needed(&self) -> bool;
128 
set_custom_theme(&self, theme_name: Option<&str>)129     fn set_custom_theme(&self, theme_name: Option<&str>);
130 
set_screen(&self, screen: &gdk::Screen)131     fn set_screen(&self, screen: &gdk::Screen);
132 
connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId133     fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
134 }
135 
136 impl<O: IsA<IconTheme>> IconThemeExt for O {
add_resource_path(&self, path: &str)137     fn add_resource_path(&self, path: &str) {
138         unsafe {
139             gtk_sys::gtk_icon_theme_add_resource_path(
140                 self.as_ref().to_glib_none().0,
141                 path.to_glib_none().0,
142             );
143         }
144     }
145 
append_search_path<P: AsRef<std::path::Path>>(&self, path: P)146     fn append_search_path<P: AsRef<std::path::Path>>(&self, path: P) {
147         unsafe {
148             gtk_sys::gtk_icon_theme_append_search_path(
149                 self.as_ref().to_glib_none().0,
150                 path.as_ref().to_glib_none().0,
151             );
152         }
153     }
154 
get_example_icon_name(&self) -> Option<GString>155     fn get_example_icon_name(&self) -> Option<GString> {
156         unsafe {
157             from_glib_full(gtk_sys::gtk_icon_theme_get_example_icon_name(
158                 self.as_ref().to_glib_none().0,
159             ))
160         }
161     }
162 
has_icon(&self, icon_name: &str) -> bool163     fn has_icon(&self, icon_name: &str) -> bool {
164         unsafe {
165             from_glib(gtk_sys::gtk_icon_theme_has_icon(
166                 self.as_ref().to_glib_none().0,
167                 icon_name.to_glib_none().0,
168             ))
169         }
170     }
171 
list_contexts(&self) -> Vec<GString>172     fn list_contexts(&self) -> Vec<GString> {
173         unsafe {
174             FromGlibPtrContainer::from_glib_full(gtk_sys::gtk_icon_theme_list_contexts(
175                 self.as_ref().to_glib_none().0,
176             ))
177         }
178     }
179 
list_icons(&self, context: Option<&str>) -> Vec<GString>180     fn list_icons(&self, context: Option<&str>) -> Vec<GString> {
181         unsafe {
182             FromGlibPtrContainer::from_glib_full(gtk_sys::gtk_icon_theme_list_icons(
183                 self.as_ref().to_glib_none().0,
184                 context.to_glib_none().0,
185             ))
186         }
187     }
188 
load_icon( &self, icon_name: &str, size: i32, flags: IconLookupFlags, ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error>189     fn load_icon(
190         &self,
191         icon_name: &str,
192         size: i32,
193         flags: IconLookupFlags,
194     ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error> {
195         unsafe {
196             let mut error = ptr::null_mut();
197             let ret = gtk_sys::gtk_icon_theme_load_icon(
198                 self.as_ref().to_glib_none().0,
199                 icon_name.to_glib_none().0,
200                 size,
201                 flags.to_glib(),
202                 &mut error,
203             );
204             if error.is_null() {
205                 Ok(from_glib_full(ret))
206             } else {
207                 Err(from_glib_full(error))
208             }
209         }
210     }
211 
load_icon_for_scale( &self, icon_name: &str, size: i32, scale: i32, flags: IconLookupFlags, ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error>212     fn load_icon_for_scale(
213         &self,
214         icon_name: &str,
215         size: i32,
216         scale: i32,
217         flags: IconLookupFlags,
218     ) -> Result<Option<gdk_pixbuf::Pixbuf>, glib::Error> {
219         unsafe {
220             let mut error = ptr::null_mut();
221             let ret = gtk_sys::gtk_icon_theme_load_icon_for_scale(
222                 self.as_ref().to_glib_none().0,
223                 icon_name.to_glib_none().0,
224                 size,
225                 scale,
226                 flags.to_glib(),
227                 &mut error,
228             );
229             if error.is_null() {
230                 Ok(from_glib_full(ret))
231             } else {
232                 Err(from_glib_full(error))
233             }
234         }
235     }
236 
load_surface<P: IsA<gdk::Window>>( &self, icon_name: &str, size: i32, scale: i32, for_window: Option<&P>, flags: IconLookupFlags, ) -> Result<Option<cairo::Surface>, glib::Error>237     fn load_surface<P: IsA<gdk::Window>>(
238         &self,
239         icon_name: &str,
240         size: i32,
241         scale: i32,
242         for_window: Option<&P>,
243         flags: IconLookupFlags,
244     ) -> Result<Option<cairo::Surface>, glib::Error> {
245         unsafe {
246             let mut error = ptr::null_mut();
247             let ret = gtk_sys::gtk_icon_theme_load_surface(
248                 self.as_ref().to_glib_none().0,
249                 icon_name.to_glib_none().0,
250                 size,
251                 scale,
252                 for_window.map(|p| p.as_ref()).to_glib_none().0,
253                 flags.to_glib(),
254                 &mut error,
255             );
256             if error.is_null() {
257                 Ok(from_glib_full(ret))
258             } else {
259                 Err(from_glib_full(error))
260             }
261         }
262     }
263 
lookup_by_gicon<P: IsA<gio::Icon>>( &self, icon: &P, size: i32, flags: IconLookupFlags, ) -> Option<IconInfo>264     fn lookup_by_gicon<P: IsA<gio::Icon>>(
265         &self,
266         icon: &P,
267         size: i32,
268         flags: IconLookupFlags,
269     ) -> Option<IconInfo> {
270         unsafe {
271             from_glib_full(gtk_sys::gtk_icon_theme_lookup_by_gicon(
272                 self.as_ref().to_glib_none().0,
273                 icon.as_ref().to_glib_none().0,
274                 size,
275                 flags.to_glib(),
276             ))
277         }
278     }
279 
lookup_by_gicon_for_scale<P: IsA<gio::Icon>>( &self, icon: &P, size: i32, scale: i32, flags: IconLookupFlags, ) -> Option<IconInfo>280     fn lookup_by_gicon_for_scale<P: IsA<gio::Icon>>(
281         &self,
282         icon: &P,
283         size: i32,
284         scale: i32,
285         flags: IconLookupFlags,
286     ) -> Option<IconInfo> {
287         unsafe {
288             from_glib_full(gtk_sys::gtk_icon_theme_lookup_by_gicon_for_scale(
289                 self.as_ref().to_glib_none().0,
290                 icon.as_ref().to_glib_none().0,
291                 size,
292                 scale,
293                 flags.to_glib(),
294             ))
295         }
296     }
297 
lookup_icon(&self, icon_name: &str, size: i32, flags: IconLookupFlags) -> Option<IconInfo>298     fn lookup_icon(&self, icon_name: &str, size: i32, flags: IconLookupFlags) -> Option<IconInfo> {
299         unsafe {
300             from_glib_full(gtk_sys::gtk_icon_theme_lookup_icon(
301                 self.as_ref().to_glib_none().0,
302                 icon_name.to_glib_none().0,
303                 size,
304                 flags.to_glib(),
305             ))
306         }
307     }
308 
lookup_icon_for_scale( &self, icon_name: &str, size: i32, scale: i32, flags: IconLookupFlags, ) -> Option<IconInfo>309     fn lookup_icon_for_scale(
310         &self,
311         icon_name: &str,
312         size: i32,
313         scale: i32,
314         flags: IconLookupFlags,
315     ) -> Option<IconInfo> {
316         unsafe {
317             from_glib_full(gtk_sys::gtk_icon_theme_lookup_icon_for_scale(
318                 self.as_ref().to_glib_none().0,
319                 icon_name.to_glib_none().0,
320                 size,
321                 scale,
322                 flags.to_glib(),
323             ))
324         }
325     }
326 
prepend_search_path<P: AsRef<std::path::Path>>(&self, path: P)327     fn prepend_search_path<P: AsRef<std::path::Path>>(&self, path: P) {
328         unsafe {
329             gtk_sys::gtk_icon_theme_prepend_search_path(
330                 self.as_ref().to_glib_none().0,
331                 path.as_ref().to_glib_none().0,
332             );
333         }
334     }
335 
rescan_if_needed(&self) -> bool336     fn rescan_if_needed(&self) -> bool {
337         unsafe {
338             from_glib(gtk_sys::gtk_icon_theme_rescan_if_needed(
339                 self.as_ref().to_glib_none().0,
340             ))
341         }
342     }
343 
set_custom_theme(&self, theme_name: Option<&str>)344     fn set_custom_theme(&self, theme_name: Option<&str>) {
345         unsafe {
346             gtk_sys::gtk_icon_theme_set_custom_theme(
347                 self.as_ref().to_glib_none().0,
348                 theme_name.to_glib_none().0,
349             );
350         }
351     }
352 
set_screen(&self, screen: &gdk::Screen)353     fn set_screen(&self, screen: &gdk::Screen) {
354         unsafe {
355             gtk_sys::gtk_icon_theme_set_screen(
356                 self.as_ref().to_glib_none().0,
357                 screen.to_glib_none().0,
358             );
359         }
360     }
361 
connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId362     fn connect_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
363         unsafe extern "C" fn changed_trampoline<P, F: Fn(&P) + 'static>(
364             this: *mut gtk_sys::GtkIconTheme,
365             f: glib_sys::gpointer,
366         ) where
367             P: IsA<IconTheme>,
368         {
369             let f: &F = &*(f as *const F);
370             f(&IconTheme::from_glib_borrow(this).unsafe_cast())
371         }
372         unsafe {
373             let f: Box_<F> = Box_::new(f);
374             connect_raw(
375                 self.as_ptr() as *mut _,
376                 b"changed\0".as_ptr() as *const _,
377                 Some(transmute(changed_trampoline::<Self, F> as usize)),
378                 Box_::into_raw(f),
379             )
380         }
381     }
382 }
383 
384 impl fmt::Display for IconTheme {
fmt(&self, f: &mut fmt::Formatter) -> fmt::Result385     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
386         write!(f, "IconTheme")
387     }
388 }
389