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
// Take a look at the license at the top of the repository in the LICENSE file.

use crate::X11Display;
use glib::{translate::*, IntoGStr};

#[cfg(not(feature = "xlib"))]
use crate::XAtom;
#[cfg(feature = "xlib")]
#[cfg_attr(docsrs, doc(cfg(feature = "xlib")))]
use x11::xlib::Atom as XAtom;

/// Returns the X atom for a [`gdk::Display`][crate::gdk::Display] corresponding to @atom_name.
/// This function caches the result, so if called repeatedly it is much
/// faster than XInternAtom(), which is a round trip to the server each time.
/// ## `display`
/// a [`gdk::Display`][crate::gdk::Display]
/// ## `atom_name`
/// a string
///
/// # Returns
///
/// a X atom for a [`gdk::Display`][crate::gdk::Display]
#[doc(alias = "gdk_x11_get_xatom_by_name_for_display")]
pub fn x11_get_xatom_by_name_for_display(display: &X11Display, atom_name: impl IntoGStr) -> XAtom {
    skip_assert_initialized!();
    unsafe {
        atom_name.run_with_gstr(|atom_name| {
            ffi::gdk_x11_get_xatom_by_name_for_display(display.to_glib_none().0, atom_name.as_ptr())
        })
    }
}

/// Returns the name of an X atom for its display. This
/// function is meant mainly for debugging, so for convenience, unlike
/// XAtomName() and the result doesn’t need to
/// be freed.
/// ## `display`
/// the [`gdk::Display`][crate::gdk::Display] where @xatom is defined
/// ## `xatom`
/// an X atom
///
/// # Returns
///
/// name of the X atom; this string is owned by GDK,
///   so it shouldn’t be modified or freed.
#[doc(alias = "gdk_x11_get_xatom_name_for_display")]
pub fn x11_get_xatom_name_for_display(display: &X11Display, xatom: XAtom) -> Option<glib::GString> {
    skip_assert_initialized!();
    unsafe {
        from_glib_none(ffi::gdk_x11_get_xatom_name_for_display(
            display.to_glib_none().0,
            xatom,
        ))
    }
}