Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package qt6-webchannel for openSUSE:Factory 
checked in at 2026-10-18 19:21:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/qt6-webchannel (Old)
 and      /work/SRC/openSUSE:Factory/.qt6-webchannel.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "qt6-webchannel"

Sun Oct 18 19:21:44 2026 rev:38 rq:1384421 version:6.12.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/qt6-webchannel/qt6-webchannel.changes    
2026-08-21 16:52:31.651277343 +0200
+++ 
/work/SRC/openSUSE:Factory/.qt6-webchannel.new.3698736/qt6-webchannel.changes   
    2026-10-18 19:22:01.838543029 +0200
@@ -1,0 +2,6 @@
+Wed Sep 30 16:15:56 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.12.0
+  https://www.qt.io/blog/qt-6.12-released
+
+-------------------------------------------------------------------

Old:
----
  qtwebchannel-everywhere-src-6.11.2.tar.xz

New:
----
  qtwebchannel-everywhere-src-6.12.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ qt6-webchannel.spec ++++++
--- /var/tmp/diff_new_pack.ojRiSF/_old  2026-10-18 19:22:02.550572548 +0200
+++ /var/tmp/diff_new_pack.ojRiSF/_new  2026-10-18 19:22:02.552572631 +0200
@@ -16,8 +16,8 @@
 #
 
 
-%define real_version 6.11.2
-%define short_version 6.11
+%define real_version 6.12.0
+%define short_version 6.12
 %define tar_name qtwebchannel-everywhere-src
 %define tar_suffix %{nil}
 #
@@ -27,7 +27,7 @@
 %endif
 #
 Name:           qt6-webchannel%{?pkg_suffix}
-Version:        6.11.2
+Version:        6.12.0
 Release:        0
 Summary:        Qt 6 WebChannel library
 License:        GPL-2.0-only OR LGPL-3.0-only OR GPL-3.0-only

