17#include <KDecoration2/Decoration>
20#include <xcb/xcb_icccm.h>
25static const QString s_socketName = QStringLiteral(
"wayland_test_kwin_shade-0");
33 void testShadeGeometry();
36void ShadeTest::initTestCase()
38 qRegisterMetaType<KWin::Window *>();
42 QRect(0, 0, 1280, 1024),
43 QRect(1280, 0, 1280, 1024),
47 QVERIFY(applicationStartedSpy.wait());
49 QCOMPARE(outputs.count(), 2);
50 QCOMPARE(outputs[0]->geometry(), QRect(0, 0, 1280, 1024));
51 QCOMPARE(outputs[1]->geometry(), QRect(1280, 0, 1280, 1024));
52 setenv(
"QT_QPA_PLATFORM",
"wayland",
true);
61void ShadeTest::testShadeGeometry()
68 QVERIFY(!xcb_connection_has_error(c.get()));
69 const QRect windowGeometry(0, 0, 100, 200);
70 xcb_window_t windowId = xcb_generate_id(c.get());
71 xcb_create_window(c.get(), XCB_COPY_FROM_PARENT, windowId,
rootWindow(),
74 windowGeometry.width(),
75 windowGeometry.height(),
76 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_COPY_FROM_PARENT, 0,
nullptr);
77 xcb_size_hints_t hints;
78 memset(&hints, 0,
sizeof(hints));
79 xcb_icccm_size_hints_set_position(&hints, 1, windowGeometry.x(), windowGeometry.y());
80 xcb_icccm_size_hints_set_size(&hints, 1, windowGeometry.width(), windowGeometry.height());
81 xcb_icccm_set_wm_normal_hints(c.get(), windowId, &hints);
82 xcb_map_window(c.get(), windowId);
87 QVERIFY(windowCreatedSpy.wait());
88 X11Window *window = windowCreatedSpy.first().first().value<X11Window *>();
90 QCOMPARE(window->window(), windowId);
91 QVERIFY(window->isDecorated());
92 QVERIFY(window->isShadeable());
93 QVERIFY(!window->isShade());
94 QVERIFY(window->isActive());
97 const QRectF geoBeforeShade = window->frameGeometry();
98 QVERIFY(geoBeforeShade.isValid());
99 QVERIFY(!geoBeforeShade.isEmpty());
101 QVERIFY(window->isShade());
102 QVERIFY(window->frameGeometry() != geoBeforeShade);
105 QVERIFY(!window->isShade());
106 QCOMPARE(window->frameGeometry(), geoBeforeShade);
109 xcb_unmap_window(c.get(), windowId);
110 xcb_destroy_window(c.get(), windowId);
115 QVERIFY(windowClosedSpy.wait());
121#include "shade_test.moc"
void windowAdded(KWin::Window *)
QList< Output * > outputs() const
void setActiveOutput(Output *output)
#define WAYLANDTEST_MAIN(TestObject)
void setOutputConfig(const QList< QRect > &geometries)
XcbConnectionPtr createX11Connection()
std::unique_ptr< xcb_connection_t, XcbConnectionDeleter > XcbConnectionPtr
KWIN_EXPORT xcb_window_t rootWindow()
WaylandServer * waylandServer()
InputRedirection * input()