KWin
Loading...
Searching...
No Matches
test_xcb_size_hints.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2015 Martin Gräßlin <mgraesslin@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#include "testutils.h"
10// KWin
11#include "utils/xcbutils.h"
12// Qt
13#include <QApplication>
14#include <QTest>
15#include <netwm.h>
16#include <private/qtx11extras_p.h>
17// xcb
18#include <xcb/xcb.h>
19#include <xcb/xcb_icccm.h>
20
21using namespace KWin;
22
23class TestXcbSizeHints : public QObject
24{
25 Q_OBJECT
26private Q_SLOTS:
27 void initTestCase();
28 void init();
29 void cleanup();
30 void testSizeHints_data();
31 void testSizeHints();
32 void testSizeHintsEmpty();
33 void testSizeHintsNotSet();
34 void geometryHintsBeforeInit();
35 void geometryHintsBeforeRead();
36
37private:
38 Xcb::Window m_testWindow;
39};
40
41void TestXcbSizeHints::initTestCase()
42{
43 qApp->setProperty("x11RootWindow", QVariant::fromValue<quint32>(QX11Info::appRootWindow()));
44 qApp->setProperty("x11Connection", QVariant::fromValue<void *>(QX11Info::connection()));
45}
46
47void TestXcbSizeHints::init()
48{
49 const uint32_t values[] = {true};
50 m_testWindow.create(QRect(0, 0, 10, 10), XCB_WINDOW_CLASS_INPUT_ONLY, XCB_CW_OVERRIDE_REDIRECT, values);
51 QVERIFY(m_testWindow.isValid());
52}
53
54void TestXcbSizeHints::cleanup()
55{
56 m_testWindow.reset();
57}
58
59void TestXcbSizeHints::testSizeHints_data()
60{
61 // set
62 QTest::addColumn<QPoint>("userPos");
63 QTest::addColumn<QSize>("userSize");
64 QTest::addColumn<QSize>("minSize");
65 QTest::addColumn<QSize>("maxSize");
66 QTest::addColumn<QSize>("resizeInc");
67 QTest::addColumn<QSize>("minAspect");
68 QTest::addColumn<QSize>("maxAspect");
69 QTest::addColumn<QSize>("baseSize");
70 QTest::addColumn<qint32>("gravity");
71 // read for SizeHints
72 QTest::addColumn<qint32>("expectedFlags");
73 QTest::addColumn<qint32>("expectedPad0");
74 QTest::addColumn<qint32>("expectedPad1");
75 QTest::addColumn<qint32>("expectedPad2");
76 QTest::addColumn<qint32>("expectedPad3");
77 QTest::addColumn<qint32>("expectedMinWidth");
78 QTest::addColumn<qint32>("expectedMinHeight");
79 QTest::addColumn<qint32>("expectedMaxWidth");
80 QTest::addColumn<qint32>("expectedMaxHeight");
81 QTest::addColumn<qint32>("expectedWidthInc");
82 QTest::addColumn<qint32>("expectedHeightInc");
83 QTest::addColumn<qint32>("expectedMinAspectNum");
84 QTest::addColumn<qint32>("expectedMinAspectDen");
85 QTest::addColumn<qint32>("expectedMaxAspectNum");
86 QTest::addColumn<qint32>("expectedMaxAspectDen");
87 QTest::addColumn<qint32>("expectedBaseWidth");
88 QTest::addColumn<qint32>("expectedBaseHeight");
89 // read for GeometryHints
90 QTest::addColumn<QSize>("expectedMinSize");
91 QTest::addColumn<QSize>("expectedMaxSize");
92 QTest::addColumn<QSize>("expectedResizeIncrements");
93 QTest::addColumn<QSize>("expectedMinAspect");
94 QTest::addColumn<QSize>("expectedMaxAspect");
95 QTest::addColumn<QSize>("expectedBaseSize");
96 QTest::addColumn<qint32>("expectedGravity");
97
98 QTest::newRow("userPos") << QPoint(1, 2) << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << 0
99 << 1 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
100 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
101 QTest::newRow("userSize") << QPoint() << QSize(1, 2) << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << 0
102 << 2 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
103 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
104 QTest::newRow("minSize") << QPoint() << QSize() << QSize(1, 2) << QSize() << QSize() << QSize() << QSize() << QSize() << 0
105 << 16 << 0 << 0 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
106 << QSize(1, 2) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
107 QTest::newRow("maxSize") << QPoint() << QSize() << QSize() << QSize(1, 2) << QSize() << QSize() << QSize() << QSize() << 0
108 << 32 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
109 << QSize(0, 0) << QSize(1, 2) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
110 QTest::newRow("maxSize0") << QPoint() << QSize() << QSize() << QSize(0, 0) << QSize() << QSize() << QSize() << QSize() << 0
111 << 32 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
112 << QSize(0, 0) << QSize(1, 1) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
113 QTest::newRow("min/maxSize") << QPoint() << QSize() << QSize(1, 2) << QSize(3, 4) << QSize() << QSize() << QSize() << QSize() << 0
114 << 48 << 0 << 0 << 0 << 0 << 1 << 2 << 3 << 4 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
115 << QSize(1, 2) << QSize(3, 4) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
116 QTest::newRow("resizeInc") << QPoint() << QSize() << QSize() << QSize() << QSize(1, 2) << QSize() << QSize() << QSize() << 0
117 << 64 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2 << 0 << 0 << 0 << 0 << 0 << 0
118 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 2) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
119 QTest::newRow("resizeInc0") << QPoint() << QSize() << QSize() << QSize() << QSize(0, 0) << QSize() << QSize() << QSize() << 0
120 << 64 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
121 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
122 QTest::newRow("aspect") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize(1, 2) << QSize(3, 4) << QSize() << 0
123 << 128 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2 << 3 << 4 << 0 << 0
124 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, 2) << QSize(3, 4) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
125 QTest::newRow("aspectDivision0") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize(1, 0) << QSize(3, 0) << QSize() << 0
126 << 128 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 0 << 3 << 0 << 0 << 0
127 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, 1) << QSize(3, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_NORTH_WEST);
128 QTest::newRow("baseSize") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize(1, 2) << 0
129 << 256 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 2
130 << QSize(1, 2) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(1, 2) << qint32(XCB_GRAVITY_NORTH_WEST);
131 QTest::newRow("gravity") << QPoint() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << QSize() << qint32(XCB_GRAVITY_STATIC)
132 << 512 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0
133 << QSize(0, 0) << QSize(INT_MAX, INT_MAX) << QSize(1, 1) << QSize(1, INT_MAX) << QSize(INT_MAX, 1) << QSize(0, 0) << qint32(XCB_GRAVITY_STATIC);
134 QTest::newRow("all") << QPoint(1, 2) << QSize(3, 4) << QSize(5, 6) << QSize(7, 8) << QSize(9, 10) << QSize(11, 12) << QSize(13, 14) << QSize(15, 16) << 1
135 << 1011 << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 8 << 9 << 10 << 11 << 12 << 13 << 14 << 15 << 16
136 << QSize(5, 6) << QSize(7, 8) << QSize(9, 10) << QSize(11, 12) << QSize(13, 14) << QSize(15, 16) << qint32(XCB_GRAVITY_NORTH_WEST);
137}
138
139void TestXcbSizeHints::testSizeHints()
140{
141 xcb_size_hints_t hints;
142 memset(&hints, 0, sizeof(hints));
143 QFETCH(QPoint, userPos);
144 if (!userPos.isNull()) {
145 xcb_icccm_size_hints_set_position(&hints, 1, userPos.x(), userPos.y());
146 }
147 QFETCH(QSize, userSize);
148 if (userSize.isValid()) {
149 xcb_icccm_size_hints_set_size(&hints, 1, userSize.width(), userSize.height());
150 }
151 QFETCH(QSize, minSize);
152 if (minSize.isValid()) {
153 xcb_icccm_size_hints_set_min_size(&hints, minSize.width(), minSize.height());
154 }
155 QFETCH(QSize, maxSize);
156 if (maxSize.isValid()) {
157 xcb_icccm_size_hints_set_max_size(&hints, maxSize.width(), maxSize.height());
158 }
159 QFETCH(QSize, resizeInc);
160 if (resizeInc.isValid()) {
161 xcb_icccm_size_hints_set_resize_inc(&hints, resizeInc.width(), resizeInc.height());
162 }
163 QFETCH(QSize, minAspect);
164 QFETCH(QSize, maxAspect);
165 if (minAspect.isValid() && maxAspect.isValid()) {
166 xcb_icccm_size_hints_set_aspect(&hints, minAspect.width(), minAspect.height(), maxAspect.width(), maxAspect.height());
167 }
168 QFETCH(QSize, baseSize);
169 if (baseSize.isValid()) {
170 xcb_icccm_size_hints_set_base_size(&hints, baseSize.width(), baseSize.height());
171 }
172 QFETCH(qint32, gravity);
173 if (gravity != 0) {
174 xcb_icccm_size_hints_set_win_gravity(&hints, (xcb_gravity_t)gravity);
175 }
176 xcb_icccm_set_wm_normal_hints(QX11Info::connection(), m_testWindow, &hints);
177 xcb_flush(QX11Info::connection());
178
179 Xcb::GeometryHints geoHints;
180 geoHints.init(m_testWindow);
181 geoHints.read();
182 QCOMPARE(geoHints.hasAspect(), minAspect.isValid() && maxAspect.isValid());
183 QCOMPARE(geoHints.hasBaseSize(), baseSize.isValid());
184 QCOMPARE(geoHints.hasMaxSize(), maxSize.isValid());
185 QCOMPARE(geoHints.hasMinSize(), minSize.isValid());
186 QCOMPARE(geoHints.hasPosition(), !userPos.isNull());
187 QCOMPARE(geoHints.hasResizeIncrements(), resizeInc.isValid());
188 QCOMPARE(geoHints.hasSize(), userSize.isValid());
189 QCOMPARE(geoHints.hasWindowGravity(), gravity != 0);
190 QTEST(geoHints.baseSize().toSize(), "expectedBaseSize");
191 QTEST(geoHints.maxAspect(), "expectedMaxAspect");
192 QTEST(geoHints.maxSize().toSize(), "expectedMaxSize");
193 QTEST(geoHints.minAspect(), "expectedMinAspect");
194 QTEST(geoHints.minSize().toSize(), "expectedMinSize");
195 QTEST(geoHints.resizeIncrements().toSize(), "expectedResizeIncrements");
196 QTEST(qint32(geoHints.windowGravity()), "expectedGravity");
197
198 auto sizeHints = geoHints.m_sizeHints;
199 QVERIFY(sizeHints);
200 QTEST(sizeHints->flags, "expectedFlags");
201 QTEST(sizeHints->pad[0], "expectedPad0");
202 QTEST(sizeHints->pad[1], "expectedPad1");
203 QTEST(sizeHints->pad[2], "expectedPad2");
204 QTEST(sizeHints->pad[3], "expectedPad3");
205 QTEST(sizeHints->minWidth, "expectedMinWidth");
206 QTEST(sizeHints->minHeight, "expectedMinHeight");
207 QTEST(sizeHints->maxWidth, "expectedMaxWidth");
208 QTEST(sizeHints->maxHeight, "expectedMaxHeight");
209 QTEST(sizeHints->widthInc, "expectedWidthInc");
210 QTEST(sizeHints->heightInc, "expectedHeightInc");
211 QTEST(sizeHints->minAspect[0], "expectedMinAspectNum");
212 QTEST(sizeHints->minAspect[1], "expectedMinAspectDen");
213 QTEST(sizeHints->maxAspect[0], "expectedMaxAspectNum");
214 QTEST(sizeHints->maxAspect[1], "expectedMaxAspectDen");
215 QTEST(sizeHints->baseWidth, "expectedBaseWidth");
216 QTEST(sizeHints->baseHeight, "expectedBaseHeight");
217 QCOMPARE(sizeHints->winGravity, gravity);
218
219 // copy
220 Xcb::GeometryHints::NormalHints::SizeHints sizeHints2 = *sizeHints;
221 QTEST(sizeHints2.flags, "expectedFlags");
222 QTEST(sizeHints2.pad[0], "expectedPad0");
223 QTEST(sizeHints2.pad[1], "expectedPad1");
224 QTEST(sizeHints2.pad[2], "expectedPad2");
225 QTEST(sizeHints2.pad[3], "expectedPad3");
226 QTEST(sizeHints2.minWidth, "expectedMinWidth");
227 QTEST(sizeHints2.minHeight, "expectedMinHeight");
228 QTEST(sizeHints2.maxWidth, "expectedMaxWidth");
229 QTEST(sizeHints2.maxHeight, "expectedMaxHeight");
230 QTEST(sizeHints2.widthInc, "expectedWidthInc");
231 QTEST(sizeHints2.heightInc, "expectedHeightInc");
232 QTEST(sizeHints2.minAspect[0], "expectedMinAspectNum");
233 QTEST(sizeHints2.minAspect[1], "expectedMinAspectDen");
234 QTEST(sizeHints2.maxAspect[0], "expectedMaxAspectNum");
235 QTEST(sizeHints2.maxAspect[1], "expectedMaxAspectDen");
236 QTEST(sizeHints2.baseWidth, "expectedBaseWidth");
237 QTEST(sizeHints2.baseHeight, "expectedBaseHeight");
238 QCOMPARE(sizeHints2.winGravity, gravity);
239}
240
241void TestXcbSizeHints::testSizeHintsEmpty()
242{
243 xcb_size_hints_t xcbHints;
244 memset(&xcbHints, 0, sizeof(xcbHints));
245 xcb_icccm_set_wm_normal_hints(QX11Info::connection(), m_testWindow, &xcbHints);
246 xcb_flush(QX11Info::connection());
247
248 Xcb::GeometryHints hints;
249 hints.init(m_testWindow);
250 hints.read();
251 QVERIFY(!hints.hasAspect());
252 QVERIFY(!hints.hasBaseSize());
253 QVERIFY(!hints.hasMaxSize());
254 QVERIFY(!hints.hasMinSize());
255 QVERIFY(!hints.hasPosition());
256 QVERIFY(!hints.hasResizeIncrements());
257 QVERIFY(!hints.hasSize());
258 QVERIFY(!hints.hasWindowGravity());
259
260 QCOMPARE(hints.baseSize(), QSize(0, 0));
261 QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
262 QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
263 QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
264 QCOMPARE(hints.minSize(), QSize(0, 0));
265 QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
266 QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
267
268 auto sizeHints = hints.m_sizeHints;
269 QVERIFY(sizeHints);
270 QCOMPARE(sizeHints->flags, 0);
271 QCOMPARE(sizeHints->pad[0], 0);
272 QCOMPARE(sizeHints->pad[1], 0);
273 QCOMPARE(sizeHints->pad[2], 0);
274 QCOMPARE(sizeHints->pad[3], 0);
275 QCOMPARE(sizeHints->minWidth, 0);
276 QCOMPARE(sizeHints->minHeight, 0);
277 QCOMPARE(sizeHints->maxWidth, 0);
278 QCOMPARE(sizeHints->maxHeight, 0);
279 QCOMPARE(sizeHints->widthInc, 0);
280 QCOMPARE(sizeHints->heightInc, 0);
281 QCOMPARE(sizeHints->minAspect[0], 0);
282 QCOMPARE(sizeHints->minAspect[1], 0);
283 QCOMPARE(sizeHints->maxAspect[0], 0);
284 QCOMPARE(sizeHints->maxAspect[1], 0);
285 QCOMPARE(sizeHints->baseWidth, 0);
286 QCOMPARE(sizeHints->baseHeight, 0);
287 QCOMPARE(sizeHints->winGravity, 0);
288}
289
290void TestXcbSizeHints::testSizeHintsNotSet()
291{
292 Xcb::GeometryHints hints;
293 hints.init(m_testWindow);
294 hints.read();
295 QVERIFY(!hints.m_sizeHints);
296 QVERIFY(!hints.hasAspect());
297 QVERIFY(!hints.hasBaseSize());
298 QVERIFY(!hints.hasMaxSize());
299 QVERIFY(!hints.hasMinSize());
300 QVERIFY(!hints.hasPosition());
301 QVERIFY(!hints.hasResizeIncrements());
302 QVERIFY(!hints.hasSize());
303 QVERIFY(!hints.hasWindowGravity());
304
305 QCOMPARE(hints.baseSize(), QSize(0, 0));
306 QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
307 QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
308 QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
309 QCOMPARE(hints.minSize(), QSize(0, 0));
310 QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
311 QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
312}
313
314void TestXcbSizeHints::geometryHintsBeforeInit()
315{
316 Xcb::GeometryHints hints;
317 QVERIFY(!hints.hasAspect());
318 QVERIFY(!hints.hasBaseSize());
319 QVERIFY(!hints.hasMaxSize());
320 QVERIFY(!hints.hasMinSize());
321 QVERIFY(!hints.hasPosition());
322 QVERIFY(!hints.hasResizeIncrements());
323 QVERIFY(!hints.hasSize());
324 QVERIFY(!hints.hasWindowGravity());
325
326 QCOMPARE(hints.baseSize(), QSize(0, 0));
327 QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
328 QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
329 QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
330 QCOMPARE(hints.minSize(), QSize(0, 0));
331 QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
332 QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
333}
334
335void TestXcbSizeHints::geometryHintsBeforeRead()
336{
337 xcb_size_hints_t xcbHints;
338 memset(&xcbHints, 0, sizeof(xcbHints));
339 xcb_icccm_size_hints_set_position(&xcbHints, 1, 1, 2);
340 xcb_icccm_set_wm_normal_hints(QX11Info::connection(), m_testWindow, &xcbHints);
341 xcb_flush(QX11Info::connection());
342
343 Xcb::GeometryHints hints;
344 hints.init(m_testWindow);
345 QVERIFY(!hints.hasAspect());
346 QVERIFY(!hints.hasBaseSize());
347 QVERIFY(!hints.hasMaxSize());
348 QVERIFY(!hints.hasMinSize());
349 QVERIFY(!hints.hasPosition());
350 QVERIFY(!hints.hasResizeIncrements());
351 QVERIFY(!hints.hasSize());
352 QVERIFY(!hints.hasWindowGravity());
353
354 QCOMPARE(hints.baseSize(), QSize(0, 0));
355 QCOMPARE(hints.maxAspect(), QSize(INT_MAX, 1));
356 QCOMPARE(hints.maxSize(), QSize(INT_MAX, INT_MAX));
357 QCOMPARE(hints.minAspect(), QSize(1, INT_MAX));
358 QCOMPARE(hints.minSize(), QSize(0, 0));
359 QCOMPARE(hints.resizeIncrements(), QSize(1, 1));
360 QCOMPARE(hints.windowGravity(), XCB_GRAVITY_NORTH_WEST);
361}
362
363Q_CONSTRUCTOR_FUNCTION(forceXcb)
365#include "test_xcb_size_hints.moc"
bool hasMaxSize() const
Definition xcbutils.h:980
xcb_gravity_t windowGravity() const
Definition xcbutils.h:1033
bool hasMinSize() const
Definition xcbutils.h:976
QSizeF minSize() const
Definition xcbutils.h:1008
void init(xcb_window_t window)
Definition xcbutils.h:945
bool hasAspect() const
Definition xcbutils.h:988
QSizeF baseSize() const
Definition xcbutils.h:1017
QSize minAspect() const
Definition xcbutils.h:1040
QSize maxAspect() const
Definition xcbutils.h:1048
QSizeF resizeIncrements() const
Definition xcbutils.h:1026
bool hasBaseSize() const
Definition xcbutils.h:992
QSizeF maxSize() const
Definition xcbutils.h:1000
bool hasPosition() const
Definition xcbutils.h:968
bool hasResizeIncrements() const
Definition xcbutils.h:984
bool hasWindowGravity() const
Definition xcbutils.h:996
void create(const QRectF &geometry, uint32_t mask=0, const uint32_t *values=nullptr, xcb_window_t parent=rootWindow())
Definition xcbutils.h:1726
void reset(xcb_window_t window=XCB_WINDOW_NONE, bool destroy=true)
Definition xcbutils.h:1741
bool isValid() const
Definition xcbutils.h:1710
QTEST_MAIN(OnScreenNotificationTest)