++++++ qtwebchannel-everywhere-src-6.11.2.tar.xz -> 
qtwebchannel-everywhere-src-6.12.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.11.2/.cmake.conf 
new/qtwebchannel-everywhere-src-6.12.0/.cmake.conf
--- old/qtwebchannel-everywhere-src-6.11.2/.cmake.conf  2026-08-12 
04:41:37.000000000 +0200
+++ new/qtwebchannel-everywhere-src-6.12.0/.cmake.conf  2026-09-27 
12:11:37.000000000 +0200
@@ -1,6 +1,7 @@
-set(QT_REPO_MODULE_VERSION "6.11.2")
+set(QT_REPO_MODULE_VERSION "6.12.0")
 set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1")
 set(QT_EXTRA_INTERNAL_TARGET_DEFINES
+    "QT_NO_DISCONNECT_CONST_CONNECTION=1"
     "QT_NO_FOREACH=1"
     "QT_NO_SINGLE_ARGUMENT_QHASH_OVERLOAD=1"
     "QT_NO_QASCONST=1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.11.2/.tag 
new/qtwebchannel-everywhere-src-6.12.0/.tag
--- old/qtwebchannel-everywhere-src-6.11.2/.tag 2026-08-12 04:41:37.000000000 
+0200
+++ new/qtwebchannel-everywhere-src-6.12.0/.tag 2026-09-27 12:11:37.000000000 
+0200
@@ -1 +1 @@
-4d6a7ec14efc38ed09e55403b0843719539d162a
+621cb3df07d6cf316dd026ec71311368adfe371e
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.11.2/CONTRIBUTING.md 
new/qtwebchannel-everywhere-src-6.12.0/CONTRIBUTING.md
--- old/qtwebchannel-everywhere-src-6.11.2/CONTRIBUTING.md      1970-01-01 
01:00:00.000000000 +0100
+++ new/qtwebchannel-everywhere-src-6.12.0/CONTRIBUTING.md      2026-09-27 
12:11:37.000000000 +0200
@@ -0,0 +1,11 @@
+## Qt contribution guidelines
+
+We welcome contributions to Qt!
+
+Note that we cannot accept pull requests on GitHub. All contributions
+to the Qt project are exclusively handled through the
+[Gerrit code review system](https://codereview.qt-project.org).
+
+See
+[contribute.qt-project.org](https://contribute.qt-project.org/) to learn
+more.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.11.2/REUSE.toml 
new/qtwebchannel-everywhere-src-6.12.0/REUSE.toml
--- old/qtwebchannel-everywhere-src-6.11.2/REUSE.toml   2026-08-12 
04:41:37.000000000 +0200
+++ new/qtwebchannel-everywhere-src-6.12.0/REUSE.toml   2026-09-27 
12:11:37.000000000 +0200
@@ -29,7 +29,7 @@
 SPDX-License-Identifier = "LicenseRef-Qt-Commercial OR BSD-3-Clause"
 
 [[annotations]]
-path = ["**/doc/images/**", "**/README*", "**.qdocconf"]
+path = ["**/doc/images/**", "**/README*", "**.qdocconf", "CONTRIBUTING.md"]
 comment = "documentation"
 precedence = "closest"
 SPDX-FileCopyrightText = "Copyright (C) The Qt Company Ltd."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.11.2/dependencies.yaml 
new/qtwebchannel-everywhere-src-6.12.0/dependencies.yaml
--- old/qtwebchannel-everywhere-src-6.11.2/dependencies.yaml    2026-08-12 
04:41:37.000000000 +0200
+++ new/qtwebchannel-everywhere-src-6.12.0/dependencies.yaml    2026-09-27 
12:11:37.000000000 +0200
@@ -1,10 +1,10 @@
 dependencies:
   ../qtbase:
-    ref: ef55f427f2c8b410d34f8a7681020a3000cf6866
+    ref: 025bdad181de241e81bf853c8a2d7bf3d19261a9
     required: true
   ../qtdeclarative:
-    ref: 4e3399c26ec57246c08de019cfcbda8d23604cfa
+    ref: 4332fbbb4c340463dc8cee36dda0c85d932122d8
     required: false
   ../qtwebsockets:
-    ref: 3eab06de7076a83514e98c2403baa433d137b013
+    ref: 6aedb199b5d8ee4afa4cfc956ded22bc0a2632e9
     required: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/CMakeLists.txt
 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/CMakeLists.txt
--- 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/CMakeLists.txt
        2026-08-12 04:41:37.000000000 +0200
+++ 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/CMakeLists.txt
        2026-09-27 12:11:37.000000000 +0200
@@ -7,13 +7,14 @@
 set(CMAKE_AUTOMOC ON)
 set(CMAKE_AUTOUIC ON)
 
-find_package(Qt6 REQUIRED COMPONENTS Core Gui WebChannel WebSockets Widgets)
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Network WebChannel WebSockets 
Widgets)
 
 qt_add_executable(standalone
     websocketclientwrapper.cpp websocketclientwrapper.h
     websockettransport.cpp websockettransport.h
     core.h
     dialog.cpp dialog.h dialog.ui
+    httpserver.cpp httpserver.h
     main.cpp
 )
 
@@ -22,43 +23,20 @@
     MACOSX_BUNDLE TRUE
 )
 
-# pro2cmake generates invalid cmake syntax here
-target_compile_definitions(standalone PUBLIC
-    "BUILD_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\""
-)
-
 target_link_libraries(standalone PUBLIC
     Qt::Core
     Qt::Gui
+    Qt::Network
     Qt::WebChannel
     Qt::WebSockets
     Qt::Widgets
 )
 
-add_custom_command(
-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/qwebchannel.js
-    COMMAND ${CMAKE_COMMAND} -E copy
-            ${QT_QWEBCHANNEL_JS_PATH}
-            ${CMAKE_CURRENT_BINARY_DIR}/qwebchannel.js
-    DEPENDS ${QT_QWEBCHANNEL_JS_PATH}
-    VERBATIM
-)
+set_source_files_properties("${QT_QWEBCHANNEL_JS_PATH}" PROPERTIES 
QT_RESOURCE_ALIAS "qwebchannel.js")
 
-if (NOT CMAKE_CURRENT_BINARY_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
-    add_custom_command(
-        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/index.html
-        COMMAND ${CMAKE_COMMAND} -E copy
-                ${CMAKE_CURRENT_SOURCE_DIR}/index.html
-                ${CMAKE_CURRENT_BINARY_DIR}/index.html
-        DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/index.html
-        VERBATIM
-    )
-endif()
-
-add_custom_target(output_target ALL
-    DEPENDS
-    ${CMAKE_CURRENT_BINARY_DIR}/index.html
-    ${CMAKE_CURRENT_BINARY_DIR}/qwebchannel.js
+qt_add_resources(standalone "standalone_resources"
+    PREFIX "/"
+    FILES
+        "index.html"
+        "${QT_QWEBCHANNEL_JS_PATH}"
 )
-
-add_dependencies(standalone output_target)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/doc/src/standalone.qdoc
 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/doc/src/standalone.qdoc
--- 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/doc/src/standalone.qdoc
       2026-08-12 04:41:37.000000000 +0200
+++ 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/doc/src/standalone.qdoc
       2026-09-27 12:11:37.000000000 +0200
@@ -22,9 +22,9 @@
     \section1 Communicating with a Remote Client
 
     The C++ application sets up a QWebChannel instance and publishes a \c Core
-    object over it. For the remote client side, the \c {index.html} file
-    is opened. Both show a dialog with the list of received messages and an 
input
-    box to send messages to the other end.
+    object over it. On the remote client side, \c {index.html} runs in your
+    default browser. Both show a dialog with the list of received messages and
+    an input box to send messages to the other end.
 
     The \c Core emits the \c Core::sendText() signal when the user sends
     a message. The signal automatically gets propagated to the HTML client.
@@ -36,5 +36,18 @@
     wraps incoming QWebSocket connections in QWebChannelAbstractTransport
     objects. These objects are then connected to the QWebChannel instance.
 
+    \section1 Serving the Client Page
+
+    The \c {index.html} page and the \c {qwebchannel.js} script it loads are
+    compiled into the application as Qt resources. The application serves them
+    over a minimal loopback HTTP server and opens the default browser at the
+    resulting \c http:// URL. A loopback URL works even when the browser and 
the
+    application do not share a filesystem, as on a sandboxed or cross-compiled
+    platform.
+
+    The example implements its own minimal HTTP server so that building it
+    does not require the Qt HTTP Server module. In a real application, you
+    would use \l QHttpServer instead.
+
     \sa {Qt WebChannel JavaScript API}
 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/httpserver.cpp
 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/httpserver.cpp
--- 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/httpserver.cpp
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/httpserver.cpp
        2026-09-27 12:11:37.000000000 +0200
@@ -0,0 +1,100 @@
+// Copyright (C) 2026 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "httpserver.h"
+
+#include <QHostAddress>
+#include <QList>
+#include <QTcpServer>
+#include <QTcpSocket>
+
+#include <optional>
+
+namespace {
+
+constexpr int maxRequestSize = 8 * 1024;
+
+QByteArray makeHttpResponse(int statusCode, const char *reasonPhrase,
+                            const QByteArray &mimeType, const QByteArray &body)
+{
+    return QByteArray("HTTP/1.1 ") + QByteArray::number(statusCode) + ' ' + 
reasonPhrase + "\r\n"
+           + "Content-Type: " + mimeType + "\r\n"
+           + "Content-Length: " + QByteArray::number(body.size()) + "\r\n"
+           + "Connection: close\r\n"
+           + "\r\n" + body;
+}
+
+// Returns the request target (the path, without any query string) once the 
HTTP
+// request line has fully arrived, or nullopt while it is still incomplete.
+std::optional<QByteArray> tryParseRequestTarget(const QByteArray &request)
+{
+    const int endOfLine = request.indexOf("\r\n");
+    if (endOfLine < 0)
+        return std::nullopt;
+
+    const QList<QByteArray> parts = request.left(endOfLine).split(' ');
+    if (parts.size() < 2)
+        return QByteArray();
+
+    QByteArray target = parts.at(1);
+    const int queryStart = target.indexOf('?');
+    if (queryStart >= 0)
+        target.truncate(queryStart);
+    return target;
+}
+
+} // namespace
+
+HttpServer::HttpServer(QHash<QByteArray, HttpResource> routes, QObject *parent)
+    : QObject(parent)
+    , m_routes(std::move(routes))
+    , m_server(new QTcpServer(this))
+{
+    connect(m_server, &QTcpServer::newConnection, this, [this]() {
+        while (QTcpSocket *socket = m_server->nextPendingConnection())
+            serveConnection(socket);
+    });
+}
+
+bool HttpServer::listen()
+{
+    if (!m_server->listen(QHostAddress::LocalHost)) {
+        qWarning("Failed to start HTTP server: %s", 
qPrintable(m_server->errorString()));
+        return false;
+    }
+    return true;
+}
+
+quint16 HttpServer::port() const
+{
+    return m_server->serverPort();
+}
+
+void HttpServer::serveConnection(QTcpSocket *socket)
+{
+    connect(socket, &QTcpSocket::disconnected, socket, &QObject::deleteLater);
+    connect(socket, &QTcpSocket::readyRead, socket,
+            [this, socket, request = QByteArray()]() mutable {
+        if (socket->state() != QAbstractSocket::ConnectedState)
+            return;
+
+        request += socket->readAll();
+
+        const std::optional<QByteArray> target = 
tryParseRequestTarget(request);
+        if (!target) {
+            if (request.size() > maxRequestSize) {
+                qWarning("HTTP server: request line exceeded %d bytes; 
dropping connection",
+                         maxRequestSize);
+                socket->disconnectFromHost();
+            }
+            return;
+        }
+
+        const auto route = m_routes.constFind(*target);
+        const auto response = route != m_routes.constEnd()
+            ? makeHttpResponse(200, "OK", route->mimeType, route->body)
+            : makeHttpResponse(404, "Not Found", "text/plain", "Not Found\n");
+        socket->write(response);
+        socket->disconnectFromHost();
+    });
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/httpserver.h
 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/httpserver.h
--- 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/httpserver.h
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/httpserver.h
  2026-09-27 12:11:37.000000000 +0200
@@ -0,0 +1,45 @@
+// Copyright (C) 2026 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HTTPSERVER_H
+#define HTTPSERVER_H
+
+#include <QByteArray>
+#include <QHash>
+#include <QObject>
+
+QT_BEGIN_NAMESPACE
+class QTcpServer;
+class QTcpSocket;
+QT_END_NAMESPACE
+
+struct HttpResource
+{
+    QByteArray mimeType;
+    QByteArray body;
+};
+
+// Serves a fixed table of in-memory resources over HTTP/1.1 on a loopback 
port,
+// mapping each request path to a resource (404 otherwise).
+class HttpServer : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit HttpServer(QHash<QByteArray, HttpResource> routes, QObject 
*parent = nullptr);
+
+    // Binds an ephemeral loopback port. Returns false, after logging a 
warning,
+    // if the port cannot be bound.
+    bool listen();
+
+    // The bound port, or 0 while not listening.
+    quint16 port() const;
+
+private:
+    void serveConnection(QTcpSocket *socket);
+
+    QHash<QByteArray, HttpResource> m_routes;
+    QTcpServer *m_server;
+};
+
+#endif // HTTPSERVER_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/main.cpp 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/main.cpp
--- 
old/qtwebchannel-everywhere-src-6.11.2/examples/webchannel/standalone/main.cpp  
    2026-08-12 04:41:37.000000000 +0200
+++ 
new/qtwebchannel-everywhere-src-6.12.0/examples/webchannel/standalone/main.cpp  
    2026-09-27 12:11:37.000000000 +0200
@@ -3,18 +3,32 @@
 
 #include "dialog.h"
 #include "core.h"
+#include "httpserver.h"
 #include "websocketclientwrapper.h"
 #include "websockettransport.h"
 
 #include <QApplication>
+#include <QByteArray>
 #include <QDesktopServices>
 #include <QDialog>
-#include <QDir>
-#include <QFileInfo>
+#include <QFile>
+#include <QHostAddress>
 #include <QUrl>
 #include <QWebChannel>
 #include <QWebSocketServer>
 
+namespace {
+
+QByteArray readResource(const QString &path)
+{
+    QFile file(path);
+    if (!file.open(QIODevice::ReadOnly))
+        qFatal("Missing embedded resource: %s", qPrintable(path));
+    return file.readAll();
+}
+
+} // namespace
+
 int main(int argc, char** argv)
 {
     QApplication app(argc, argv);
@@ -26,6 +40,16 @@
         return 1;
     }
 
+    // serve the index.html page and its qwebchannel.js over loopback address
+    HttpServer httpServer({
+        { QByteArrayLiteral("/"),
+          { QByteArrayLiteral("text/html"), 
readResource(QStringLiteral(":/index.html")) } },
+        { QByteArrayLiteral("/qwebchannel.js"),
+          { QByteArrayLiteral("text/javascript"), 
readResource(QStringLiteral(":/qwebchannel.js")) } },
+    });
+    if (!httpServer.listen())
+        return 1;
+
     // wrap WebSocket clients in QWebChannelAbstractTransport objects
     WebSocketClientWrapper clientWrapper(&server);
 
@@ -42,7 +66,7 @@
     channel.registerObject(QStringLiteral("core"), &core);
 
     // open a browser window with the client HTML page
-    QUrl url = QUrl::fromLocalFile(BUILD_DIR "/index.html");
+    const QUrl 
url(QStringLiteral("http://127.0.0.1:%1/";).arg(httpServer.port()));
     QDesktopServices::openUrl(url);
 
     dialog.displayMessage(Dialog::tr("Initialization complete, opening browser 
at %1.").arg(url.toDisplayString()));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/qtwebchannel-everywhere-src-6.11.2/licenseRule.json 
new/qtwebchannel-everywhere-src-6.12.0/licenseRule.json
--- old/qtwebchannel-everywhere-src-6.11.2/licenseRule.json     2026-08-12 
04:41:37.000000000 +0200
+++ new/qtwebchannel-everywhere-src-6.12.0/licenseRule.json     2026-09-27 
12:11:37.000000000 +0200
@@ -59,7 +59,7 @@
     {
         "comment": "Files with the following endings are Documentation 
licensed.",
         "file_pattern_ending": [".qdoc", ".qdocinc" , ".qdocconf", "README", 
"qt_attribution.json",
-                                 "README.md"],
+                                 "README.md", "CONTRIBUTING.md"],
         "location":{
             "": {
                 "comment": "",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/src/webchannel/doc/src/javascript.qdoc 
new/qtwebchannel-everywhere-src-6.12.0/src/webchannel/doc/src/javascript.qdoc
--- 
old/qtwebchannel-everywhere-src-6.11.2/src/webchannel/doc/src/javascript.qdoc   
    2026-08-12 04:41:37.000000000 +0200
+++ 
new/qtwebchannel-everywhere-src-6.12.0/src/webchannel/doc/src/javascript.qdoc   
    2026-09-27 12:11:37.000000000 +0200
@@ -11,11 +11,13 @@
 
     To communicate with a QWebChannel or \l [QML] WebChannel, a client must 
use and set up the
     JavaScript API provided by \c qwebchannel.js. For clients run inside \l{Qt 
WebEngine}, you
-    can load the file via \c qrc:///qtwebchannel/qwebchannel.js. For external 
clients, you
-    need to copy the file to your web server. Then instantiate a QWebChannel 
object and pass
-    it a transport object and a callback function, which will be invoked once 
the
-    initialization of the channel finishes and the published objects become 
available. An optional
-    third argument contains an array of converter wrapper functions or a 
single one.
+    can load the file via \c qrc:///qtwebchannel/qwebchannel.js, if the you 
load the page locally,
+    or make \c qwebchannel.js accessible from a \c QWebEngineUrlSchemeHandler 
registered with
+    \c QWebEngineUrlScheme as \c QWebEngineUrlScheme::SecureScheme. For 
external clients, you need to
+    copy the file to your web server. Then instantiate a QWebChannel object 
and pass it a transport
+    object and a callback function, which will be invoked once the 
initialization of the channel
+    finishes and the published objects become available. An optional third 
argument contains an
+    array of converter wrapper functions or a single one.
 
     The transport object implements a minimal message passing interface. It 
should be an object
     with a \c send() function, which takes a stringified JSON message and 
transmits it to the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/src/webchannel/qmetaobjectpublisher.cpp 
new/qtwebchannel-everywhere-src-6.12.0/src/webchannel/qmetaobjectpublisher.cpp
--- 
old/qtwebchannel-everywhere-src-6.11.2/src/webchannel/qmetaobjectpublisher.cpp  
    2026-08-12 04:41:37.000000000 +0200
+++ 
new/qtwebchannel-everywhere-src-6.12.0/src/webchannel/qmetaobjectpublisher.cpp  
    2026-09-27 12:11:37.000000000 +0200
@@ -398,7 +398,8 @@
 {
     auto *metaObject = object->metaObject();
     auto *signalHandler = signalHandlerFor(object);
-    for (const auto propertyInfoVar : objectInfo[KEY_PROPERTIES].toArray()) {
+    const QJsonArray array = objectInfo[KEY_PROPERTIES].toArray();
+    for (const auto propertyInfoVar : array) {
         const QJsonArray &propertyInfo = propertyInfoVar.toArray();
         if (propertyInfo.size() < 2) {
             qWarning() << "Invalid property info encountered:" << 
propertyInfoVar;
@@ -480,7 +481,8 @@
 
         // if the object is auto registered, just send the update only to 
clients which know this object
         if (wrappedObjects.contains(objectId)) {
-            for (QWebChannelAbstractTransport *transport : 
wrappedObjects.value(objectId).transports) {
+            const auto transports = wrappedObjects.value(objectId).transports;
+            for (QWebChannelAbstractTransport *transport : transports) {
                 QJsonArray &arr = specificUpdates[transport];
                 arr.push_back(obj);
             }
@@ -672,7 +674,8 @@
 
         // if the object is wrapped, just send the response to clients which 
know this object
         if (wrappedObjects.contains(objectName)) {
-            for (QWebChannelAbstractTransport *transport : 
wrappedObjects.value(objectName).transports) {
+            const auto transports = 
wrappedObjects.value(objectName).transports;
+            for (QWebChannelAbstractTransport *transport : transports) {
                 transport->sendMessage(message);
             }
         } else {
@@ -785,7 +788,8 @@
     QMetaType target(targetType);
 
     if (target.flags() & QMetaType::PointerToQObject) {
-        QObject *unwrappedObject = 
unwrapObject(value.toObject()[KEY_ID].toString());
+        const QJsonObject obj = value.toObject();
+        QObject *unwrappedObject = unwrapObject(obj.value(KEY_ID).toString());
         if (unwrappedObject == nullptr)
             qWarning() << "Cannot not convert non-object argument" << value << 
"to QObject*.";
         return QVariant::fromValue(unwrappedObject);
@@ -1019,7 +1023,7 @@
         return;
     }
 
-    for (QWebChannelAbstractTransport *transport : 
webChannel->d_func()->transports) {
+    for (QWebChannelAbstractTransport *transport : 
std::as_const(webChannel->d_func()->transports)) {
         transport->sendMessage(message);
     }
 }
@@ -1030,7 +1034,7 @@
         return;
     }
 
-    for (auto *transport : webChannel->d_func()->transports) {
+    for (auto *transport : std::as_const(webChannel->d_func()->transports)) {
         auto &state = transportState[transport];
         state.queuedMessages.append(message);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/qtwebchannel-everywhere-src-6.11.2/src/webchannelquick/qqmlwebchannel.cpp 
new/qtwebchannel-everywhere-src-6.12.0/src/webchannelquick/qqmlwebchannel.cpp
--- 
old/qtwebchannel-everywhere-src-6.11.2/src/webchannelquick/qqmlwebchannel.cpp   
    2026-08-12 04:41:37.000000000 +0200
+++ 
new/qtwebchannel-everywhere-src-6.12.0/src/webchannelquick/qqmlwebchannel.cpp   
    2026-09-27 12:11:37.000000000 +0200
@@ -28,31 +28,6 @@
     \sa QWebChannel, {Qt WebChannel JavaScript API}{JavaScript API}
 */
 
-/*!
-  \qmlproperty list<QtObject> WebChannel::transports
-  A list of transport objects, which implement QWebChannelAbstractTransport. 
The transports
-  are used to talk to the remote clients.
-
-  \sa connectTo(), disconnectFrom()
-*/
-
-/*!
-  \qmlproperty list<QtObject> WebChannel::registeredObjects
-
-  \brief A list of objects which should be accessible to remote clients.
-
-  The objects must have the attached \l id property set to an identifier, 
under which the
-  object is then known on the HTML side.
-
-  Once registered, all signals and property changes are automatically 
propagated to the clients.
-  Public invokable methods, including slots, are also accessible to the 
clients.
-
-  If one needs to register objects which are not available when the component 
is created, use the
-  imperative registerObjects method.
-
-  \sa registerObjects(), id
-*/
-
 class QQmlWebChannelPrivate : public QWebChannelPrivate
 {
     Q_DECLARE_PUBLIC(QQmlWebChannel)
@@ -169,20 +144,20 @@
 }
 
 /*!
-    \property QQmlWebChannel::registeredObjects
+  \qmlproperty list<QtObject> WebChannel::registeredObjects
 
-    This property holds the list of objects which should be accessible to 
remote clients.
+  \brief A list of objects that should be accessible to remote clients.
 
-    The objects must have the attached id property set to an identifier, under 
which the
-    object is then known on the HTML side.
+  The objects must have the attached \l id property set to an identifier, 
under which the
+  object is then known on the HTML side.
 
-    Once registered, all signals and property changes are automatically 
propagated to the clients.
-    Public invokable methods, including slots, are also accessible to the 
clients.
+  Once registered, all signals and property changes are automatically 
propagated to the clients.
+  Public invokable methods, including slots, are also accessible to the 
clients.
 
-    If one needs to register objects which are not available when the 
component is created, use the
-    imperative registerObjects method.
+  If you need to register objects that are not available when the component is 
created, use the
+  imperative registerObjects method.
 
-    \sa registerObjects(), id
+  \sa registerObjects(), id
 */
 QQmlListProperty<QObject> QQmlWebChannel::registeredObjects()
 {
@@ -237,13 +212,14 @@
 }
 
 /*!
-    \property QQmlWebChannel::transports
+  \qmlproperty list<QtObject> WebChannel::transports
 
-    This property holds a list of transport objects, which implement 
QWebChannelAbstractTransport.
-    The transports are used to talk to the remote clients.
+  A list of transport objects that implement QWebChannelAbstractTransport. The 
transports
+  are used to talk to the remote clients.
 
-    \sa connectTo(), disconnectFrom()
+  \sa connectTo(), disconnectFrom()
 */
+
 QQmlListProperty<QObject> QQmlWebChannel::transports()
 {
     return QQmlListProperty<QObject>(this, nullptr, transports_append, 
transports_count,

Reply via email to