penrose/x/
atom.rs

1//! Data types for working with X atoms
2#[cfg(feature = "serde")]
3use serde::{Deserialize, Serialize};
4use strum::*;
5
6/// A Penrose internal representation of X atoms.
7///
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9#[derive(AsRefStr, EnumString, EnumIter, Debug, Clone, Copy, Hash, PartialEq, Eq)]
10pub enum Atom {
11    /// ATOM
12    #[strum(serialize = "ATOM")]
13    Atom,
14    /// ATOM_WINDOW
15    #[strum(serialize = "ATOM_WINDOW")]
16    Window,
17    /// ATOM_CARDINAL
18    #[strum(serialize = "ATOM_CARDINAL")]
19    Cardinal,
20    /// MANAGER
21    #[strum(serialize = "MANAGER")]
22    Manager,
23    /// UTF8_STRING
24    #[strum(serialize = "UTF8_STRING")]
25    UTF8String,
26    /// WM_CLASS
27    #[strum(serialize = "WM_CLASS")]
28    WmClass,
29    /// WM_DELETE_WINDOW
30    #[strum(serialize = "WM_DELETE_WINDOW")]
31    WmDeleteWindow,
32    /// WM_HINTS
33    #[strum(serialize = "WM_HINTS")]
34    WmHints,
35    /// WM_NORMAL_HINTS
36    #[strum(serialize = "WM_NORMAL_HINTS")]
37    WmNormalHints,
38    /// WM_PROTOCOLS
39    #[strum(serialize = "WM_PROTOCOLS")]
40    WmProtocols,
41    /// WM_STATE
42    #[strum(serialize = "WM_STATE")]
43    WmState,
44    /// WM_NAME
45    #[strum(serialize = "WM_NAME")]
46    WmName,
47    /// WM_TRANSIENT_FOR
48    #[strum(serialize = "WM_TRANSIENT_FOR")]
49    WmTransientFor,
50    /// WM_TAKE_FOCUS
51    #[strum(serialize = "WM_TAKE_FOCUS")]
52    WmTakeFocus,
53    /// _NET_ACTIVE_WINDOW
54    #[strum(serialize = "_NET_ACTIVE_WINDOW")]
55    NetActiveWindow,
56    /// _NET_CLIENT_LIST
57    #[strum(serialize = "_NET_CLIENT_LIST")]
58    NetClientList,
59    /// _NET_CLIENT_LIST
60    #[strum(serialize = "_NET_CLIENT_LIST_STACKING")]
61    NetClientListStacking,
62    /// _NET_CURRENT_DESKTOP
63    #[strum(serialize = "_NET_CURRENT_DESKTOP")]
64    NetCurrentDesktop,
65    /// _NET_DESKTOP_NAMES
66    #[strum(serialize = "_NET_DESKTOP_NAMES")]
67    NetDesktopNames,
68    /// _NET_DESKTOP_VIEWPORT
69    #[strum(serialize = "_NET_DESKTOP_VIEWPORT")]
70    NetDesktopViewport,
71    /// _NET_NUMBER_OF_DESKTOPS
72    #[strum(serialize = "_NET_NUMBER_OF_DESKTOPS")]
73    NetNumberOfDesktops,
74    /// _NET_SUPPORTED
75    #[strum(serialize = "_NET_SUPPORTED")]
76    NetSupported,
77    /// _NET_SUPPORTING_WM_CHECK
78    #[strum(serialize = "_NET_SUPPORTING_WM_CHECK")]
79    NetSupportingWmCheck,
80    /// _NET_SYSTEM_TRAY_OPCODE
81    #[strum(serialize = "_NET_SYSTEM_TRAY_OPCODE")]
82    NetSystemTrayOpcode,
83    /// _NET_SYSTEM_TRAY_ORIENTATION
84    #[strum(serialize = "_NET_SYSTEM_TRAY_ORIENTATION")]
85    NetSystemTrayOrientation,
86    /// _NET_SYSTEM_TRAY_ORIENTATION_HORZ
87    #[strum(serialize = "_NET_SYSTEM_TRAY_ORIENTATION_HORZ")]
88    NetSystemTrayOrientationHorz,
89    /// _NET_SYSTEM_TRAY_S0
90    #[strum(serialize = "_NET_SYSTEM_TRAY_S0")]
91    NetSystemTrayS0,
92    /// _NET_WM_DESKTOP
93    #[strum(serialize = "_NET_WM_DESKTOP")]
94    NetWmDesktop,
95    /// _NET_WM_NAME
96    #[strum(serialize = "_NET_WM_NAME")]
97    NetWmName,
98    /// _NET_WM_STATE
99    #[strum(serialize = "_NET_WM_STATE")]
100    NetWmState,
101    /// _NET_WM_STRUT
102    #[strum(serialize = "_NET_WM_STRUT")]
103    NetWmStrut,
104    /// _NET_WM_STATE_DEMANDS_ATTENTION
105    #[strum(serialize = "_NET_WM_STATE_DEMANDS_ATTENTION")]
106    NetWmStateDemandsAttention,
107    /// _NET_WM_STATE_FULLSCREEN
108    #[strum(serialize = "_NET_WM_STATE_FULLSCREEN")]
109    NetWmStateFullscreen,
110    /// _NET_WM_STATE_HIDDEN
111    #[strum(serialize = "_NET_WM_STATE_HIDDEN")]
112    NetWmStateHidden,
113    /// _NET_WM_WINDOW_TYPE
114    #[strum(serialize = "_NET_WM_WINDOW_TYPE")]
115    NetWmWindowType,
116    /// _XEMBED
117    #[strum(serialize = "_XEMBED")]
118    XEmbed,
119    /// _XEMBED_INFO
120    #[strum(serialize = "_XEMBED_INFO")]
121    XEmbedInfo,
122
123    // Window Types
124    /// _NET_WM_WINDOW_TYPE_DESKTOP
125    #[strum(serialize = "_NET_WM_WINDOW_TYPE_DESKTOP")]
126    NetWindowTypeDesktop,
127    /// _NET_WM_WINDOW_TYPE_DOCK
128    #[strum(serialize = "_NET_WM_WINDOW_TYPE_DOCK")]
129    NetWindowTypeDock,
130    /// _NET_WM_WINDOW_TYPE_TOOLBAR
131    #[strum(serialize = "_NET_WM_WINDOW_TYPE_TOOLBAR")]
132    NetWindowTypeToolbar,
133    /// _NET_WM_WINDOW_TYPE_MENU
134    #[strum(serialize = "_NET_WM_WINDOW_TYPE_MENU")]
135    NetWindowTypeMenu,
136    /// _NET_WM_WINDOW_TYPE_UTILITY
137    #[strum(serialize = "_NET_WM_WINDOW_TYPE_UTILITY")]
138    NetWindowTypeUtility,
139    /// _NET_WM_WINDOW_TYPE_SPLASH
140    #[strum(serialize = "_NET_WM_WINDOW_TYPE_SPLASH")]
141    NetWindowTypeSplash,
142    /// _NET_WM_WINDOW_TYPE_DIALOG
143    #[strum(serialize = "_NET_WM_WINDOW_TYPE_DIALOG")]
144    NetWindowTypeDialog,
145    /// _NET_WM_WINDOW_TYPE_DROPDOWN_MENU
146    #[strum(serialize = "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU")]
147    NetWindowTypeDropdownMenu,
148    /// _NET_WM_WINDOW_TYPE_POPUP_MENU
149    #[strum(serialize = "_NET_WM_WINDOW_TYPE_POPUP_MENU")]
150    NetWindowTypePopupMenu,
151    /// _NET_WM_WINDOW_TYPE_NOTIFICATION
152    #[strum(serialize = "_NET_WM_WINDOW_TYPE_NOTIFICATION")]
153    NetWindowTypeNotification,
154    /// _NET_WM_WINDOW_TYPE_COMBO
155    #[strum(serialize = "_NET_WM_WINDOW_TYPE_COMBO")]
156    NetWindowTypeCombo,
157    /// _NET_WM_WINDOW_TYPE_DND
158    #[strum(serialize = "_NET_WM_WINDOW_TYPE_DND")]
159    NetWindowTypeDnd,
160    /// _NET_WM_WINDOW_TYPE_NORMAL
161    #[strum(serialize = "_NET_WM_WINDOW_TYPE_NORMAL")]
162    NetWindowTypeNormal,
163}
164
165/// Clients with one of these window types will be auto floated
166pub const AUTO_FLOAT_WINDOW_TYPES: &[Atom] = &[
167    Atom::NetWindowTypeCombo,
168    Atom::NetWindowTypeDesktop,
169    Atom::NetWindowTypeDialog,
170    Atom::NetWindowTypeDock,
171    Atom::NetWindowTypeDropdownMenu,
172    Atom::NetWindowTypeMenu,
173    Atom::NetWindowTypeNotification,
174    Atom::NetWindowTypePopupMenu,
175    Atom::NetWindowTypeSplash,
176    Atom::NetWindowTypeToolbar,
177    Atom::NetWindowTypeUtility,
178];