winit/platform_impl/linux/x11/
atoms.rs

1//! Collects every atom used by the platform implementation.
2
3use core::ops::Index;
4
5macro_rules! atom_manager {
6    ($($name:ident $(:$lit:literal)?),*) => {
7        x11rb::atom_manager! {
8            /// The atoms used by `winit`
9            pub Atoms: AtomsCookie {
10                $($name $(:$lit)?,)*
11            }
12        }
13
14        /// Indices into the `Atoms` struct.
15        #[derive(Copy, Clone, Debug)]
16        #[allow(non_camel_case_types)]
17        pub enum AtomName {
18            $($name,)*
19        }
20
21        impl AtomName {
22            pub(crate) fn atom_from(
23                self,
24                atoms: &Atoms
25            ) -> &x11rb::protocol::xproto::Atom {
26                match self {
27                    $(AtomName::$name => &atoms.$name,)*
28                }
29            }
30        }
31    };
32}
33
34atom_manager! {
35    // General Use Atoms
36    CARD32,
37    UTF8_STRING,
38    WM_CHANGE_STATE,
39    WM_CLIENT_MACHINE,
40    WM_DELETE_WINDOW,
41    WM_PROTOCOLS,
42    WM_STATE,
43    XIM_SERVERS,
44
45    // Assorted ICCCM Atoms
46    _NET_WM_ICON,
47    _NET_WM_MOVERESIZE,
48    _NET_WM_NAME,
49    _NET_WM_PID,
50    _NET_WM_PING,
51    _NET_WM_SYNC_REQUEST,
52    _NET_WM_SYNC_REQUEST_COUNTER,
53    _NET_WM_STATE,
54    _NET_WM_STATE_ABOVE,
55    _NET_WM_STATE_BELOW,
56    _NET_WM_STATE_FULLSCREEN,
57    _NET_WM_STATE_HIDDEN,
58    _NET_WM_STATE_MAXIMIZED_HORZ,
59    _NET_WM_STATE_MAXIMIZED_VERT,
60    _NET_WM_WINDOW_TYPE,
61
62    // Activation atoms.
63    _NET_STARTUP_INFO_BEGIN,
64    _NET_STARTUP_INFO,
65    _NET_STARTUP_ID,
66
67    // WM window types.
68    _NET_WM_WINDOW_TYPE_DESKTOP,
69    _NET_WM_WINDOW_TYPE_DOCK,
70    _NET_WM_WINDOW_TYPE_TOOLBAR,
71    _NET_WM_WINDOW_TYPE_MENU,
72    _NET_WM_WINDOW_TYPE_UTILITY,
73    _NET_WM_WINDOW_TYPE_SPLASH,
74    _NET_WM_WINDOW_TYPE_DIALOG,
75    _NET_WM_WINDOW_TYPE_DROPDOWN_MENU,
76    _NET_WM_WINDOW_TYPE_POPUP_MENU,
77    _NET_WM_WINDOW_TYPE_TOOLTIP,
78    _NET_WM_WINDOW_TYPE_NOTIFICATION,
79    _NET_WM_WINDOW_TYPE_COMBO,
80    _NET_WM_WINDOW_TYPE_DND,
81    _NET_WM_WINDOW_TYPE_NORMAL,
82
83    // Drag-N-Drop Atoms
84    XdndAware,
85    XdndEnter,
86    XdndLeave,
87    XdndDrop,
88    XdndPosition,
89    XdndStatus,
90    XdndActionPrivate,
91    XdndSelection,
92    XdndFinished,
93    XdndTypeList,
94    TextUriList: b"text/uri-list",
95    None: b"None",
96
97    // Miscellaneous Atoms
98    _GTK_THEME_VARIANT,
99    _MOTIF_WM_HINTS,
100    _NET_ACTIVE_WINDOW,
101    _NET_CLIENT_LIST,
102    _NET_FRAME_EXTENTS,
103    _NET_SUPPORTED,
104    _NET_SUPPORTING_WM_CHECK,
105    _XEMBED,
106    _XSETTINGS_SETTINGS
107}
108
109impl Index<AtomName> for Atoms {
110    type Output = x11rb::protocol::xproto::Atom;
111
112    fn index(&self, index: AtomName) -> &Self::Output {
113        index.atom_from(self)
114    }
115}
116
117// Make sure `None` is still defined.
118pub(crate) use core::option::Option::None;
119
120pub(crate) use AtomName::*;