1 | // Copyright (C) 2018 The Qt Company Ltd. |
2 | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only |
3 | #ifndef QXCBATOM_H |
4 | #define QXCBATOM_H |
5 | |
6 | #include <xcb/xcb.h> |
7 | |
8 | class QXcbAtom |
9 | { |
10 | public: |
11 | enum Atom { |
12 | // window-manager <-> client protocols |
13 | AtomWM_PROTOCOLS, |
14 | AtomWM_DELETE_WINDOW, |
15 | AtomWM_TAKE_FOCUS, |
16 | Atom_NET_WM_PING, |
17 | Atom_NET_WM_CONTEXT_HELP, |
18 | Atom_NET_WM_SYNC_REQUEST, |
19 | Atom_NET_WM_SYNC_REQUEST_COUNTER, |
20 | AtomMANAGER, // System tray notification |
21 | Atom_NET_SYSTEM_TRAY_OPCODE, // System tray operation |
22 | |
23 | // ICCCM window state |
24 | AtomWM_STATE, |
25 | AtomWM_CHANGE_STATE, |
26 | AtomWM_CLASS, |
27 | AtomWM_NAME, |
28 | |
29 | // Session management |
30 | AtomWM_CLIENT_LEADER, |
31 | AtomWM_WINDOW_ROLE, |
32 | AtomSM_CLIENT_ID, |
33 | AtomWM_CLIENT_MACHINE, |
34 | |
35 | // Clipboard |
36 | AtomCLIPBOARD, |
37 | AtomINCR, |
38 | AtomTARGETS, |
39 | AtomMULTIPLE, |
40 | AtomTIMESTAMP, |
41 | AtomSAVE_TARGETS, |
42 | AtomCLIP_TEMPORARY, |
43 | Atom_QT_SELECTION, |
44 | Atom_QT_CLIPBOARD_SENTINEL, |
45 | Atom_QT_SELECTION_SENTINEL, |
46 | AtomCLIPBOARD_MANAGER, |
47 | |
48 | AtomRESOURCE_MANAGER, |
49 | |
50 | Atom_XSETROOT_ID, |
51 | |
52 | Atom_QT_SCROLL_DONE, |
53 | Atom_QT_INPUT_ENCODING, |
54 | |
55 | // Qt/XCB specific |
56 | Atom_QT_CLOSE_CONNECTION, |
57 | |
58 | Atom_QT_GET_TIMESTAMP, |
59 | |
60 | Atom_MOTIF_WM_HINTS, |
61 | |
62 | AtomDTWM_IS_RUNNING, |
63 | AtomENLIGHTENMENT_DESKTOP, |
64 | Atom_DT_SAVE_MODE, |
65 | Atom_SGI_DESKS_MANAGER, |
66 | |
67 | // EWMH (aka NETWM) |
68 | Atom_NET_SUPPORTED, |
69 | Atom_NET_VIRTUAL_ROOTS, |
70 | Atom_NET_WORKAREA, |
71 | |
72 | Atom_NET_MOVERESIZE_WINDOW, |
73 | Atom_NET_WM_MOVERESIZE, |
74 | |
75 | Atom_NET_WM_NAME, |
76 | Atom_NET_WM_ICON_NAME, |
77 | Atom_NET_WM_ICON, |
78 | |
79 | Atom_NET_WM_PID, |
80 | |
81 | Atom_NET_WM_WINDOW_OPACITY, |
82 | |
83 | Atom_NET_WM_STATE, |
84 | Atom_NET_WM_STATE_ABOVE, |
85 | Atom_NET_WM_STATE_BELOW, |
86 | Atom_NET_WM_STATE_FULLSCREEN, |
87 | Atom_NET_WM_STATE_MAXIMIZED_HORZ, |
88 | Atom_NET_WM_STATE_MAXIMIZED_VERT, |
89 | Atom_NET_WM_STATE_MODAL, |
90 | Atom_NET_WM_STATE_STAYS_ON_TOP, |
91 | Atom_NET_WM_STATE_DEMANDS_ATTENTION, |
92 | Atom_NET_WM_STATE_HIDDEN, |
93 | |
94 | Atom_NET_WM_USER_TIME, |
95 | Atom_NET_WM_USER_TIME_WINDOW, |
96 | Atom_NET_WM_FULL_PLACEMENT, |
97 | |
98 | Atom_NET_WM_WINDOW_TYPE, |
99 | Atom_NET_WM_WINDOW_TYPE_DESKTOP, |
100 | Atom_NET_WM_WINDOW_TYPE_DOCK, |
101 | Atom_NET_WM_WINDOW_TYPE_TOOLBAR, |
102 | , |
103 | Atom_NET_WM_WINDOW_TYPE_UTILITY, |
104 | Atom_NET_WM_WINDOW_TYPE_SPLASH, |
105 | Atom_NET_WM_WINDOW_TYPE_DIALOG, |
106 | , |
107 | , |
108 | Atom_NET_WM_WINDOW_TYPE_TOOLTIP, |
109 | Atom_NET_WM_WINDOW_TYPE_NOTIFICATION, |
110 | Atom_NET_WM_WINDOW_TYPE_COMBO, |
111 | Atom_NET_WM_WINDOW_TYPE_DND, |
112 | Atom_NET_WM_WINDOW_TYPE_NORMAL, |
113 | Atom_KDE_NET_WM_WINDOW_TYPE_OVERRIDE, |
114 | |
115 | Atom_KDE_NET_WM_DESKTOP_FILE, |
116 | Atom_KDE_NET_WM_FRAME_STRUT, |
117 | Atom_NET_FRAME_EXTENTS, |
118 | |
119 | Atom_NET_STARTUP_INFO, |
120 | Atom_NET_STARTUP_INFO_BEGIN, |
121 | Atom_NET_STARTUP_ID, |
122 | |
123 | Atom_NET_SUPPORTING_WM_CHECK, |
124 | |
125 | Atom_NET_WM_CM_S0, |
126 | |
127 | Atom_NET_SYSTEM_TRAY_VISUAL, |
128 | |
129 | Atom_NET_ACTIVE_WINDOW, |
130 | |
131 | // Property formats |
132 | AtomTEXT, |
133 | AtomUTF8_STRING, |
134 | AtomCARDINAL, |
135 | |
136 | // Xdnd |
137 | AtomXdndEnter, |
138 | AtomXdndPosition, |
139 | AtomXdndStatus, |
140 | AtomXdndLeave, |
141 | AtomXdndDrop, |
142 | AtomXdndFinished, |
143 | AtomXdndTypelist, |
144 | AtomXdndActionList, |
145 | |
146 | AtomXdndSelection, |
147 | |
148 | AtomXdndAware, |
149 | AtomXdndProxy, |
150 | |
151 | AtomXdndActionCopy, |
152 | AtomXdndActionLink, |
153 | AtomXdndActionMove, |
154 | AtomXdndActionAsk, |
155 | AtomXdndActionPrivate, |
156 | |
157 | // Xkb |
158 | Atom_XKB_RULES_NAMES, |
159 | |
160 | // XEMBED |
161 | Atom_XEMBED, |
162 | Atom_XEMBED_INFO, |
163 | |
164 | // XInput2 |
165 | AtomButtonLeft, |
166 | AtomButtonMiddle, |
167 | AtomButtonRight, |
168 | AtomButtonWheelUp, |
169 | AtomButtonWheelDown, |
170 | AtomButtonHorizWheelLeft, |
171 | AtomButtonHorizWheelRight, |
172 | AtomAbsMTPositionX, |
173 | AtomAbsMTPositionY, |
174 | AtomAbsMTTouchMajor, |
175 | AtomAbsMTTouchMinor, |
176 | AtomAbsMTOrientation, |
177 | AtomAbsMTPressure, |
178 | AtomAbsMTTrackingID, |
179 | AtomMaxContacts, |
180 | AtomRelX, |
181 | AtomRelY, |
182 | // XInput2 tablet |
183 | AtomAbsX, |
184 | AtomAbsY, |
185 | AtomAbsPressure, |
186 | AtomAbsTiltX, |
187 | AtomAbsTiltY, |
188 | AtomAbsWheel, |
189 | AtomAbsDistance, |
190 | AtomWacomSerialIDs, |
191 | AtomINTEGER, |
192 | AtomRelHorizWheel, |
193 | AtomRelVertWheel, |
194 | AtomRelHorizScroll, |
195 | AtomRelVertScroll, |
196 | |
197 | Atom_XSETTINGS_SETTINGS, |
198 | |
199 | Atom_COMPIZ_DECOR_PENDING, |
200 | Atom_COMPIZ_DECOR_REQUEST, |
201 | Atom_COMPIZ_DECOR_DELETE_PIXMAP, |
202 | Atom_COMPIZ_TOOLKIT_ACTION, |
203 | Atom_GTK_APPLICATION_ID, |
204 | Atom_GTK_LOAD_ICONTHEMES, |
205 | |
206 | AtomAT_SPI_BUS, |
207 | |
208 | AtomEDID, |
209 | AtomEDID_DATA, |
210 | AtomXFree86_DDC_EDID1_RAWDATA, |
211 | |
212 | Atom_ICC_PROFILE, |
213 | |
214 | NAtoms |
215 | }; |
216 | |
217 | QXcbAtom(); |
218 | void initialize(xcb_connection_t *connection); |
219 | |
220 | inline xcb_atom_t atom(QXcbAtom::Atom atom) const { return m_allAtoms[atom]; } |
221 | QXcbAtom::Atom qatom(xcb_atom_t atom) const; |
222 | |
223 | protected: |
224 | void initializeAllAtoms(xcb_connection_t *connection); |
225 | |
226 | private: |
227 | xcb_atom_t m_allAtoms[QXcbAtom::NAtoms]; |
228 | }; |
229 | |
230 | #endif // QXCBATOM_H |
231 | |