147 lines
4.4 KiB
Rust
147 lines
4.4 KiB
Rust
#![cfg_attr(docsrs, feature(doc_cfg))]
|
|
#![allow(clippy::needless_doctest_main)]
|
|
#![doc(
|
|
html_logo_url = "https://gitlab.gnome.org/GNOME/libadwaita/-/raw/main/doc/libadwaita.svg",
|
|
html_favicon_url = "https://gitlab.gnome.org/GNOME/libadwaita/-/raw/main/demo/data/org.gnome.Adwaita1.Demo-symbolic.svg"
|
|
)]
|
|
//! # Rust Adwaita bindings
|
|
//!
|
|
//! This library contains safe Rust bindings for [Adwaita](https://gitlab.gnome.org/GNOME/libadwaita), a library that offers
|
|
//! building blocks for modern GNOME applications.
|
|
//!
|
|
//! See also
|
|
//!
|
|
//! - [GTK 4 Rust bindings documentation](mod@gtk)
|
|
//! - [Libadwaita documentation](https://gnome.pages.gitlab.gnome.org/libadwaita/)
|
|
//! - [gtk-rs project overview](https://gtk-rs.org/)
|
|
//! - [Report bindings related issues](https://gitlab.gnome.org/World/Rust/libadwaita-rs)
|
|
//! - [Report upstream libadwaita issues](https://gitlab.gnome.org/GNOME/libadwaita/)
|
|
//!
|
|
//! # Example
|
|
//!
|
|
//! Adwaita needs to be initialized before use.
|
|
//! This can be done by either:
|
|
//! - using [`adw::Application`](struct@Application) instead of [`gtk::Application`](struct@gtk::Application), or by
|
|
//! - calling [`fn@init`] on [`startup`](fn@gio::prelude::ApplicationExt::connect_startup).
|
|
//!
|
|
//! The [`libadwaita`](mod@crate) crate is usually renamed to `adw`. You can
|
|
//! do this globally in your `Cargo.toml` file:
|
|
//!
|
|
//! ```toml
|
|
//! [dependencies.adw]
|
|
//! package = "libadwaita"
|
|
//! version = "0.x.y"
|
|
//! ```
|
|
//!
|
|
//! ```no_run
|
|
//! # use libadwaita as adw;
|
|
//! use adw::prelude::*;
|
|
//!
|
|
//! use adw::{ActionRow, Application, ApplicationWindow, HeaderBar};
|
|
//! use gtk::{Box, ListBox, Orientation, SelectionMode};
|
|
//!
|
|
//! fn main() {
|
|
//! let application = Application::builder()
|
|
//! .application_id("com.example.FirstAdwaitaApp")
|
|
//! .build();
|
|
//!
|
|
//! application.connect_activate(|app| {
|
|
//! // ActionRows are only available in Adwaita
|
|
//! let row = ActionRow::builder()
|
|
//! .activatable(true)
|
|
//! .title("Click me")
|
|
//! .build();
|
|
//! row.connect_activated(|_| {
|
|
//! eprintln!("Clicked!");
|
|
//! });
|
|
//!
|
|
//! let list = ListBox::builder()
|
|
//! .margin_top(32)
|
|
//! .margin_end(32)
|
|
//! .margin_bottom(32)
|
|
//! .margin_start(32)
|
|
//! .selection_mode(SelectionMode::None)
|
|
//! // makes the list look nicer
|
|
//! .css_classes(vec![String::from("boxed-list")])
|
|
//! .build();
|
|
//! list.append(&row);
|
|
//!
|
|
//! // Combine the content in a box
|
|
//! let content = Box::new(Orientation::Vertical, 0);
|
|
//! // Adwaitas' ApplicationWindow does not include a HeaderBar
|
|
//! content.append(&HeaderBar::new());
|
|
//! content.append(&list);
|
|
//!
|
|
//! let window = ApplicationWindow::builder()
|
|
//! .application(app)
|
|
//! .title("First App")
|
|
//! .default_width(350)
|
|
//! // add content to window
|
|
//! .content(&content)
|
|
//! .build();
|
|
//! window.present();
|
|
//! });
|
|
//!
|
|
//! application.run();
|
|
//! }
|
|
//! ```
|
|
|
|
// Re-export the -sys bindings
|
|
pub use ffi;
|
|
pub use gdk;
|
|
pub use gio;
|
|
pub use glib;
|
|
pub use gtk;
|
|
|
|
/// Asserts that this is the main thread and `gtk::init` has been called.
|
|
macro_rules! assert_initialized_main_thread {
|
|
() => {
|
|
if !::gtk::is_initialized_main_thread() {
|
|
if ::gtk::is_initialized() {
|
|
panic!("libadwaita may only be used from the main thread.");
|
|
} else {
|
|
panic!("Gtk has to be initialized before using libadwaita.");
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
macro_rules! skip_assert_initialized {
|
|
() => {};
|
|
}
|
|
|
|
#[allow(unused_imports)]
|
|
#[allow(clippy::let_and_return)]
|
|
#[allow(clippy::type_complexity)]
|
|
mod auto;
|
|
|
|
#[cfg(feature = "v1_5")]
|
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_5")))]
|
|
mod alert_dialog;
|
|
mod application;
|
|
#[cfg(feature = "v1_4")]
|
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_4")))]
|
|
mod breakpoint;
|
|
mod carousel;
|
|
mod functions;
|
|
#[cfg(feature = "v1_2")]
|
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_2")))]
|
|
mod message_dialog;
|
|
#[cfg(feature = "v1_4")]
|
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_4")))]
|
|
mod spin_row;
|
|
mod tab_bar;
|
|
#[cfg(feature = "v1_3")]
|
|
#[cfg_attr(docsrs, doc(cfg(feature = "v1_3")))]
|
|
mod tab_overview;
|
|
mod tab_view;
|
|
mod toast;
|
|
|
|
pub use auto::functions::*;
|
|
pub use auto::*;
|
|
pub use functions::*;
|
|
|
|
pub mod builders;
|
|
pub mod prelude;
|
|
pub mod subclass;
|