libadwaita/auto/application.rs
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 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from
// from gir-files (https://github.com/gtk-rs/gir-files.git)
// DO NOT EDIT
use crate::{ffi, StyleManager};
use glib::{
prelude::*,
signal::{connect_raw, SignalHandlerId},
translate::*,
};
use std::boxed::Box as Box_;
glib::wrapper! {
/// A base class for Adwaita applications.
///
/// [`Application`][crate::Application] handles library initialization by calling [`init()`][crate::init()] in the
/// default [`startup`][struct@crate::gio::Application#startup] signal handler, in turn chaining up
/// as required by [`gtk::Application`][crate::gtk::Application]. Therefore, any subclass of
/// [`Application`][crate::Application] should always chain up its `startup` handler before using
/// any Adwaita or GTK API.
///
/// ## Automatic Resources
///
/// [`Application`][crate::Application] will automatically load stylesheets located in the
/// application's resource base path (see
/// [`ApplicationExtManual::set_resource_base_path()`][crate::gio::prelude::ApplicationExtManual::set_resource_base_path()], if they're present.
///
/// They can be used to add custom styles to the application, as follows:
///
/// - `style.css` contains styles that are always present.
///
/// - `style-dark.css` contains styles only used when
/// [`dark`][struct@crate::StyleManager#dark] is `TRUE`.
///
/// - `style-hc.css` contains styles used when the system high contrast
/// preference is enabled.
///
/// - `style-hc-dark.css` contains styles used when the system high contrast
/// preference is enabled and [`dark`][struct@crate::StyleManager#dark] is `TRUE`.
///
/// ## Properties
///
///
/// #### `style-manager`
/// The style manager for this application.
///
/// This is a convenience property allowing to access [`StyleManager`][crate::StyleManager] through
/// property bindings or expressions.
///
/// Readable
/// <details><summary><h4>Application</h4></summary>
///
///
/// #### `active-window`
/// The currently focused window of the application.
///
/// Readable
///
///
/// #### `menubar`
/// The `GMenuModel` to be used for the application's menu bar.
///
/// Readable | Writeable
///
///
/// #### `register-session`
/// Set this property to `TRUE` to register with the session manager.
///
/// This will make GTK track the session state (such as the
/// [`screensaver-active`][struct@crate::gtk::Application#screensaver-active] property).
///
/// Readable | Writeable
///
///
/// #### `screensaver-active`
/// This property is `TRUE` if GTK believes that the screensaver is
/// currently active.
///
/// GTK only tracks session state (including this) when
/// [`register-session`][struct@crate::gtk::Application#register-session] is set to [`true`].
///
/// Tracking the screensaver state is currently only supported on
/// Linux.
///
/// Readable
/// </details>
/// <details><summary><h4>Application</h4></summary>
///
///
/// #### `action-group`
/// The group of actions that the application exports.
///
/// Writeable
///
///
/// #### `application-id`
/// The unique identifier for the application.
///
/// Readable | Writeable | Construct
///
///
/// #### `flags`
/// Flags specifying the behaviour of the application.
///
/// Readable | Writeable
///
///
/// #### `inactivity-timeout`
/// Time (in milliseconds) to stay alive after becoming idle.
///
/// Readable | Writeable
///
///
/// #### `is-busy`
/// Whether the application is currently marked as busy through
/// g_application_mark_busy() or g_application_bind_busy_property().
///
/// Readable
///
///
/// #### `is-registered`
/// Whether [`ApplicationExtManual::register()`][crate::gio::prelude::ApplicationExtManual::register()] has been called.
///
/// Readable
///
///
/// #### `is-remote`
/// Whether this application instance is remote.
///
/// Readable
///
///
/// #### `resource-base-path`
/// The base resource path for the application.
///
/// Readable | Writeable
///
///
/// #### `version`
/// The human-readable version number of the application.
///
/// Readable | Writeable
/// </details>
///
/// # Implements
///
/// [`AdwApplicationExt`][trait@crate::prelude::AdwApplicationExt], [`trait@gtk::prelude::ApplicationExt`], [`trait@gio::prelude::ApplicationExt`], [`trait@glib::ObjectExt`], [`trait@gio::prelude::ActionGroupExt`], [`trait@gio::prelude::ActionMapExt`]
#[doc(alias = "AdwApplication")]
pub struct Application(Object<ffi::AdwApplication, ffi::AdwApplicationClass>) @extends gtk::Application, gio::Application, @implements gio::ActionGroup, gio::ActionMap;
match fn {
type_ => || ffi::adw_application_get_type(),
}
}
impl Application {
pub const NONE: Option<&'static Application> = None;
// rustdoc-stripper-ignore-next
/// Creates a new builder-pattern struct instance to construct [`Application`] objects.
///
/// This method returns an instance of [`ApplicationBuilder`](crate::builders::ApplicationBuilder) which can be used to create [`Application`] objects.
pub fn builder() -> ApplicationBuilder {
ApplicationBuilder::new()
}
}
// rustdoc-stripper-ignore-next
/// A [builder-pattern] type to construct [`Application`] objects.
///
/// [builder-pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
#[must_use = "The builder must be built to be used"]
pub struct ApplicationBuilder {
builder: glib::object::ObjectBuilder<'static, Application>,
}
impl ApplicationBuilder {
fn new() -> Self {
Self {
builder: glib::object::Object::builder(),
}
}
/// The `GMenuModel` to be used for the application's menu bar.
pub fn menubar(self, menubar: &impl IsA<gio::MenuModel>) -> Self {
Self {
builder: self.builder.property("menubar", menubar.clone().upcast()),
}
}
/// Set this property to `TRUE` to register with the session manager.
///
/// This will make GTK track the session state (such as the
/// [`screensaver-active`][struct@crate::gtk::Application#screensaver-active] property).
pub fn register_session(self, register_session: bool) -> Self {
Self {
builder: self.builder.property("register-session", register_session),
}
}
/// The unique identifier for the application.
pub fn application_id(self, application_id: impl Into<glib::GString>) -> Self {
Self {
builder: self
.builder
.property("application-id", application_id.into()),
}
}
/// Flags specifying the behaviour of the application.
pub fn flags(self, flags: gio::ApplicationFlags) -> Self {
Self {
builder: self.builder.property("flags", flags),
}
}
/// Time (in milliseconds) to stay alive after becoming idle.
pub fn inactivity_timeout(self, inactivity_timeout: u32) -> Self {
Self {
builder: self
.builder
.property("inactivity-timeout", inactivity_timeout),
}
}
/// The base resource path for the application.
pub fn resource_base_path(self, resource_base_path: impl Into<glib::GString>) -> Self {
Self {
builder: self
.builder
.property("resource-base-path", resource_base_path.into()),
}
}
/// The human-readable version number of the application.
#[cfg(feature = "gio_v2_80")]
#[cfg_attr(docsrs, doc(cfg(feature = "gio_v2_80")))]
pub fn version(self, version: impl Into<glib::GString>) -> Self {
Self {
builder: self.builder.property("version", version.into()),
}
}
// rustdoc-stripper-ignore-next
/// Build the [`Application`].
#[must_use = "Building the object from the builder is usually expensive and is not expected to have side effects"]
pub fn build(self) -> Application {
assert_initialized_main_thread!();
let ret = self.builder.build();
{
Application::register_startup_hook(&ret);
}
ret
}
}
/// Trait containing all [`struct@Application`] methods.
///
/// # Implementors
///
/// [`Application`][struct@crate::Application]
pub trait AdwApplicationExt: IsA<Application> + 'static {
/// Gets the style manager for @self.
///
/// This is a convenience property allowing to access [`StyleManager`][crate::StyleManager] through
/// property bindings or expressions.
///
/// # Returns
///
/// the style manager
#[doc(alias = "adw_application_get_style_manager")]
#[doc(alias = "get_style_manager")]
#[doc(alias = "style-manager")]
fn style_manager(&self) -> StyleManager {
unsafe {
from_glib_none(ffi::adw_application_get_style_manager(
self.as_ref().to_glib_none().0,
))
}
}
#[doc(alias = "style-manager")]
fn connect_style_manager_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn notify_style_manager_trampoline<
P: IsA<Application>,
F: Fn(&P) + 'static,
>(
this: *mut ffi::AdwApplication,
_param_spec: glib::ffi::gpointer,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(Application::from_glib_borrow(this).unsafe_cast_ref())
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"notify::style-manager\0".as_ptr() as *const _,
Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
notify_style_manager_trampoline::<Self, F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl<O: IsA<Application>> AdwApplicationExt for O {}