#![allow(
clippy::zero_prefixed_literal,
clippy::manual_range_contains,
clippy::uninlined_format_args,
clippy::len_zero,
clippy::single_char_pattern,
clippy::single_char_add_str,
clippy::single_match
)]
#![warn(unsafe_op_in_unsafe_fn)]
#[expect(unused_imports)]
use crate::input::Seat;
use {
crate::{
_private::ipc::WorkspaceSource, keyboard::ModifiedKeySym, video::Connector, window::Window,
},
serde::{Deserialize, Serialize},
std::{
fmt::{Debug, Display, Formatter},
time::Duration,
},
};
#[macro_use]
mod macros;
#[doc(hidden)]
pub mod _private;
pub mod client;
pub mod embedded;
pub mod exec;
pub mod input;
pub mod io;
pub mod keyboard;
pub mod logging;
pub mod status;
pub mod tasks;
pub mod theme;
pub mod timer;
pub mod video;
pub mod window;
pub mod workspace;
pub mod xwayland;
#[derive(Serialize, Deserialize, Copy, Clone, Debug, Eq, PartialEq)]
pub enum Direction {
Left,
Down,
Up,
Right,
}
#[derive(Serialize, Deserialize, Copy, Clone, Debug, Hash, Eq, PartialEq)]
pub enum Axis {
Horizontal,
Vertical,
}
impl Axis {
pub fn other(self) -> Self {
match self {
Self::Horizontal => Self::Vertical,
Self::Vertical => Self::Horizontal,
}
}
}
pub fn quit() {
get!().quit()
}
pub fn switch_to_vt(n: u32) {
get!().switch_to_vt(n)
}
pub fn reload() {
get!().reload()
}
pub fn is_reload() -> bool {
get!(false).is_reload()
}
pub fn set_default_workspace_capture(capture: bool) {
get!().set_default_workspace_capture(capture)
}
pub fn get_default_workspace_capture() -> bool {
get!(true).get_default_workspace_capture()
}
pub fn toggle_default_workspace_capture() {
let get = get!();
get.set_default_workspace_capture(!get.get_default_workspace_capture());
}
#[derive(Serialize, Deserialize, Copy, Clone, Debug, Hash, Eq, PartialEq)]
pub struct Workspace(pub u64);
impl Workspace {
pub fn exists(self) -> bool {
self.0 != 0
}
pub fn set_capture(self, capture: bool) {
get!().set_workspace_capture(self, capture)
}
pub fn get_capture(self) -> bool {
get!(true).get_workspace_capture(self)
}
pub fn toggle_capture(self) {
let get = get!();
get.set_workspace_capture(self, !get.get_workspace_capture(self));
}
pub fn move_to_output(self, output: Connector) {
get!().move_to_output(WorkspaceSource::Explicit(self), output);
}
pub fn window(self) -> Window {
get!(Window(0)).get_workspace_window(self)
}
pub fn connector(self) -> Connector {
get!(Connector(0)).get_workspace_connector(self)
}
}
pub fn get_workspace(name: &str) -> Workspace {
get!(Workspace(0)).get_workspace(name)
}
#[derive(Serialize, Deserialize, Debug, Copy, Clone, Hash, Eq, PartialEq, Default)]
pub struct PciId {
pub vendor: u32,
pub model: u32,
}
impl Display for PciId {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{:04x}:{:04x}", self.vendor, self.model)
}
}
pub fn on_idle<F: FnMut() + 'static>(f: F) {
get!().on_idle(f)
}
pub fn on_devices_enumerated<F: FnOnce() + 'static>(f: F) {
get!().on_devices_enumerated(f)
}
pub fn config_dir() -> String {
get!().config_dir()
}
pub fn workspaces() -> Vec<Workspace> {
get!().workspaces()
}
pub fn set_idle(timeout: Option<Duration>) {
get!().set_idle(timeout.unwrap_or_default())
}
pub fn set_idle_grace_period(timeout: Duration) {
get!().set_idle_grace_period(timeout)
}
pub fn set_explicit_sync_enabled(enabled: bool) {
get!().set_explicit_sync_enabled(enabled);
}
pub fn set_ui_drag_enabled(enabled: bool) {
get!().set_ui_drag_enabled(enabled);
}
pub fn set_ui_drag_threshold(threshold: i32) {
get!().set_ui_drag_threshold(threshold);
}
pub fn set_color_management_enabled(enabled: bool) {
get!().set_color_management_enabled(enabled);
}
pub fn set_float_above_fullscreen(above: bool) {
get!().set_float_above_fullscreen(above);
}
pub fn get_float_above_fullscreen() -> bool {
get!().get_float_above_fullscreen()
}
pub fn toggle_float_above_fullscreen() {
set_float_above_fullscreen(!get_float_above_fullscreen())
}
pub fn set_show_float_pin_icon(show: bool) {
get!().set_show_float_pin_icon(show);
}
pub fn set_show_bar(show: bool) {
get!().set_show_bar(show)
}
pub fn get_show_bar() -> bool {
get!(true).get_show_bar()
}
pub fn toggle_show_bar() {
let get = get!();
get.set_show_bar(!get.get_show_bar());
}
pub fn set_show_titles(show: bool) {
get!().set_show_titles(show)
}
pub fn get_show_titles() -> bool {
get!(true).get_show_titles()
}
pub fn toggle_show_titles() {
let get = get!();
get.set_show_titles(!get.get_show_titles());
}
pub fn on_unload(f: impl FnOnce() + 'static) {
get!().on_unload(f);
}
#[doc(alias("primary-selection", "primary_selection"))]
pub fn set_middle_click_paste_enabled(enabled: bool) {
get!().set_middle_click_paste_enabled(enabled);
}
pub fn open_control_center() {
get!().open_control_center();
}