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