Bug#1109721: unblock: kinfocenter/4:6.3.6-1
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: kinfocenter@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:kinfocenter
User: release.debian.org@packages.debian.org
Usertags: unblock
Dear Release Team,
please unblock package kinfocenter.
[ Reason ]
It contains the following changes :
* New upstream release (6.3.6).
- Fix strange horizontal scrolling in applications view that makes no
sense. (kde#502948)
* Backport upstream commits:
- Fix total amount of memory in system information. [f44af69b]
(kde#500412)
- Make UI for energy history graph more stable. [2067b2ab] (kde#490239)
[ Tests ]
Fix for reproducible issues have been successfully tested locally. No
regression spotted.
[ Risks ]
Only contains the latest point release for the 6.3 Plasma branch and
backported commits. Further fixes can easily be backported or the
changes reverted.
[ Checklist ]
[x] all changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in testing
Thanks !
unblock kinfocenter/4:6.3.6-1
diff -Nru kinfocenter-6.3.5/CMakeLists.txt kinfocenter-6.3.6/CMakeLists.txt
--- kinfocenter-6.3.5/CMakeLists.txt 2025-05-06 19:56:44.000000000 +0200
+++ kinfocenter-6.3.6/CMakeLists.txt 2025-07-08 13:44:06.000000000 +0200
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.16)
project(kinfocenter)
-set(PROJECT_VERSION "6.3.5")
+set(PROJECT_VERSION "6.3.6")
set(QT_MIN_VERSION "6.7.0")
diff -Nru kinfocenter-6.3.5/debian/changelog kinfocenter-6.3.6/debian/changelog
--- kinfocenter-6.3.5/debian/changelog 2025-05-21 09:43:06.000000000 +0200
+++ kinfocenter-6.3.6/debian/changelog 2025-07-15 13:57:45.000000000 +0200
@@ -1,3 +1,16 @@
+kinfocenter (4:6.3.6-1) unstable; urgency=medium
+
+ [ Aurélien COUDERC ]
+ * New upstream release (6.3.6).
+ - Fix strange horizontal scrolling in applications view that makes no
+ sense. (kde#502948)
+ * Backport upstream commits:
+ - Fix total amount of memory in system information. [f44af69b]
+ (kde#500412)
+ - Make UI for energy history graph more stable. [2067b2ab] (kde#490239)
+
+ -- Aurélien COUDERC <coucouf@debian.org> Tue, 15 Jul 2025 13:57:45 +0200
+
kinfocenter (4:6.3.5-1) unstable; urgency=medium
[ Aurélien COUDERC ]
diff -Nru kinfocenter-6.3.5/debian/patches/series kinfocenter-6.3.6/debian/patches/series
--- kinfocenter-6.3.5/debian/patches/series 1970-01-01 01:00:00.000000000 +0100
+++ kinfocenter-6.3.6/debian/patches/series 2025-07-15 13:57:38.000000000 +0200
@@ -0,0 +1,2 @@
+upstream_f44af69b_kcms-about-distro-Add-help-property-to-Entry-show-total-amount-of-installed-memory-in-MemoryEntry.patch
+upstream_2067b2ab_kcms-energy-More-stable-UI-for-history-graph.patch
diff -Nru kinfocenter-6.3.5/debian/patches/upstream_2067b2ab_kcms-energy-More-stable-UI-for-history-graph.patch kinfocenter-6.3.6/debian/patches/upstream_2067b2ab_kcms-energy-More-stable-UI-for-history-graph.patch
--- kinfocenter-6.3.5/debian/patches/upstream_2067b2ab_kcms-energy-More-stable-UI-for-history-graph.patch 1970-01-01 01:00:00.000000000 +0100
+++ kinfocenter-6.3.6/debian/patches/upstream_2067b2ab_kcms-energy-More-stable-UI-for-history-graph.patch 2025-07-15 13:57:38.000000000 +0200
@@ -0,0 +1,144 @@
+From 2067b2abf6f22ddc5fa1b4edc75f9add0e8b5de7 Mon Sep 17 00:00:00 2001
+From: Ismael Asensio <isma.af@gmail.com>
+Date: Thu, 30 Jan 2025 21:20:32 +0100
+Subject: [PATCH] kcms/energy: More stable UI for history graph
+
+For devices that have history data available, always show the graph.
+If there are no data points for the selected time range, simply show
+a placeholder message instead of hiding it.
+
+On the other hand, always hide the graph and options for those devices
+that cannot provide a history, removing also the potentially confusing
+warning message
+
+This moves away from having an annoyingly jumping an unclear UI.
+
+BUG: 490239
+FIXED-IN: 6.4
+---
+ kcms/energy/ui/Graph.qml | 38 ++++++++++++++++++++------------------
+ kcms/energy/ui/main.qml | 35 +++++++++++++++++------------------
+ 2 files changed, 37 insertions(+), 36 deletions(-)
+
+diff --git a/kcms/energy/ui/Graph.qml b/kcms/energy/ui/Graph.qml
+index 66f7a861..75c9224a 100644
+--- a/kcms/energy/ui/Graph.qml
++++ b/kcms/energy/ui/Graph.qml
+@@ -93,31 +93,33 @@ Canvas
+ var currentUnixTime = Date.now()
+ var xMinUnixTime = currentUnixTime - xDuration * 1000
+
+- // Draw the line graph
+ c.beginPath();
+
+- var index = 0
++ // Draw the line graph if we have enough points
++ if (data.length >= 2) {
++ var index = 0
+
+- while ((index < data.length - 1) && (data[index].x < (xMinUnixTime / 1000))) {
+- index++
+- }
++ while ((index < data.length - 1) && (data[index].x < (xMinUnixTime / 1000))) {
++ index++
++ }
+
+- var firstPoint = scalePoint(data[index], currentUnixTime)
+- c.moveTo(firstPoint.x, firstPoint.y)
++ var firstPoint = scalePoint(data[index], currentUnixTime)
++ c.moveTo(firstPoint.x, firstPoint.y)
+
+- var point
+- for (var i = index + 1; i < data.length; i++) {
+- if (data[i].x > (xMinUnixTime / 1000)) {
+- point = scalePoint(data[i], currentUnixTime)
+- c.lineTo(point.x, point.y)
++ var point
++ for (var i = index + 1; i < data.length; i++) {
++ if (data[i].x > (xMinUnixTime / 1000)) {
++ point = scalePoint(data[i], currentUnixTime)
++ c.lineTo(point.x, point.y)
++ }
+ }
++
++ c.stroke();
++ c.strokeStyle = 'rgba(0, 0, 0, 0)';
++ c.lineTo(point.x, height - yPadding);
++ c.lineTo(firstPoint.x, height - yPadding);
++ c.fill();
+ }
+-
+- c.stroke();
+- c.strokeStyle = 'rgba(0, 0, 0, 0)';
+- c.lineTo(point.x, height - yPadding);
+- c.lineTo(firstPoint.x, height - yPadding);
+- c.fill();
+
+ c.closePath()
+
+diff --git a/kcms/energy/ui/main.qml b/kcms/energy/ui/main.qml
+index e8670130..ba71ba77 100644
+--- a/kcms/energy/ui/main.qml
++++ b/kcms/energy/ui/main.qml
+@@ -238,18 +238,17 @@ KCM.SimpleKCM {
+ }
+ }
+
++ HistoryModel {
++ id: history
++ duration: timespanComboDurations[timespanCombo.currentIndex]
++ device: currentUdi
++ type: root.historyType
++ }
++
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: Kirigami.Units.smallSpacing
+- visible: !!currentBattery
+-
+-
+- HistoryModel {
+- id: history
+- duration: timespanComboDurations[timespanCombo.currentIndex]
+- device: currentUdi
+- type: root.historyType
+- }
++ visible: !!currentBattery && history.available
+
+ Graph {
+ id: graph
+@@ -291,7 +290,15 @@ KCM.SimpleKCM {
+ }
+ }
+ yStep: root.historyType == HistoryModel.RateType ? 10 : 20
+- visible: history.count > 1
++ }
++
++ // Reparented to keep the item outside of a layout and the graph canvas
++ Kirigami.PlaceholderMessage {
++ parent: graph
++ anchors.centerIn: parent
++ visible: graph.data.length < 2
++ width: parent.width - (Kirigami.Units.largeSpacing * 4)
++ text: i18nc("@info:status", "No history information for this time span")
+ }
+
+ GridLayout {
+@@ -343,14 +350,6 @@ KCM.SimpleKCM {
+ onClicked: history.refresh()
+ }
+ }
+-
+- Kirigami.InlineMessage {
+- Layout.fillWidth: true
+- Layout.topMargin: Kirigami.Units.smallSpacing
+- showCloseButton: true
+- text: i18n("This type of history is currently not available for this device.")
+- visible: !graph.visible
+- }
+ }
+
+ ColumnLayout {
+--
+GitLab
+
diff -Nru kinfocenter-6.3.5/debian/patches/upstream_f44af69b_kcms-about-distro-Add-help-property-to-Entry-show-total-amount-of-installed-memory-in-MemoryEntry.patch kinfocenter-6.3.6/debian/patches/upstream_f44af69b_kcms-about-distro-Add-help-property-to-Entry-show-total-amount-of-installed-memory-in-MemoryEntry.patch
--- kinfocenter-6.3.5/debian/patches/upstream_f44af69b_kcms-about-distro-Add-help-property-to-Entry-show-total-amount-of-installed-memory-in-MemoryEntry.patch 1970-01-01 01:00:00.000000000 +0100
+++ kinfocenter-6.3.6/debian/patches/upstream_f44af69b_kcms-about-distro-Add-help-property-to-Entry-show-total-amount-of-installed-memory-in-MemoryEntry.patch 2025-07-15 08:10:45.000000000 +0200
@@ -0,0 +1,294 @@
+From f44af69b07ed19d076819fe4cc84e5777747d957 Mon Sep 17 00:00:00 2001
+From: Oliver Beard <olib141@outlook.com>
+Date: Thu, 20 Feb 2025 22:43:47 +0000
+Subject: [PATCH] kcms/about-distro: Add help property to Entry & show total
+ amount of installed memory in MemoryEntry This provides additional
+ information to the user, with a new help tooltip that clarifies the displayed
+ values as is contextually appropriate. For example, if the shown message is
+ "32 GB of RAM (31.3 GB usable)", the tooltip will elucidate that some memory
+ is reserved for use by system hardware. BUG: 500412
+
+---
+ CMakeLists.txt | 4 +
+ kcms/about-distro/src/CMakeLists.txt | 5 +
+ kcms/about-distro/src/Entry.cpp | 5 +
+ kcms/about-distro/src/Entry.h | 3 +
+ kcms/about-distro/src/MemoryEntry.cpp | 144 +++++++++++++++++++++++---
+ kcms/about-distro/src/MemoryEntry.h | 9 +-
+ kcms/about-distro/src/ui/main.qml | 5 +
+ 7 files changed, 157 insertions(+), 18 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 51f94078..e3005878 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -41,6 +41,10 @@ find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
+ find_package(PkgConfig)
+ pkg_check_modules(libdrm REQUIRED IMPORTED_TARGET libdrm)
+
++if(CMAKE_SYSTEM_NAME MATCHES "Linux")
++ find_package(UDev REQUIRED COMPONENTS UDev)
++endif()
++
+ ecm_find_qmlmodule(org.kde.kirigami 2.5)
+
+ macro(kinfocenter_add_kcm target)
+diff --git a/kcms/about-distro/src/CMakeLists.txt b/kcms/about-distro/src/CMakeLists.txt
+index 13ad8d0a..d731d81a 100644
+--- a/kcms/about-distro/src/CMakeLists.txt
++++ b/kcms/about-distro/src/CMakeLists.txt
+@@ -43,6 +43,11 @@ target_link_libraries(kcm_about-distro PRIVATE
+ PkgConfig::libdrm
+ )
+
++if(UDev_FOUND)
++ target_link_libraries(kcm_about-distro PRIVATE UDev::UDev)
++ target_compile_definitions(kcm_about-distro PRIVATE UDEV_FOUND)
++endif()
++
+ cmake_path(RELATIVE_PATH KDE_INSTALL_FULL_LIBEXECDIR BASE_DIRECTORY "${KDE_INSTALL_FULL_PLUGINDIR}/plasma/kcms/" OUTPUT_VARIABLE LIBEXECDIR_FROM_KCM)
+
+ target_compile_options(
+diff --git a/kcms/about-distro/src/Entry.cpp b/kcms/about-distro/src/Entry.cpp
+index a4077efd..63dc71fb 100644
+--- a/kcms/about-distro/src/Entry.cpp
++++ b/kcms/about-distro/src/Entry.cpp
+@@ -82,4 +82,9 @@ Hint Entry::localizedHint(Language) const
+ return {};
+ }
+
++QString Entry::localizedHelp(Language) const
++{
++ return {};
++}
++
+ #include "moc_Entry.cpp"
+diff --git a/kcms/about-distro/src/Entry.h b/kcms/about-distro/src/Entry.h
+index e5c3f6f1..bc053a4f 100644
+--- a/kcms/about-distro/src/Entry.h
++++ b/kcms/about-distro/src/Entry.h
+@@ -78,6 +78,9 @@ public:
+ // Returns a hint for the user to consider when interpreting the value.
+ Q_INVOKABLE [[nodiscard]] virtual Hint localizedHint(Language language = Language::System) const;
+
++ // Returns a help string for the entry, shown with a ContextualHelpButton
++ Q_SCRIPTABLE [[nodiscard]] virtual QString localizedHelp(Language language = Language::System) const;
++
+ protected:
+ // Returns localized QString for the given language.
+ QString localize(const KLocalizedString &string, Language language) const;
+diff --git a/kcms/about-distro/src/MemoryEntry.cpp b/kcms/about-distro/src/MemoryEntry.cpp
+index 1baaea2a..b58b5523 100644
+--- a/kcms/about-distro/src/MemoryEntry.cpp
++++ b/kcms/about-distro/src/MemoryEntry.cpp
+@@ -9,6 +9,9 @@
+
+ #ifdef Q_OS_LINUX
+ #include <sys/sysinfo.h>
++#ifdef UDEV_FOUND
++#include <libudev.h>
++#endif
+ #elif defined(Q_OS_FREEBSD)
+ // clang-format off
+ #include <sys/types.h>
+@@ -21,34 +24,141 @@ MemoryEntry::MemoryEntry()
+ {
+ }
+
+-qlonglong MemoryEntry::calculateTotalRam()
++std::optional<qlonglong> MemoryEntry::calculateTotalRam()
++{
++#if defined(Q_OS_LINUX) && defined(UDEV_FOUND)
++ std::unique_ptr<struct udev, decltype(&udev_unref)> udev(udev_new(), &udev_unref);
++ if (!udev) {
++ return {};
++ }
++
++ std::unique_ptr<struct udev_device, decltype(&udev_device_unref)> dmi(udev_device_new_from_syspath(udev.get(), "/sys/class/dmi/id/"), &udev_device_unref);
++ if (!dmi) {
++ return {};
++ }
++
++ const char *numMemoryDevicesCStr = udev_device_get_property_value(dmi.get(), "MEMORY_ARRAY_NUM_DEVICES");
++ if (!numMemoryDevicesCStr) {
++ return {};
++ }
++
++ bool ok;
++ int numMemoryDevices = QByteArray(numMemoryDevicesCStr).toInt(&ok);
++ if (!ok) {
++ return {};
++ }
++
++ qlonglong totalBytes = 0;
++ for (int i = 0; i < numMemoryDevices; ++i) {
++ const char *memoryBytesCStr = udev_device_get_property_value(dmi.get(), QStringLiteral("MEMORY_DEVICE_%1_SIZE").arg(i).toLatin1());
++ qlonglong memoryBytes = QByteArray(memoryBytesCStr).toLongLong(&ok);
++ if (ok) {
++ totalBytes += memoryBytes;
++ }
++ }
++
++ return totalBytes;
++#endif
++
++ /*
++ * TODO: A FreeBSD impl is likely possible, but it appears that
++ * sysctlbyname() cannot get what we want with either "hw.physmem",
++ * "hw.usermem" or "hw.realmem".
++ * On a system with 2 x 4 GiB memory modules installed, we would need
++ * to return a value of 8 GiB in bytes.
++ */
++
++ return {};
++}
++
++std::optional<qlonglong> MemoryEntry::calculateAvailableRam()
+ {
+- qlonglong ret = -1;
+ #ifdef Q_OS_LINUX
+ struct sysinfo info;
+- if (sysinfo(&info) == 0)
+- // manpage "sizes are given as multiples of mem_unit bytes"
+- ret = qlonglong(info.totalram) * info.mem_unit;
++ if (sysinfo(&info) == 0) {
++ // manpage: "sizes are given as multiples of mem_unit bytes"
++ return qlonglong(info.totalram) * info.mem_unit;
++ }
+ #elif defined(Q_OS_FREEBSD)
+ /* Stuff for sysctl */
+- size_t len;
+-
+ unsigned long memory;
+- len = sizeof(memory);
+- sysctlbyname("hw.physmem", &memory, &len, NULL, 0);
+-
+- ret = memory;
++ size_t len = sizeof(memory);
++ if (sysctlbyname("hw.physmem", &memory, &len, NULL, 0) == 0) {
++ return memory;
++ }
+ #endif
+- return ret;
++
++ return {};
+ }
+
+ QString MemoryEntry::localizedValue(Language language) const
+ {
+- const qlonglong totalRam = calculateTotalRam();
+- if (totalRam > 0) {
+- const auto string = ki18nc("@label %1 is the formatted amount of system memory (e.g. 7,7 GiB)", "%1 of RAM")
+- .subs(KFormat(localeForLanguage(language)).formatByteSize(totalRam));
++ auto precisionForGiB = [](std::optional<qlonglong> bytes) -> int {
++ if (!bytes.has_value()) {
++ return 0;
++ }
++
++ constexpr qlonglong GiB = 1024 * 1024 * 1024;
++ return (bytes.value() % GiB == 0) ? 0 : 1;
++ };
++
++ const int totalRamPrecision = precisionForGiB(m_totalRam);
++ const int availableRamPrecision = precisionForGiB(m_availableRam);
++
++ if (m_totalRam.has_value() && m_availableRam.has_value()) {
++ // Both known
++ const auto string = ki18nc("@label, %1 is the total amount of installed system memory, %2 is the amount of which is usable, both expressed as 7.7 GiB",
++ "%1 of RAM (%2 usable)")
++ .subs(KFormat(localeForLanguage(language)).formatByteSize(m_totalRam.value(), totalRamPrecision))
++ .subs(KFormat(localeForLanguage(language)).formatByteSize(m_availableRam.value(), availableRamPrecision));
++ return localize(string, language);
++ }
++
++ if (m_totalRam.has_value() && !m_availableRam.has_value()) {
++ // Known total, unknown available
++ const auto string = ki18nc("@label, %1 is the amount of installed system memory expressed as 7.7 GiB", "%1 of RAM")
++ .subs(KFormat(localeForLanguage(language)).formatByteSize(m_totalRam.value(), totalRamPrecision));
++ return localize(string, language);
++ }
++
++ if (!m_totalRam.has_value() && m_availableRam.has_value()) {
++ // Unknown total, known available
++ const auto string = ki18nc("@label, %1 is the amount of usable system memory expressed as 7.7 GiB", "%1 of usable RAM")
++ .subs(KFormat(localeForLanguage(language)).formatByteSize(m_availableRam.value(), availableRamPrecision));
+ return localize(string, language);
+ }
+- return localize(ki18nc("Unknown amount of RAM", "Unknown"), language);
++
++ // Both unknown
++ return localize(ki18nc("@label, Unknown amount of system memory", "Unknown"), language);
++}
++
++QString MemoryEntry::localizedHelp(Language language) const
++{
++ if (m_totalRam.has_value() && m_availableRam.has_value()) {
++ // Both known
++ return localize(ki18nc("@info:tooltip, referring to system memory or RAM",
++ "Some memory is reserved for use by the kernel or system hardware such as integrated graphics memory."),
++ language);
++ }
++
++ if (m_totalRam.has_value() && !m_availableRam.has_value()) {
++ // Known total, unknown available
++ return localize(
++ ki18nc("@info:tooltip, referring to system memory or RAM",
++ "The amount of usable memory may be lower than the displayed amount because some memory is reserved for use by the kernel or system "
++ "hardware, such as integrated graphics memory."),
++ language);
++ }
++
++ if (!m_totalRam.has_value() && m_availableRam.has_value()) {
++ // Unknown total, known available
++ return localize(
++ ki18nc("@info:tooltip, referring to system memory or RAM",
++ "The amount of memory displayed may be lower than the installed amount because some memory is reserved for use by the kernel or system "
++ "hardware, such as integrated graphics memory."),
++ language);
++ }
++
++ // Both unknown
++ return QString();
+ }
+diff --git a/kcms/about-distro/src/MemoryEntry.h b/kcms/about-distro/src/MemoryEntry.h
+index 43beb2e8..d0757651 100644
+--- a/kcms/about-distro/src/MemoryEntry.h
++++ b/kcms/about-distro/src/MemoryEntry.h
+@@ -12,10 +12,17 @@ class MemoryEntry : public Entry
+ {
+ public:
+ MemoryEntry();
+- static qlonglong calculateTotalRam();
+
+ // Overwrite to get correct localization for the value.
+ QString localizedValue(Language language = Language::System) const final;
++ QString localizedHelp(Language language = Language::System) const final;
++
++private:
++ static std::optional<qlonglong> calculateTotalRam();
++ static std::optional<qlonglong> calculateAvailableRam();
++
++ std::optional<qlonglong> m_totalRam = calculateTotalRam();
++ std::optional<qlonglong> m_availableRam = calculateAvailableRam();
+ };
+
+ #endif // MEMORYENTRY_H
+diff --git a/kcms/about-distro/src/ui/main.qml b/kcms/about-distro/src/ui/main.qml
+index 80fbc2c1..e80b7fe9 100644
+--- a/kcms/about-distro/src/ui/main.qml
++++ b/kcms/about-distro/src/ui/main.qml
+@@ -167,6 +167,11 @@ KCMUtils.SimpleKCM {
+ }
+ }
+
++ Kirigami.ContextualHelpButton {
++ visible: toolTipText.length > 0
++ toolTipText: entry.localizedHelp()
++ }
++
+ QQC2.Button {
+ visible: hidden
+ property var dialog: null
+--
+GitLab
+
diff -Nru kinfocenter-6.3.5/kcms/audio_information/ui/main.qml kinfocenter-6.3.6/kcms/audio_information/ui/main.qml
--- kinfocenter-6.3.5/kcms/audio_information/ui/main.qml 2025-05-06 19:56:44.000000000 +0200
+++ kinfocenter-6.3.6/kcms/audio_information/ui/main.qml 2025-07-08 13:44:06.000000000 +0200
@@ -11,4 +11,5 @@
KInfoCenter.CommandOutputKCM {
output: kcm.infoOutputContext
-}
\ Pas de fin de ligne à la fin du fichier
+ wrapMode: TextEdit.Wrap
+}
diff -Nru kinfocenter-6.3.5/org.kde.kinfocenter.appdata.xml kinfocenter-6.3.6/org.kde.kinfocenter.appdata.xml
--- kinfocenter-6.3.5/org.kde.kinfocenter.appdata.xml 2025-05-06 19:56:44.000000000 +0200
+++ kinfocenter-6.3.6/org.kde.kinfocenter.appdata.xml 2025-07-08 13:44:06.000000000 +0200
@@ -225,9 +225,9 @@
</provides>
<project_group>KDE</project_group>
<releases>
+ <release version="6.3.6" date="2025-07-08"/>
<release version="6.3.5" date="2025-05-06"/>
<release version="6.3.4" date="2025-04-01"/>
<release version="6.3.3" date="2025-03-11"/>
- <release version="6.3.2" date="2025-02-25"/>
</releases>
</component>
diff -Nru kinfocenter-6.3.5/src/qml/CommandOutputKCM.qml kinfocenter-6.3.6/src/qml/CommandOutputKCM.qml
--- kinfocenter-6.3.5/src/qml/CommandOutputKCM.qml 2025-05-06 19:56:44.000000000 +0200
+++ kinfocenter-6.3.6/src/qml/CommandOutputKCM.qml 2025-07-08 13:44:06.000000000 +0200
@@ -29,6 +29,8 @@
property int wrapMode: TextEdit.NoWrap
property int textFormat: output.textFormat
+ flickable.contentWidth: wrapMode === TextEdit.NoWrap ? contentLoader.implicitWidth : undefined
+
Clipboard { id: clipboard }
Component {
Reply to: