diff --git a/src/wayland/CMakeLists.txt b/src/wayland/CMakeLists.txt
index 73d6c83b81..25ecf2b6fc 100644
--- a/src/wayland/CMakeLists.txt
+++ b/src/wayland/CMakeLists.txt
@@ -20,6 +20,7 @@ set(SERVER_LIB_SRCS
region_interface.cpp
resource.cpp
seat_interface.cpp
+ slide_interface.cpp
shadow_interface.cpp
blur_interface.cpp
contrast_interface.cpp
@@ -69,6 +70,11 @@ ecm_add_wayland_server_protocol(SERVER_LIB_SRCS
BASENAME contrast
)
+ecm_add_wayland_server_protocol(SERVER_LIB_SRCS
+ PROTOCOL ${KWAYLAND_SOURCE_DIR}/src/client/protocols/slide.xml
+ BASENAME slide
+)
+
add_library(KF5WaylandServer ${SERVER_LIB_SRCS})
generate_export_header(KF5WaylandServer
BASE_NAME
diff --git a/src/wayland/autotests/client/CMakeLists.txt b/src/wayland/autotests/client/CMakeLists.txt
index f6163cb74a..1556c4765a 100644
--- a/src/wayland/autotests/client/CMakeLists.txt
+++ b/src/wayland/autotests/client/CMakeLists.txt
@@ -157,6 +157,17 @@ target_link_libraries( testContrast Qt5::Test Qt5::Gui KF5::WaylandClient KF5::W
add_test(kwayland-testContrast testContrast)
ecm_mark_as_test(testContrast)
+########################################################
+# Test Slide
+########################################################
+set( testSlide_SRCS
+ test_wayland_slide.cpp
+ )
+add_executable(testSlide ${testSlide_SRCS})
+target_link_libraries( testSlide Qt5::Test Qt5::Gui KF5::WaylandClient KF5::WaylandServer Wayland::Client)
+add_test(kwayland-testSlide testSlide)
+ecm_mark_as_test(testSlide)
+
########################################################
# Test DataSource
########################################################
diff --git a/src/wayland/autotests/client/test_wayland_registry.cpp b/src/wayland/autotests/client/test_wayland_registry.cpp
index 53885d5907..e0d84100e3 100644
--- a/src/wayland/autotests/client/test_wayland_registry.cpp
+++ b/src/wayland/autotests/client/test_wayland_registry.cpp
@@ -36,6 +36,7 @@ License along with this library. If not, see .
#include "../../src/server/shell_interface.h"
#include "../../src/server/blur_interface.h"
#include "../../src/server/contrast_interface.h"
+#include "../../src/server/slide_interface.h"
#include "../../src/server/subcompositor_interface.h"
// Wayland
#include
@@ -59,6 +60,7 @@ private Q_SLOTS:
void testBindDataDeviceManager();
void testBindBlurManager();
void testBindContrastManager();
+ void testBindSlideManager();
void testGlobalSync();
void testGlobalSyncThreaded();
void testRemoval();
@@ -109,6 +111,7 @@ void TestWaylandRegistry::init()
m_dataDeviceManager->create();
m_display->createBlurManager(this)->create();
m_display->createContrastManager(this)->create();
+ m_display->createSlideManager(this)->create();
}
void TestWaylandRegistry::cleanup()
@@ -221,6 +224,11 @@ void TestWaylandRegistry::testBindContrastManager()
TEST_BIND(KWayland::Client::Registry::Interface::Contrast, SIGNAL(contrastAnnounced(quint32,quint32)), bindContrastManager, free)
}
+void TestWaylandRegistry::testBindSlideManager()
+{
+ TEST_BIND(KWayland::Client::Registry::Interface::Slide, SIGNAL(slideAnnounced(quint32,quint32)), bindSlideManager, free)
+}
+
#undef TEST_BIND
void TestWaylandRegistry::testRemoval()
diff --git a/src/wayland/autotests/client/test_wayland_slide.cpp b/src/wayland/autotests/client/test_wayland_slide.cpp
new file mode 100644
index 0000000000..e3d9f06b55
--- /dev/null
+++ b/src/wayland/autotests/client/test_wayland_slide.cpp
@@ -0,0 +1,171 @@
+/********************************************************************
+Copyright 2014 Martin Gräßlin
+
+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 .
+*********************************************************************/
+// Qt
+#include
+// KWin
+#include "../../src/client/compositor.h"
+#include "../../src/client/connection_thread.h"
+#include "../../src/client/event_queue.h"
+#include "../../src/client/region.h"
+#include "../../src/client/registry.h"
+#include "../../src/client/surface.h"
+#include "../../src/client/slide.h"
+#include "../../src/server/display.h"
+#include "../../src/server/compositor_interface.h"
+#include "../../src/server/region_interface.h"
+#include "../../src/server/slide_interface.h"
+
+class TestSlide : public QObject
+{
+ Q_OBJECT
+public:
+ explicit TestSlide(QObject *parent = nullptr);
+private Q_SLOTS:
+ void init();
+ void cleanup();
+
+ void testCreate();
+
+private:
+ KWayland::Server::Display *m_display;
+ KWayland::Server::CompositorInterface *m_compositorInterface;
+ KWayland::Server::SlideManagerInterface *m_slideManagerInterface;
+ KWayland::Client::ConnectionThread *m_connection;
+ KWayland::Client::Compositor *m_compositor;
+ KWayland::Client::SlideManager *m_slideManager;
+ KWayland::Client::EventQueue *m_queue;
+ QThread *m_thread;
+ KWayland::Client::Registry m_registry;
+};
+
+static const QString s_socketName = QStringLiteral("kwayland-test-wayland-slide-0");
+
+TestSlide::TestSlide(QObject *parent)
+ : QObject(parent)
+ , m_display(nullptr)
+ , m_compositorInterface(nullptr)
+ , m_connection(nullptr)
+ , m_compositor(nullptr)
+ , m_queue(nullptr)
+ , m_thread(nullptr)
+{
+}
+
+void TestSlide::init()
+{
+ using namespace KWayland::Server;
+ delete m_display;
+ m_display = new Display(this);
+ m_display->setSocketName(s_socketName);
+ m_display->start();
+ QVERIFY(m_display->isRunning());
+
+ // setup connection
+ m_connection = new KWayland::Client::ConnectionThread;
+ QSignalSpy connectedSpy(m_connection, SIGNAL(connected()));
+ m_connection->setSocketName(s_socketName);
+
+ m_thread = new QThread(this);
+ m_connection->moveToThread(m_thread);
+ m_thread->start();
+
+ m_connection->initConnection();
+ QVERIFY(connectedSpy.wait());
+
+ m_queue = new KWayland::Client::EventQueue(this);
+ QVERIFY(!m_queue->isValid());
+ m_queue->setup(m_connection);
+ QVERIFY(m_queue->isValid());
+
+ QSignalSpy compositorSpy(&m_registry, SIGNAL(compositorAnnounced(quint32,quint32)));
+ QVERIFY(compositorSpy.isValid());
+
+ QSignalSpy slideSpy(&m_registry, SIGNAL(slideAnnounced(quint32,quint32)));
+ QVERIFY(slideSpy.isValid());
+
+ QVERIFY(!m_registry.eventQueue());
+ m_registry.setEventQueue(m_queue);
+ QCOMPARE(m_registry.eventQueue(), m_queue);
+ m_registry.create(m_connection->display());
+ QVERIFY(m_registry.isValid());
+ m_registry.setup();
+
+ m_compositorInterface = m_display->createCompositor(m_display);
+ m_compositorInterface->create();
+ QVERIFY(m_compositorInterface->isValid());
+
+ QVERIFY(compositorSpy.wait());
+ m_compositor = m_registry.createCompositor(compositorSpy.first().first().value(), compositorSpy.first().last().value(), this);
+
+ m_slideManagerInterface = m_display->createSlideManager(m_display);
+ m_slideManagerInterface->create();
+ QVERIFY(m_slideManagerInterface->isValid());
+
+ QVERIFY(slideSpy.wait());
+ m_slideManager = m_registry.createSlideManager(slideSpy.first().first().value(), slideSpy.first().last().value(), this);
+}
+
+void TestSlide::cleanup()
+{
+ if (m_compositor) {
+ delete m_compositor;
+ m_compositor = nullptr;
+ }
+ if (m_queue) {
+ delete m_queue;
+ m_queue = nullptr;
+ }
+ if (m_thread) {
+ m_thread->quit();
+ m_thread->wait();
+ delete m_thread;
+ m_thread = nullptr;
+ }
+ delete m_connection;
+ m_connection = nullptr;
+
+ delete m_display;
+ m_display = nullptr;
+}
+
+void TestSlide::testCreate()
+{
+ QSignalSpy serverSurfaceCreated(m_compositorInterface, SIGNAL(surfaceCreated(KWayland::Server::SurfaceInterface*)));
+ QVERIFY(serverSurfaceCreated.isValid());
+
+ QScopedPointer surface(m_compositor->createSurface());
+ QVERIFY(serverSurfaceCreated.wait());
+
+ auto serverSurface = serverSurfaceCreated.first().first().value();
+ QSignalSpy slideChanged(serverSurface, SIGNAL(slideChanged()));
+
+ auto slide = m_slideManager->createSlide(surface.data(), surface.data());
+ slide->setLocation(KWayland::Client::Slide::Location::Top);
+ slide->setOffset(15);
+ slide->commit();
+ surface->commit(KWayland::Client::Surface::CommitFlag::None);
+
+ QVERIFY(slideChanged.wait());
+ QCOMPARE(serverSurface->slideOnShowHide()->location(), KWayland::Server::SlideInterface::Location::Top);
+ QCOMPARE(serverSurface->slideOnShowHide()->offset(), 15);
+}
+
+QTEST_MAIN(TestSlide)
+#include "test_wayland_slide.moc"
diff --git a/src/wayland/display.cpp b/src/wayland/display.cpp
index cfcc1fcede..c7cfa0ad2c 100644
--- a/src/wayland/display.cpp
+++ b/src/wayland/display.cpp
@@ -31,6 +31,7 @@ License along with this library. If not, see .
#include "shadow_interface.h"
#include "blur_interface.h"
#include "contrast_interface.h"
+#include "slide_interface.h"
#include "shell_interface.h"
#include "subcompositor_interface.h"
@@ -287,6 +288,13 @@ ContrastManagerInterface *Display::createContrastManager(QObject *parent)
return b;
}
+SlideManagerInterface *Display::createSlideManager(QObject *parent)
+{
+ auto b = new SlideManagerInterface(this, parent);
+ connect(this, &Display::aboutToTerminate, b, [this, b] { delete b; });
+ return b;
+}
+
void Display::createShm()
{
Q_ASSERT(d->display);
diff --git a/src/wayland/display.h b/src/wayland/display.h
index fa4f865c5a..fc885a5dbf 100644
--- a/src/wayland/display.h
+++ b/src/wayland/display.h
@@ -48,6 +48,7 @@ class SeatInterface;
class ShadowManagerInterface;
class BlurManagerInterface;
class ContrastManagerInterface;
+class SlideManagerInterface;
class ShellInterface;
class SubCompositorInterface;
@@ -135,6 +136,7 @@ public:
ShadowManagerInterface *createShadowManager(QObject *parent = nullptr);
BlurManagerInterface *createBlurManager(QObject *parent = nullptr);
ContrastManagerInterface *createContrastManager(QObject *parent = nullptr);
+ SlideManagerInterface *createSlideManager(QObject *parent = nullptr);
/**
* Gets the ClientConnection for the given @p client.
diff --git a/src/wayland/slide_interface.cpp b/src/wayland/slide_interface.cpp
new file mode 100644
index 0000000000..4cf9581c3f
--- /dev/null
+++ b/src/wayland/slide_interface.cpp
@@ -0,0 +1,232 @@
+/****************************************************************************
+Copyright 2015 Marco Martin
+
+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 .
+****************************************************************************/
+#include "slide_interface.h"
+#include "display.h"
+#include "global_p.h"
+#include "surface_interface.h"
+#include "resource_p.h"
+#include "surface_interface_p.h"
+
+#include
+#include
+
+namespace KWayland
+{
+namespace Server
+{
+
+class SlideManagerInterface::Private : public Global::Private
+{
+public:
+ Private(SlideManagerInterface *q, Display *d);
+
+private:
+ void bind(wl_client *client, uint32_t version, uint32_t id) override;
+ void createSlide(wl_client *client, wl_resource *resource, uint32_t id, wl_resource *surface);
+
+ static void unbind(wl_resource *resource);
+ static Private *cast(wl_resource *r) {
+ return reinterpret_cast(wl_resource_get_user_data(r));
+ }
+
+ static void createCallback(wl_client *client, wl_resource *resource, uint32_t id, wl_resource * surface);
+ static void unsetCallback(wl_client *client, wl_resource *resource, wl_resource * surface);
+
+ SlideManagerInterface *q;
+ static const struct org_kde_kwin_slide_manager_interface s_interface;
+ //initializing here doesn't link
+ static const quint32 s_version;
+};
+
+const quint32 SlideManagerInterface::Private::s_version = 1;
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+const struct org_kde_kwin_slide_manager_interface SlideManagerInterface::Private::s_interface = {
+ createCallback,
+ unsetCallback
+};
+#endif
+
+void SlideManagerInterface::Private::createCallback(wl_client *client, wl_resource *resource, uint32_t id, wl_resource * surface)
+{
+ cast(resource)->createSlide(client, resource, id, surface);
+}
+
+void SlideManagerInterface::Private::createSlide(wl_client *client, wl_resource *resource, uint32_t id, wl_resource * surface)
+{
+ SurfaceInterface *s = SurfaceInterface::get(surface);
+ if (!s) {
+ return;
+ }
+
+ SlideInterface *slide = new SlideInterface(q, resource);
+ slide->create(display->getConnection(client), wl_resource_get_version(resource), id);
+ if (!slide->resource()) {
+ wl_resource_post_no_memory(resource);
+ delete slide;
+ return;
+ }
+ QObject::connect(s, &QObject::destroyed, slide,
+ [slide] {
+ if (slide->resource()) {
+ wl_resource_destroy(slide->resource());
+ delete slide;
+ }
+ }
+ );
+ s->d_func()->setSlide(QPointer(slide));
+}
+
+void SlideManagerInterface::Private::unsetCallback(wl_client *client, wl_resource *resource, wl_resource * surface)
+{
+ // TODO: implement
+}
+
+SlideManagerInterface::Private::Private(SlideManagerInterface *q, Display *d)
+ : Global::Private(d, &org_kde_kwin_slide_manager_interface, s_version)
+ , q(q)
+{
+}
+
+void SlideManagerInterface::Private::bind(wl_client *client, uint32_t version, uint32_t id)
+{
+ auto c = display->getConnection(client);
+ wl_resource *resource = c->createResource(&org_kde_kwin_slide_manager_interface, qMin(version, s_version), id);
+ if (!resource) {
+ wl_client_post_no_memory(client);
+ return;
+ }
+ wl_resource_set_implementation(resource, &s_interface, this, unbind);
+ // TODO: should we track?
+}
+
+void SlideManagerInterface::Private::unbind(wl_resource *resource)
+{
+ Q_UNUSED(resource)
+ // TODO: implement?
+}
+
+SlideManagerInterface::SlideManagerInterface(Display *display, QObject *parent)
+ : Global(new Private(this, display), parent)
+{
+}
+
+SlideManagerInterface::~SlideManagerInterface() = default;
+
+class SlideInterface::Private : public Resource::Private
+{
+public:
+ Private(SlideInterface *q, SlideManagerInterface *c, wl_resource *parentResource);
+ ~Private();
+
+ SlideInterface::Location pendingLocation;
+ SlideInterface::Location currentLocation;
+ uint32_t pendingOffset;
+ uint32_t currentOffset;
+
+private:
+ static void commitCallback(wl_client *client, wl_resource *resource);
+ static void setLocationCallback(wl_client *client, wl_resource *resource, uint32_t location);
+ static void setOffsetCallback(wl_client *client, wl_resource *resource, int32_t offset);
+ static void releaseCallback(wl_client *client, wl_resource *resource);
+
+ SlideInterface *q_func() {
+ return reinterpret_cast(q);
+ }
+
+ static const struct org_kde_kwin_slide_interface s_interface;
+};
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+const struct org_kde_kwin_slide_interface SlideInterface::Private::s_interface = {
+ commitCallback,
+ setLocationCallback,
+ setOffsetCallback,
+ releaseCallback
+};
+#endif
+
+void SlideInterface::Private::commitCallback(wl_client *client, wl_resource *resource)
+{
+ Q_UNUSED(client)
+ Private *p = cast(resource);
+ p->currentLocation = p->pendingLocation;
+ p->currentOffset = p->pendingOffset;
+}
+
+void SlideInterface::Private::setLocationCallback(wl_client *client, wl_resource *resource, uint32_t location)
+{
+ Q_UNUSED(client)
+ Private *p = cast(resource);
+ p->pendingLocation = (SlideInterface::Location)location;
+}
+
+void SlideInterface::Private::setOffsetCallback(wl_client *client, wl_resource *resource, int32_t offset)
+{
+ Private *p = cast(resource);
+ p->pendingOffset = offset;
+}
+
+void SlideInterface::Private::releaseCallback(wl_client *client, wl_resource *resource)
+{
+ // TODO: implement
+}
+
+SlideInterface::Private::Private(SlideInterface *q, SlideManagerInterface *c, wl_resource *parentResource)
+ : Resource::Private(q, c, parentResource, &org_kde_kwin_slide_interface, &s_interface)
+{
+}
+
+SlideInterface::Private::~Private()
+{
+ if (resource) {
+ wl_resource_destroy(resource);
+ resource = nullptr;
+ }
+}
+
+SlideInterface::SlideInterface(SlideManagerInterface *parent, wl_resource *parentResource)
+ : Resource(new Private(this, parent, parentResource))
+{
+}
+
+SlideInterface::~SlideInterface() = default;
+
+
+SlideInterface::Location SlideInterface::location() const
+{
+ Q_D();
+ return d->currentLocation;
+}
+
+qint32 SlideInterface::offset() const
+{
+ Q_D();
+ return d->currentOffset;
+}
+
+SlideInterface::Private *SlideInterface::d_func() const
+{
+ return reinterpret_cast(d.data());
+}
+
+}
+}
+
diff --git a/src/wayland/slide_interface.h b/src/wayland/slide_interface.h
new file mode 100644
index 0000000000..ee06c0055d
--- /dev/null
+++ b/src/wayland/slide_interface.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+Copyright 2015 Marco Martin
+
+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 .
+****************************************************************************/
+#ifndef KWAYLAND_SERVER_SLIDE_H
+#define KWAYLAND_SERVER_SLIDE_H
+
+#include "global.h"
+#include "resource.h"
+
+#include
+
+namespace KWayland
+{
+namespace Server
+{
+
+class Display;
+
+class KWAYLANDSERVER_EXPORT SlideManagerInterface : public Global
+{
+ Q_OBJECT
+public:
+ virtual ~SlideManagerInterface();
+
+private:
+ explicit SlideManagerInterface(Display *display, QObject *parent = nullptr);
+ friend class Display;
+ class Private;
+};
+
+class KWAYLANDSERVER_EXPORT SlideInterface : public Resource
+{
+ Q_OBJECT
+public:
+ enum Location {
+ Left = 0, /** Slide from the left edge of the screen */
+ Top, /** Slide from the top edge of the screen */
+ Right, /** Slide from the bottom edge of the screen */
+ Bottom /** Slide from the bottom edge of the screen */
+ };
+
+ virtual ~SlideInterface();
+
+ /**
+ * @returns the location the window will be slided from
+ */
+ Location location() const;
+
+ /**
+ * @returns the offset from the screen edge the window will
+ * be slided from
+ */
+ qint32 offset() const;
+
+private:
+ explicit SlideInterface(SlideManagerInterface *parent, wl_resource *parentResource);
+ friend class SlideManagerInterface;
+
+ class Private;
+ Private *d_func() const;
+};
+
+
+}
+}
+
+#endif
diff --git a/src/wayland/surface_interface.cpp b/src/wayland/surface_interface.cpp
index 5876646272..0bc9aa5cdf 100644
--- a/src/wayland/surface_interface.cpp
+++ b/src/wayland/surface_interface.cpp
@@ -136,6 +136,12 @@ void SurfaceInterface::Private::setBlur(const QPointer &blur)
pending.blurIsSet = true;
}
+void SurfaceInterface::Private::setSlide(const QPointer &slide)
+{
+ pending.slide = slide;
+ pending.slideIsSet = true;
+}
+
void SurfaceInterface::Private::setContrast(const QPointer &contrast)
{
pending.contrast = contrast;
@@ -202,6 +208,7 @@ void SurfaceInterface::Private::commit()
const bool shadowChanged = pending.shadowIsSet;
const bool blurChanged = pending.blurIsSet;
const bool contrastChanged = pending.contrastIsSet;
+ const bool slideChanged = pending.slideIsSet;
bool sizeChanged = false;
auto buffer = current.buffer;
if (bufferChanged) {
@@ -231,6 +238,10 @@ void SurfaceInterface::Private::commit()
if (contrastChanged) {
contrast = pending.contrast;
}
+ auto slide = current.slide;
+ if (slideChanged) {
+ slide = pending.slide;
+ }
QList callbacks = current.callbacks;
callbacks.append(pending.callbacks);
// copy values
@@ -240,6 +251,7 @@ void SurfaceInterface::Private::commit()
current.shadow = shadow;
current.blur = blur;
current.contrast = contrast;
+ current.slide = slide;
pending = State{};
pending.children = current.children;
pending.input = current.input;
@@ -287,6 +299,9 @@ void SurfaceInterface::Private::commit()
if (contrastChanged) {
emit q->contrastChanged();
}
+ if (slideChanged) {
+ emit q->slideOnShowHideChanged();
+ }
}
void SurfaceInterface::Private::damage(const QRect &rect)
@@ -524,6 +539,12 @@ QPointer< ContrastInterface > SurfaceInterface::contrast() const
return d->current.contrast;
}
+QPointer< SlideInterface > SurfaceInterface::slideOnShowHide() const
+{
+ Q_D();
+ return d->current.slide;
+}
+
SurfaceInterface::Private *SurfaceInterface::d_func() const
{
return reinterpret_cast(d.data());
diff --git a/src/wayland/surface_interface.h b/src/wayland/surface_interface.h
index 25dece0b2f..55d8b9456c 100644
--- a/src/wayland/surface_interface.h
+++ b/src/wayland/surface_interface.h
@@ -41,6 +41,7 @@ class ContrastManagerInterface;
class CompositorInterface;
class ShadowManagerInterface;
class ShadowInterface;
+class SlideInterface;
class SubSurfaceInterface;
class KWAYLANDSERVER_EXPORT SurfaceInterface : public Resource
@@ -92,6 +93,12 @@ public:
**/
QPointer blur() const;
+ /**
+ * @returns The Slide for this Surface.
+ * @since 5.5
+ **/
+ QPointer slideOnShowHide() const;
+
/**
* @returns The Contrast for this Surface.
* @since 5.5
@@ -127,6 +134,10 @@ Q_SIGNALS:
* @since 5.5
**/
void blurChanged();
+ /**
+ * @since 5.5
+ **/
+ void slideOnShowHideChanged();
/**
* @since 5.5
**/
@@ -137,6 +148,7 @@ private:
friend class SubSurfaceInterface;
friend class ShadowManagerInterface;
friend class BlurManagerInterface;
+ friend class SlideManagerInterface;
friend class ContrastManagerInterface;
explicit SurfaceInterface(CompositorInterface *parent, wl_resource *parentResource);
diff --git a/src/wayland/surface_interface_p.h b/src/wayland/surface_interface_p.h
index 2af147cbc0..aca89d587f 100644
--- a/src/wayland/surface_interface_p.h
+++ b/src/wayland/surface_interface_p.h
@@ -43,6 +43,7 @@ public:
bool shadowIsSet = false;
bool blurIsSet = false;
bool contrastIsSet = false;
+ bool slideIsSet = false;
bool inputIsInfinite = true;
qint32 scale = 1;
OutputInterface::Transform transform = OutputInterface::Transform::Normal;
@@ -54,6 +55,7 @@ public:
QPointer shadow;
QPointer blur;
QPointer contrast;
+ QPointer slide;
};
Private(SurfaceInterface *q, CompositorInterface *c, wl_resource *parentResource);
~Private();
@@ -67,6 +69,7 @@ public:
void setShadow(const QPointer &shadow);
void setBlur(const QPointer &blur);
void setContrast(const QPointer &contrast);
+ void setSlide(const QPointer &slide);
State current;
State pending;
diff --git a/src/wayland/tools/mapping.txt b/src/wayland/tools/mapping.txt
index 4c0e0e040f..d6a4a4468e 100644
--- a/src/wayland/tools/mapping.txt
+++ b/src/wayland/tools/mapping.txt
@@ -22,6 +22,10 @@ wl_touch;Touch
_wl_fullscreen_shell;FullscreenShell
org_kde_kwin_blur;Blur
org_kde_kwin_blur_manager;BlurManager
+org_kde_kwin_contrast;Contrast
+org_kde_kwin_contrast_manager;ContrastManager
+org_kde_kwin_slide;Slide
+org_kde_kwin_slide_manager;SlideManager
org_kde_kwin_fake_input;FakeInput
org_kde_kwin_idle;Idle
org_kde_kwin_idle_timeout;IdleTimeout