Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qxcbatom.cpp
Go to the documentation of this file.
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// Qt-Security score:significant reason:default
4
5#include "qxcbatom.h"
6
7#include <QtCore/qglobal.h>
8
9#include <string.h>
10
11#include <algorithm>
12#include <cstdlib>
13
15
16static const char *xcb_atomnames = {
17 // window-manager <-> client protocols
18 "WM_PROTOCOLS\0"
19 "WM_DELETE_WINDOW\0"
20 "WM_TAKE_FOCUS\0"
21 "_NET_WM_PING\0"
22 "_NET_WM_CONTEXT_HELP\0"
23 "_NET_WM_SYNC_REQUEST\0"
24 "_NET_WM_SYNC_REQUEST_COUNTER\0"
25 "MANAGER\0"
26 "_NET_SYSTEM_TRAY_OPCODE\0"
27
28 // ICCCM window state
29 "WM_STATE\0"
30 "WM_CHANGE_STATE\0"
31 "WM_CLASS\0"
32 "WM_NAME\0"
33
34 // Session management
35 "WM_CLIENT_LEADER\0"
36 "WM_WINDOW_ROLE\0"
37 "SM_CLIENT_ID\0"
38 "WM_CLIENT_MACHINE\0"
39
40 // Clipboard
41 "CLIPBOARD\0"
42 "INCR\0"
43 "TARGETS\0"
44 "MULTIPLE\0"
45 "TIMESTAMP\0"
46 "SAVE_TARGETS\0"
47 "CLIP_TEMPORARY\0"
48 "_QT_SELECTION\0"
49 "_QT_CLIPBOARD_SENTINEL\0"
50 "_QT_SELECTION_SENTINEL\0"
51 "CLIPBOARD_MANAGER\0"
52
53 "RESOURCE_MANAGER\0"
54
55 "_XSETROOT_ID\0"
56
57 "_QT_SCROLL_DONE\0"
58 "_QT_INPUT_ENCODING\0"
59
60 "_QT_CLOSE_CONNECTION\0"
61
62 "_QT_GET_TIMESTAMP\0"
63
64 "_MOTIF_WM_HINTS\0"
65
66 "DTWM_IS_RUNNING\0"
67 "ENLIGHTENMENT_DESKTOP\0"
68 "_DT_SAVE_MODE\0"
69 "_SGI_DESKS_MANAGER\0"
70
71 // EWMH (aka NETWM)
72 "_NET_SUPPORTED\0"
73 "_NET_VIRTUAL_ROOTS\0"
74 "_NET_WORKAREA\0"
75
76 "_NET_MOVERESIZE_WINDOW\0"
77 "_NET_WM_MOVERESIZE\0"
78
79 "_NET_WM_NAME\0"
80 "_NET_WM_ICON_NAME\0"
81 "_NET_WM_ICON\0"
82
83 "_NET_WM_PID\0"
84
85 "_NET_WM_WINDOW_OPACITY\0"
86
87 "_NET_WM_STATE\0"
88 "_NET_WM_STATE_ABOVE\0"
89 "_NET_WM_STATE_BELOW\0"
90 "_NET_WM_STATE_FULLSCREEN\0"
91 "_NET_WM_STATE_MAXIMIZED_HORZ\0"
92 "_NET_WM_STATE_MAXIMIZED_VERT\0"
93 "_NET_WM_STATE_MODAL\0"
94 "_NET_WM_STATE_STAYS_ON_TOP\0"
95 "_NET_WM_STATE_DEMANDS_ATTENTION\0"
96 "_NET_WM_STATE_HIDDEN\0"
97
98 "_NET_WM_USER_TIME\0"
99 "_NET_WM_USER_TIME_WINDOW\0"
100 "_NET_WM_FULL_PLACEMENT\0"
101
102 "_NET_WM_WINDOW_TYPE\0"
103 "_NET_WM_WINDOW_TYPE_DESKTOP\0"
104 "_NET_WM_WINDOW_TYPE_DOCK\0"
105 "_NET_WM_WINDOW_TYPE_TOOLBAR\0"
106 "_NET_WM_WINDOW_TYPE_MENU\0"
107 "_NET_WM_WINDOW_TYPE_UTILITY\0"
108 "_NET_WM_WINDOW_TYPE_SPLASH\0"
109 "_NET_WM_WINDOW_TYPE_DIALOG\0"
110 "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU\0"
111 "_NET_WM_WINDOW_TYPE_POPUP_MENU\0"
112 "_NET_WM_WINDOW_TYPE_TOOLTIP\0"
113 "_NET_WM_WINDOW_TYPE_NOTIFICATION\0"
114 "_NET_WM_WINDOW_TYPE_COMBO\0"
115 "_NET_WM_WINDOW_TYPE_DND\0"
116 "_NET_WM_WINDOW_TYPE_NORMAL\0"
117 "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE\0"
118
119 "_KDE_NET_WM_DESKTOP_FILE\0"
120 "_KDE_NET_WM_FRAME_STRUT\0"
121 "_NET_FRAME_EXTENTS\0"
122
123 "_NET_STARTUP_INFO\0"
124 "_NET_STARTUP_INFO_BEGIN\0"
125 "_NET_STARTUP_ID\0"
126
127 "_NET_SUPPORTING_WM_CHECK\0"
128
129 "_NET_WM_CM_S0\0"
130
131 "_NET_SYSTEM_TRAY_VISUAL\0"
132
133 "_NET_ACTIVE_WINDOW\0"
134
135 // Property formats
136 "TEXT\0"
137 "UTF8_STRING\0"
138 "CARDINAL\0"
139
140 // xdnd
141 "XdndEnter\0"
142 "XdndPosition\0"
143 "XdndStatus\0"
144 "XdndLeave\0"
145 "XdndDrop\0"
146 "XdndFinished\0"
147 "XdndTypeList\0"
148 "XdndActionList\0"
149
150 "XdndSelection\0"
151
152 "XdndAware\0"
153 "XdndProxy\0"
154
155 "XdndActionCopy\0"
156 "XdndActionLink\0"
157 "XdndActionMove\0"
158 "XdndActionAsk\0"
159 "XdndActionPrivate\0"
160
161 // Xkb
162 "_XKB_RULES_NAMES\0"
163
164 // XEMBED
165 "_XEMBED\0"
166 "_XEMBED_INFO\0"
167
168 // XInput2
169 "Button Left\0"
170 "Button Middle\0"
171 "Button Right\0"
172 "Button Wheel Up\0"
173 "Button Wheel Down\0"
174 "Button Horiz Wheel Left\0"
175 "Button Horiz Wheel Right\0"
176 "Abs MT Position X\0"
177 "Abs MT Position Y\0"
178 "Abs MT Touch Major\0"
179 "Abs MT Touch Minor\0"
180 "Abs MT Orientation\0"
181 "Abs MT Pressure\0"
182 "Abs MT Tracking ID\0"
183 "Max Contacts\0"
184 "Rel X\0"
185 "Rel Y\0"
186 // XInput2 tablet
187 "Abs X\0"
188 "Abs Y\0"
189 "Abs Pressure\0"
190 "Abs Tilt X\0"
191 "Abs Tilt Y\0"
192 "Abs Wheel\0"
193 "Abs Distance\0"
194 "Wacom Serial IDs\0"
195 "INTEGER\0"
196 "Rel Horiz Wheel\0"
197 "Rel Vert Wheel\0"
198 "Rel Horiz Scroll\0"
199 "Rel Vert Scroll\0"
200 "_XSETTINGS_SETTINGS\0"
201 "_COMPIZ_DECOR_PENDING\0"
202 "_COMPIZ_DECOR_REQUEST\0"
203 "_COMPIZ_DECOR_DELETE_PIXMAP\0"
204 "_COMPIZ_TOOLKIT_ACTION\0"
205 "_GTK_APPLICATION_ID\0"
206 "_GTK_LOAD_ICONTHEMES\0"
207 "AT_SPI_BUS\0"
208 "EDID\0"
209 "EDID_DATA\0"
210 "XFree86_DDC_EDID1_RAWDATA\0"
211 "_ICC_PROFILE\0"
212 "_KDE_NET_WM_APPMENU_SERVICE_NAME\0"
213 "_KDE_NET_WM_APPMENU_OBJECT_PATH\0"
214 // \0\0 terminates loop.
215};
216
217QXcbAtom::QXcbAtom()
218{
219}
220
221void QXcbAtom::initialize(xcb_connection_t *connection)
222{
223 initializeAllAtoms(connection);
224}
225
226void QXcbAtom::initializeAllAtoms(xcb_connection_t *connection) {
227 const char *name = xcb_atomnames;
228 size_t name_len;
229 int i = 0;
230 xcb_intern_atom_cookie_t cookies[QXcbAtom::NAtoms];
231
232 while ((name_len = strlen(name)) != 0) {
233 cookies[i] = xcb_intern_atom(connection, false, name_len, name);
234 ++i;
235 name += name_len + 1; // jump over the \0
236 }
237
238 Q_ASSERT(i == QXcbAtom::NAtoms);
239
240 for (i = 0; i < QXcbAtom::NAtoms; ++i) {
241 xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(connection, cookies[i], nullptr);
242 if (reply) {
243 m_allAtoms[i] = reply->atom;
244 free(reply);
245 }
246 }
247}
248
249QXcbAtom::Atom QXcbAtom::qatom(xcb_atom_t xatom) const
250{
251 return static_cast<QXcbAtom::Atom>(std::find(m_allAtoms, m_allAtoms + QXcbAtom::NAtoms, xatom) - m_allAtoms);
252}
253
254QT_END_NAMESPACE
static QT_BEGIN_NAMESPACE const char * xcb_atomnames
Definition qxcbatom.cpp:16