webkit2gtk/auto/
favicon_database.rs

1// This file was generated by gir (https://github.com/gtk-rs/gir)
2// from gir-files (https://github.com/tauri-apps/gir-files)
3// DO NOT EDIT
4
5use glib::{
6  prelude::*,
7  signal::{connect_raw, SignalHandlerId},
8  translate::*,
9};
10use std::{boxed::Box as Box_, pin::Pin};
11
12glib::wrapper! {
13    #[doc(alias = "WebKitFaviconDatabase")]
14    pub struct FaviconDatabase(Object<ffi::WebKitFaviconDatabase, ffi::WebKitFaviconDatabaseClass>);
15
16    match fn {
17        type_ => || ffi::webkit_favicon_database_get_type(),
18    }
19}
20
21impl FaviconDatabase {
22  pub const NONE: Option<&'static FaviconDatabase> = None;
23}
24
25mod sealed {
26  pub trait Sealed {}
27  impl<T: super::IsA<super::FaviconDatabase>> Sealed for T {}
28}
29
30pub trait FaviconDatabaseExt: IsA<FaviconDatabase> + sealed::Sealed + 'static {
31  #[doc(alias = "webkit_favicon_database_clear")]
32  fn clear(&self) {
33    unsafe {
34      ffi::webkit_favicon_database_clear(self.as_ref().to_glib_none().0);
35    }
36  }
37
38  #[doc(alias = "webkit_favicon_database_get_favicon")]
39  #[doc(alias = "get_favicon")]
40  fn favicon<P: FnOnce(Result<cairo::Surface, glib::Error>) + 'static>(
41    &self,
42    page_uri: &str,
43    cancellable: Option<&impl IsA<gio::Cancellable>>,
44    callback: P,
45  ) {
46    let main_context = glib::MainContext::ref_thread_default();
47    let is_main_context_owner = main_context.is_owner();
48    let has_acquired_main_context = (!is_main_context_owner)
49      .then(|| main_context.acquire().ok())
50      .flatten();
51    assert!(
52      is_main_context_owner || has_acquired_main_context.is_some(),
53      "Async operations only allowed if the thread is owning the MainContext"
54    );
55
56    let user_data: Box_<glib::thread_guard::ThreadGuard<P>> =
57      Box_::new(glib::thread_guard::ThreadGuard::new(callback));
58    unsafe extern "C" fn favicon_trampoline<
59      P: FnOnce(Result<cairo::Surface, glib::Error>) + 'static,
60    >(
61      _source_object: *mut glib::gobject_ffi::GObject,
62      res: *mut gio::ffi::GAsyncResult,
63      user_data: glib::ffi::gpointer,
64    ) {
65      let mut error = std::ptr::null_mut();
66      let ret =
67        ffi::webkit_favicon_database_get_favicon_finish(_source_object as *mut _, res, &mut error);
68      let result = if error.is_null() {
69        Ok(from_glib_full(ret))
70      } else {
71        Err(from_glib_full(error))
72      };
73      let callback: Box_<glib::thread_guard::ThreadGuard<P>> = Box_::from_raw(user_data as *mut _);
74      let callback: P = callback.into_inner();
75      callback(result);
76    }
77    let callback = favicon_trampoline::<P>;
78    unsafe {
79      ffi::webkit_favicon_database_get_favicon(
80        self.as_ref().to_glib_none().0,
81        page_uri.to_glib_none().0,
82        cancellable.map(|p| p.as_ref()).to_glib_none().0,
83        Some(callback),
84        Box_::into_raw(user_data) as *mut _,
85      );
86    }
87  }
88
89  fn favicon_future(
90    &self,
91    page_uri: &str,
92  ) -> Pin<Box_<dyn std::future::Future<Output = Result<cairo::Surface, glib::Error>> + 'static>>
93  {
94    let page_uri = String::from(page_uri);
95    Box_::pin(gio::GioFuture::new(self, move |obj, cancellable, send| {
96      obj.favicon(&page_uri, Some(cancellable), move |res| {
97        send.resolve(res);
98      });
99    }))
100  }
101
102  #[doc(alias = "webkit_favicon_database_get_favicon_uri")]
103  #[doc(alias = "get_favicon_uri")]
104  fn favicon_uri(&self, page_uri: &str) -> Option<glib::GString> {
105    unsafe {
106      from_glib_full(ffi::webkit_favicon_database_get_favicon_uri(
107        self.as_ref().to_glib_none().0,
108        page_uri.to_glib_none().0,
109      ))
110    }
111  }
112
113  #[doc(alias = "favicon-changed")]
114  fn connect_favicon_changed<F: Fn(&Self, &str, &str) + 'static>(&self, f: F) -> SignalHandlerId {
115    unsafe extern "C" fn favicon_changed_trampoline<
116      P: IsA<FaviconDatabase>,
117      F: Fn(&P, &str, &str) + 'static,
118    >(
119      this: *mut ffi::WebKitFaviconDatabase,
120      page_uri: *mut libc::c_char,
121      favicon_uri: *mut libc::c_char,
122      f: glib::ffi::gpointer,
123    ) {
124      let f: &F = &*(f as *const F);
125      f(
126        FaviconDatabase::from_glib_borrow(this).unsafe_cast_ref(),
127        &glib::GString::from_glib_borrow(page_uri),
128        &glib::GString::from_glib_borrow(favicon_uri),
129      )
130    }
131    unsafe {
132      let f: Box_<F> = Box_::new(f);
133      connect_raw(
134        self.as_ptr() as *mut _,
135        b"favicon-changed\0".as_ptr() as *const _,
136        Some(std::mem::transmute::<_, unsafe extern "C" fn()>(
137          favicon_changed_trampoline::<Self, F> as *const (),
138        )),
139        Box_::into_raw(f),
140      )
141    }
142  }
143}
144
145impl<O: IsA<FaviconDatabase>> FaviconDatabaseExt for O {}