diff options
author | Bernd Weimer <bernd.weimer@qt.io> | 2022-11-22 16:49:13 +0100 |
---|---|---|
committer | Bernd Weimer <bernd.weimer@qt.io> | 2022-11-25 08:49:56 +0100 |
commit | dd5f398ea2cd66dccba1582cd910e398e8f66029 (patch) | |
tree | 26f7bd9148895f9c7f9c0da5a06299580ff2aa78 /examples | |
parent | c14916f5fd84f6b5483024b3df77592661a0f04e (diff) | |
download | qtwayland-dd5f398ea2cd66dccba1582cd910e398e8f66029.tar.gz |
Improve examples
Updated signal handlers to new syntax to reduce noise (warnings).
Allowed to build examples with subfolders in one step, updated from
deprecated WlShell to XdgShell, etc.
Change-Id: If821363ffd1b38ea1d152f5a044b0609cf739014
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'examples')
22 files changed, 120 insertions, 102 deletions
diff --git a/examples/wayland/CMakeLists.txt b/examples/wayland/CMakeLists.txt index f8e31c7c..2783d7a9 100644 --- a/examples/wayland/CMakeLists.txt +++ b/examples/wayland/CMakeLists.txt @@ -18,10 +18,10 @@ if(TARGET Qt::Quick) qt_internal_add_example(qtshell) endif() if(TARGET Qt::Quick AND TARGET Qt::WaylandClient) - add_subdirectory(custom-extension) - add_subdirectory(custom-shell) + qt_internal_add_example(custom-extension) + qt_internal_add_example(custom-shell) endif() if(QT_FEATURE_opengl AND TARGET Qt::Quick AND TARGET Qt::WaylandClient) - add_subdirectory(server-buffer) + qt_internal_add_example(server-buffer) endif() endif() diff --git a/examples/wayland/custom-extension/CMakeLists.txt b/examples/wayland/custom-extension/CMakeLists.txt index 0462836e..073c7ca4 100644 --- a/examples/wayland/custom-extension/CMakeLists.txt +++ b/examples/wayland/custom-extension/CMakeLists.txt @@ -1,6 +1,9 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause -qt_internal_add_example(qml-client) -qt_internal_add_example(compositor) -qt_internal_add_example(cpp-client) +cmake_minimum_required(VERSION 3.16) +project(custom-extension) + +add_subdirectory(qml-client) +add_subdirectory(compositor) +add_subdirectory(cpp-client) diff --git a/examples/wayland/custom-extension/client-common/customextension.cpp b/examples/wayland/custom-extension/client-common/customextension.cpp index 73fea01b..3c585af3 100644 --- a/examples/wayland/custom-extension/client-common/customextension.cpp +++ b/examples/wayland/custom-extension/client-common/customextension.cpp @@ -56,8 +56,10 @@ void CustomExtension::sendWindowRegistration(QWindow *window) void CustomExtension::registerWindow(QWindow *window) { m_windows << window; - if (isActive()) + if (isActive()) { + m_activated = true; sendWindowRegistration(window); + } } CustomExtensionObject *CustomExtension::createCustomObject(const QString &color, const QString &text) @@ -79,6 +81,7 @@ void CustomExtension::sendSpin(QWindow *window, uint ms) void CustomExtension::handleExtensionActive() { if (isActive() && !m_activated) { + m_activated = true; for (QWindow *w : std::as_const(m_windows)) sendWindowRegistration(w); } diff --git a/examples/wayland/custom-extension/compositor/qml/CompositorScreen.qml b/examples/wayland/custom-extension/compositor/qml/CompositorScreen.qml index 724c0975..ec70a437 100644 --- a/examples/wayland/custom-extension/compositor/qml/CompositorScreen.qml +++ b/examples/wayland/custom-extension/compositor/qml/CompositorScreen.qml @@ -20,7 +20,7 @@ WaylandOutput { Rectangle { id: sidebar - width: 150 + width: 250 anchors.left: parent.left anchors.top: parent.top anchors.bottom: parent.bottom @@ -34,19 +34,20 @@ WaylandOutput { Repeater { model: comp.itemList Rectangle { - height: 36 + height: 54 width: sidebar.width - 5 color: "white" radius: 5 Text { - text: "window: " + modelData.shellSurface.title + "[" + modelData.shellSurface.className - + (modelData.isCustom ? "]\nfont size: " + modelData.fontSize :"]\n No extension") + text: "window: " + modelData.shellSurface.toplevel.title + "\n[" + + modelData.shellSurface.toplevel.appId + + (modelData.isCustom ? "]\nfont size: " + modelData.fontSize : "]\nNo extension") color: modelData.isCustom ? "black" : "darkgray" } MouseArea { enabled: modelData.isCustom anchors.fill: parent - onWheel: { + onWheel: (wheel) => { if (wheel.angleDelta.y > 0) modelData.fontSize++ else if (wheel.angleDelta.y < 0 && modelData.fontSize > 3) diff --git a/examples/wayland/custom-extension/compositor/qml/main.qml b/examples/wayland/custom-extension/compositor/qml/main.qml index d9b57e7c..7005af84 100644 --- a/examples/wayland/custom-extension/compositor/qml/main.qml +++ b/examples/wayland/custom-extension/compositor/qml/main.qml @@ -3,7 +3,7 @@ import QtQuick import QtWayland.Compositor -import QtWayland.Compositor.WlShell +import QtWayland.Compositor.XdgShell import io.qt.examples.customextension 1.0 @@ -34,36 +34,38 @@ WaylandCompositor { property int fontSize: 12 onSurfaceDestroyed: { - var index = itemList.indexOf(chrome); + var index = itemList.indexOf(chrome) if (index > -1) { var listCopy = itemList - listCopy.splice(index, 1); + listCopy.splice(index, 1) itemList = listCopy } chrome.destroy() } + transform: [ Rotation { id: xRot - origin.x: chrome.width/2; origin.y: chrome.height/2; + origin.x: chrome.width / 2; origin.y: chrome.height / 2 angle: 0 axis { x: 1; y: 0; z: 0 } }, Rotation { id: yRot - origin.x: chrome.width/2; origin.y: chrome.height/2; + origin.x: chrome.width / 2; origin.y: chrome.height / 2 angle: 0 axis { x: 0; y: 1; z: 0 } } ] + NumberAnimation { id: spinAnimation running: false loops: 2 - target: yRot; - property: "angle"; - from: 0; to: 360; - duration: 400; + target: yRot + property: "angle" + from: 0; to: 360 + duration: 400 } function doSpin(ms) { @@ -82,11 +84,13 @@ WaylandCompositor { easing.type: Easing.OutBounce duration: 1000 } + function doBounce(ms) { console.log("bounce " + ms) // using the 'ms' argument is left as an exercise for the reader... bounceAnimation.start() } + onFontSizeChanged: { custom.setFontSize(surface, fontSize) } @@ -120,22 +124,21 @@ WaylandCompositor { Connections { target: obj - onResourceDestroyed: { + function onResourceDestroyed() { customItem.destroy() } } } } - WlShell { - id: defaultShell - onWlShellSurfaceCreated: { - var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": shellSurface } ); - var w = defaultOutput.surfaceArea.width/2 - var h = defaultOutput.surfaceArea.height/2 - item.x = Math.random()*w - item.y = Math.random()*h - var listCopy = itemList // List properties cannot be modified through Javascript operations + XdgShell { + onToplevelCreated: (toplevel, xdgSurface) => { + var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": xdgSurface } ) + var w = defaultOutput.surfaceArea.width / 2 + var h = defaultOutput.surfaceArea.height / 2 + item.x = Math.random() * w + item.y = Math.random() * h + var listCopy = itemList; // List properties cannot be modified through Javascript operations listCopy.push(item) itemList = listCopy } @@ -144,20 +147,21 @@ WaylandCompositor { CustomExtension { id: custom - onSurfaceAdded: { + onSurfaceAdded: (surface) => { var item = itemForSurface(surface) item.isCustom = true } - onBounce: { + onBounce: (surface, ms) => { var item = itemForSurface(surface) item.doBounce(ms) } - onSpin: { + onSpin: (surface, ms) => { var item = itemForSurface(surface) item.doSpin(ms) } - onCustomObjectCreated: { - var item = customObjectComponent.createObject(defaultOutput.surfaceArea, { "color": obj.color, "text": obj.text, "obj": obj } ); + onCustomObjectCreated: (obj) => { + var item = customObjectComponent.createObject(defaultOutput.surfaceArea, + { "color": obj.color, "text": obj.text, "obj": obj } ) } } diff --git a/examples/wayland/custom-extension/qml-client/main.qml b/examples/wayland/custom-extension/qml-client/main.qml index 3b051578..6ceefda2 100644 --- a/examples/wayland/custom-extension/qml-client/main.qml +++ b/examples/wayland/custom-extension/qml-client/main.qml @@ -7,12 +7,17 @@ import io.qt.examples.customextension Window { id: topLevelWindow + + property alias textItem: bounceText + + title: "QML Client" visible: true + Rectangle { anchors.fill: parent color: "#f1eece" } - property alias textItem: bounceText + Text { id: bounceText text: "press here to bounce" @@ -49,7 +54,7 @@ Window { console.log("Custom extension is active:", active) registerWindow(topLevelWindow) } - onFontSize: { + onFontSize: (window, pixelSize) => { // signal arguments: window and pixelSize // we are free to interpret the protocol as we want, so // let's change the font size of just one of the text items diff --git a/examples/wayland/custom-shell/CMakeLists.txt b/examples/wayland/custom-shell/CMakeLists.txt index 7158582e..1b0fe165 100644 --- a/examples/wayland/custom-shell/CMakeLists.txt +++ b/examples/wayland/custom-shell/CMakeLists.txt @@ -1,2 +1,5 @@ -qt_internal_add_example(client-plugin) -qt_internal_add_example(compositor) +cmake_minimum_required(VERSION 3.16) +project(custom-shell) + +add_subdirectory(client-plugin) +add_subdirectory(compositor) diff --git a/examples/wayland/hwlayer-compositor/main.qml b/examples/wayland/hwlayer-compositor/main.qml index 9d6648fe..569f4634 100644 --- a/examples/wayland/hwlayer-compositor/main.qml +++ b/examples/wayland/hwlayer-compositor/main.qml @@ -3,7 +3,7 @@ import QtQuick import QtQuick.Window -import QtQuick.Controls 2.2 +import QtQuick.Controls import QtWayland.Compositor import QtWayland.Compositor.XdgShell import QtWayland.Compositor.WlShell @@ -32,37 +32,37 @@ WaylandCompositor { duration: 1000 } } - Repeater { - model: shellSurfaces - ShellSurfaceItem { - id: waylandItem - onSurfaceDestroyed: shellSurfaces.remove(index) - shellSurface: shSurface - WaylandHardwareLayer { - stackingLevel: level - Component.onCompleted: console.log("Added hardware layer with stacking level", stackingLevel); - } - Component.onCompleted: console.log("Added wayland quick item"); - Behavior on x { - PropertyAnimation { - easing.type: Easing.OutBounce - duration: 1000 - } - } - Timer { - interval: 2000; running: animatePosition; repeat: true - onTriggered: waylandItem.x = waylandItem.x === 0 ? win.width - waylandItem.width : 0 - } - Behavior on opacity { - PropertyAnimation { - duration: 1000 - } + Repeater { + model: shellSurfaces + ShellSurfaceItem { + id: waylandItem + onSurfaceDestroyed: shellSurfaces.remove(index) + shellSurface: shSurface + WaylandHardwareLayer { + stackingLevel: level + Component.onCompleted: console.log("Added hardware layer with stacking level", stackingLevel); + } + Component.onCompleted: console.log("Added wayland quick item"); + Behavior on x { + PropertyAnimation { + easing.type: Easing.OutBounce + duration: 1000 } - Timer { - interval: 2000; running: animateOpacity; repeat: true - onTriggered: waylandItem.opacity = waylandItem.opacity === 1 ? 0 : 1 + } + Timer { + interval: 2000; running: animatePosition; repeat: true + onTriggered: waylandItem.x = waylandItem.x === 0 ? win.width - waylandItem.width : 0 + } + Behavior on opacity { + PropertyAnimation { + duration: 1000 } } + Timer { + interval: 2000; running: animateOpacity; repeat: true + onTriggered: waylandItem.opacity = waylandItem.opacity === 1 ? 0 : 1 + } + } } Column { anchors.bottom: parent.bottom @@ -94,7 +94,7 @@ WaylandCompositor { } Button { text: "Kill" - onClicked: shSurface.surface.client.close() + onClicked: shSurface.surface.client.kill() } } } @@ -111,7 +111,7 @@ WaylandCompositor { function addShellSurface(shellSurface) { shellSurfaces.append({shSurface: shellSurface, animatePosition: false, animateOpacity: false, level: 0}); } - XdgShell { onToplevelCreated: addShellSurface(xdgSurface) } - IviApplication { onIviSurfaceCreated: addShellSurface(iviSurface) } - WlShell { onWlShellSurfaceCreated: addShellSurface(shellSurface) } + XdgShell { onToplevelCreated: (toplevel, xdgSurface) => addShellSurface(xdgSurface) } + IviApplication { onIviSurfaceCreated: (iviSurface) => addShellSurface(iviSurface) } + WlShell { onWlShellSurfaceCreated: (shellSurface) => addShellSurface(shellSurface) } } diff --git a/examples/wayland/ivi-compositor/main.qml b/examples/wayland/ivi-compositor/main.qml index 055d10d3..555f6467 100644 --- a/examples/wayland/ivi-compositor/main.qml +++ b/examples/wayland/ivi-compositor/main.qml @@ -48,14 +48,15 @@ WaylandCompositor { onWidthChanged: handleResized() onHeightChanged: handleResized() function handleResized() { - shellSurface.sendConfigure(Qt.size(width, height)); + if (width > 0 && height > 0) + shellSurface.sendConfigure(Qt.size(width, height)); } //! [resizing] } } //! [connecting] IviApplication { - onIviSurfaceCreated: { + onIviSurfaceCreated: (iviSurface) => { var surfaceArea = iviSurface.iviId === 1337 ? leftArea : rightArea; var item = chromeComponent.createObject(surfaceArea, { "shellSurface": iviSurface } ); item.handleResized(); diff --git a/examples/wayland/minimal-qml/main.qml b/examples/wayland/minimal-qml/main.qml index b7bcc4ca..e1e1c18d 100644 --- a/examples/wayland/minimal-qml/main.qml +++ b/examples/wayland/minimal-qml/main.qml @@ -46,17 +46,13 @@ WaylandCompositor { //! [shells] WlShell { - onWlShellSurfaceCreated: - shellSurfaces.append({shellSurface: shellSurface}); + onWlShellSurfaceCreated: (shellSurface) => shellSurfaces.append({shellSurface: shellSurface}); } XdgShell { - onToplevelCreated: - shellSurfaces.append({shellSurface: xdgSurface}); + onToplevelCreated: (toplevel, xdgSurface) => shellSurfaces.append({shellSurface: xdgSurface}); } IviApplication { - onIviSurfaceCreated: { - shellSurfaces.append({shellSurface: iviSurface}); - } + onIviSurfaceCreated: (iviSurface) => shellSurfaces.append({shellSurface: iviSurface}); } //! [shells] diff --git a/examples/wayland/multi-output/qml/ShellScreen.qml b/examples/wayland/multi-output/qml/ShellScreen.qml index ae409259..ffbb9f52 100644 --- a/examples/wayland/multi-output/qml/ShellScreen.qml +++ b/examples/wayland/multi-output/qml/ShellScreen.qml @@ -32,7 +32,7 @@ WaylandOutput { id: clientCursor x: mouseTracker.mouseX y: mouseTracker.mouseY - visible: surface !== null && mouseTracker.containsMouse + visible: surface != null && mouseTracker.containsMouse seat : output.compositor.defaultSeat } } diff --git a/examples/wayland/multi-output/qml/main.qml b/examples/wayland/multi-output/qml/main.qml index 65b343ae..26e227bc 100644 --- a/examples/wayland/multi-output/qml/main.qml +++ b/examples/wayland/multi-output/qml/main.qml @@ -4,7 +4,6 @@ import QtQuick import QtWayland.Compositor import QtWayland.Compositor.XdgShell -import QtWayland.Compositor.WlShell WaylandCompositor { id: comp @@ -50,7 +49,7 @@ WaylandCompositor { // ![xdgshell] XdgShell { - onToplevelCreated: { + onToplevelCreated: (toplevel, xdgSurface) => { var item = chromeComponent.createObject(defaultOutput.surfaceArea, { "shellSurface": xdgSurface } ); item.surface.activated.connect(item.raise); } @@ -58,7 +57,7 @@ WaylandCompositor { // ![xdgshell] // ![onSurfaceRequested] - onSurfaceRequested: { + onSurfaceRequested: (client, id, version) => { var surface = surfaceComponent.createObject(comp, { } ); surface.initialize(comp, client, id, version); } diff --git a/examples/wayland/multi-screen/doc/src/multi-screen.qdoc b/examples/wayland/multi-screen/doc/src/multi-screen.qdoc index 9573cedf..07374b78 100644 --- a/examples/wayland/multi-screen/doc/src/multi-screen.qdoc +++ b/examples/wayland/multi-screen/doc/src/multi-screen.qdoc @@ -45,7 +45,7 @@ * screens. The global position of the client is stored in a shared * \l{ShellSurfaceItem::moveItem}{moveItem} and relative position of each screen's * \l ShellSurfaceItem is calculated based on this. If the \c moveItem is currently outside the - * bounds of one screen, its coordinates will reflect this, and it will be not be visible on that + * bounds of one screen, its coordinates will reflect this, and it will not be visible on that * screen. * * \snippet multi-screen/qml/Chrome.qml position sync diff --git a/examples/wayland/multi-screen/qml/CompositorScreen.qml b/examples/wayland/multi-screen/qml/CompositorScreen.qml index 5f1b3447..e449d6fa 100644 --- a/examples/wayland/multi-screen/qml/CompositorScreen.qml +++ b/examples/wayland/multi-screen/qml/CompositorScreen.qml @@ -46,7 +46,7 @@ WaylandOutput { x: mouseTracker.mouseX y: mouseTracker.mouseY seat: comp.defaultSeat - visible: surface !== null && mouseTracker.containsMouse + visible: surface != null && mouseTracker.containsMouse } } Shortcut { diff --git a/examples/wayland/multi-screen/qml/main.qml b/examples/wayland/multi-screen/qml/main.qml index dc2807c3..fc14d0a7 100644 --- a/examples/wayland/multi-screen/qml/main.qml +++ b/examples/wayland/multi-screen/qml/main.qml @@ -4,7 +4,6 @@ import QtQml import QtQuick -import QtQuick.Window as Window import QtWayland.Compositor import QtWayland.Compositor.XdgShell import QtWayland.Compositor.WlShell @@ -54,11 +53,11 @@ WaylandCompositor { } WlShell { - onWlShellSurfaceCreated: handleShellSurfaceCreated(shellSurface) + onWlShellSurfaceCreated: (shellSurface) => handleShellSurfaceCreated(shellSurface) } XdgShell { - onToplevelCreated: handleShellSurfaceCreated(xdgSurface) + onToplevelCreated: (toplevel, xdgSurface) => handleShellSurfaceCreated(xdgSurface) } function createShellSurfaceItem(shellSurface, moveItem, output) { diff --git a/examples/wayland/overview-compositor/main.qml b/examples/wayland/overview-compositor/main.qml index 5e6930d2..026e5cab 100644 --- a/examples/wayland/overview-compositor/main.qml +++ b/examples/wayland/overview-compositor/main.qml @@ -90,7 +90,7 @@ WaylandCompositor { // ![XdgShell] XdgShell { - onToplevelCreated: { + onToplevelCreated: (toplevel, xdgSurface) => { toplevels.append({xdgSurface}); toplevel.sendFullscreen(Qt.size(win.pixelWidth, win.pixelHeight)); } diff --git a/examples/wayland/pure-qml/qml/main.qml b/examples/wayland/pure-qml/qml/main.qml index 80faa80d..87feedf1 100644 --- a/examples/wayland/pure-qml/qml/main.qml +++ b/examples/wayland/pure-qml/qml/main.qml @@ -16,17 +16,17 @@ WaylandCompositor { // Shell surface extension. Needed to provide a window concept for Wayland clients. // I.e. requests and events for maximization, minimization, resizing, closing etc. XdgShell { - onToplevelCreated: screen.handleShellSurface(xdgSurface) + onToplevelCreated: (toplevel, xdgSurface) => screen.handleShellSurface(xdgSurface) } // Minimalistic shell extension. Mainly used for embedded applications. IviApplication { - onIviSurfaceCreated: screen.handleShellSurface(iviSurface) + onIviSurfaceCreated: (iviSurface) => screen.handleShellSurface(iviSurface) } // Deprecated shell extension, still used by some clients WlShell { - onWlShellSurfaceCreated: screen.handleShellSurface(shellSurface) + onWlShellSurfaceCreated: (shellSurface) => screen.handleShellSurface(shellSurface) } // ![shell extensions] diff --git a/examples/wayland/qtshell/qml/main.qml b/examples/wayland/qtshell/qml/main.qml index 99813b57..7a4f505d 100644 --- a/examples/wayland/qtshell/qml/main.qml +++ b/examples/wayland/qtshell/qml/main.qml @@ -15,7 +15,7 @@ WaylandCompositor { //! [shell] QtShell { - onQtShellSurfaceCreated: screen.handleShellSurface(qtShellSurface) + onQtShellSurfaceCreated: (qtShellSurface) => screen.handleShellSurface(qtShellSurface) } //! [shell] } diff --git a/examples/wayland/server-buffer/CMakeLists.txt b/examples/wayland/server-buffer/CMakeLists.txt index 48a68e96..973063c7 100644 --- a/examples/wayland/server-buffer/CMakeLists.txt +++ b/examples/wayland/server-buffer/CMakeLists.txt @@ -1,2 +1,5 @@ -qt_internal_add_example(cpp-client) -qt_internal_add_example(compositor) +cmake_minimum_required(VERSION 3.16) +project(server-buffer) + +add_subdirectory(cpp-client) +add_subdirectory(compositor) diff --git a/examples/wayland/server-buffer/compositor/qml/main.qml b/examples/wayland/server-buffer/compositor/qml/main.qml index dc2a2fb8..484a9563 100644 --- a/examples/wayland/server-buffer/compositor/qml/main.qml +++ b/examples/wayland/server-buffer/compositor/qml/main.qml @@ -24,6 +24,7 @@ WaylandCompositor { } } } + Component { id: chromeComponent ShellSurfaceItem { @@ -32,11 +33,11 @@ WaylandCompositor { } WlShell { - onWlShellSurfaceCreated: + onWlShellSurfaceCreated: (shellSurface) => { chromeComponent.createObject(surfaceArea, { "shellSurface": shellSurface } ); + } } ShareBufferExtension { } - } diff --git a/examples/wayland/server-side-decoration/main.qml b/examples/wayland/server-side-decoration/main.qml index 881ee9bf..421cefa9 100644 --- a/examples/wayland/server-side-decoration/main.qml +++ b/examples/wayland/server-side-decoration/main.qml @@ -63,7 +63,7 @@ WaylandCompositor { // ![XdgShell] XdgShell { - onToplevelCreated: shellSurfaces.append({shellSurface: xdgSurface}); + onToplevelCreated: (toplevel, xdgSurface) => shellSurfaces.append({shellSurface: xdgSurface}); } XdgDecorationManagerV1 { preferredMode: XdgToplevel.ServerSideDecoration diff --git a/examples/wayland/spanning-screens/main.qml b/examples/wayland/spanning-screens/main.qml index bff344b7..d47246de 100644 --- a/examples/wayland/spanning-screens/main.qml +++ b/examples/wayland/spanning-screens/main.qml @@ -65,7 +65,7 @@ WaylandCompositor { } XdgShell { - onToplevelCreated: { + onToplevelCreated: (toplevel, xdgSurface) => { const shellSurface = xdgSurface; // ![create items] |