Hello community, here is the log from the commit of package kwayland for openSUSE:Leap:15.2 checked in at 2020-05-12 11:39:13 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/kwayland (Old) and /work/SRC/openSUSE:Leap:15.2/.kwayland.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwayland" Tue May 12 11:39:13 2020 rev:69 rq:802203 version:5.70.0 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/kwayland/kwayland.changes 2020-04-21 19:05:56.535795770 +0200 +++ /work/SRC/openSUSE:Leap:15.2/.kwayland.new.2738/kwayland.changes 2020-05-12 11:39:36.816653540 +0200 @@ -1,0 +2,13 @@ +Sun May 3 09:40:15 UTC 2020 - Christophe Giboudeaux <[email protected]> + +- Update to 5.70.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/kde-frameworks-5.70.0 +- Changes since 5.69.0: + * [Wayland] Add to PlasmaWindowManagement protocol windows stacking order + * Add wrapper for wl_global_remove + * [server] Add some sub-surface life cycle signals + * [autotests] Optimistic attempt to fix RemoteAccessTest reilability + +------------------------------------------------------------------- Old: ---- kwayland-5.69.0.tar.xz kwayland-5.69.0.tar.xz.sig New: ---- kwayland-5.70.0.tar.xz kwayland-5.70.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kwayland.spec ++++++ --- /var/tmp/diff_new_pack.sPxhBM/_old 2020-05-12 11:39:37.536655052 +0200 +++ /var/tmp/diff_new_pack.sPxhBM/_new 2020-05-12 11:39:37.540655061 +0200 @@ -16,7 +16,7 @@ # -%define _tar_path 5.69 +%define _tar_path 5.70 # Full KF5 version (e.g. 5.33.0) %{!?_kf5_version: %global _kf5_version %{version}} # Last major and minor KF5 version (e.g. 5.33) @@ -24,7 +24,7 @@ # Only needed for the package signature condition %bcond_without lang Name: kwayland -Version: 5.69.0 +Version: 5.70.0 Release: 0 Summary: KDE Wayland library License: LGPL-2.1-or-later ++++++ kwayland-5.69.0.tar.xz -> kwayland-5.70.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/CMakeLists.txt new/kwayland-5.70.0/CMakeLists.txt --- old/kwayland-5.69.0/CMakeLists.txt 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/CMakeLists.txt 2020-05-03 00:00:58.000000000 +0200 @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.5) -set(KF5_VERSION "5.69.0") # handled by release scripts +set(KF5_VERSION "5.70.0") # handled by release scripts project(KWayland VERSION ${KF5_VERSION}) # ECM setup include(FeatureSummary) -find_package(ECM 5.69.0 NO_MODULE) +find_package(ECM 5.70.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/Modules) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/autotests/client/test_remote_access.cpp new/kwayland-5.70.0/autotests/client/test_remote_access.cpp --- old/kwayland-5.69.0/autotests/client/test_remote_access.cpp 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/autotests/client/test_remote_access.cpp 2020-05-03 00:00:58.000000000 +0200 @@ -242,11 +242,6 @@ m_display->dispatchEvents(); QVERIFY(m_remoteAccessInterface->isBound()); // now we have 2 clients - QSignalSpy bufferReadySpy1(client1->remoteAccess, &RemoteAccessManager::bufferReady); - QVERIFY(bufferReadySpy1.isValid()); - QSignalSpy bufferReadySpy2(client2->remoteAccess, &RemoteAccessManager::bufferReady); - QVERIFY(bufferReadySpy2.isValid()); - BufferHandle *buf = new BufferHandle(); QTemporaryFile *tmpFile = new QTemporaryFile(this); tmpFile->open(); @@ -255,36 +250,51 @@ buf->setSize(50, 50); buf->setFormat(100500); buf->setStride(7800); - m_remoteAccessInterface->sendBufferReady(m_outputInterface[0], buf); - // wait for event loop - QVERIFY(bufferReadySpy1.wait()); - // receive buffer at client 1 - QCOMPARE(bufferReadySpy1.size(), 1); - auto rbuf1 = bufferReadySpy1.takeFirst()[1].value<const RemoteBuffer *>(); - QSignalSpy paramsObtainedSpy1(rbuf1, &RemoteBuffer::parametersObtained); - QVERIFY(paramsObtainedSpy1.isValid()); + bool buffer1ParametersReceived = false; + bool buffer2ParametersReceived = false; - if (bufferReadySpy2.size() == 0) { - QVERIFY(bufferReadySpy2.wait()); - } - // receive buffer at client 2 - QCOMPARE(bufferReadySpy2.size(), 1); - auto rbuf2 = bufferReadySpy2.takeFirst()[1].value<const RemoteBuffer *>(); - QSignalSpy paramsObtainedSpy2(rbuf2, &RemoteBuffer::parametersObtained); - QVERIFY(paramsObtainedSpy2.isValid()); - - // wait for event loop - QVERIFY(paramsObtainedSpy1.size() == 1 || paramsObtainedSpy1.wait()); - QCOMPARE(paramsObtainedSpy1.size(), 1); - if (paramsObtainedSpy2.size() == 0) { - QVERIFY(paramsObtainedSpy2.wait()); + const RemoteBuffer *rbuf1 = nullptr; + const RemoteBuffer *rbuf2 = nullptr; + + client1->connection->flush(); + client2->connection->flush(); + + { + QEventLoop e; + QTimer::singleShot(1000, &e, &QEventLoop::quit); //safety timer + connect(client1->remoteAccess, &RemoteAccessManager::bufferReady, [&] (const void*, const RemoteBuffer *buffer) { + rbuf1 = buffer; + connect(rbuf1, &RemoteBuffer::parametersObtained, [&]() { + buffer1ParametersReceived = true; + if (buffer1ParametersReceived && buffer2ParametersReceived) { + e.quit(); + } + }); + }); + + connect(client2->remoteAccess, &RemoteAccessManager::bufferReady, [&] (const void*, const RemoteBuffer *buffer) { + rbuf2 = buffer; + connect(rbuf2, &RemoteBuffer::parametersObtained, [&]() { + buffer2ParametersReceived = true; + if (buffer1ParametersReceived && buffer2ParametersReceived) { + e.quit(); + } + }); + }); + m_remoteAccessInterface->sendBufferReady(m_outputInterface[0], buf); + + e.exec(); } - QCOMPARE(paramsObtainedSpy2.size(), 1); + + + QVERIFY(rbuf1); + QVERIFY(rbuf2); + QVERIFY(buffer1ParametersReceived); + QVERIFY(buffer2ParametersReceived); // release QSignalSpy bufferReleasedSpy(m_remoteAccessInterface, &RemoteAccessManagerInterface::bufferReleased); - QVERIFY(bufferReleasedSpy.isValid()); delete rbuf1; QVERIFY(!bufferReleasedSpy.wait(1000)); // one client released, second still holds buffer! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/client/plasmawindowmanagement.cpp new/kwayland-5.70.0/src/client/plasmawindowmanagement.cpp --- old/kwayland-5.69.0/src/client/plasmawindowmanagement.cpp 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/client/plasmawindowmanagement.cpp 2020-05-03 00:00:58.000000000 +0200 @@ -34,14 +34,17 @@ bool showingDesktop = false; QList<PlasmaWindow*> windows; PlasmaWindow *activeWindow = nullptr; + QVector<quint32> stackingOrder; void setup(org_kde_plasma_window_management *wm); private: static void showDesktopCallback(void *data, org_kde_plasma_window_management *org_kde_plasma_window_management, uint32_t state); static void windowCallback(void *data, org_kde_plasma_window_management *org_kde_plasma_window_management, uint32_t id); + static void stackingOrderCallback(void *data, org_kde_plasma_window_management *org_kde_plasma_window_management, wl_array *ids); void setShowDesktop(bool set); void windowCreated(org_kde_plasma_window *id, quint32 internalId); + void setStackingOrder(const QVector<quint32> &ids); static struct org_kde_plasma_window_management_listener s_listener; PlasmaWindowManagement *q; @@ -139,7 +142,8 @@ org_kde_plasma_window_management_listener PlasmaWindowManagement::Private::s_listener = { showDesktopCallback, - windowCallback + windowCallback, + stackingOrderCallback }; void PlasmaWindowManagement::Private::setup(org_kde_plasma_window_management *windowManagement) @@ -235,6 +239,25 @@ ); } +void PlasmaWindowManagement::Private::stackingOrderCallback(void *data, org_kde_plasma_window_management *interface, wl_array *ids) +{ + auto wm = reinterpret_cast<PlasmaWindowManagement::Private*>(data); + Q_ASSERT(wm->wm == interface); + QVector<quint32> destination; + destination.resize(ids->size / sizeof(uint32_t)); + memcpy(destination.data(), ids->data, ids->size); + wm->setStackingOrder(destination); +} + +void PlasmaWindowManagement::Private::setStackingOrder(const QVector<quint32> &ids) +{ + if (stackingOrder == ids) { + return; + } + stackingOrder = ids; + emit q->stackingOrderChanged(); +} + PlasmaWindowManagement::PlasmaWindowManagement(QObject *parent) : QObject(parent) , d(new Private(this)) @@ -329,6 +352,11 @@ return new PlasmaWindowModel(this); } +QVector<quint32> PlasmaWindowManagement::stackingOrder() const +{ + return d->stackingOrder; +} + org_kde_plasma_window_listener PlasmaWindow::Private::s_listener = { titleChangedCallback, appIdChangedCallback, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/client/plasmawindowmanagement.h new/kwayland-5.70.0/src/client/plasmawindowmanagement.h --- old/kwayland-5.69.0/src/client/plasmawindowmanagement.h 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/client/plasmawindowmanagement.h 2020-05-03 00:00:58.000000000 +0200 @@ -156,6 +156,11 @@ **/ PlasmaWindowModel *createWindowModel(); + /** + * @returns windows stacking order + */ + QVector<quint32> stackingOrder() const; + Q_SIGNALS: /** * This signal is emitted right before the interface is released. @@ -192,6 +197,12 @@ **/ void removed(); + /** + * The stacking order changed + * @since 5.70 + **/ + void stackingOrderChanged(); + private: class Private; QScopedPointer<Private> d; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/client/protocols/plasma-window-management.xml new/kwayland-5.70.0/src/client/protocols/plasma-window-management.xml --- old/kwayland-5.69.0/src/client/protocols/plasma-window-management.xml 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/client/protocols/plasma-window-management.xml 2020-05-03 00:00:58.000000000 +0200 @@ -6,7 +6,7 @@ SPDX-License-Identifier: LGPL-2.1-or-later ]]></copyright> - <interface name="org_kde_plasma_window_management" version="10"> + <interface name="org_kde_plasma_window_management" version="11"> <description summary="application windows management"> This interface manages application windows. It provides requests to show and hide the desktop and emits @@ -71,9 +71,16 @@ </description> <arg name="id" type="uint" summary="internal window Id"/> </event> + + <event name="stacking_order_changed" since="11"> + <description summary="notify the client when stacking order changed"> + This event will be sent when stacking order changed and on bind + </description> + <arg name="ids" type="array" summary="internal windows id array"/> + </event> </interface> - <interface name="org_kde_plasma_window" version="10"> + <interface name="org_kde_plasma_window" version="11"> <description summary="interface to control application windows"> Manages and control an application window. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/client/registry.cpp new/kwayland-5.70.0/src/client/registry.cpp --- old/kwayland-5.69.0/src/client/registry.cpp 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/client/registry.cpp 2020-05-03 00:00:58.000000000 +0200 @@ -171,7 +171,7 @@ &Registry::plasmaVirtualDesktopManagementRemoved }}, {Registry::Interface::PlasmaWindowManagement, { - 10, + 11, QByteArrayLiteral("org_kde_plasma_window_management"), &org_kde_plasma_window_management_interface, &Registry::plasmaWindowManagementAnnounced, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/server/plasmawindowmanagement_interface.cpp new/kwayland-5.70.0/src/server/plasmawindowmanagement_interface.cpp --- old/kwayland-5.69.0/src/server/plasmawindowmanagement_interface.cpp 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/server/plasmawindowmanagement_interface.cpp 2020-05-03 00:00:58.000000000 +0200 @@ -31,12 +31,14 @@ public: Private(PlasmaWindowManagementInterface *q, Display *d); void sendShowingDesktopState(); + void sendStackingOrderChanged(); ShowingDesktopState state = ShowingDesktopState::Disabled; QVector<wl_resource*> resources; QList<PlasmaWindowInterface*> windows; QPointer<PlasmaVirtualDesktopManagementInterface> plasmaVirtualDesktopManagementInterface = nullptr; quint32 windowIdCounter = 0; + QVector<quint32> stackingOrder; private: static void unbind(wl_resource *resource); @@ -45,6 +47,7 @@ void bind(wl_client *client, uint32_t version, uint32_t id) override; void sendShowingDesktopState(wl_resource *r); + void sendStackingOrderChanged(wl_resource *r); PlasmaWindowManagementInterface *q; static const struct org_kde_plasma_window_management_interface s_interface; @@ -113,7 +116,7 @@ static const struct org_kde_plasma_window_interface s_interface; }; -const quint32 PlasmaWindowManagementInterface::Private::s_version = 10; +const quint32 PlasmaWindowManagementInterface::Private::s_version = 11; PlasmaWindowManagementInterface::Private::Private(PlasmaWindowManagementInterface *q, Display *d) : Global::Private(d, &org_kde_plasma_window_management_interface, s_version) @@ -152,6 +155,30 @@ org_kde_plasma_window_management_send_show_desktop_changed(r, s); } +void PlasmaWindowManagementInterface::Private::sendStackingOrderChanged() +{ + for (wl_resource *r : resources) { + sendStackingOrderChanged(r); + } +} + +void PlasmaWindowManagementInterface::Private::sendStackingOrderChanged(wl_resource *r) +{ + if (wl_resource_get_version(r) < ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STACKING_ORDER_CHANGED_SINCE_VERSION) { + return; + } + + wl_array wlIds; + wl_array_init(&wlIds); + const size_t memLength = sizeof(uint32_t) * stackingOrder.size(); + void *s = wl_array_add(&wlIds, memLength); + memcpy(s, stackingOrder.data(), memLength); + + org_kde_plasma_window_management_send_stacking_order_changed(r, &wlIds); + + wl_array_release(&wlIds); +} + void PlasmaWindowManagementInterface::Private::showDesktopCallback(wl_client *client, wl_resource *resource, uint32_t state) { Q_UNUSED(client) @@ -207,6 +234,7 @@ for (auto it = windows.constBegin(); it != windows.constEnd(); ++it) { org_kde_plasma_window_management_send_window(shell, (*it)->d->windowId); } + sendStackingOrderChanged(); } void PlasmaWindowManagementInterface::Private::unbind(wl_resource *resource) @@ -266,6 +294,16 @@ window->d->unmap(); } +void PlasmaWindowManagementInterface::setStackingOrder(const QVector<quint32>& stackingOrder) +{ + Q_D(); + if (d->stackingOrder == stackingOrder) { + return; + } + d->stackingOrder = stackingOrder; + d->sendStackingOrderChanged(); +} + void PlasmaWindowManagementInterface::setPlasmaVirtualDesktopManagementInterface(PlasmaVirtualDesktopManagementInterface *manager) { Q_D(); @@ -958,5 +996,10 @@ d->setApplicationMenuPaths(serviceName, objectPath); } +quint32 PlasmaWindowInterface::internalId() const +{ + return d->windowId; +} + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/server/plasmawindowmanagement_interface.h new/kwayland-5.70.0/src/server/plasmawindowmanagement_interface.h --- old/kwayland-5.69.0/src/server/plasmawindowmanagement_interface.h 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/server/plasmawindowmanagement_interface.h 2020-05-03 00:00:58.000000000 +0200 @@ -73,6 +73,13 @@ */ PlasmaVirtualDesktopManagementInterface *plasmaVirtualDesktopManagementInterface() const; + + /** + * Associate stacking order to this window management + * @since 5.70 + */ + void setStackingOrder(const QVector<quint32> &stackingOrder); + Q_SIGNALS: void requestChangeShowingDesktop(ShowingDesktopState requestedState); @@ -221,6 +228,13 @@ */ void setApplicationMenuPaths(const QString &serviceName, const QString &objectPath); + /** + * Return the window internal id + * + * @since 5.70 + */ + quint32 internalId() const; + Q_SIGNALS: void closeRequested(); /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/server/surface_interface.cpp new/kwayland-5.70.0/src/server/surface_interface.cpp --- old/kwayland-5.69.0/src/server/surface_interface.cpp 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/server/surface_interface.cpp 2020-05-03 00:00:58.000000000 +0200 @@ -43,6 +43,7 @@ subSurfacePending.children.append(child); current.children.append(child); Q_Q(SurfaceInterface); + emit q->childSubSurfaceAdded(child); emit q->subSurfaceTreeChanged(); QObject::connect(child.data(), &SubSurfaceInterface::positionChanged, q, &SurfaceInterface::subSurfaceTreeChanged); QObject::connect(child->surface().data(), &SurfaceInterface::damaged, q, &SurfaceInterface::subSurfaceTreeChanged); @@ -57,6 +58,7 @@ subSurfacePending.children.removeAll(child); current.children.removeAll(child); Q_Q(SurfaceInterface); + emit q->childSubSurfaceRemoved(child); emit q->subSurfaceTreeChanged(); QObject::disconnect(child.data(), &SubSurfaceInterface::positionChanged, q, &SurfaceInterface::subSurfaceTreeChanged); if (!child->surface().isNull()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.69.0/src/server/surface_interface.h new/kwayland-5.70.0/src/server/surface_interface.h --- old/kwayland-5.69.0/src/server/surface_interface.h 2020-04-05 00:38:02.000000000 +0200 +++ new/kwayland-5.70.0/src/server/surface_interface.h 2020-05-03 00:00:58.000000000 +0200 @@ -330,6 +330,16 @@ * @since 5.22 **/ void subSurfaceTreeChanged(); + /** + * Emitted whenever a new child sub-surface @p subSurface is added. + * @since 5.70 + */ + void childSubSurfaceAdded(SubSurfaceInterface *subSurface); + /** + * Emitted whenver the child sub-surface @p subSurface is removed. + * @since 5.70 + */ + void childSubSurfaceRemoved(SubSurfaceInterface *subSurface); /** * Emitted whenever a pointer constraint get (un)installed on this SurfaceInterface.
