[qt/qt-creator/qt-creator]: Summary of bulk changes made

KDE Git Services - Bulk Change <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git repository change summary for qt/qt-creator/qt-creator
Pushed by mirror-service into branch 'master'.
Changed from 976f038b0c846c4827dc323378fb3e6b08a86427 to f0e83d756db657e8f6f89c343e3227a645c58388
Acknowledgement was received that this change introduces only existing code that has been pushed to another public open source repository.

This change contains the following new commits:

Git commit a845fb3173be7071775a9ead1747abbe0f8454e6 by Marcus Tillmanns on 10/08/2026 at 12:45..
Profiler: Drop the QtSupport dependency in the WebAssembly build

The Profiler plugin only uses QtSupport for the live-profiling launch
integration (selecting a Qt kit/version to run and profile an app),
which is unavailable on WebAssembly. Pulling it in also drags in
ProParser and qmake, which do not build there.

Make QtSupport a conditional PLUGIN_DEPENDS (dropped on Emscripten)
and guard the few QtSupport call sites so the offline trace viewer
builds without it.

The QML file finder consequently stays unpopulated there, so the
viewer resolves no source locations and skips detail rewriting. It
has no project to find files in anyway.

profiler.qbs keeps its unconditional QtSupport dependency: qbs has no
Emscripten target.

Assisted-By: Claude Opus 4.8 (1M context) <[email protected]>
Change-Id: I542b02a1b0f5f8cbcb8b32fe9fb6db2afa3e7b86
Reviewed-by: hjk <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/a845fb3173be7071775a9ead1747abbe0f8454e6

Git commit 1102ec944332236cdfab4f9e6bf7326e3d66cb50 by hjk on 10/08/2026 at 13:55..
Tracing: Report only visible blocks from forEachRulerTick

The tick callback was clipped to the visible width, the block callback
was not, leaving TimeRuler to repeat the check. Clip both, and write
down which positions the callbacks report and which are clipped.

Assisted-by: Claude Code
Change-Id: I1c65e6efe3d4bc44efa4b29fe69a1575a7808ab0
Reviewed-by: Alessandro Portale <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/1102ec944332236cdfab4f9e6bf7326e3d66cb50

Git commit 5fc104e60ae8196bbf41fd639aa7bb9a8ebb09c3 by hjk on 10/08/2026 at 13:55..
McpServer: Add widget resolver and input tools

