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