From 5c5489a26b26ffb77ed53b15857711499424f84d Mon Sep 17 00:00:00 2001 From: Giulio Camuffo Date: Mon, 25 Apr 2016 11:11:17 +0300 Subject: 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 Reviewed-by: Pier Luigi Fiorini --- .../custom-extension/compositor/customextension.cpp | 4 +++- .../wayland/custom-extension/compositor/customextension.h | 5 ++++- examples/wayland/custom-extension/compositor/main.cpp | 3 ++- examples/wayland/custom-extension/compositor/qml/main.qml | 8 -------- examples/wayland/multi-output/qml/main.qml | 4 ---- examples/wayland/pure-qml/qml/main.qml | 15 --------------- src/compositor/global/qwaylandextension.h | 2 +- src/compositor/global/qwaylandquickextension.h | 6 +++++- 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(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 +#include #include #include "qwayland-server-custom.h" @@ -54,7 +55,7 @@ class CustomExtension : public QWaylandExtensionTemplate, 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 #include + #include "customextension.h" static void registerTypes() { - qmlRegisterType("com.theqtcompany.customextension", 1, 0, "CustomExtension"); + qmlRegisterType("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 +#include +#include 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(this, m_objects); \ } \ + void classBegin() Q_DECL_OVERRIDE {} \ + void componentComplete() Q_DECL_OVERRIDE { initialize(); } \ private: \ QList m_objects; \ }; -- cgit v1.2.1