// 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

#![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(docsrs, feature(doc_cfg))]

use gdk4_sys as gdk;
use glib_sys as glib;

#[allow(unused_imports)]
use libc::{FILE, intptr_t, off_t, size_t, ssize_t, time_t, uintptr_t};
#[cfg(unix)]
#[allow(unused_imports)]
use libc::{dev_t, gid_t, pid_t, socklen_t, uid_t};
#[allow(unused_imports)]
use std::ffi::{
    c_char, c_double, c_float, c_int, c_long, c_short, c_uchar, c_uint, c_ulong, c_ushort, c_void,
};

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

// Records
#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosDeviceClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosDeviceClass = _GdkMacosDeviceClass;

#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosDisplayClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosDisplayClass = _GdkMacosDisplayClass;

#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosGLContextClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosGLContextClass = _GdkMacosGLContextClass;

#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosKeymapClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosKeymapClass = _GdkMacosKeymapClass;

#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosMonitorClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosMonitorClass = _GdkMacosMonitorClass;

#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosSeatClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosSeatClass = _GdkMacosSeatClass;

#[repr(C)]
#[allow(dead_code)]
pub struct _GdkMacosSurfaceClass {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

pub type GdkMacosSurfaceClass = _GdkMacosSurfaceClass;

// Classes
#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosDevice {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosDisplay {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosGLContext {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosKeymap {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosMonitor {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosSeat {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

#[repr(C)]
#[allow(dead_code)]
pub struct GdkMacosSurface {
    _data: [u8; 0],
    _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
}

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

unsafe extern "C" {

    //=========================================================================
    // GdkMacosDevice
    //=========================================================================
    pub fn gdk_macos_device_get_type() -> GType;

    //=========================================================================
    // GdkMacosDisplay
    //=========================================================================
    pub fn gdk_macos_display_get_type() -> GType;

    //=========================================================================
    // GdkMacosGLContext
    //=========================================================================
    pub fn gdk_macos_gl_context_get_type() -> GType;

    //=========================================================================
    // GdkMacosKeymap
    //=========================================================================
    pub fn gdk_macos_keymap_get_type() -> GType;

    //=========================================================================
    // GdkMacosMonitor
    //=========================================================================
    pub fn gdk_macos_monitor_get_type() -> GType;
    pub fn gdk_macos_monitor_get_workarea(
        monitor: *mut gdk::GdkMonitor,
        geometry: *mut gdk::GdkRectangle,
    );

    //=========================================================================
    // GdkMacosSeat
    //=========================================================================
    pub fn gdk_macos_seat_get_type() -> GType;

    //=========================================================================
    // GdkMacosSurface
    //=========================================================================
    pub fn gdk_macos_surface_get_type() -> GType;
    #[cfg(feature = "v4_8")]
    #[cfg_attr(docsrs, doc(cfg(feature = "v4_8")))]
    pub fn gdk_macos_surface_get_native_window(self_: *mut GdkMacosSurface) -> gpointer;

}
