13#include <QApplication>
15#include <private/qtx11extras_p.h>
33 void destroyNotManaged();
36void TestXcbWindow::initTestCase()
38 qApp->setProperty(
"x11RootWindow", QVariant::fromValue<quint32>(QX11Info::appRootWindow()));
39 qApp->setProperty(
"x11Connection", QVariant::fromValue<void *>(QX11Info::connection()));
42void TestXcbWindow::defaultCtor()
45 QCOMPARE(window.
isValid(),
false);
46 xcb_window_t wId = window;
47 QCOMPARE(wId, noneWindow());
49 xcb_window_t nativeWindow = createWindow();
51 QCOMPARE(window2.isValid(),
true);
53 QCOMPARE(wId, nativeWindow);
56void TestXcbWindow::ctor()
58 const QRect geometry(0, 0, 10, 10);
59 const uint32_t values[] = {
true};
60 Xcb::Window window(geometry, XCB_CW_OVERRIDE_REDIRECT, values);
61 QCOMPARE(window.
isValid(),
true);
62 QVERIFY(window != XCB_WINDOW_NONE);
64 QCOMPARE(windowGeometry.isNull(),
false);
65 QCOMPARE(windowGeometry.rect(), geometry);
68void TestXcbWindow::classCtor()
70 const QRect geometry(0, 0, 10, 10);
71 const uint32_t values[] = {
true};
72 Xcb::Window window(geometry, XCB_WINDOW_CLASS_INPUT_ONLY, XCB_CW_OVERRIDE_REDIRECT, values);
73 QCOMPARE(window.
isValid(),
true);
74 QVERIFY(window != XCB_WINDOW_NONE);
76 QCOMPARE(windowGeometry.isNull(),
false);
77 QCOMPARE(windowGeometry.rect(), geometry);
79 Xcb::WindowAttributes attribs(window);
80 QCOMPARE(attribs.isNull(),
false);
81 QVERIFY(attribs->_class == XCB_WINDOW_CLASS_INPUT_ONLY);
84void TestXcbWindow::create()
87 QCOMPARE(window.
isValid(),
false);
88 xcb_window_t wId = window;
89 QCOMPARE(wId, noneWindow());
91 const QRect geometry(0, 0, 10, 10);
92 const uint32_t values[] = {
true};
93 window.
create(geometry, XCB_CW_OVERRIDE_REDIRECT, values);
94 QCOMPARE(window.
isValid(),
true);
95 QVERIFY(window != XCB_WINDOW_NONE);
98 QCOMPARE(window.
isValid(),
false);
99 QVERIFY(window == XCB_WINDOW_NONE);
102void TestXcbWindow::mapUnmap()
104 const QRect geometry(0, 0, 10, 10);
105 const uint32_t values[] = {
true};
106 Xcb::Window window(geometry, XCB_WINDOW_CLASS_INPUT_ONLY, XCB_CW_OVERRIDE_REDIRECT, values);
107 Xcb::WindowAttributes attribs(window);
108 QCOMPARE(attribs.isNull(),
false);
109 QVERIFY(attribs->map_state == XCB_MAP_STATE_UNMAPPED);
112 Xcb::WindowAttributes attribs2(window);
113 QCOMPARE(attribs2.isNull(),
false);
114 QVERIFY(attribs2->map_state != XCB_MAP_STATE_UNMAPPED);
117 Xcb::WindowAttributes attribs3(window);
118 QCOMPARE(attribs3.isNull(),
false);
119 QVERIFY(attribs3->map_state == XCB_MAP_STATE_UNMAPPED);
127void TestXcbWindow::geometry()
129 const QRect geometry(0, 0, 10, 10);
130 const uint32_t values[] = {
true};
131 Xcb::Window window(geometry, XCB_WINDOW_CLASS_INPUT_ONLY, XCB_CW_OVERRIDE_REDIRECT, values);
133 QCOMPARE(windowGeometry.isNull(),
false);
134 QCOMPARE(windowGeometry.rect(), geometry);
136 const QRect geometry2(10, 20, 100, 200);
139 QCOMPARE(windowGeometry2.isNull(),
false);
140 QCOMPARE(windowGeometry2.rect(), geometry2);
146 QCOMPARE(windowGeometry3.isNull(),
true);
149void TestXcbWindow::destroy()
151 const QRect geometry(0, 0, 10, 10);
152 const uint32_t values[] = {
true};
153 Xcb::Window window(geometry, XCB_CW_OVERRIDE_REDIRECT, values);
154 QCOMPARE(window.
isValid(),
true);
155 xcb_window_t wId = window;
157 window.
create(geometry, XCB_CW_OVERRIDE_REDIRECT, values);
159 xcb_generic_error_t *error =
nullptr;
165 QCOMPARE(error->error_code, uint8_t(3));
166 QCOMPARE(error->resource_id, wId);
171 Xcb::Window scopedWindow(geometry, XCB_CW_OVERRIDE_REDIRECT, values);
172 QVERIFY(scopedWindow.isValid());
181 QCOMPARE(error->error_code, uint8_t(3));
182 QCOMPARE(error->resource_id, wId);
186void TestXcbWindow::destroyNotManaged()
193 window.
reset(createWindow(),
false);
194 xcb_window_t w = window;
196 Xcb::WindowAttributes attribs(w);
200Q_CONSTRUCTOR_FUNCTION(forceXcb)
202#include "test_xcb_window.moc"
void create(const QRectF &geometry, uint32_t mask=0, const uint32_t *values=nullptr, xcb_window_t parent=rootWindow())
void setGeometry(const QRectF &geometry)
void reset(xcb_window_t window=XCB_WINDOW_NONE, bool destroy=true)
KWIN_EXPORT xcb_connection_t * connection()
std::unique_ptr< T, CDeleter > UniqueCPtr
QTEST_MAIN(OnScreenNotificationTest)