summaryrefslogtreecommitdiff
path: root/gnu/packages/patches/kwindowsystem-qt-compat.patch
blob: ef31636917e7accfd0072d53cbcc411fec743331 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Fix test failure with Qt 5.12.

Taken from upstream:
https://cgit.kde.org/kwindowsystem.git/commit/?id=14998613603c7d8f91b011a2c9c20396067add0e

diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt
index f8e67f0..c1121a7 100644
--- a/autotests/CMakeLists.txt
+++ b/autotests/CMakeLists.txt
@@ -12,12 +12,12 @@ add_subdirectory(helper)
 
 if (NOT APPLE)
     find_package(X11)
-    find_package(XCB COMPONENTS XCB KEYSYMS)
+    find_package(XCB COMPONENTS XCB ICCCM KEYSYMS)
 endif()
 
 macro(KWINDOWSYSTEM_UNIT_TESTS)
    foreach(_testname ${ARGN})
-      set(libs KF5::WindowSystem Qt5::Test Qt5::Widgets Qt5::X11Extras XCB::KEYSYMS)
+      set(libs KF5::WindowSystem Qt5::Test Qt5::Widgets Qt5::X11Extras XCB::ICCCM XCB::KEYSYMS)
       if(X11_FOUND)
          list(APPEND libs ${XCB_XCB_LIBRARY})
       endif()
diff --git a/autotests/kwindowinfox11test.cpp b/autotests/kwindowinfox11test.cpp
index 634c650..f483c46 100644
--- a/autotests/kwindowinfox11test.cpp
+++ b/autotests/kwindowinfox11test.cpp
@@ -25,8 +25,11 @@
 #include <qtest_widgets.h>
 #include <QScreen>
 #include <QSignalSpy>
+#include <QSysInfo>
 #include <QX11Info>
 
+#include <xcb/xcb_icccm.h>
+
 #include <unistd.h>
 
 Q_DECLARE_METATYPE(WId)
@@ -598,19 +601,23 @@ void KWindowInfoX11Test::testWindowRole()
 
 void KWindowInfoX11Test::testClientMachine()
 {
+    const QByteArray oldHostName = QSysInfo::machineHostName().toLocal8Bit();
+
     KWindowInfo info(window->winId(), NET::Properties(), NET::WM2ClientMachine);
-    QVERIFY(info.clientMachine().isNull());
+    QCOMPARE(info.clientMachine(), oldHostName);
 
     // client machine needs to be set through xcb
+    const QByteArray newHostName = oldHostName + "2";
     xcb_change_property(QX11Info::connection(), XCB_PROP_MODE_REPLACE, window->winId(),
-                        XCB_ATOM_WM_CLIENT_MACHINE, XCB_ATOM_STRING, 8, 9, "localhost");
+                        XCB_ATOM_WM_CLIENT_MACHINE, XCB_ATOM_STRING, 8, newHostName.count(),
+                        newHostName.data());
     xcb_flush(QX11Info::connection());
 
     // it's just a property change so we can easily refresh
     QX11Info::getTimestamp();
 
     KWindowInfo info2(window->winId(), NET::Properties(), NET::WM2ClientMachine);
-    QCOMPARE(info2.clientMachine(), QByteArrayLiteral("localhost"));
+    QCOMPARE(info2.clientMachine(), newHostName);
 }
 
 void KWindowInfoX11Test::testName()
@@ -680,11 +687,25 @@ void KWindowInfoX11Test::testTransientFor()
 
 void KWindowInfoX11Test::testGroupLeader()
 {
-    KWindowInfo info(window->winId(), NET::Properties(), NET::WM2GroupLeader);
-    QCOMPARE(info.groupLeader(), WId(0));
+    // WM_CLIENT_LEADER is set by default
+    KWindowInfo info1(window->winId(), NET::Properties(), NET::WM2GroupLeader);
+    QVERIFY(info1.groupLeader() != XCB_WINDOW_NONE);
+
+    xcb_connection_t *connection = QX11Info::connection();
+    xcb_window_t rootWindow = QX11Info::appRootWindow();
+
+    xcb_window_t leader = xcb_generate_id(connection);
+    xcb_create_window(connection, XCB_COPY_FROM_PARENT, leader, rootWindow, 0, 0, 1, 1,
+        0, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_COPY_FROM_PARENT, 0, nullptr);
+
+    xcb_icccm_wm_hints_t hints = {};
+    hints.flags = XCB_ICCCM_WM_HINT_WINDOW_GROUP;
+    hints.window_group = leader;
+    xcb_icccm_set_wm_hints(connection, leader, &hints);
+    xcb_icccm_set_wm_hints(connection, window->winId(), &hints);
 
-    // TODO: here we should try to set a group leader and re-read it
-    // this needs setting and parsing the WMHints
+    KWindowInfo info2(window->winId(), NET::Properties(), NET::WM2GroupLeader);
+    QCOMPARE(info2.groupLeader(), leader);
 }
 
 void KWindowInfoX11Test::testExtendedStrut()