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