Add find_widgets, click_widget, type_text and select_combo_item so
MCP scenarios can address the UI semantically ("the OK button in
dialog X") instead of by screen coordinates, which rot on layout
changes and encode nothing a reader can verify.

find_widgets walks QApplication::allWidgets() and matches on
objectName, visible text, class (exact or subclass) and window
title, reporting geometry, state and window id. The action tools
build on it and treat more than one match as an error, so an
ambiguous query is a bug in the scenario rather than a coin toss.
Buttons are clicked through their own click() slot and combo items
chosen via setCurrentIndex(), avoiding the popup and dropdown
pitfalls of synthetic input.

Assisted-by: Claude Code
Change-Id: Ib8c47cd36f53d7b26a961e0214b63a9069122633
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/5fc104e60ae8196bbf41fd639aa7bb9a8ebb09c3

Git commit 4711d159e80c206831cdf632592cd3f7360898a8 by hjk on 10/08/2026 at 13:55..
McpServer: Add query, assertion and screenshot tools

Add widget_exists, list_windows, read_pane and screenshot, so an MCP
client can observe the UI it drives, not just act on it.

widget_exists and list_windows reuse the widget resolver to answer
"did the preview open?" and "which dialog is up?". read_pane returns
the plain text of an output pane (Application Output, Compile Output,
...) by display name, distinct from get_application_output which
returns Qt Creator's own log; it lists the available panes when asked
without a name and flags non-text panes such as Issues.

screenshot renders a window with QWidget::grab() rather than an
external screen grab. Because grab() repaints the widget in-process
the image is deterministic and never blank, so no compositor and no
settle-and-retry are needed. The PNG is embedded as base64 or saved
to a path.

Assisted-by: Claude Code
Change-Id: Idbd573a4b3bb0858ce9531102a345d89c006a7a2
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/4711d159e80c206831cdf632592cd3f7360898a8

Git commit c0dfe4d2fb6496fab55352430d3f56011537faec by hjk on 10/08/2026 at 13:56..
CmdBridge: Fix exec on Windows

Standard input never reached the child: HANDLE_FLAG_INHERIT was cleared
on the read end, the end the child needs, leaving our write end
inheritable so the child held its own input open. Only our end is
cleared now, and the payload is written from a thread of its own, so a
child that does not drain its input cannot stop us from reading its
output - writing it all up front deadlocked past the 64K pipe buffer.

Env was ignored altogether, CreateProcessW being passed a null
environment block, so a command always ran with the bridge's own
environment however carefully the client had built one.

Cancelling an exec closed the process handle twice, once through
exec_kill() and again on the way out, and read the exit code from the
handle in between - from an uninitialised variable, the return of
GetExitCodeProcess() never being checked. The registry entry was also
only ever dropped after a cancel, so a successful exec leaked an
allocation and left a stale pid behind.

Arguments longer than 4096 characters were dropped and the command line
was cut off at 8192, silently: a long compiler invocation ran with fewer
arguments than it was given. It grows as needed now, quoted so that
CommandLineToArgvW() parses it back unchanged.

Output was collected by peeking a hundred times per millisecond, which
kept a core busy for the whole run of any command that was merely slow.

Amends decaf54a624e5c839f35a8f66677b73238d66857.

Assisted-by: Claude Code
Change-Id: Ie08abfe2e01845dacded91a0a995fb2f7a7551a2
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/c0dfe4d2fb6496fab55352430d3f56011537faec

Git commit a70572c08701382bf58fc76affd030ac691ea8dc by hjk on 10/08/2026 at 13:56..
Utils: Add normalizeTerminalOutput()

A pseudo-terminal is not a transparent byte pipe: the remote line
editor, and ConPTY on Windows, inject escape sequences and redraw
lines with carriage returns and backspaces. Anything that matches on
output read from a Process with pty data needs to reduce the stream to
the text a terminal would display first.

The tqtc-plugin-vxworks device shell grew a local copy of this, which
is what prompted moving it here.

Assisted-by: Claude Code
Change-Id: I9c6e740ace0bd79393698ace0389640850faf5d8
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/a70572c08701382bf58fc76affd030ac691ea8dc

Git commit 1adad61578f09d610994543186283da4775eb215 by hjk on 10/08/2026 at 13:56..
ProjectExplorer: Allow bypassing the known_hosts file

Devices whose hardware gets reflashed come back with a new host key.
The stale known_hosts entry then makes ssh refuse password
authentication, so those device types need to opt out of the file
rather than have every user clean up by hand.

Not tied to SshHostKeyCheckingNone, which is what IDevice::fromMap()
defaults to for every device that has no stored value.

Assisted-by: Claude Code
Change-Id: I78d0dadbcd85616041d7865332ae43daccc57fbb
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/1adad61578f09d610994543186283da4775eb215

Git commit 38edb7623601c819378167b4086c8b4a8d97dc69 by hjk on 10/08/2026 at 13:56..
Core: Give SecretAspect an explicit service and key, and a remover

Deriving both from the settings key by splitting it at the last '.' is
not discoverable, and it forces anyone who wants to delete a secret to
reproduce the split by hand. A mismatch is silent: the entry stays in
the keychain.

deleteSecret() also removes the plaintext fallback entry, which
survived a hand-rolled CredentialQuery because that only talks to
QKeychain.

Assisted-by: Claude Code
Change-Id: Ie78e307c19b00b2d127b55b8c3ab7c867da5ac67
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/38edb7623601c819378167b4086c8b4a8d97dc69

Git commit f341edef4be8148d0466d3710017e1e3a0a690f2 by hjk on 10/08/2026 at 13:57..
CmdBridge: Stop exec from waiting on output that cannot end

Commands run on several threads, and the pipes were created without
O_CLOEXEC, so a child spawned by one exec inherited the pipes of every
other exec in flight and held their write ends open. The exec behind it
then waited for an end of output that could only come once that
unrelated process exited. A spawned program saw thirteen descriptors it
had no business having, where the Go implementation passes three.
Everything the bridge opens is now closed on exec: pipes, files, the
inotify queue and the watched file handles.

Draining the child's output blocked until read() returned 0, which on a
still-open pipe means waiting for more. A child waiting for the rest of
its own standard input therefore never got it, because the loop that
feeds it was never reached again - both sides sat there until the
watchdog killed the bridge. The reads are non-blocking now, and the
four near-identical copies of the forwarding code have become one.

The exit code could come from an unset variable: the poll timeout path
reaps the child, and the wait afterwards then failed with ECHILD and
left the status it read untouched.

Amends decaf54a624e5c839f35a8f66677b73238d66857.

Assisted-by: Claude Code
Change-Id: Id83952bcf284e373057f533d72db350d3281a324
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/f341edef4be8148d0466d3710017e1e3a0a690f2

Git commit b1befb5f25059b4171ee791d718da242b3eb9023 by hjk on 10/08/2026 at 13:57..
CmdBridge: Close a forwarded connection only once

Stopping a forward server closed every connection's descriptor while its
own thread was still using it, and that thread closed it again on the
way out. In between, the number could have been handed to an unrelated
file or socket, which the second close then shut. Whoever gets there
first closes it now, and the other side sees -1.

The select() wrapper compared a SOCKET against 0 to spot an unused slot,
which is always true for an unsigned type, so a closed connection was
passed to select() - and when that failed, nothing had set revents and
the caller read whatever was on the stack.

Amends decaf54a624e5c839f35a8f66677b73238d66857.

Assisted-by: Claude Code
Change-Id: Ic9fc9cbd4183136b67d9d07d32c0959ee9075dfa
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/b1befb5f25059b4171ee791d718da242b3eb9023

Git commit 3ed1fb6f0e0c7e3cad076e192ecded7dcd72e25c by hjk on 10/08/2026 at 13:57..
CmdBridge: Follow a watched file across atomic saves

Writing a temporary and renaming it over the original is how editors
save, and it detaches an inotify watch from the file. The code meant to
re-arm the watch looked for IN_DELETE, which inotify reports for entries
*inside* a watched directory and never for the watched file itself, and
IN_DELETE_SELF, which has to be requested and was not in the mask. So it
never ran: a watched file stopped being watched the first time anything
saved it, and nothing said so. The mask now asks for IN_DELETE_SELF and
the re-arm also triggers on IN_MOVE_SELF and IN_IGNORED, the one event
that says for certain the watch is gone. Events that map to no operation
are no longer forwarded as an empty one.

On Windows a file could not be watched at all, ReadDirectoryChangesW
working only on directories; the request was refused and the client
heard nothing about the file again. It is watched through its parent
now, with the events filtered back down to the one name, which is what
fsnotify did.

test_watch_file_readd_on_recreation asserted the old Windows behaviour,
so it moves along with it rather than one commit later.

Amends decaf54a624e5c839f35a8f66677b73238d66857.

Assisted-by: Claude Code
Change-Id: I383471087319737cf175817995ead7dcf7128795
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/3ed1fb6f0e0c7e3cad076e192ecded7dcd72e25c

Git commit a892cf5928f43085abdbe33c0f3e9d6539d5e11d by hjk on 10/08/2026 at 13:59..
Debugger: Do not fetch registers twice per step with LLDB

LldbEngine::updateAll() fetched the stack and, separately, reloaded the
registers. But fetchStack()'s completion reaches activateFrame(), which
already reloads the registers, so each step fetched them twice while the
Registers view was open. Drop the redundant call; the fetchStack ->
activateFrame path still covers stepping, frame switches and thread
switches (selectThread also goes through fetchStack).

Fixes: QTCREATORBUG-17843
Assisted-by: Claude Code
Change-Id: Id2021752b5324377bb29941696d7a3d615c84c0f
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/a892cf5928f43085abdbe33c0f3e9d6539d5e11d

Git commit 37a466f5318b1c0ac9c71f91901f0d691eda907b by Alessandro Portale (on behalf of Eike Ziller) on 10/08/2026 at 14:27..
QtQuick wizard: Make Figma2Qt detection opt-out

The option is always shown, but the selected value is remembered
and used as default for later wizard usages.

Also moves all the check boxes together by putting the (most important)
Qt version selection to the top.

Fixes: QTCREATORBUG-34719
Change-Id: I2076b6bf9176e1bfc91348f4e9a209b9eb8fa5f6
Reviewed-by: Mitch Curtis <[email protected]>
Reviewed-by: Alessandro Portale <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/37a466f5318b1c0ac9c71f91901f0d691eda907b

Git commit 93ae422e4977bcfb059774fa35d42190fa5fee40 by Alessandro Portale (on behalf of Paul Olav Tvete) on 10/08/2026 at 14:35..
Update to latest QCanvasPainter API

QCanvasPainter::setRenderHint was removed during API review. In
Qt 6.12, the only way to enable/disable antialiasing is through
setAntialias(float), which should also work with the tech
preview API in Qt 6.11.

Change-Id: I2f5e5bc5385cee6ec0ed133ae5f725ac78de53e7
Reviewed-by: Marcus Tillmanns <[email protected]>
Reviewed-by: Alessandro Portale <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/93ae422e4977bcfb059774fa35d42190fa5fee40

Git commit 78025a0fb21722321057e96ad5abaac0b1745179 by hjk on 10/08/2026 at 15:17..
CmdBridge: Test the command spelling the client actually sends

build_cbor_map() cannot express a nested map, so 94 of the 96 commands
the tests build were flat - {"Type": "find", "Directory": ...} - which
the C server accepts as a fallback but the client never sends and the Go
server never understood. Everything that mattered about find, stat and
exec was therefore tested through a shape nothing in production uses,
which is why a recursive find returning only its top directory, an
untranslated Windows file time, an ignored Env and a stdin that never
reached the child all passed 78 tests on both platforms.

build_cbor() encodes arbitrary values, and the new tests use it to cover
those cases and the descriptor and deadlock ones with them.

test_watch_file_readd_on_recreation no longer returns early on Windows,
where watching a file is expected to work now.

Assisted-by: Claude Code
Change-Id: I84d5083d42a0ddda6d7623f3be6b397aca1d1a7d
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/78025a0fb21722321057e96ad5abaac0b1745179

Git commit 43e05ed247f4ddf5e32ad7c21418cd8398a0e1f3 by hjk on 10/08/2026 at 15:17..
CmdBridge: Keep the sources 7-bit clean

The em dashes were the reason to keep writing them: a reviewer can point
at the neighbouring file and call the ASCII spelling the inconsistent
one. Removing them in one go settles that, and keeps the fix that
prompted it free of unrelated churn.

The Unicode file names in cmdbridge_py_test.py stay - they are what the
test is about.

Assisted-by: Claude Code
Change-Id: Ia0efac4bb2027e77b05804bb62e7a357fc21a0c5
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/43e05ed247f4ddf5e32ad7c21418cd8398a0e1f3

Git commit 89ebdd6c1f8e0bbaae571774a2bfa8e8160b93a9 by hjk on 10/08/2026 at 15:18..
Utils: Add StyleHelper::tintedPixmap()

Flatten a pixmap to a single color while keeping its alpha (a SourceIn
fill). Unlike Icon's mask tint, which derives coverage from luminance
and discards alpha, this preserves transparency - so tinting a
transparent SVG does not turn it into a solid rectangle.

Also drop a redundant second SourceIn tint pass in drawIconWithShadow();
the two identical passes produced the same result.

Assisted-by: Claude Code
Change-Id: I0636879d92d61171f4bf5a9895ce2d37a875d5ce
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/89ebdd6c1f8e0bbaae571774a2bfa8e8160b93a9

Git commit 32f47a8a0698f6b97ed10fdba69c3dcdafe2a43a by hjk on 10/08/2026 at 15:20..
Debugger: Add the CDB native combined service round-trip

Bring up the NativeQmlDebugger service round-trip on CDB. The service is
driven by inferior calls with string arguments, and cdb's .call rejects
string literals, so strings are marshalled into target memory and passed
by pointer.

qtcreatorcdbext: add the two primitives the marshalling needs:
- cdbext.writeRawMemory(address, bytes), mirroring readRawMemory via
  IDebugDataSpaces::WriteVirtual;
- cdbext.allocate(size), via a new ExtensionContext::allocateMemory that
  runs '.dvalloc' and parses the returned address.

cdbbridge.py: implement the service-call seam overrides on top of those -
marshalString() (allocate -> write bytes+NUL -> address),
callServiceFunction() (module-qualified cdbext.call with (char *)
pointers), and readServiceVariable().

Validated end to end on Windows (cdb 10.0.26100, Qt 6.11.0 msvc2022_64):
enable service -> setbreakpoint -> backtrace returns a live QML frame.
cdb-roundtrip.cdb captures the validated flow and the two cdb-script
gotchas (';' is a command separator; '!qtcreatorcdbext.pid' hooks the
output callbacks that .call / allocate need).

Out of scope (next, needs Windows iteration): the interpreter breakpoint
resolver / "QML stop" wiring (CdbEngine has no in-debugger event loop),
stepping orchestration, and the C++->QML skip mechanism. See
tests/manual/debugger/qmlmix/cdb-reference.md sections 5-7.

Assisted-by: Claude Code
Change-Id: I35f4eb653e38027cb1febfc8653b8478b5b49a59
Reviewed-by: hjk <[email protected]>
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/32f47a8a0698f6b97ed10fdba69c3dcdafe2a43a

Git commit 443231cb81da87210cc0e4eef9d5629b6469f13f by hjk on 10/08/2026 at 15:21..
Debugger: Drive native combined debugging from CdbEngine

Build on the CDB service round-trip and the two internal hooks armed in
runEngine() to make the CDB engine handle the QML side of a native
combined (C++/QML) session.

CdbEngine::insertBreakpoint now routes QML breakpoints to the in-process
NativeQmlDebugger service via the bridge (insertInterpreterBreakpoint)
instead of the C++ path. examineStopReason() intercepts the two hook
frames by the stopped function name and handles them asynchronously,
without a user-visible stop, mirroring the conditional-breakpoint
pattern: qt_qmlDebugConnectorOpen resolves the pending QML breakpoints
and continues, while qt_qmlDebugMessageAvailable asks the bridge to
decode the event and stops only for a real QML break.

Unlike GDB and LLDB, which decide stops from a Python stop handler, CDB
drives stops from the C++ engine, so dumper.py gains
reportInterpreterMessage() to report the decoded event back to the
engine over the script channel.

With this a QML breakpoint in a native combined session is inserted,
resolved once the connector opens, and stops the debugger when hit,
verified against a live CDB session. The QML stack splice (the QML
frame on top of the C++ stack) is left for a follow-up.

Task-number: QTCREATORBUG-7433
Task-number: QTCREATORBUG-2171
Assisted-by: Claude Code
Change-Id: I33c0aa76c1cd146b0c793ab06a7c989078d47790
Reviewed-by: Marcus Tillmanns <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/443231cb81da87210cc0e4eef9d5629b6469f13f

Git commit f0e83d756db657e8f6f89c343e3227a645c58388 by hjk (on behalf of Alessandro Portale) on 10/08/2026 at 15:21..
Remote: Give remote devices recognizable OS icons

The remote macOS, Windows and Linux device factories all set an empty
icon, so the devices showed up without one (e.g. in the file dialog's
device sidebar).

Add three simple, recognizable, non-trademark OS glyphs as new masks in
the icon source SVG (looped command square for macOS, a four-pane grid
for Windows, a penguin for Linux), each with a large and a small
variant, and wire each factory to its combined icon.

Assisted-by: Claude Code
Change-Id: I276214675481847919bcc409adbb1e7a777c856d
Reviewed-by: Alessandro Portale <[email protected]>
https://invent.kde.org/qt/qt-creator/qt-creator/-/commit/f0e83d756db657e8f6f89c343e3227a645c58388
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.