summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiulio Camuffo <giulio.camuffo@kdab.com>2016-04-25 11:11:17 +0300
committerGiulio Camuffo <giulio.camuffo@kdab.com>2016-04-29 13:36:40 +0000
commit5c5489a26b26ffb77ed53b15857711499424f84d (patch)
treebe37e7c3c985061473046e569d3cf4dcea984c9d
parentb85246e7009004d6157d919a6ee4ddb4040ce1e1 (diff)
downloadqtwayland-5c5489a26b26ffb77ed53b15857711499424f84d.tar.gz
Automatically initialize the quick extension objects
Instead of writing "Component.onCompleted: initialize()" for every extension the compositor has, let them call that automatically. Change-Id: I0b499a38c2b475dc9a7ef27cbacebef19b196dbf Reviewed-by: Johan Helsing <johan.helsing@qt.io> Reviewed-by: Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
-rw-r--r--examples/wayland/custom-extension/compositor/customextension.cpp4
-rw-r--r--examples/wayland/custom-extension/compositor/customextension.h5
-rw-r--r--examples/wayland/custom-extension/compositor/main.cpp3
-rw-r--r--examples/wayland/custom-extension/compositor/qml/main.qml8
-rw-r--r--examples/wayland/multi-output/qml/main.qml4
-rw-r--r--examples/wayland/pure-qml/qml/main.qml15
-rw-r--r--src/compositor/global/qwaylandextension.h2
-rw-r--r--src/compositor/global/qwaylandquickextension.h6
8 files changed, 15 insertions, 32 deletions
diff --git a/examples/wayland/custom-extension/compositor/customextension.cpp b/examples/wayland/custom-extension/compositor/customextension.cpp
index bc2b676e..a63d3c5a 100644
--- a/examples/wayland/custom-extension/compositor/customextension.cpp
+++ b/examples/wayland/custom-extension/compositor/customextension.cpp
@@ -50,8 +50,10 @@ CustomExtension::CustomExtension()
{
}
-void CustomExtension::initialize(QWaylandCompositor *compositor)
+void CustomExtension::initialize()
{
+ QWaylandExtensionTemplate::initialize();
+ QWaylandCompositor *compositor = static_cast<QWaylandCompositor *>(extensionContainer());
init(compositor->display(), 1);
}
diff --git a/examples/wayland/custom-extension/compositor/customextension.h b/examples/wayland/custom-extension/compositor/customextension.h
index e9ace6e9..81c3c505 100644
--- a/examples/wayland/custom-extension/compositor/customextension.h
+++ b/examples/wayland/custom-extension/compositor/customextension.h
@@ -44,6 +44,7 @@
#include "wayland-util.h"
#include <QtWaylandCompositor/QWaylandExtensionTemplate>
+#include <QtWaylandCompositor/QWaylandQuickExtension>
#include <QtWaylandCompositor/QWaylandCompositor>
#include "qwayland-server-custom.h"
@@ -54,7 +55,7 @@ class CustomExtension : public QWaylandExtensionTemplate<CustomExtension>, publ
Q_OBJECT
public:
CustomExtension();
- Q_INVOKABLE void initialize(QWaylandCompositor *compositor);
+ void initialize() Q_DECL_OVERRIDE;
Q_INVOKABLE void sendEvent(QWaylandSurface *surface, uint time, const QString &text, uint value);
signals:
@@ -63,6 +64,8 @@ protected:
virtual void example_extension_qtrequest(Resource *resource, const QString &text, int32_t value) Q_DECL_OVERRIDE;
};
+Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(CustomExtension)
+
}
#endif // CUSTOMEXTENSION_H
diff --git a/examples/wayland/custom-extension/compositor/main.cpp b/examples/wayland/custom-extension/compositor/main.cpp
index 1970e5a6..867e4c0d 100644
--- a/examples/wayland/custom-extension/compositor/main.cpp
+++ b/examples/wayland/custom-extension/compositor/main.cpp
@@ -45,11 +45,12 @@
#include <QtQml/qqml.h>
#include <QtQml/QQmlEngine>
+
#include "customextension.h"
static void registerTypes()
{
- qmlRegisterType<QtWayland::CustomExtension>("com.theqtcompany.customextension", 1, 0, "CustomExtension");
+ qmlRegisterType<QtWayland::CustomExtensionQuickExtension>("com.theqtcompany.customextension", 1, 0, "CustomExtension");
}
int main(int argc, char *argv[])
diff --git a/examples/wayland/custom-extension/compositor/qml/main.qml b/examples/wayland/custom-extension/compositor/qml/main.qml
index dcba2bb7..ff83133b 100644
--- a/examples/wayland/custom-extension/compositor/qml/main.qml
+++ b/examples/wayland/custom-extension/compositor/qml/main.qml
@@ -82,20 +82,12 @@ WaylandCompositor {
var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": shellSurface } );
lastItem = item;
}
-
- Component.onCompleted: {
- initialize();
- }
},
CustomExtension {
id: custom
onRequestReceived: {
console.log("Compositor received a request: \"" + text + "\", " + value)
}
-
- Component.onCompleted: {
- initialize(comp);
- }
}
]
diff --git a/examples/wayland/multi-output/qml/main.qml b/examples/wayland/multi-output/qml/main.qml
index ccb3d418..6a1483bc 100644
--- a/examples/wayland/multi-output/qml/main.qml
+++ b/examples/wayland/multi-output/qml/main.qml
@@ -89,10 +89,6 @@ WaylandCompositor {
var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": shellSurface } );
item.surface.activated.connect(item.raise);
}
-
- Component.onCompleted: {
- initialize();
- }
}
]
diff --git a/examples/wayland/pure-qml/qml/main.qml b/examples/wayland/pure-qml/qml/main.qml
index 65ac3616..c50d4b67 100644
--- a/examples/wayland/pure-qml/qml/main.qml
+++ b/examples/wayland/pure-qml/qml/main.qml
@@ -72,10 +72,6 @@ WaylandCompositor {
WindowManager {
id: qtWindowManager
onShowIsFullScreenChanged: console.debug("Show is fullscreen hint for Qt applications:", showIsFullScreen)
-
- Component.onCompleted: {
- initialize();
- }
},
WlShell {
id: defaultShell
@@ -83,10 +79,6 @@ WaylandCompositor {
onShellSurfaceCreated: {
chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": shellSurface } );
}
-
- Component.onCompleted: {
- initialize();
- }
},
XdgShell {
id: xdgShell
@@ -94,15 +86,8 @@ WaylandCompositor {
onXdgSurfaceCreated: {
xdgChromeComponent.createObject(defaultOutput.surfaceArea, { "xdgSurface": xdgSurface } );
}
-
- Component.onCompleted: {
- initialize();
- }
},
TextInputManager {
- Component.onCompleted: {
- initialize();
- }
}
]
diff --git a/src/compositor/global/qwaylandextension.h b/src/compositor/global/qwaylandextension.h
index 0088601b..7692aac8 100644
--- a/src/compositor/global/qwaylandextension.h
+++ b/src/compositor/global/qwaylandextension.h
@@ -80,7 +80,7 @@ public:
QWaylandObject *extensionContainer() const;
void setExtensionContainer(QWaylandObject *container);
- Q_INVOKABLE virtual void initialize();
+ virtual void initialize();
bool isInitialized() const;
virtual const struct wl_interface *extensionInterface() const = 0;
diff --git a/src/compositor/global/qwaylandquickextension.h b/src/compositor/global/qwaylandquickextension.h
index 6322d28f..64359ffa 100644
--- a/src/compositor/global/qwaylandquickextension.h
+++ b/src/compositor/global/qwaylandquickextension.h
@@ -38,11 +38,13 @@
#define QWAYLANDQUICKEXTENSION_H
#include <QtWaylandCompositor/QWaylandExtension>
+#include <QtQml/QQmlParserStatus>
+#include <QtQml/QQmlListProperty>
QT_BEGIN_NAMESPACE
#define Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(className) \
- class Q_WAYLAND_COMPOSITOR_EXPORT className##QuickExtension : public className \
+ class Q_WAYLAND_COMPOSITOR_EXPORT className##QuickExtension : public className, public QQmlParserStatus \
{ \
/* qmake ignore Q_OBJECT */ \
Q_OBJECT \
@@ -53,6 +55,8 @@ QT_BEGIN_NAMESPACE
{ \
return QQmlListProperty<QObject>(this, m_objects); \
} \
+ void classBegin() Q_DECL_OVERRIDE {} \
+ void componentComplete() Q_DECL_OVERRIDE { initialize(); } \
private: \
QList<QObject *> m_objects; \
};