Hello community, here is the log from the commit of package kwayland-integration for openSUSE:Factory checked in at 2016-01-03 13:25:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kwayland-integration (Old) and /work/SRC/openSUSE:Factory/.kwayland-integration.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwayland-integration" Changes: -------- --- /work/SRC/openSUSE:Factory/kwayland-integration/kwayland-integration.changes 2015-11-24 22:27:01.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.kwayland-integration.new/kwayland-integration.changes 2016-01-03 13:26:11.000000000 +0100 @@ -1,0 +2,24 @@ +Tue Dec 22 22:35:09 UTC 2015 - hrvoje.sen...@gmail.com + +- Update to 5.5.2: + * Bugfix release + * For more details please see: + https://www.kde.org/announcements/plasma-5.5.2.php + +------------------------------------------------------------------- +Tue Dec 15 17:49:54 UTC 2015 - hrvoje.sen...@gmail.com + +- Update to 5.5.1: + * Bugfix release + * For more details please see: + https://www.kde.org/announcements/plasma-5.5.1.php + +------------------------------------------------------------------- +Sat Dec 12 17:31:54 UTC 2015 - hrvoje.sen...@gmail.com + +- Update to 5.5.0: + * For more details please see: + https://dot.kde.org/2015/12/08/plasma-55-beautiful-new-artwork +- Move to cmake(...) BuildRequires where possible + +------------------------------------------------------------------- Old: ---- kwayland-integration-5.4.3.tar.xz New: ---- kwayland-integration-5.5.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kwayland-integration.spec ++++++ --- /var/tmp/diff_new_pack.0mFGxF/_old 2016-01-03 13:26:12.000000000 +0100 +++ /var/tmp/diff_new_pack.0mFGxF/_new 2016-01-03 13:26:12.000000000 +0100 @@ -17,7 +17,7 @@ Name: kwayland-integration -Version: 5.4.3 +Version: 5.5.2 Release: 0 Summary: Integration plugins for various KDE frameworks for wayland windowing system License: LGPL-2.1+ @@ -25,13 +25,12 @@ Url: http://www.kde.org Source: %{name}-%{version}.tar.xz BuildRequires: cmake >= 2.8.12 -BuildRequires: extra-cmake-modules >= 1.4.0 +BuildRequires: extra-cmake-modules >= 0.0.11 BuildRequires: kf5-filesystem -BuildRequires: kidletime-devel -BuildRequires: kwayland-devel -BuildRequires: kwindowsystem-devel -BuildRequires: pkgconfig(Qt5Core) >= 5.4.0 -BuildRequires: pkgconfig(Qt5Gui) >= 5.4.0 +BuildRequires: cmake(KF5IdleTime) >= 5.12.0 +BuildRequires: cmake(KF5Wayland) >= %{version} +BuildRequires: cmake(KF5WindowSystem) >= 5.12.0 +BuildRequires: cmake(Qt5Core) >= 5.4.0 BuildRoot: %{_tmppath}/%{name}-%{version}-build %description ++++++ kwayland-integration-5.4.3.tar.xz -> kwayland-integration-5.5.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/CMakeLists.txt new/kwayland-integration-5.5.2/CMakeLists.txt --- old/kwayland-integration-5.4.3/CMakeLists.txt 2015-11-05 13:39:23.000000000 +0100 +++ new/kwayland-integration-5.5.2/CMakeLists.txt 2015-12-22 11:36:10.000000000 +0100 @@ -1,5 +1,5 @@ project(kwayland-integration) -set(PROJECT_VERSION "5.4.3") +set(PROJECT_VERSION "5.5.2") set(PROJECT_VERSION_MAJOR 5) cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/CMakeLists.txt new/kwayland-integration-5.5.2/src/windowsystem/CMakeLists.txt --- old/kwayland-integration-5.4.3/src/windowsystem/CMakeLists.txt 2015-11-05 13:39:23.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/CMakeLists.txt 2015-12-22 11:36:10.000000000 +0100 @@ -1,7 +1,10 @@ set(wayland_plugin_SRCS logging.cpp plugin.cpp + waylandintegration.cpp + windoweffects.cpp windowsystem.cpp + windowinfo.cpp ) add_library(KF5WindowSystemKWaylandPlugin MODULE ${wayland_plugin_SRCS}) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/plugin.cpp new/kwayland-integration-5.5.2/src/windowsystem/plugin.cpp --- old/kwayland-integration-5.4.3/src/windowsystem/plugin.cpp 2015-11-05 13:39:23.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/plugin.cpp 2015-12-22 11:36:10.000000000 +0100 @@ -19,6 +19,8 @@ */ #include "plugin.h" #include "windowsystem.h" +#include "windoweffects.h" +#include "windowinfo.h" KWaylandPlugin::KWaylandPlugin(QObject *parent) : KWindowSystemPluginInterface(parent) @@ -29,7 +31,17 @@ { } +KWindowEffectsPrivate *KWaylandPlugin::createEffects() +{ + return new WindowEffects(); +} + KWindowSystemPrivate *KWaylandPlugin::createWindowSystem() { return new WindowSystem(); } + +KWindowInfoPrivate *KWaylandPlugin::createWindowInfo(WId window, NET::Properties properties, NET::Properties2 properties2) +{ + return new WindowInfo(window, properties, properties2); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/plugin.h new/kwayland-integration-5.5.2/src/windowsystem/plugin.h --- old/kwayland-integration-5.4.3/src/windowsystem/plugin.h 2015-11-05 13:39:23.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/plugin.h 2015-12-22 11:36:10.000000000 +0100 @@ -32,7 +32,9 @@ explicit KWaylandPlugin(QObject *parent = 0); virtual ~KWaylandPlugin(); + KWindowEffectsPrivate *createEffects() override; KWindowSystemPrivate *createWindowSystem() override; + KWindowInfoPrivate *createWindowInfo(WId window, NET::Properties properties, NET::Properties2 properties2) override; }; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/waylandintegration.cpp new/kwayland-integration-5.5.2/src/windowsystem/waylandintegration.cpp --- old/kwayland-integration-5.4.3/src/windowsystem/waylandintegration.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/waylandintegration.cpp 2015-12-22 11:36:10.000000000 +0100 @@ -0,0 +1,206 @@ +/* + * Copyright 2014 Martin Gräßlin <mgraess...@kde.org> + * Copyright 2015 Marco Martin <m...@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "waylandintegration.h" +#include "logging.h" + +#include <KWayland/Client/connection_thread.h> +#include <KWayland/Client/registry.h> +#include <KWayland/Client/compositor.h> +#include <KWayland/Client/plasmawindowmanagement.h> +#include <KWayland/Client/surface.h> +#include <KWayland/Client/blur.h> +#include <KWayland/Client/contrast.h> +#include <KWayland/Client/region.h> +#include <KWayland/Client/slide.h> +#include <KWayland/Client/shell.h> + +#include <KWindowSystem/KWindowSystem> + +class WaylandIntegrationSingleton +{ +public: + WaylandIntegration self; +}; + +Q_GLOBAL_STATIC(WaylandIntegrationSingleton, privateWaylandIntegrationSelf) + +WaylandIntegration::WaylandIntegration() + : QObject() +{ + setupKWaylandIntegration(); +} + +WaylandIntegration::~WaylandIntegration() +{} + +void WaylandIntegration::setupKWaylandIntegration() +{ + using namespace KWayland::Client; + m_waylandConnection = ConnectionThread::fromApplication(this); + if (!m_waylandConnection) { + qCWarning(KWAYLAND_KWS) << "Failed getting Wayland connection from QPA"; + return; + } + m_registry = new Registry(this); + m_registry->create(m_waylandConnection); + m_waylandCompositor = Compositor::fromApplication(this); + + m_registry->setup(); + m_waylandConnection->roundtrip(); +} + +WaylandIntegration *WaylandIntegration::self() +{ + return &privateWaylandIntegrationSelf()->self; +} + + +KWayland::Client::ConnectionThread *WaylandIntegration::waylandConnection() const +{ + return m_waylandConnection; +} + +KWayland::Client::BlurManager *WaylandIntegration::waylandBlurManager() +{ + if (!m_waylandBlurManager) { + const KWayland::Client::Registry::AnnouncedInterface wmInterface = m_registry->interface(KWayland::Client::Registry::Interface::Blur); + + if (wmInterface.name == 0) { + return nullptr; + } + + m_waylandBlurManager = m_registry->createBlurManager(wmInterface.name, wmInterface.version, this); + + connect(m_waylandBlurManager, &KWayland::Client::BlurManager::removed, this, + [this] () { + m_waylandBlurManager->deleteLater(); + m_waylandBlurManager = nullptr; + } + ); + } + + return m_waylandBlurManager; +} + +KWayland::Client::ContrastManager *WaylandIntegration::waylandContrastManager() +{ + if (!m_waylandContrastManager) { + const KWayland::Client::Registry::AnnouncedInterface wmInterface = m_registry->interface(KWayland::Client::Registry::Interface::Contrast); + + if (wmInterface.name == 0) { + return nullptr; + } + + m_waylandContrastManager = m_registry->createContrastManager(wmInterface.name, wmInterface.version, this); + + connect(m_waylandContrastManager, &KWayland::Client::ContrastManager::removed, this, + [this] () { + m_waylandContrastManager->deleteLater(); + m_waylandContrastManager = nullptr; + } + ); + } + + return m_waylandContrastManager; +} + +KWayland::Client::SlideManager *WaylandIntegration::waylandSlideManager() +{ + if (!m_waylandSlideManager) { + const KWayland::Client::Registry::AnnouncedInterface wmInterface = m_registry->interface(KWayland::Client::Registry::Interface::Slide); + + if (wmInterface.name == 0) { + return nullptr; + } + + m_waylandSlideManager = m_registry->createSlideManager(wmInterface.name, wmInterface.version, this); + + connect(m_waylandSlideManager, &KWayland::Client::SlideManager::removed, this, + [this] () { + m_waylandSlideManager->deleteLater(); + m_waylandSlideManager = nullptr; + } + ); + } + + return m_waylandSlideManager; +} + +KWayland::Client::Compositor *WaylandIntegration::waylandCompositor() const +{ + return m_waylandCompositor; +} + +KWayland::Client::PlasmaWindowManagement *WaylandIntegration::plasmaWindowManagement() +{ + using namespace KWayland::Client; + + if (!m_wm) { + const Registry::AnnouncedInterface wmInterface = m_registry->interface(Registry::Interface::PlasmaWindowManagement); + + if (wmInterface.name == 0) { + qCWarning(KWAYLAND_KWS) << "This compositor does not support the Plasma Window Management interface"; + return nullptr; + } + + m_wm = m_registry->createPlasmaWindowManagement(wmInterface.name, wmInterface.version, this); + connect(m_wm, &PlasmaWindowManagement::windowCreated, this, + [this] (PlasmaWindow *w) { + emit KWindowSystem::self()->windowAdded(w->internalId()); + emit KWindowSystem::self()->stackingOrderChanged(); + connect(w, &PlasmaWindow::unmapped, this, + [w] { + emit KWindowSystem::self()->windowRemoved(w->internalId()); + emit KWindowSystem::self()->stackingOrderChanged(); + } + ); + } + ); + connect(m_wm, &PlasmaWindowManagement::activeWindowChanged, this, + [this] { + if (PlasmaWindow *w = m_wm->activeWindow()) { + emit KWindowSystem::self()->activeWindowChanged(w->internalId()); + } else { + emit KWindowSystem::self()->activeWindowChanged(0); + } + } + ); + connect(m_wm, &PlasmaWindowManagement::showingDesktopChanged, KWindowSystem::self(), &KWindowSystem::showingDesktopChanged); + qCDebug(KWAYLAND_KWS) << "Plasma Window Management interface bound"; + } + + return m_wm; +} + +KWayland::Client::PlasmaShell *WaylandIntegration::waylandPlasmaShell() +{ + if (!m_waylandPlasmaShell) { + const KWayland::Client::Registry::AnnouncedInterface wmInterface = m_registry->interface(KWayland::Client::Registry::Interface::PlasmaShell); + + if (wmInterface.name == 0) { + return nullptr; + } + + m_waylandPlasmaShell = m_registry->createPlasmaShell(wmInterface.name, wmInterface.version, this); + } + return m_waylandPlasmaShell; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/waylandintegration.h new/kwayland-integration-5.5.2/src/windowsystem/waylandintegration.h --- old/kwayland-integration-5.4.3/src/windowsystem/waylandintegration.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/waylandintegration.h 2015-12-22 11:36:10.000000000 +0100 @@ -0,0 +1,69 @@ +/* + * Copyright 2014 Martin Gräßlin <mgraess...@kde.org> + * Copyright 2015 Marco Martin <m...@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ +#ifndef WAYLANDINTEGRATION_H +#define WAYLANDINTEGRATION_H +#include <KWindowSystem/private/kwindoweffects_p.h> + + +namespace KWayland +{ + namespace Client + { + class BlurManager; + class ContrastManager; + class Compositor; + class ConnectionThread; + class PlasmaWindowManagement; + class PlasmaShell; + class Registry; + class SlideManager; + } +} + +class WaylandIntegration : public QObject +{ +public: + explicit WaylandIntegration(); + ~WaylandIntegration(); + void setupKWaylandIntegration(); + + static WaylandIntegration *self(); + + KWayland::Client::ConnectionThread *waylandConnection() const; + KWayland::Client::BlurManager *waylandBlurManager(); + KWayland::Client::ContrastManager *waylandContrastManager(); + KWayland::Client::SlideManager *waylandSlideManager(); + KWayland::Client::Compositor *waylandCompositor() const; + KWayland::Client::PlasmaWindowManagement *plasmaWindowManagement(); + KWayland::Client::PlasmaShell *waylandPlasmaShell(); + +private: + KWayland::Client::ConnectionThread *m_waylandConnection = nullptr; + KWayland::Client::BlurManager *m_waylandBlurManager = nullptr; + KWayland::Client::ContrastManager *m_waylandContrastManager = nullptr; + KWayland::Client::SlideManager *m_waylandSlideManager = nullptr; + KWayland::Client::Compositor *m_waylandCompositor = nullptr; + KWayland::Client::PlasmaWindowManagement *m_wm = nullptr; + KWayland::Client::PlasmaShell *m_waylandPlasmaShell = nullptr; + KWayland::Client::Registry *m_registry = nullptr; +}; + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/windoweffects.cpp new/kwayland-integration-5.5.2/src/windowsystem/windoweffects.cpp --- old/kwayland-integration-5.4.3/src/windowsystem/windoweffects.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/windoweffects.cpp 2015-12-22 11:36:10.000000000 +0100 @@ -0,0 +1,176 @@ +/* + * Copyright 2014 Martin Gräßlin <mgraess...@kde.org> + * Copyright 2015 Marco Martin <m...@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "windoweffects.h" +#include "waylandintegration.h" + +#include <QDebug> + +#include <KWayland/Client/connection_thread.h> +#include <KWayland/Client/plasmawindowmanagement.h> +#include <KWayland/Client/registry.h> +#include <KWayland/Client/plasmashell.h> +#include <KWayland/Client/compositor.h> +#include <KWayland/Client/surface.h> +#include <KWayland/Client/blur.h> +#include <KWayland/Client/contrast.h> +#include <KWayland/Client/region.h> +#include <KWayland/Client/slide.h> + +WindowEffects::WindowEffects() + : QObject(), + KWindowEffectsPrivate() +{ +} + +WindowEffects::~WindowEffects() +{} + +bool WindowEffects::isEffectAvailable(KWindowEffects::Effect effect) +{ + switch (effect) { + case KWindowEffects::BackgroundContrast: + return WaylandIntegration::self()->waylandContrastManager() != nullptr; + case KWindowEffects::BlurBehind: + return WaylandIntegration::self()->waylandBlurManager() != nullptr; + default: + return false; + } +} + +void WindowEffects::slideWindow(WId id, KWindowEffects::SlideFromLocation location, int offset) +{ + if (!WaylandIntegration::self()->waylandSlideManager()) { + return; + } + KWayland::Client::Surface *surface = KWayland::Client::Surface::fromQtWinId(id); + if (surface) { + if (location != KWindowEffects::SlideFromLocation::NoEdge) { + auto slide = WaylandIntegration::self()->waylandSlideManager()->createSlide(surface, surface); + + KWayland::Client::Slide::Location convertedLoc; + switch (location) { + case KWindowEffects::SlideFromLocation::TopEdge: + convertedLoc = KWayland::Client::Slide::Location::Top; + break; + case KWindowEffects::SlideFromLocation::LeftEdge: + convertedLoc = KWayland::Client::Slide::Location::Left; + break; + case KWindowEffects::SlideFromLocation::RightEdge: + convertedLoc = KWayland::Client::Slide::Location::Right; + break; + case KWindowEffects::SlideFromLocation::BottomEdge: + default: + convertedLoc = KWayland::Client::Slide::Location::Bottom; + break; + } + + slide->setLocation(convertedLoc); + slide->setOffset(offset); + slide->commit(); + } else { + WaylandIntegration::self()->waylandSlideManager()->removeSlide(surface); + } + surface->commit(KWayland::Client::Surface::CommitFlag::None); + + WaylandIntegration::self()->waylandConnection()->flush(); + } +} + +void WindowEffects::slideWindow(QWidget *widget, KWindowEffects::SlideFromLocation location) +{ + slideWindow(widget->winId(), location, 0); +} + +QList<QSize> WindowEffects::windowSizes(const QList<WId> &ids) +{ + Q_UNUSED(ids) + QList<QSize> sizes; + return sizes; +} + +void WindowEffects::presentWindows(WId controller, const QList<WId> &ids) +{ + Q_UNUSED(controller) + Q_UNUSED(ids) +} + +void WindowEffects::presentWindows(WId controller, int desktop) +{ + Q_UNUSED(controller) + Q_UNUSED(desktop) +} + +void WindowEffects::highlightWindows(WId controller, const QList<WId> &ids) +{ + Q_UNUSED(controller) + Q_UNUSED(ids) +} + +void WindowEffects::enableBlurBehind(WId window, bool enable, const QRegion ®ion) +{ + if (!WaylandIntegration::self()->waylandBlurManager()) { + return; + } + KWayland::Client::Surface *surface = KWayland::Client::Surface::fromQtWinId(window); + if (surface) { + if (enable) { + auto blur = WaylandIntegration::self()->waylandBlurManager()->createBlur(surface, surface); + blur->setRegion(WaylandIntegration::self()->waylandCompositor()->createRegion(region, nullptr)); + blur->commit(); + } else { + WaylandIntegration::self()->waylandBlurManager()->removeBlur(surface); + } + surface->commit(KWayland::Client::Surface::CommitFlag::None); + + WaylandIntegration::self()->waylandConnection()->flush(); + } +} + +void WindowEffects::enableBackgroundContrast(WId 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); + if (surface) { + if (enable) { + auto backgroundContrast = WaylandIntegration::self()->waylandContrastManager()->createContrast(surface, surface); + backgroundContrast->setRegion(WaylandIntegration::self()->waylandCompositor()->createRegion(region, nullptr)); + backgroundContrast->setContrast(contrast); + backgroundContrast->setIntensity(intensity); + backgroundContrast->setSaturation(saturation); + backgroundContrast->commit(); + } else { + WaylandIntegration::self()->waylandContrastManager()->removeContrast(surface); + } + surface->commit(KWayland::Client::Surface::CommitFlag::None); + + WaylandIntegration::self()->waylandConnection()->flush(); + } +} + +void WindowEffects::markAsDashboard(WId window) +{ + Q_UNUSED(window) +} + + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/windoweffects.h new/kwayland-integration-5.5.2/src/windowsystem/windoweffects.h --- old/kwayland-integration-5.4.3/src/windowsystem/windoweffects.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/windoweffects.h 2015-12-22 11:36:10.000000000 +0100 @@ -0,0 +1,55 @@ +/* + * Copyright 2014 Martin Gräßlin <mgraess...@kde.org> + * Copyright 2015 Marco Martin <m...@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ +#ifndef WINDOWEFFECTS_H +#define WINDOWEFFECTS_H +#include <KWindowSystem/private/kwindoweffects_p.h> + + +namespace KWayland +{ + namespace Client + { + class BlurManager; + class ContrastManager; + class Compositor; + class ConnectionThread; + } +} + +class WindowEffects : public QObject, public KWindowEffectsPrivate +{ +public: + explicit WindowEffects(); + ~WindowEffects(); + + bool isEffectAvailable(KWindowEffects::Effect effect) override; + void slideWindow(WId id, KWindowEffects::SlideFromLocation location, int offset) override; + void slideWindow(QWidget *widget, KWindowEffects::SlideFromLocation location) override; + QList<QSize> windowSizes(const QList<WId> &ids) override; + 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 markAsDashboard(WId window) override; +}; + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/windowinfo.cpp new/kwayland-integration-5.5.2/src/windowsystem/windowinfo.cpp --- old/kwayland-integration-5.4.3/src/windowsystem/windowinfo.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/windowinfo.cpp 2015-12-22 11:36:10.000000000 +0100 @@ -0,0 +1,208 @@ +/* + This file is part of the KDE libraries + Copyright (C) 1999 Matthias Ettrich (ettr...@kde.org) + Copyright (C) 2007 Lubos Lunak (l.lu...@kde.org) + Copyright 2014 Martin Gräßlin <mgraess...@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include "windowinfo.h" +#include "kwindowsystem.h" +#include "waylandintegration.h" + +#include <config-kwindowsystem.h> + +#include <QRect> +#include <QGuiApplication> + +#include <KWayland/Client/plasmashell.h> +#include <KWayland/Client/surface.h> + + +WindowInfo::WindowInfo(WId window, NET::Properties properties, NET::Properties2 properties2) + : KWindowInfoPrivate(window, properties, properties2), + m_valid(false), + m_properties(properties), + m_properties2(properties2), + m_surface(KWayland::Client::Surface::fromQtWinId(window)), + m_plasmaShellSurface(KWayland::Client::PlasmaShellSurface::get(m_surface)) +{ + m_valid = m_surface != nullptr && m_surface->isValid(); +} + +WindowInfo::~WindowInfo() +{ +} + +bool WindowInfo::valid(bool withdrawn_is_valid) const +{ + Q_UNUSED(withdrawn_is_valid) + return m_valid; +} + +NET::States WindowInfo::state() const +{ + return 0; +} + +bool WindowInfo::isMinimized() const +{ + return false; +} + +NET::MappingState WindowInfo::mappingState() const +{ + return NET::Visible; +} + +NETExtendedStrut WindowInfo::extendedStrut() const +{ + return NETExtendedStrut(); +} + +NET::WindowType WindowInfo::windowType(NET::WindowTypes supported_types) const +{ + if (!m_plasmaShellSurface || !m_plasmaShellSurface->isValid()) { + return NET::Unknown; + } + + if (m_properties & NET::WMWindowType) { + switch (m_plasmaShellSurface->role()) { + case KWayland::Client::PlasmaShellSurface::Role::Normal: + if (supported_types & NET::NormalMask) { + return NET::Normal; + } + break; + case KWayland::Client::PlasmaShellSurface::Role::Desktop: + if (supported_types & NET::DesktopMask) { + return NET::Desktop; + } + break; + case KWayland::Client::PlasmaShellSurface::Role::Panel: + if (supported_types & NET::DockMask) { + return NET::Dock; + } + break; + case KWayland::Client::PlasmaShellSurface::Role::OnScreenDisplay: + if (supported_types & NET::OnScreenDisplayMask) { + return NET::OnScreenDisplay; + } + break; + default: + break; + } + } + + return NET::Unknown; +} + +QString WindowInfo::visibleName() const +{ + return QString(); +} + +QString WindowInfo::visibleNameWithState() const +{ + return QString(); +} + +QString WindowInfo::name() const +{ + return QString(); +} + +QString WindowInfo::visibleIconName() const +{ + return QString(); +} + +QString WindowInfo::visibleIconNameWithState() const +{ + return QString(); +} + +QString WindowInfo::iconName() const +{ + return QString(); +} + +bool WindowInfo::onAllDesktops() const +{ + return false; +} + +bool WindowInfo::isOnDesktop(int desktop) const +{ + Q_UNUSED(desktop) + return false; +} + +int WindowInfo::desktop() const +{ + return 0; +} + +QStringList WindowInfo::activities() const +{ + return QStringList(); +} + +QRect WindowInfo::geometry() const +{ + return QRect(); +} + +QRect WindowInfo::frameGeometry() const +{ + return QRect(); +} + +WId WindowInfo::transientFor() const +{ + return 0; +} + +WId WindowInfo::groupLeader() const +{ + return 0; +} + +QByteArray WindowInfo::windowClassClass() const +{ + return QByteArray(); +} + +QByteArray WindowInfo::windowClassName() const +{ + return QByteArray(); +} + +QByteArray WindowInfo::windowRole() const +{ + return QByteArray(); +} + +QByteArray WindowInfo::clientMachine() const +{ + return QByteArray(); +} + +bool WindowInfo::actionSupported(NET::Action action) const +{ + Q_UNUSED(action) + return false; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/windowinfo.h new/kwayland-integration-5.5.2/src/windowsystem/windowinfo.h --- old/kwayland-integration-5.4.3/src/windowsystem/windowinfo.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/windowinfo.h 2015-12-22 11:36:10.000000000 +0100 @@ -0,0 +1,77 @@ +/* + * Copyright 2014 Martin Gräßlin <mgraess...@kde.org> + * Copyright 2015 Marco Martin <m...@kde.org> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) version 3, or any + * later version accepted by the membership of KDE e.V. (or its + * successor approved by the membership of KDE e.V.), which shall + * act as a proxy defined in Section 6 of version 3 of the license. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see <http://www.gnu.org/licenses/>. + */ +#ifndef WINDOWINFO_H +#define WINDOWINFO_H + +#include <kwindowinfo.h> +#include <KWindowSystem/private/kwindowinfo_p.h> + + +namespace KWayland +{ + namespace Client + { + class Surface; + class PlasmaShellSurface; + } +} + +class WindowInfo : public KWindowInfoPrivate +{ +public: + WindowInfo(WId window, NET::Properties properties, NET::Properties2 properties2); + ~WindowInfo(); + + bool valid(bool withdrawn_is_valid) const override; + NET::States state() const override; + bool isMinimized() const override; + NET::MappingState mappingState() const override; + NETExtendedStrut extendedStrut() const override; + NET::WindowType windowType(NET::WindowTypes supported_types) const override; + QString visibleName() const override; + QString visibleNameWithState() const override; + QString name() const override; + QString visibleIconName() const override; + QString visibleIconNameWithState() const override; + QString iconName() const override; + bool onAllDesktops() const override; + bool isOnDesktop(int desktop) const override; + int desktop() const override; + QStringList activities() const override; + QRect geometry() const override; + QRect frameGeometry() const override; + WId transientFor() const override; + WId groupLeader() const override; + QByteArray windowClassClass() const override; + QByteArray windowClassName() const override; + QByteArray windowRole() const override; + QByteArray clientMachine() const override; + bool actionSupported(NET::Action action) const override; + +private: + bool m_valid; + NET::Properties m_properties; + NET::Properties2 m_properties2; + KWayland::Client::Surface *m_surface; + KWayland::Client::PlasmaShellSurface *m_plasmaShellSurface; +}; + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/windowsystem.cpp new/kwayland-integration-5.5.2/src/windowsystem/windowsystem.cpp --- old/kwayland-integration-5.4.3/src/windowsystem/windowsystem.cpp 2015-11-05 13:39:23.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/windowsystem.cpp 2015-12-22 11:36:10.000000000 +0100 @@ -18,6 +18,7 @@ * License along with this library. If not, see <http://www.gnu.org/licenses/>. */ #include "windowsystem.h" +#include "waylandintegration.h" #include "logging.h" #include <KWindowSystem/KWindowSystem> @@ -25,6 +26,8 @@ #include <KWayland/Client/connection_thread.h> #include <KWayland/Client/plasmawindowmanagement.h> #include <KWayland/Client/registry.h> +#include <KWayland/Client/plasmashell.h> +#include <KWayland/Client/surface.h> #include <QPixmap> #include <QPoint> @@ -38,66 +41,13 @@ { } -void WindowSystem::setupKWaylandIntegration() -{ - ConnectionThread *connection = ConnectionThread::fromApplication(this); - if (!connection) { - qCWarning(KWAYLAND_KWS) << "Failed getting Wayland connection from QPA"; - return; - } - Registry *registry = new Registry(this); - registry->create(connection); - connect(registry, &Registry::interfacesAnnounced, this, - [this] { - if (!m_wm) { - qCWarning(KWAYLAND_KWS) << "This compositor does not support the Plasma Window Management interface"; - } - } - ); - connect(registry, &Registry::plasmaWindowManagementAnnounced, this, - [this, registry] (quint32 name, quint32 version) { - m_wm = registry->createPlasmaWindowManagement(name, version, this); - connect(m_wm, &PlasmaWindowManagement::windowCreated, this, - [this] (PlasmaWindow *w) { - emit KWindowSystem::self()->windowAdded(w->internalId()); - emit KWindowSystem::self()->stackingOrderChanged(); - connect(w, &PlasmaWindow::unmapped, this, - [w] { - emit KWindowSystem::self()->windowRemoved(w->internalId()); - emit KWindowSystem::self()->stackingOrderChanged(); - } - ); - } - ); - connect(m_wm, &PlasmaWindowManagement::activeWindowChanged, this, - [this] { - if (PlasmaWindow *w = m_wm->activeWindow()) { - emit KWindowSystem::self()->activeWindowChanged(w->internalId()); - } else { - emit KWindowSystem::self()->activeWindowChanged(0); - } - } - ); - connect(m_wm, &PlasmaWindowManagement::showingDesktopChanged, KWindowSystem::self(), &KWindowSystem::showingDesktopChanged); - emit KWindowSystem::self()->compositingChanged(true); - emit KWindowSystem::self()->showingDesktopChanged(m_wm->isShowingDesktop()); - emit KWindowSystem::self()->stackingOrderChanged(); - if (PlasmaWindow *w = m_wm->activeWindow()) { - emit KWindowSystem::self()->activeWindowChanged(w->internalId()); - } - qCDebug(KWAYLAND_KWS) << "Plasma Window Management interface bound"; - } - ); - - registry->setup(); -} - KWayland::Client::PlasmaWindow *WindowSystem::window(WId wid) const { - if (!m_wm) { + if (!WaylandIntegration::self()->plasmaWindowManagement()) { return nullptr; } - const auto &windows = m_wm->windows(); + + const auto &windows = WaylandIntegration::self()->plasmaWindowManagement()->windows(); auto it = std::find_if(windows.begin(), windows.end(), [wid] (PlasmaWindow *w) { return w->internalId() == wid; } ); if (it != windows.end()) { return *it; @@ -123,8 +73,9 @@ WId WindowSystem::activeWindow() { - if (m_wm && m_wm->activeWindow()) { - return m_wm->activeWindow()->internalId(); + KWayland::Client::PlasmaWindowManagement *wm = WaylandIntegration::self()->plasmaWindowManagement(); + if (wm && wm->activeWindow()) { + return wm->activeWindow()->internalId(); } return 0; } @@ -330,30 +281,164 @@ void WindowSystem::setShowingDesktop(bool showing) { - if (m_wm) { - m_wm->setShowingDesktop(showing); + if (!WaylandIntegration::self()->plasmaWindowManagement()) { + return; } + WaylandIntegration::self()->plasmaWindowManagement()->setShowingDesktop(showing); } void WindowSystem::clearState(WId win, NET::States state) { - Q_UNUSED(win) - Q_UNUSED(state) - qCDebug(KWAYLAND_KWS) << "This plugin does not support changing window states"; + Surface *s = Surface::fromQtWinId(win); + if (!s) { + return; + } + + KWayland::Client::PlasmaShellSurface *plasmaShellSurface = 0; + + if (state & NET::SkipTaskbar) { + if (!WaylandIntegration::self()->waylandPlasmaShell()) { + return; + } + plasmaShellSurface = PlasmaShellSurface::get(s); + if (!plasmaShellSurface) { + plasmaShellSurface = WaylandIntegration::self()->waylandPlasmaShell()->createSurface(s, this); + } + if (!plasmaShellSurface) { + return; + } + } + + if (state & NET::SkipTaskbar) { + plasmaShellSurface->setSkipTaskbar(false); + } + + if (state & NET::Max) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Max window state"; + } + if (state & NET::FullScreen) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing FullScreen window state"; + } + if (state & NET::Modal) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Modal window state"; + } + if (state & NET::Sticky) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Sticky window state"; + } + if (state & NET::Shaded) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Shaded window state"; + } + if (state & NET::KeepAbove) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing KeepAbove window state"; + } + if (state & NET::StaysOnTop) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing StaysOnTop window state"; + } + if (state & NET::SkipPager) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing SkipPager window state"; + } + if (state & NET::Hidden) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Hidden window state"; + } + if (state & NET::KeepBelow) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing KeepBelow window state"; + } + if (state & NET::DemandsAttention) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing DemandsAttention window state"; + } } void WindowSystem::setState(WId win, NET::States state) { - Q_UNUSED(win) - Q_UNUSED(state) - qCDebug(KWAYLAND_KWS) << "This plugin does not support changing window states"; + Surface *s = Surface::fromQtWinId(win); + if (!s) { + return; + } + + KWayland::Client::PlasmaShellSurface *plasmaShellSurface = 0; + + if (state & NET::SkipTaskbar) { + if (!WaylandIntegration::self()->waylandPlasmaShell()) { + return; + } + plasmaShellSurface = PlasmaShellSurface::get(s); + if (!plasmaShellSurface) { + plasmaShellSurface = WaylandIntegration::self()->waylandPlasmaShell()->createSurface(s, this); + } + if (!plasmaShellSurface) { + return; + } + } + + if (state & NET::SkipTaskbar) { + plasmaShellSurface->setSkipTaskbar(true); + } + + if (state & NET::Max) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Max window state"; + } + if (state & NET::FullScreen) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing FullScreen window state"; + } + if (state & NET::Modal) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Modal window state"; + } + if (state & NET::Sticky) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Sticky window state"; + } + if (state & NET::Shaded) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Shaded window state"; + } + if (state & NET::KeepAbove) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing KeepAbove window state"; + } + if (state & NET::StaysOnTop) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing StaysOnTop window state"; + } + if (state & NET::SkipPager) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing SkipPager window state"; + } + if (state & NET::Hidden) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing Hidden window state"; + } + if (state & NET::KeepBelow) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing KeepBelow window state"; + } + if (state & NET::DemandsAttention) { + qCDebug(KWAYLAND_KWS) << "This plugin does not support changing DemandsAttention window state"; + } } void WindowSystem::setType(WId win, NET::WindowType windowType) { - Q_UNUSED(win) - Q_UNUSED(windowType) - qCDebug(KWAYLAND_KWS) << "This plugin does not support changing window types"; + if (!WaylandIntegration::self()->waylandPlasmaShell()) { + return; + } + KWayland::Client::PlasmaShellSurface::Role role; + + switch (windowType) { + case NET::Normal: + role = KWayland::Client::PlasmaShellSurface::Role::Normal; + break; + case NET::Desktop: + role = KWayland::Client::PlasmaShellSurface::Role::Desktop; + break; + case NET::Dock: + role = KWayland::Client::PlasmaShellSurface::Role::Panel; + break; + case NET::OnScreenDisplay: + role = KWayland::Client::PlasmaShellSurface::Role::OnScreenDisplay; + break; + default: + return; + } + Surface *s = Surface::fromQtWinId(win); + if (!s) { + return; + } + KWayland::Client::PlasmaShellSurface *shellSurface = WaylandIntegration::self()->waylandPlasmaShell()->createSurface(s, this); + + shellSurface->setRole(role); } void WindowSystem::setUserTime(WId win, long int time) @@ -365,23 +450,24 @@ bool WindowSystem::showingDesktop() { - if (m_wm) { - return m_wm->isShowingDesktop(); + if (!WaylandIntegration::self()->plasmaWindowManagement()) { + return false; } - return false; + return WaylandIntegration::self()->plasmaWindowManagement()->isShowingDesktop(); } QList< WId > WindowSystem::stackingOrder() { - if (m_wm) { - const auto &windows = m_wm->windows(); - QList<WId> ret; - for (auto w : windows) { - ret << w->internalId(); - } - return ret; + if (!WaylandIntegration::self()->plasmaWindowManagement()) { + return QList<WId>(); + } + + const auto &windows = WaylandIntegration::self()->plasmaWindowManagement()->windows(); + QList<WId> ret; + for (auto w : windows) { + ret << w->internalId(); } - return QList<WId>(); + return ret; } WId WindowSystem::transientFor(WId window) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwayland-integration-5.4.3/src/windowsystem/windowsystem.h new/kwayland-integration-5.5.2/src/windowsystem/windowsystem.h --- old/kwayland-integration-5.4.3/src/windowsystem/windowsystem.h 2015-11-05 13:39:23.000000000 +0100 +++ new/kwayland-integration-5.5.2/src/windowsystem/windowsystem.h 2015-12-22 11:36:10.000000000 +0100 @@ -30,6 +30,7 @@ { class PlasmaWindow; class PlasmaWindowManagement; +class PlasmaShell; } } @@ -92,7 +93,7 @@ void setupKWaylandIntegration(); KWayland::Client::PlasmaWindow *window(WId window) const; - KWayland::Client::PlasmaWindowManagement *m_wm = nullptr; + KWayland::Client::PlasmaShell *m_waylandPlasmaShell = nullptr; }; #endif