// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files.git)
// DO NOT EDIT

#![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
#![allow(
    clippy::approx_constant,
    clippy::type_complexity,
    clippy::unreadable_literal,
    clippy::upper_case_acronyms
)]
#![cfg_attr(feature = "dox", feature(doc_cfg))]

use glib_sys as glib;

mod manual;

pub use manual::*;

#[allow(unused_imports)]
use libc::{
    c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
    intptr_t, size_t, ssize_t, time_t, uintptr_t, FILE,
};

#[allow(unused_imports)]
use glib::{gboolean, gconstpointer, gpointer, GType};

// Callbacks
pub type GdkWaylandToplevelExported =
    Option<unsafe extern "C" fn(*mut GdkWaylandToplevel, *const c_char, gpointer)>;

// Records
#[repr(C)]
pub struct _GdkWaylandDeviceClass(c_void);

pub type GdkWaylandDeviceClass = *mut _GdkWaylandDeviceClass;

#[repr(C)]
pub struct _GdkWaylandDisplayClass(c_void);

pub type GdkWaylandDisplayClass = *mut _GdkWaylandDisplayClass;

#[repr(C)]
pub struct _GdkWaylandGLContextClass(c_void);

pub type GdkWaylandGLContextClass = *mut _GdkWaylandGLContextClass;

#[repr(C)]
pub struct _GdkWaylandMonitorClass(c_void);

pub type GdkWaylandMonitorClass = *mut _GdkWaylandMonitorClass;

#[repr(C)]
pub struct _GdkWaylandSeatClass(c_void);

pub type GdkWaylandSeatClass = *mut _GdkWaylandSeatClass;

// Classes
#[repr(C)]
pub struct GdkWaylandDevice(c_void);

impl ::std::fmt::Debug for GdkWaylandDevice {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandDevice @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandDisplay(c_void);

impl ::std::fmt::Debug for GdkWaylandDisplay {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandDisplay @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandGLContext(c_void);

impl ::std::fmt::Debug for GdkWaylandGLContext {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandGLContext @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandMonitor(c_void);

impl ::std::fmt::Debug for GdkWaylandMonitor {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandMonitor @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandPopup(c_void);

impl ::std::fmt::Debug for GdkWaylandPopup {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandPopup @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandSeat(c_void);

impl ::std::fmt::Debug for GdkWaylandSeat {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandSeat @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandSurface(c_void);

impl ::std::fmt::Debug for GdkWaylandSurface {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandSurface @ {:p}", self))
            .finish()
    }
}

#[repr(C)]
pub struct GdkWaylandToplevel(c_void);

impl ::std::fmt::Debug for GdkWaylandToplevel {
    fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
        f.debug_struct(&format!("GdkWaylandToplevel @ {:p}", self))
            .finish()
    }
}

#[link(name = "gtk-4")]
extern "C" {

    //=========================================================================
    // GdkWaylandDevice
    //=========================================================================
    pub fn gdk_wayland_device_get_type() -> GType;
    pub fn gdk_wayland_device_get_node_path(device: *mut GdkWaylandDevice) -> *const c_char;
    pub fn gdk_wayland_device_get_wl_keyboard(device: *mut GdkWaylandDevice) -> gpointer;
    pub fn gdk_wayland_device_get_wl_pointer(device: *mut GdkWaylandDevice) -> gpointer;
    pub fn gdk_wayland_device_get_wl_seat(device: *mut GdkWaylandDevice) -> gpointer;
    #[cfg(any(feature = "v4_4", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v4_4")))]
    pub fn gdk_wayland_device_get_xkb_keymap(device: *mut GdkWaylandDevice) -> *mut xkb_keymap;

    //=========================================================================
    // GdkWaylandDisplay
    //=========================================================================
    pub fn gdk_wayland_display_get_type() -> GType;
    #[cfg(any(feature = "v4_4", feature = "dox"))]
    #[cfg_attr(feature = "dox", doc(cfg(feature = "v4_4")))]
    pub fn gdk_wayland_display_get_egl_display(display: *mut GdkWaylandDisplay) -> gpointer;
    pub fn gdk_wayland_display_get_startup_notification_id(
        display: *mut GdkWaylandDisplay,
    ) -> *const c_char;
    pub fn gdk_wayland_display_get_wl_compositor(display: *mut GdkWaylandDisplay) -> gpointer;
    pub fn gdk_wayland_display_get_wl_display(display: *mut GdkWaylandDisplay) -> gpointer;
    pub fn gdk_wayland_display_query_registry(
        display: *mut GdkWaylandDisplay,
        global: *const c_char,
    ) -> gboolean;
    pub fn gdk_wayland_display_set_cursor_theme(
        display: *mut GdkWaylandDisplay,
        name: *const c_char,
        size: c_int,
    );
    pub fn gdk_wayland_display_set_startup_notification_id(
        display: *mut GdkWaylandDisplay,
        startup_id: *const c_char,
    );

    //=========================================================================
    // GdkWaylandGLContext
    //=========================================================================
    pub fn gdk_wayland_gl_context_get_type() -> GType;

    //=========================================================================
    // GdkWaylandMonitor
    //=========================================================================
    pub fn gdk_wayland_monitor_get_type() -> GType;
    pub fn gdk_wayland_monitor_get_wl_output(monitor: *mut GdkWaylandMonitor) -> gpointer;

    //=========================================================================
    // GdkWaylandPopup
    //=========================================================================
    pub fn gdk_wayland_popup_get_type() -> GType;

    //=========================================================================
    // GdkWaylandSeat
    //=========================================================================
    pub fn gdk_wayland_seat_get_type() -> GType;
    pub fn gdk_wayland_seat_get_wl_seat(seat: *mut GdkWaylandSeat) -> gpointer;

    //=========================================================================
    // GdkWaylandSurface
    //=========================================================================
    pub fn gdk_wayland_surface_get_type() -> GType;
    pub fn gdk_wayland_surface_get_wl_surface(surface: *mut GdkWaylandSurface) -> gpointer;

    //=========================================================================
    // GdkWaylandToplevel
    //=========================================================================
    pub fn gdk_wayland_toplevel_get_type() -> GType;
    pub fn gdk_wayland_toplevel_export_handle(
        toplevel: *mut GdkWaylandToplevel,
        callback: GdkWaylandToplevelExported,
        user_data: gpointer,
        destroy_func: glib::GDestroyNotify,
    ) -> gboolean;
    pub fn gdk_wayland_toplevel_set_application_id(
        toplevel: *mut GdkWaylandToplevel,
        application_id: *const c_char,
    );
    pub fn gdk_wayland_toplevel_set_transient_for_exported(
        toplevel: *mut GdkWaylandToplevel,
        parent_handle_str: *const c_char,
    ) -> gboolean;
    pub fn gdk_wayland_toplevel_unexport_handle(toplevel: *mut GdkWaylandToplevel);

}
