1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
use crate::Initable;
use glib::object::Cast;
use glib::object::IsA;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*;
use std::boxed::Box as Box_;
use std::fmt;
use std::mem::transmute;
glib::wrapper! {
/// [`PowerProfileMonitor`][crate::PowerProfileMonitor] makes it possible for applications as well as OS components
/// to monitor system power profiles and act upon them. It currently only exports
/// whether the system is in “Power Saver” mode (known as “Low Power” mode on
/// some systems).
///
/// When in “Low Power” mode, it is recommended that applications:
/// - disabling automatic downloads
/// - reduce the rate of refresh from online sources such as calendar or
/// email synchronisation
/// - if the application has expensive visual effects, reduce them
///
/// It is also likely that OS components providing services to applications will
/// lower their own background activity, for the sake of the system.
///
/// There are a variety of tools that exist for power consumption analysis, but those
/// usually depend on the OS and hardware used. On Linux, one could use `upower` to
/// monitor the battery discharge rate, `powertop` to check on the background activity
/// or activity at all), `sysprof` to inspect CPU usage, and `intel_gpu_time` to
/// profile GPU usage.
///
/// Don't forget to disconnect the `signal::PowerProfileMonitor::notify`::power-saver-enabled
/// signal, and unref the [`PowerProfileMonitor`][crate::PowerProfileMonitor] itself when exiting.
///
/// # Implements
///
/// [`PowerProfileMonitorExt`][trait@crate::prelude::PowerProfileMonitorExt], [`InitableExt`][trait@crate::prelude::InitableExt]
#[doc(alias = "GPowerProfileMonitor")]
pub struct PowerProfileMonitor(Interface<ffi::GPowerProfileMonitor, ffi::GPowerProfileMonitorInterface>) @requires Initable;
match fn {
type_ => || ffi::g_power_profile_monitor_get_type(),
}
}
impl PowerProfileMonitor {
pub const NONE: Option<&'static PowerProfileMonitor> = None;
/// Gets a reference to the default [`PowerProfileMonitor`][crate::PowerProfileMonitor] for the system.
///
/// # Returns
///
/// a new reference to the default [`PowerProfileMonitor`][crate::PowerProfileMonitor]
#[doc(alias = "g_power_profile_monitor_dup_default")]
#[doc(alias = "dup_default")]
pub fn get_default() -> PowerProfileMonitor {
unsafe { from_glib_full(ffi::g_power_profile_monitor_dup_default()) }
}
}
/// Trait containing all [`struct@PowerProfileMonitor`] methods.
///
/// # Implementors
///
/// [`PowerProfileMonitor`][struct@crate::PowerProfileMonitor]
pub trait PowerProfileMonitorExt: 'static {
/// Gets whether the system is in “Power Saver” mode.
///
/// You are expected to listen to the
/// `signal::PowerProfileMonitor::notify`::power-saver-enabled signal to know when the profile has
/// changed.
///
/// # Returns
///
/// Whether the system is in “Power Saver” mode.
#[doc(alias = "g_power_profile_monitor_get_power_saver_enabled")]
#[doc(alias = "get_power_saver_enabled")]
fn is_power_saver_enabled(&self) -> bool;
#[cfg(any(feature = "v2_70", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_70")))]
#[doc(alias = "power-saver-enabled")]
fn connect_power_saver_enabled_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId;
}
impl<O: IsA<PowerProfileMonitor>> PowerProfileMonitorExt for O {
fn is_power_saver_enabled(&self) -> bool {
unsafe {
from_glib(ffi::g_power_profile_monitor_get_power_saver_enabled(
self.as_ref().to_glib_none().0,
))
}
}
#[cfg(any(feature = "v2_70", feature = "dox"))]
#[cfg_attr(feature = "dox", doc(cfg(feature = "v2_70")))]
fn connect_power_saver_enabled_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn notify_power_saver_enabled_trampoline<
P: IsA<PowerProfileMonitor>,
F: Fn(&P) + 'static,
>(
this: *mut ffi::GPowerProfileMonitor,
_param_spec: glib::ffi::gpointer,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(PowerProfileMonitor::from_glib_borrow(this).unsafe_cast_ref())
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::power-saver-enabled\0".as_ptr() as *const _,
Some(transmute::<_, unsafe extern "C" fn()>(
notify_power_saver_enabled_trampoline::<Self, F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl fmt::Display for PowerProfileMonitor {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("PowerProfileMonitor")
}
}