diff options
Diffstat (limited to 'gnu')
-rw-r--r-- | gnu/local.mk | 1 | ||||
-rw-r--r-- | gnu/packages/kde-frameworks.scm | 4 | ||||
-rw-r--r-- | gnu/packages/patches/kwindowsystem-qt-compat.patch | 97 |
3 files changed, 101 insertions, 1 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index f3712d8920..78456aae66 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1015,6 +1015,7 @@ dist_patch_DATA = \ %D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch \ %D%/packages/patches/kodi-set-libcurl-ssl-parameters.patch \ %D%/packages/patches/kodi-skip-test-449.patch \ + %D%/packages/patches/kwindowsystem-qt-compat.patch \ %D%/packages/patches/laby-make-install.patch \ %D%/packages/patches/lcalc-default-parameters-1.patch \ %D%/packages/patches/lcalc-default-parameters-2.patch \ diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index ec735d8903..c1279fffd4 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -1081,6 +1081,7 @@ configuration pages, message boxes, and password requests.") "mirror://kde/stable/frameworks/" (version-major+minor version) "/" name "-" version ".tar.xz")) + (patches (search-patches "kwindowsystem-qt-compat.patch")) (sha256 (base32 "10zdxm08d758zbwlrbsn0ghxjpf39ids2s5pnca072gbrbrxv656")))) @@ -1096,7 +1097,8 @@ configuration pages, message boxes, and password requests.") `(("libxrender" ,libxrender) ("qtbase" ,qtbase) ("qtx11extras" ,qtx11extras) - ("xcb-utils-keysyms" ,xcb-util-keysyms))) + ("xcb-utils-keysyms" ,xcb-util-keysyms) + ("xcb-util-wm" ,xcb-util-wm))) (arguments `(#:phases (modify-phases %standard-phases diff --git a/gnu/packages/patches/kwindowsystem-qt-compat.patch b/gnu/packages/patches/kwindowsystem-qt-compat.patch new file mode 100644 index 0000000000..ef31636917 --- /dev/null +++ b/gnu/packages/patches/kwindowsystem-qt-compat.patch @@ -0,0 +1,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() |