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,