Hello community,
here is the log from the commit of package kwayland for openSUSE:Factory checked in at 2016-10-28 12:24:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kwayland (Old)
and /work/SRC/openSUSE:Factory/.kwayland.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwayland"
Changes:
--------
--- /work/SRC/openSUSE:Factory/kwayland/kwayland.changes 2016-09-14 23:28:58.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kwayland.new/kwayland.changes 2016-10-28 12:24:13.000000000 +0200
@@ -1,0 +2,13 @@
+Sun Oct 2 13:00:34 UTC 2016 - hrvoje.senjan@gmail.com
+
+- Update to 5.27.0
+ * [server] Don't send key release for not pressed keys and
+ no double key press (kde#366625)
+ * [server] When replacing the clipboard selection previous
+ DataSource needs to be cancelled (kde#368391)
+ * Add support for Surface enter/leave events
+ * [client] Track all created Outputs and add static get method
+ * For more details please see:
+ https://www.kde.org/announcements/kde-frameworks-5.27.0.php
+
+-------------------------------------------------------------------
Old:
----
kwayland-5.26.0.tar.xz
New:
----
kwayland-5.27.0.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kwayland.spec ++++++
--- /var/tmp/diff_new_pack.pZHLJn/_old 2016-10-28 12:24:14.000000000 +0200
+++ /var/tmp/diff_new_pack.pZHLJn/_new 2016-10-28 12:24:14.000000000 +0200
@@ -16,9 +16,9 @@
#
-%define _tar_path 5.26
+%define _tar_path 5.27
Name: kwayland
-Version: 5.26.0
+Version: 5.27.0
Release: 0
Summary: KDE Wayland library
License: LGPL-2.1+
++++++ kwayland-5.26.0.tar.xz -> kwayland-5.27.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.26.0/CMakeLists.txt new/kwayland-5.27.0/CMakeLists.txt
--- old/kwayland-5.26.0/CMakeLists.txt 2016-09-06 00:44:32.000000000 +0200
+++ new/kwayland-5.27.0/CMakeLists.txt 2016-10-02 10:13:48.000000000 +0200
@@ -4,7 +4,7 @@
# ECM setup
include(FeatureSummary)
-find_package(ECM 5.26.0 NO_MODULE)
+find_package(ECM 5.27.0 NO_MODULE)
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules")
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
@@ -18,7 +18,7 @@
include(ECMPoQmTools)
-set(KF5_VERSION "5.26.0") # handled by release scripts
+set(KF5_VERSION "5.27.0") # handled by release scripts
ecm_setup_version(${KF5_VERSION} VARIABLE_PREFIX KWAYLAND
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kwayland_version.h"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.26.0/autotests/client/test_datadevice.cpp new/kwayland-5.27.0/autotests/client/test_datadevice.cpp
--- old/kwayland-5.26.0/autotests/client/test_datadevice.cpp 2016-09-06 00:44:32.000000000 +0200
+++ new/kwayland-5.27.0/autotests/client/test_datadevice.cpp 2016-10-02 10:13:48.000000000 +0200
@@ -53,6 +53,7 @@
void testDragInternally();
void testSetSelection();
void testSendSelectionOnSeat();
+ void testReplaceSource();
void testDestroy();
private:
@@ -455,6 +456,79 @@
m_seatInterface->setFocusedKeyboardSurface(serverSurface);
}
+void TestDataDevice::testReplaceSource()
+{
+ // this test verifies that replacing a data source cancels the previous source
+ using namespace KWayland::Client;
+ using namespace KWayland::Server;
+ // first add keyboard support to Seat
+ QSignalSpy keyboardChangedSpy(m_seat, &Seat::hasKeyboardChanged);
+ QVERIFY(keyboardChangedSpy.isValid());
+ m_seatInterface->setHasKeyboard(true);
+ QVERIFY(keyboardChangedSpy.wait());
+ // now create DataDevice, Keyboard and a Surface
+ QSignalSpy dataDeviceCreatedSpy(m_dataDeviceManagerInterface, &DataDeviceManagerInterface::dataDeviceCreated);
+ QVERIFY(dataDeviceCreatedSpy.isValid());
+ QScopedPointer<DataDevice> dataDevice(m_dataDeviceManager->getDataDevice(m_seat));
+ QVERIFY(dataDevice->isValid());
+ QVERIFY(dataDeviceCreatedSpy.wait());
+ auto serverDataDevice = dataDeviceCreatedSpy.first().first().value();
+ QVERIFY(serverDataDevice);
+ QScopedPointer<Keyboard> keyboard(m_seat->createKeyboard());
+ QVERIFY(keyboard->isValid());
+ QSignalSpy surfaceCreatedSpy(m_compositorInterface, &CompositorInterface::surfaceCreated);
+ QVERIFY(surfaceCreatedSpy.isValid());
+ QScopedPointer<Surface> surface(m_compositor->createSurface());
+ QVERIFY(surface->isValid());
+ QVERIFY(surfaceCreatedSpy.wait());
+
+ auto serverSurface = surfaceCreatedSpy.first().first().value();
+ QVERIFY(serverSurface);
+ m_seatInterface->setFocusedKeyboardSurface(serverSurface);
+
+ // now set the selection
+ QScopedPointer<DataSource> dataSource(m_dataDeviceManager->createDataSource());
+ QVERIFY(dataSource->isValid());
+ dataSource->offer(QStringLiteral("text/plain"));
+ dataDevice->setSelection(1, dataSource.data());
+ QSignalSpy sourceCancelledSpy(dataSource.data(), &DataSource::cancelled);
+ QVERIFY(sourceCancelledSpy.isValid());
+ // we should get a selection offered for that on the data device
+ QSignalSpy selectionOfferedSpy(dataDevice.data(), &DataDevice::selectionOffered);
+ QVERIFY(selectionOfferedSpy.isValid());
+ QVERIFY(selectionOfferedSpy.wait());
+ QCOMPARE(selectionOfferedSpy.count(), 1);
+
+ // create a second data source and replace previous one
+ QScopedPointer<DataSource> dataSource2(m_dataDeviceManager->createDataSource());
+ QVERIFY(dataSource2->isValid());
+ dataSource2->offer(QStringLiteral("text/plain"));
+ QSignalSpy sourceCancelled2Spy(dataSource2.data(), &DataSource::cancelled);
+ QVERIFY(sourceCancelled2Spy.isValid());
+ dataDevice->setSelection(1, dataSource2.data());
+ QCOMPARE(selectionOfferedSpy.count(), 1);
+ QVERIFY(sourceCancelledSpy.wait());
+ QCOMPARE(selectionOfferedSpy.count(), 2);
+ QVERIFY(sourceCancelled2Spy.isEmpty());
+
+ // create a new DataDevice and replace previous one
+ QScopedPointer<DataDevice> dataDevice2(m_dataDeviceManager->getDataDevice(m_seat));
+ QVERIFY(dataDevice2->isValid());
+ QScopedPointer<DataSource> dataSource3(m_dataDeviceManager->createDataSource());
+ QVERIFY(dataSource3->isValid());
+ dataSource3->offer(QStringLiteral("text/plain"));
+ dataDevice2->setSelection(1, dataSource3.data());
+ QVERIFY(sourceCancelled2Spy.wait());
+
+ // try to crash by first destroying dataSource3 and setting a new DataSource
+ QScopedPointer<DataSource> dataSource4(m_dataDeviceManager->createDataSource());
+ QVERIFY(dataSource4->isValid());
+ dataSource4->offer(QStringLiteral("text/plain"));
+ dataSource3.reset();
+ dataDevice2->setSelection(1, dataSource4.data());
+ QVERIFY(selectionOfferedSpy.wait());
+}
+
void TestDataDevice::testDestroy()
{
using namespace KWayland::Client;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.26.0/autotests/client/test_wayland_output.cpp new/kwayland-5.27.0/autotests/client/test_wayland_output.cpp
--- old/kwayland-5.26.0/autotests/client/test_wayland_output.cpp 2016-09-06 00:44:32.000000000 +0200
+++ new/kwayland-5.27.0/autotests/client/test_wayland_output.cpp 2016-10-02 10:13:48.000000000 +0200
@@ -185,7 +185,10 @@
QSignalSpy outputChanged(&output, SIGNAL(changed()));
QVERIFY(outputChanged.isValid());
- output.setup(registry.bindOutput(announced.first().first().value<quint32>(), announced.first().last().value<quint32>()));
+ auto o = registry.bindOutput(announced.first().first().value<quint32>(), announced.first().last().value<quint32>());
+ QVERIFY(!KWayland::Client::Output::get(o));
+ output.setup(o);
+ QCOMPARE(KWayland::Client::Output::get(o), &output);
wl_display_flush(m_connection->display());
QVERIFY(outputChanged.wait());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.26.0/autotests/client/test_wayland_seat.cpp new/kwayland-5.27.0/autotests/client/test_wayland_seat.cpp
--- old/kwayland-5.26.0/autotests/client/test_wayland_seat.cpp 2016-09-06 00:44:32.000000000 +0200
+++ new/kwayland-5.27.0/autotests/client/test_wayland_seat.cpp 2016-10-02 10:13:48.000000000 +0200
@@ -1201,6 +1201,21 @@
QCOMPARE(keyChangedSpy.at(4).at(1).valueKeyboard::KeyState(), Keyboard::KeyState::Released);
QCOMPARE(keyChangedSpy.at(4).at(2).value<quint32>(), quint32(8));
+ // releasing a key which is already released should not set a key changed
+ m_seatInterface->keyReleased(KEY_F1);
+ QVERIFY(!keyChangedSpy.wait(200));
+ // let's press it again
+ m_seatInterface->keyPressed(KEY_F1);
+ QVERIFY(keyChangedSpy.wait());
+ QCOMPARE(keyChangedSpy.count(), 6);
+ // press again should be ignored
+ m_seatInterface->keyPressed(KEY_F1);
+ QVERIFY(!keyChangedSpy.wait(200));
+ // and release
+ m_seatInterface->keyReleased(KEY_F1);
+ QVERIFY(keyChangedSpy.wait());
+ QCOMPARE(keyChangedSpy.count(), 7);
+
m_seatInterface->updateKeyboardModifiers(1, 2, 3, 4);
QVERIFY(modifierSpy.wait());
QCOMPARE(modifierSpy.count(), 2);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-5.26.0/autotests/client/test_wayland_surface.cpp new/kwayland-5.27.0/autotests/client/test_wayland_surface.cpp
--- old/kwayland-5.26.0/autotests/client/test_wayland_surface.cpp 2016-09-06 00:44:32.000000000 +0200
+++ new/kwayland-5.27.0/autotests/client/test_wayland_surface.cpp 2016-10-02 10:13:48.000000000 +0200
@@ -25,6 +25,7 @@
#include "../../src/client/compositor.h"
#include "../../src/client/connection_thread.h"
#include "../../src/client/event_queue.h"
+#include "../../src/client/output.h"
#include "../../src/client/surface.h"
#include "../../src/client/region.h"
#include "../../src/client/registry.h"
@@ -59,6 +60,7 @@
void testSurfaceAt();
void testDestroyAttachedBuffer();
void testDestroyWithPendingCallback();
+ void testOutput();
void testDisconnect();
private:
@@ -956,5 +958,78 @@
m_queue->destroy();
}
+void TestWaylandSurface::testOutput()
+{
+ // This test verifies that the enter/leave are sent correctly to the Client
+ using namespace KWayland::Client;
+ using namespace KWayland::Server;
+ qRegisterMetaTypeKWayland::Client::Output*();
+ QScopedPointer<Surface> s(m_compositor->createSurface());
+ QVERIFY(!s.isNull());
+ QVERIFY(s->isValid());
+ QVERIFY(s->outputs().isEmpty());
+ QSignalSpy enteredSpy(s.data(), &Surface::outputEntered);
+ QVERIFY(enteredSpy.isValid());
+ QSignalSpy leftSpy(s.data(), &Surface::outputLeft);
+ QVERIFY(leftSpy.isValid());
+ // wait for the surface on the Server side
+ QSignalSpy surfaceCreatedSpy(m_compositorInterface, &CompositorInterface::surfaceCreated);
+ QVERIFY(surfaceCreatedSpy.isValid());
+ QVERIFY(surfaceCreatedSpy.wait());
+ auto serverSurface = surfaceCreatedSpy.first().first().value();
+ QVERIFY(serverSurface);
+ QCOMPARE(serverSurface->outputs(), QVector());
+
+ // create another registry to get notified about added outputs
+ Registry registry;
+ registry.setEventQueue(m_queue);
+ QSignalSpy allAnnounced(®istry, &Registry::interfacesAnnounced);
+ QVERIFY(allAnnounced.isValid());
+ registry.create(m_connection);
+ QVERIFY(registry.isValid());
+ registry.setup();
+ QVERIFY(allAnnounced.wait());
+ QSignalSpy outputAnnouncedSpy(®istry, &Registry::outputAnnounced);
+ QVERIFY(outputAnnouncedSpy.isValid());
+
+ auto serverOutput = m_display->createOutput(m_display);
+ serverOutput->create();
+ QVERIFY(outputAnnouncedSpy.wait());
+ QScopedPointer<Output> clientOutput(registry.createOutput(outputAnnouncedSpy.first().first().value<quint32>(), outputAnnouncedSpy.first().last().value<quint32>()));
+ QVERIFY(clientOutput->isValid());
+ m_connection->flush();
+ m_display->dispatchEvents();
+
+ // now enter it
+ serverSurface->setOutputs(QVector{serverOutput});
+ QCOMPARE(serverSurface->outputs(), QVector{serverOutput});
+ QVERIFY(enteredSpy.wait());
+ QCOMPARE(enteredSpy.count(), 1);
+ QCOMPARE(enteredSpy.first().first().value