summaryrefslogtreecommitdiffstats
path: root/examples/wayland/custom-extension/compositor
diff options
context:
space:
mode:
Diffstat (limited to 'examples/wayland/custom-extension/compositor')
-rw-r--r--examples/wayland/custom-extension/compositor/customextension.cpp36
-rw-r--r--examples/wayland/custom-extension/compositor/customextension.h61
-rw-r--r--examples/wayland/custom-extension/compositor/qml/main.qml37
3 files changed, 134 insertions, 0 deletions
diff --git a/examples/wayland/custom-extension/compositor/customextension.cpp b/examples/wayland/custom-extension/compositor/customextension.cpp
index 8304e1afe..d9f637a12 100644
--- a/examples/wayland/custom-extension/compositor/customextension.cpp
+++ b/examples/wayland/custom-extension/compositor/customextension.cpp
@@ -123,3 +123,39 @@ void CustomExtension::example_extension_register_surface(QtWaylandServer::qt_exa
qDebug() << "server received new surface" << surface;
emit surfaceAdded(surface);
}
+
+
+void CustomExtension::example_extension_create_local_object(Resource *resource, uint32_t id, const QString &color, const QString &text)
+{
+ auto *obj = new CustomExtensionObject(color, text, resource->client(), id, 1);
+ qDebug() << "Object created" << text << color;
+ emit customObjectCreated(obj);
+}
+
+CustomExtensionObject::CustomExtensionObject(const QString &color, const QString &text, wl_client *client, int id, int version)
+ : QtWaylandServer::qt_example_local_object(client, id, version)
+ , m_color(color)
+ , m_text(text)
+{
+
+}
+
+void CustomExtensionObject::sendClicked()
+{
+ send_clicked();
+}
+
+void CustomExtensionObject::example_local_object_destroy_resource(QtWaylandServer::qt_example_local_object::Resource *resource)
+{
+ Q_UNUSED(resource);
+ qDebug() << "Object destroyed" << m_text << m_color;
+ emit resourceDestroyed();
+}
+
+
+void CustomExtensionObject::example_local_object_set_text(QtWaylandServer::qt_example_local_object::Resource *resource, const QString &text)
+{
+ Q_UNUSED(resource);
+ qDebug() << "Client changed text from" << m_text << "to" << text;
+ setText(text);
+}
diff --git a/examples/wayland/custom-extension/compositor/customextension.h b/examples/wayland/custom-extension/compositor/customextension.h
index b8f05b17c..de7df6acb 100644
--- a/examples/wayland/custom-extension/compositor/customextension.h
+++ b/examples/wayland/custom-extension/compositor/customextension.h
@@ -58,6 +58,8 @@
#include <QtWaylandCompositor/QWaylandCompositor>
#include "qwayland-server-custom.h"
+class CustomExtensionObject;
+
class CustomExtension : public QWaylandCompositorExtensionTemplate<CustomExtension>
, public QtWaylandServer::qt_example_extension
{
@@ -71,6 +73,8 @@ signals:
void bounce(QWaylandSurface *surface, uint ms);
void spin(QWaylandSurface *surface, uint ms);
+ void customObjectCreated(CustomExtensionObject *obj);
+
public slots:
void setFontSize(QWaylandSurface *surface, uint pixelSize);
void showDecorations(QWaylandClient *client, bool);
@@ -80,6 +84,63 @@ protected:
void example_extension_bounce(Resource *resource, wl_resource *surface, uint32_t duration) override;
void example_extension_spin(Resource *resource, wl_resource *surface, uint32_t duration) override;
void example_extension_register_surface(Resource *resource, wl_resource *surface) override;
+
+ void example_extension_create_local_object(Resource *resource, uint32_t id, const QString &color, const QString &text) override;
+};
+
+
+class CustomExtensionObject : public QWaylandCompositorExtensionTemplate<CustomExtensionObject>
+ , public QtWaylandServer::qt_example_local_object
+{
+ Q_OBJECT
+ Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
+ Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
+public:
+ CustomExtensionObject(const QString &color, const QString &text, struct ::wl_client *client, int id, int version);
+
+ QString color() const
+ {
+ return m_color;
+ }
+
+ QString text() const
+ {
+ return m_text;
+ }
+
+public slots:
+ void setColor(const QString &color)
+ {
+ if (m_color == color)
+ return;
+
+ m_color = color;
+ emit colorChanged(m_color);
+ }
+
+ void setText(QString text)
+ {
+ if (m_text == text)
+ return;
+
+ m_text = text;
+ emit textChanged(m_text);
+ }
+ void sendClicked();
+
+signals:
+ void colorChanged(const QString &color);
+ void resourceDestroyed();
+
+ void textChanged(QString text);
+
+protected:
+ void example_local_object_destroy_resource(Resource *resource) override;
+ void example_local_object_set_text(Resource *resource, const QString &text) override;
+
+private:
+ QString m_color;
+ QString m_text;
};
Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(CustomExtension)
diff --git a/examples/wayland/custom-extension/compositor/qml/main.qml b/examples/wayland/custom-extension/compositor/qml/main.qml
index 6739a5c9c..a7d762276 100644
--- a/examples/wayland/custom-extension/compositor/qml/main.qml
+++ b/examples/wayland/custom-extension/compositor/qml/main.qml
@@ -139,6 +139,40 @@ WaylandCompositor {
}
}
+
+ Component {
+ id: customObjectComponent
+ Rectangle {
+ id: customItem
+ property QtObject obj
+ property alias text: label.text
+
+ width: 100
+ height: 100
+ radius: width/2
+ x: Math.random() * (defaultOutput.surfaceArea.width - 100)
+ y: Math.random() * (defaultOutput.surfaceArea.height - 100)
+
+ Text {
+ id: label
+ anchors.centerIn: parent
+ text: "?"
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: obj.sendClicked()
+ }
+
+ Connections {
+ target: obj
+ onResourceDestroyed: {
+ customItem.destroy()
+ }
+ }
+ }
+ }
+
WlShell {
id: defaultShell
onWlShellSurfaceCreated: {
@@ -168,6 +202,9 @@ WaylandCompositor {
var item = itemForSurface(surface)
item.doSpin(ms)
}
+ onCustomObjectCreated: {
+ var item = customObjectComponent.createObject(defaultOutput.surfaceArea, { "color": obj.color, "text": obj.text, "obj": obj } );
+ }
}
function setDecorations(shown) {