Hello community, here is the log from the commit of package kwayland-integration for openSUSE:Factory checked in at 2019-06-12 13:29:25 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kwayland-integration (Old) and /work/SRC/openSUSE:Factory/.kwayland-integration.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwayland-integration" Wed Jun 12 13:29:25 2019 rev:66 rq:708308 version:5.16.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kwayland-integration/kwayland-integration.changes 2019-05-09 10:06:11.344474701 +0200 +++ /work/SRC/openSUSE:Factory/.kwayland-integration.new.4811/kwayland-integration.changes 2019-06-12 13:29:29.200263320 +0200 @@ -1,0 +2,22 @@ +Thu Jun 6 14:07:08 UTC 2019 - fab...@ritter-vogt.de + +- Update to 5.16.0 + * New bugfix release + * For more details please see: + * https://www.kde.org/announcements/plasma-5.16.0.php +- No code changes since 5.15.90 + +------------------------------------------------------------------- +Thu May 16 16:56:37 UTC 2019 - fab...@ritter-vogt.de + +- Update to 5.15.90 + * New feature release + * For more details please see: + * https://www.kde.org/announcements/plasma-5.15.90.php +- Changes since 5.15.5: + * bump Qt version to 5.12 as agreed at start of cycle + * Track surface creation/destruction inside wayland window effects (kde#398899) + * Support CriticalNotification window type + * Add missing window types to WindowInfo + +------------------------------------------------------------------- Old: ---- kwayland-integration-5.15.5.tar.xz kwayland-integration-5.15.5.tar.xz.sig New: ---- kwayland-integration-5.16.0.tar.xz kwayland-integration-5.16.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kwayland-integration.spec ++++++ --- /var/tmp/diff_new_pack.rgQKHn/_old 2019-06-12 13:29:29.692263063 +0200 +++ /var/tmp/diff_new_pack.rgQKHn/_new 2019-06-12 13:29:29.696263061 +0200 @@ -18,7 +18,7 @@ %bcond_without lang Name: kwayland-integration -Version: 5.15.5 +Version: 5.16.0 Release: 0 # Full Plasma 5 version (e.g. 5.8.95) %{!?_plasma5_bugfix: %define _plasma5_bugfix %{version}} @@ -28,9 +28,9 @@ License: LGPL-2.1-or-later Group: Development/Libraries/KDE Url: http://www.kde.org -Source: https://download.kde.org/stable/plasma/%{version}/kwayland-integration-%{version}.tar.xz +Source: kwayland-integration-%{version}.tar.xz %if %{with lang} -Source1: https://download.kde.org/stable/plasma/%{version}/kwayland-integration-%{version}.tar.xz.sig +Source1: kwayland-integration-%{version}.tar.xz.sig Source2: plasma.keyring %endif BuildRequires: cmake >= 2.8.12 ++++++ kwayland-integration-5.15.5.tar.xz -> kwayland-integration-5.16.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.15.5/CMakeLists.txt new/kwayland-integration-5.16.0/CMakeLists.txt --- old/kwayland-integration-5.15.5/CMakeLists.txt 2019-05-07 11:54:53.000000000 +0200 +++ new/kwayland-integration-5.16.0/CMakeLists.txt 2019-06-06 15:00:01.000000000 +0200 @@ -1,10 +1,10 @@ project(kwayland-integration) -set(PROJECT_VERSION "5.15.5") +set(PROJECT_VERSION "5.16.0") set(PROJECT_VERSION_MAJOR 5) cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) -set(QT_MIN_VERSION "5.11.0") -set(KF5_MIN_VERSION "5.54.0") +set(QT_MIN_VERSION "5.12.0") +set(KF5_MIN_VERSION "5.58.0") find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.15.5/src/windowsystem/windoweffects.cpp new/kwayland-integration-5.16.0/src/windowsystem/windoweffects.cpp --- old/kwayland-integration-5.15.5/src/windowsystem/windoweffects.cpp 2019-05-07 11:54:53.000000000 +0200 +++ new/kwayland-integration-5.16.0/src/windowsystem/windoweffects.cpp 2019-06-06 15:00:01.000000000 +0200 @@ -24,6 +24,8 @@ #include <QDebug> #include <QWidget> +#include <QGuiApplication> +#include <QExposeEvent> #include <KWayland/Client/connection_thread.h> #include <KWayland/Client/plasmawindowmanagement.h> @@ -45,6 +47,71 @@ WindowEffects::~WindowEffects() {} +QWindow *WindowEffects::windowForId(WId wid) +{ + QWindow *window = nullptr; + + for (auto win : qApp->allWindows()) { + if (win->winId() == wid) { + window = win; + break; + } + } + return window; +} + +void WindowEffects::trackWindow(QWindow *window) +{ + if (!m_windowWatchers.contains(window)) { + window->installEventFilter(this); + auto conn = connect(window, &QObject::destroyed, this, [this, window]() { + m_blurRegions.remove(window); + m_backgroundConstrastRegions.remove(window); + m_windowWatchers.remove(window); + }); + m_windowWatchers[window] = conn; + } +} + +void WindowEffects::releaseWindow(QWindow *window) +{ + if (!m_blurRegions.contains(window) && !m_backgroundConstrastRegions.contains(window)) { + disconnect(m_windowWatchers[window]); + window->removeEventFilter(this); + m_windowWatchers.remove(window); + } +} + +bool WindowEffects::eventFilter(QObject *watched, QEvent *event) +{ + if (event->type() == QEvent::Expose) { + auto ee = static_cast<QExposeEvent*>(event); + + if ((ee->region().isNull())) { + return false; + } + + auto window = qobject_cast<QWindow *>(watched); + if (!window) { + return false; + } + + { + auto it = m_blurRegions.constFind(window); + if (it != m_blurRegions.constEnd()) { + enableBlurBehind(window, true, *it); + } + } + { + auto it = m_backgroundConstrastRegions.constFind(window); + if (it != m_backgroundConstrastRegions.constEnd()) { + enableBackgroundContrast(window, true, it->contrast, it->intensity, it->saturation, it->region); + } + } + } + return false; +} + bool WindowEffects::isEffectAvailable(KWindowEffects::Effect effect) { switch (effect) { @@ -128,12 +195,30 @@ Q_UNUSED(ids) } -void WindowEffects::enableBlurBehind(WId window, bool enable, const QRegion ®ion) +void WindowEffects::enableBlurBehind(WId winId, bool enable, const QRegion ®ion) +{ + auto window = windowForId(winId); + if (!window) { + return; + } + if (enable) { + trackWindow(window); + m_blurRegions[window] = region; + } else { + m_blurRegions.remove(window); + releaseWindow(window); + } + + enableBlurBehind(window, enable, region); +} + +void WindowEffects::enableBlurBehind(QWindow *window, bool enable, const QRegion ®ion) { if (!WaylandIntegration::self()->waylandBlurManager()) { return; } - KWayland::Client::Surface *surface = KWayland::Client::Surface::fromQtWinId(window); + KWayland::Client::Surface *surface = KWayland::Client::Surface::fromWindow(window); + if (surface) { if (enable) { auto blur = WaylandIntegration::self()->waylandBlurManager()->createBlur(surface, surface); @@ -148,12 +233,32 @@ } } -void WindowEffects::enableBackgroundContrast(WId window, bool enable, qreal contrast, qreal intensity, qreal saturation, const QRegion ®ion) +void WindowEffects::enableBackgroundContrast(WId winId, bool enable, qreal contrast, qreal intensity, qreal saturation, const QRegion ®ion) +{ + auto window = windowForId(winId); + if (!window) { + return; + } + if (enable) { + trackWindow(window); + m_backgroundConstrastRegions[window].contrast = contrast; + m_backgroundConstrastRegions[window].intensity = intensity; + m_backgroundConstrastRegions[window].saturation = saturation; + m_backgroundConstrastRegions[window].region = region; + } else { + m_backgroundConstrastRegions.remove(window); + releaseWindow(window); + } + + enableBackgroundContrast(window, enable, contrast, intensity, saturation, region); +} + +void WindowEffects::enableBackgroundContrast(QWindow *window, bool enable, qreal contrast, qreal intensity, qreal saturation, const QRegion ®ion) { if (!WaylandIntegration::self()->waylandContrastManager()) { return; } - KWayland::Client::Surface *surface = KWayland::Client::Surface::fromQtWinId(window); + KWayland::Client::Surface *surface = KWayland::Client::Surface::fromWindow(window); if (surface) { if (enable) { auto backgroundContrast = WaylandIntegration::self()->waylandContrastManager()->createContrast(surface, surface); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.15.5/src/windowsystem/windoweffects.h new/kwayland-integration-5.16.0/src/windowsystem/windoweffects.h --- old/kwayland-integration-5.15.5/src/windowsystem/windoweffects.h 2019-05-07 11:54:53.000000000 +0200 +++ new/kwayland-integration-5.16.0/src/windowsystem/windoweffects.h 2019-06-06 15:00:01.000000000 +0200 @@ -36,10 +36,17 @@ class WindowEffects : public QObject, public KWindowEffectsPrivate { + Q_OBJECT public: WindowEffects(); ~WindowEffects() override; + static QWindow *windowForId(WId); + + bool eventFilter(QObject *watched, QEvent *event) override; + void trackWindow(QWindow *window); + void releaseWindow(QWindow *window); + bool isEffectAvailable(KWindowEffects::Effect effect) override; void slideWindow(WId id, KWindowEffects::SlideFromLocation location, int offset) override; void slideWindow(QWidget *widget, KWindowEffects::SlideFromLocation location) override; @@ -47,9 +54,22 @@ void presentWindows(WId controller, const QList<WId> &ids) override; void presentWindows(WId controller, int desktop = NET::OnAllDesktops) override; void highlightWindows(WId controller, const QList<WId> &ids) override; - void enableBlurBehind(WId window, bool enable = true, const QRegion ®ion = QRegion()) override; - void enableBackgroundContrast(WId window, bool enable = true, qreal contrast = 1, qreal intensity = 1, qreal saturation = 1, const QRegion ®ion = QRegion()) override; + void enableBlurBehind(WId winId, bool enable = true, const QRegion ®ion = QRegion()) override; + void enableBlurBehind(QWindow *window, bool enable, const QRegion ®ion); + void enableBackgroundContrast(WId winId, bool enable = true, qreal contrast = 1, qreal intensity = 1, qreal saturation = 1, const QRegion ®ion = QRegion()) override; + void enableBackgroundContrast(QWindow *window, bool enable = true, qreal contrast = 1, qreal intensity = 1, qreal saturation = 1, const QRegion ®ion = QRegion()); void markAsDashboard(WId window) override; +private: + QHash<QWindow *, QMetaObject::Connection> m_windowWatchers; + QHash<QWindow *, QRegion> m_blurRegions; + struct BackgroundContrastData { + qreal contrast = 1; + qreal intensity = 1; + qreal saturation = 1; + QRegion region; + }; + QHash<QWindow *, BackgroundContrastData> m_backgroundConstrastRegions; + }; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.15.5/src/windowsystem/windowinfo.cpp new/kwayland-integration-5.16.0/src/windowsystem/windowinfo.cpp --- old/kwayland-integration-5.15.5/src/windowsystem/windowinfo.cpp 2019-05-07 11:54:53.000000000 +0200 +++ new/kwayland-integration-5.16.0/src/windowsystem/windowinfo.cpp 2019-06-06 15:00:01.000000000 +0200 @@ -102,6 +102,21 @@ return NET::OnScreenDisplay; } break; + case KWayland::Client::PlasmaShellSurface::Role::Notification: + if (supported_types & NET::NotificationMask) { + return NET::Notification; + } + break; + case KWayland::Client::PlasmaShellSurface::Role::ToolTip: + if (supported_types & NET::TooltipMask) { + return NET::Tooltip; + } + break; + case KWayland::Client::PlasmaShellSurface::Role::CriticalNotification: + if (supported_types & NET::CriticalNotificationMask) { + return NET::CriticalNotification; + } + break; default: break; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.15.5/src/windowsystem/windowsystem.cpp new/kwayland-integration-5.16.0/src/windowsystem/windowsystem.cpp --- old/kwayland-integration-5.15.5/src/windowsystem/windowsystem.cpp 2019-05-07 11:54:53.000000000 +0200 +++ new/kwayland-integration-5.16.0/src/windowsystem/windowsystem.cpp 2019-06-06 15:00:01.000000000 +0200 @@ -453,6 +453,9 @@ case NET::Tooltip: role = KWayland::Client::PlasmaShellSurface::Role::ToolTip; break; + case NET::CriticalNotification: + role = KWayland::Client::PlasmaShellSurface::Role::CriticalNotification; + break; default: return; }