gio/auto/
memory_monitor.rs1use crate::{ffi, Initable, MemoryMonitorWarningLevel};
6use glib::{
7 object::ObjectType as _,
8 prelude::*,
9 signal::{connect_raw, SignalHandlerId},
10 translate::*,
11};
12use std::boxed::Box as Box_;
13
14glib::wrapper! {
15 #[doc(alias = "GMemoryMonitor")]
16 pub struct MemoryMonitor(Interface<ffi::GMemoryMonitor, ffi::GMemoryMonitorInterface>) @requires Initable;
17
18 match fn {
19 type_ => || ffi::g_memory_monitor_get_type(),
20 }
21}
22
23impl MemoryMonitor {
24 pub const NONE: Option<&'static MemoryMonitor> = None;
25
26 #[doc(alias = "g_memory_monitor_dup_default")]
27 pub fn dup_default() -> MemoryMonitor {
28 unsafe { from_glib_full(ffi::g_memory_monitor_dup_default()) }
29 }
30}
31
32pub trait MemoryMonitorExt: IsA<MemoryMonitor> + 'static {
33 #[cfg(feature = "v2_64")]
34 #[cfg_attr(docsrs, doc(cfg(feature = "v2_64")))]
35 #[doc(alias = "low-memory-warning")]
36 fn connect_low_memory_warning<F: Fn(&Self, MemoryMonitorWarningLevel) + 'static>(
37 &self,
38 f: F,
39 ) -> SignalHandlerId {
40 unsafe extern "C" fn low_memory_warning_trampoline<
41 P: IsA<MemoryMonitor>,
42 F: Fn(&P, MemoryMonitorWarningLevel) + 'static,
43 >(
44 this: *mut ffi::GMemoryMonitor,
45 level: ffi::GMemoryMonitorWarningLevel,
46 f: glib::ffi::gpointer,
47 ) {
48 let f: &F = &*(f as *const F);
49 f(
50 MemoryMonitor::from_glib_borrow(this).unsafe_cast_ref(),
51 from_glib(level),
52 )
53 }
54 unsafe {
55 let f: Box_<F> = Box_::new(f);
56 connect_raw(
57 self.as_ptr() as *mut _,
58 c"low-memory-warning".as_ptr() as *const _,
59 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
60 low_memory_warning_trampoline::<Self, F> as *const (),
61 )),
62 Box_::into_raw(f),
63 )
64 }
65 }
66}
67
68impl<O: IsA<MemoryMonitor>> MemoryMonitorExt for O {}