Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kf6-kguiaddons for openSUSE:Factory 
checked in at 2026-03-16 14:15:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-kguiaddons (Old)
 and      /work/SRC/openSUSE:Factory/.kf6-kguiaddons.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kf6-kguiaddons"

Mon Mar 16 14:15:41 2026 rev:27 rq:1338918 version:6.24.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-kguiaddons/kf6-kguiaddons.changes    
2026-03-04 21:03:35.252391673 +0100
+++ /work/SRC/openSUSE:Factory/.kf6-kguiaddons.new.8177/kf6-kguiaddons.changes  
2026-03-16 14:18:06.775213115 +0100
@@ -1,0 +2,20 @@
+Mon Mar  9 08:07:32 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.24.0
+  * New feature release
+  * For more details please see:
+  * https://kde.org/announcements/frameworks/6/6.24.0
+- Changes since 6.23.0:
+  * Update dependency version to 6.24.0
+  * clipboard: Use buffered writes for data transfer
+  * add manual large clipboard tests
+  * ksysteminhibitor: Support Windows through PowerCreateRequest API
+  * Remove unneeded Qt version check
+  * kiconutils: remove now unnecessary Qt version check
+  * clipboard: Hold mutex before dispatching any wayland events (kde#515465)
+  * Mark WindowInsetsController as singleton in the documentation
+  * CMake: Find Qt6::GuiPrivate when USE_DBUS is enabled
+  * KKeySequenceRecorder: Accept some more keys that can be used with Shift
+  * Update version to 6.24.0
+
+-------------------------------------------------------------------

Old:
----
  kguiaddons-6.23.1.tar.xz
  kguiaddons-6.23.1.tar.xz.sig

New:
----
  kguiaddons-6.24.0.tar.xz
  kguiaddons-6.24.0.tar.xz.sig

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

Other differences:
------------------
++++++ kf6-kguiaddons.spec ++++++
--- /var/tmp/diff_new_pack.CtSheu/_old  2026-03-16 14:18:07.483243131 +0100
+++ /var/tmp/diff_new_pack.CtSheu/_new  2026-03-16 14:18:07.487243300 +0100
@@ -32,12 +32,11 @@
 %define mypython_sitearch %{expand:%%%{mypython}_sitearch}
 %endif
 
-# Full KF6 version (e.g. 6.23.0)
-# %%{!?_kf6_version: %%global _kf6_version %%{version}}
-%global _kf6_version 6.23.0
+# Full KF6 version (e.g. 6.24.0)
+%{!?_kf6_version: %global _kf6_version %{version}}
 %bcond_without released
 Name:           kf6-kguiaddons
-Version:        6.23.1
+Version:        6.24.0
 Release:        0
 Summary:        Utilities for graphical user interfaces
 License:        LGPL-2.1-or-later


++++++ kguiaddons-6.23.1.tar.xz -> kguiaddons-6.24.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.23.1/CMakeLists.txt 
new/kguiaddons-6.24.0/CMakeLists.txt
--- old/kguiaddons-6.23.1/CMakeLists.txt        2026-03-02 16:31:07.000000000 
+0100
+++ new/kguiaddons-6.24.0/CMakeLists.txt        2026-03-07 21:30:37.000000000 
+0100
@@ -1,10 +1,10 @@
 cmake_minimum_required(VERSION 3.27)
 
-set(KF_VERSION "6.23.1") # handled by release scripts
+set(KF_VERSION "6.24.0") # handled by release scripts
 project(KGuiAddons VERSION ${KF_VERSION})
 
 include(FeatureSummary)
-find_package(ECM 6.23.0  NO_MODULE)
+find_package(ECM 6.24.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL "https://commits.kde.org/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
@@ -75,6 +75,11 @@
 option(USE_DBUS "Build components using DBus (get color scheme information via 
XDG portals)" ${USE_DBUS_DEFAULT})
 if(USE_DBUS)
     find_package(Qt6DBus ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
+    if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0")
+        find_package(Qt6GuiPrivate ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
+    else()
+        find_package(Qt6Gui ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE 
COMPONENTS Private)
+    endif()
     set(WITH_DBUS ON)
 endif()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.23.1/src/CMakeLists.txt 
new/kguiaddons-6.24.0/src/CMakeLists.txt
--- old/kguiaddons-6.23.1/src/CMakeLists.txt    2026-03-02 16:31:07.000000000 
+0100
+++ new/kguiaddons-6.24.0/src/CMakeLists.txt    2026-03-07 21:30:37.000000000 
+0100
@@ -64,7 +64,10 @@
 )
 
 if(WIN32)
-    target_sources(KF6GuiAddons PRIVATE colors/kcolorschemewatcher_win.cpp)
+    target_sources(KF6GuiAddons PRIVATE
+        colors/kcolorschemewatcher_win.cpp
+        util/ksysteminhibitor_windows.cpp
+    )
     target_link_libraries(KF6GuiAddons PRIVATE advapi32)
 endif()
 
@@ -79,22 +82,19 @@
         colors/kcolorschemewatcher_xdg.cpp
         util/ksysteminhibitor_dbus.cpp
     )
-    target_link_libraries(KF6GuiAddons PRIVATE Qt6::DBus)
+    target_link_libraries(KF6GuiAddons PRIVATE Qt6::DBus Qt6::GuiPrivate)
     target_compile_definitions(KF6GuiAddons PRIVATE WITH_DBUS)
 endif()
 
 if(WITH_WAYLAND)
-    if (Qt6_VERSION VERSION_GREATER_EQUAL "6.8.0")
-        set(private_code_option  "PRIVATE_CODE")
-    endif()
     qt_generate_wayland_protocol_client_sources(KF6GuiAddons
+        PRIVATE_CODE
         FILES
             
"${CMAKE_CURRENT_SOURCE_DIR}/recorder/keyboard-shortcuts-inhibit-unstable-v1.xml"
             
"${CMAKE_CURRENT_SOURCE_DIR}/systemclipboard/wlr-data-control-unstable-v1.xml"
             "${PLASMA_WAYLAND_PROTOCOLS_DIR}/keystate.xml"
             
"${WaylandProtocols_DATADIR}/staging/ext-data-control/ext-data-control-v1.xml"
             "${Wayland_DATADIR}/wayland.xml"
-        ${private_code_option}
     )
     target_sources(KF6GuiAddons PRIVATE
         recorder/waylandinhibition.cpp
@@ -103,6 +103,7 @@
         util/kmodifierkeyinfoprovider_wayland.cpp
         recorder/waylandinhibition_p.h
         systemclipboard/waylandclipboard_p.h
+        systemclipboard/waylandpipewriterhelper.cpp
         systemclipboard/wlrwaylandclipboard_p.h
         util/kmodifierkeyinfoprovider_wayland.h
     )
@@ -122,7 +123,7 @@
     add_subdirectory(android)
 endif()
 
-if (NOT WITH_DBUS AND NOT ANDROID)
+if (NOT WITH_DBUS AND NOT ANDROID AND NOT WIN32)
     target_sources(KF6GuiAddons PRIVATE
         util/ksysteminhibitor_dummy.cpp
     )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.23.1/src/colors/kwindowinsetscontroller.h 
new/kguiaddons-6.24.0/src/colors/kwindowinsetscontroller.h
--- old/kguiaddons-6.23.1/src/colors/kwindowinsetscontroller.h  2026-03-02 
16:31:07.000000000 +0100
+++ new/kguiaddons-6.24.0/src/colors/kwindowinsetscontroller.h  2026-03-07 
21:30:37.000000000 +0100
@@ -15,7 +15,7 @@
 class KWindowInsetsControllerPrivate;
 
 /*!
- * \qmltype WindowInsetsController
+ * \qmlsingletontype WindowInsetsController
  * \inqmlmodule org.kde.guiaddons
  * \nativetype KWindowInsetsController
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.23.1/src/recorder/kkeysequencerecorder.cpp 
new/kguiaddons-6.24.0/src/recorder/kkeysequencerecorder.cpp
--- old/kguiaddons-6.23.1/src/recorder/kkeysequencerecorder.cpp 2026-03-02 
16:31:07.000000000 +0100
+++ new/kguiaddons-6.24.0/src/recorder/kkeysequencerecorder.cpp 2026-03-07 
21:30:37.000000000 +0100
@@ -218,6 +218,12 @@
     case Qt::Key_Xfer:
     case Qt::Key_ZoomIn:
     case Qt::Key_ZoomOut:
+    case Qt::Key_Cancel:
+    case Qt::Key_New:
+    case Qt::Key_Open:
+    case Qt::Key_Find:
+    case Qt::Key_Undo:
+    case Qt::Key_Redo:
     case Qt::Key_Away:
     case Qt::Key_Messenger:
     case Qt::Key_WebCam:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.23.1/src/systemclipboard/waylandclipboard.cpp 
new/kguiaddons-6.24.0/src/systemclipboard/waylandclipboard.cpp
--- old/kguiaddons-6.23.1/src/systemclipboard/waylandclipboard.cpp      
2026-03-02 16:31:07.000000000 +0100
+++ new/kguiaddons-6.24.0/src/systemclipboard/waylandclipboard.cpp      
2026-03-07 21:30:37.000000000 +0100
@@ -22,14 +22,19 @@
 
 #include <errno.h>
 #include <fcntl.h>
+#include <limits.h>
 #include <poll.h>
 #include <signal.h>
 #include <string.h>
 #include <unistd.h>
 
+#include "waylandpipewriterhelper_p.h"
+
 #include "qwayland-wayland.h"
 #include "qwayland-ext-data-control-v1.h"
 
+using namespace std::chrono;
+
 /**
  * Wayland clipboard wraps ext_data_control an additional is used as we need 
to avoid
  * deadlocks if an application tries to read the normal clipboard whilst it 
owns the data control.
@@ -272,7 +277,7 @@
     pfds[0].events = POLLIN;
 
     while (true) {
-        const int ready = poll(pfds, 1, 1000);
+        const int ready = poll(pfds, 1, 100000);
         if (ready < 0) {
             if (errno != EINTR) {
                 qWarning("DataControlOffer: poll() failed for mimeType %s: 
%s", qPrintable(mimeType), strerror(errno));
@@ -374,27 +379,21 @@
         ba = m_mimeData->data(send_mime_type);
     }
 
-    QFile c;
-    if (!c.open(fd, QFile::WriteOnly, QFile::AutoCloseHandle)) {
-        return;
-    }
-    // Create a sigpipe handler that does nothing, or clients may be forced to 
terminate
-    // if the pipe is closed in the other end.
-    struct sigaction action, oldAction;
-    action.sa_handler = SIG_IGN;
-    sigemptyset(&action.sa_mask);
-    action.sa_flags = 0;
-    sigaction(SIGPIPE, &action, &oldAction);
-    const int flags = fcntl(fd, F_GETFL, 0);
-    if (flags & O_NONBLOCK) {
-        fcntl(fd, F_SETFL, flags & ~O_NONBLOCK); // Unset O_NONBLOCK to fix 
pasting to XWayland windows
-    }
-    const qint64 written = c.write(ba);
-    sigaction(SIGPIPE, &oldAction, nullptr);
-
-    if (written != ba.size()) {
-        qWarning() << "Failed to send all clipobard data; sent" << written << 
"bytes out of" << ba.size();
+    auto rc = WaylandPipeWriterHelper::safeWriteWithTimeout(fd, 
ba.constData(), ba.size(), PIPE_BUF, 5s);
+    switch (rc) {
+    case WaylandPipeWriterHelper::SafeWriteResult::Ok:
+        break;
+    case WaylandPipeWriterHelper::SafeWriteResult::Timeout:
+        qWarning() << "QWaylandDataSource: timeout writing to pipe";
+        break;
+    case WaylandPipeWriterHelper::SafeWriteResult::Closed:
+        qWarning() << "QWaylandDataSource: peer closed pipe";
+        break;
+    case WaylandPipeWriterHelper::SafeWriteResult::Error:
+        qWarning() << "QWaylandDataSource: write() failed";
+        break;
     }
+    close(fd);
 }
 
 void DataControlSource::ext_data_control_source_v1_cancelled()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.23.1/src/systemclipboard/waylandpipewriterhelper.cpp 
new/kguiaddons-6.24.0/src/systemclipboard/waylandpipewriterhelper.cpp
--- old/kguiaddons-6.23.1/src/systemclipboard/waylandpipewriterhelper.cpp       
1970-01-01 01:00:00.000000000 +0100
+++ new/kguiaddons-6.24.0/src/systemclipboard/waylandpipewriterhelper.cpp       
2026-03-07 21:30:37.000000000 +0100
@@ -0,0 +1,42 @@
+// Copyright (C) 2026 UnionTech Software Technology Co., Ltd.
+// SPDX-License-Identifier: LGPL-3.0-only
+
+#include "waylandpipewriterhelper_p.h"
+#include <QtCore/private/qcore_unix_p.h>
+
+WaylandPipeWriterHelper::SafeWriteResult
+WaylandPipeWriterHelper::safeWriteWithTimeout(int fd, const char *data, 
qsizetype len, qsizetype chunkSize, std::chrono::nanoseconds timeout)
+{
+    if (len == 0)
+        return SafeWriteResult::Ok;
+
+    struct pollfd pfd;
+    pfd.fd = fd;
+    pfd.events = POLLOUT;
+
+    QDeadlineTimer deadline(timeout);
+    qsizetype offset = 0;
+    while (offset < len) {
+        int ready = qt_safe_poll(&pfd, 1, deadline);
+        if (ready < 0) {
+            return SafeWriteResult::Error;
+        } else if (ready == 0 || deadline.hasExpired()) {
+            return SafeWriteResult::Timeout;
+        } else {
+            const qsizetype toWrite = qMin(chunkSize, len - offset);
+            ssize_t n = qt_safe_write_nosignal(fd, data + offset, toWrite);
+            if (n > 0) {
+                offset += n;
+                continue;
+            } else if (n < 0) {
+                if (errno == EAGAIN || errno == EWOULDBLOCK)
+                    continue;
+                if (errno == EPIPE)
+                    return SafeWriteResult::Closed;
+                return SafeWriteResult::Error;
+            }
+        }
+    }
+
+    return SafeWriteResult::Ok;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.23.1/src/systemclipboard/waylandpipewriterhelper_p.h 
new/kguiaddons-6.24.0/src/systemclipboard/waylandpipewriterhelper_p.h
--- old/kguiaddons-6.23.1/src/systemclipboard/waylandpipewriterhelper_p.h       
1970-01-01 01:00:00.000000000 +0100
+++ new/kguiaddons-6.24.0/src/systemclipboard/waylandpipewriterhelper_p.h       
2026-03-07 21:30:37.000000000 +0100
@@ -0,0 +1,21 @@
+// Copyright (C) 2026 UnionTech Software Technology Co., Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR 
GPL-2.0-only OR GPL-3.0-only
+
+#ifndef WAYLANDPIPEWRITERHELPER_P_H
+#define WAYLANDPIPEWRITERHELPER_P_H
+
+#include <QtCore/qtypes.h>
+#include <chrono>
+
+namespace WaylandPipeWriterHelper
+{
+enum class SafeWriteResult {
+    Ok,
+    Timeout,
+    Closed,
+    Error,
+};
+SafeWriteResult safeWriteWithTimeout(int fd, const char *data, qsizetype len, 
qsizetype chunkSize, std::chrono::nanoseconds timeout);
+};
+
+#endif // WAYLANDPIPEWRITERHELPER_P_H
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.23.1/src/util/kiconutils.cpp 
new/kguiaddons-6.24.0/src/util/kiconutils.cpp
--- old/kguiaddons-6.23.1/src/util/kiconutils.cpp       2026-03-02 
16:31:07.000000000 +0100
+++ new/kguiaddons-6.24.0/src/util/kiconutils.cpp       2026-03-07 
21:30:37.000000000 +0100
@@ -10,9 +10,7 @@
 
 #include <QHash>
 #include <QIconEngine>
-#include <QLibraryInfo>
 #include <QPainter>
-#include <QVersionNumber>
 
 class KOverlayIconEngine : public QIconEngine
 {
@@ -108,12 +106,8 @@
     if (id == QIconEngine::ScaledPixmapHook) {
         auto *info = reinterpret_cast<ScaledPixmapArgument *>(data);
 
-        QSize phyiscalSize = info->size;
         // Since https://codereview.qt-project.org/c/qt/qtbase/+/563553 size 
is in logical pixels
-        if (QLibraryInfo::version() >= QVersionNumber(6, 8, 0)) {
-            phyiscalSize *= info->scale;
-        }
-
+        QSize phyiscalSize = info->size * info->scale;
         QPixmap pixmap(phyiscalSize);
         pixmap.setDevicePixelRatio(info->scale);
         pixmap.fill(Qt::transparent);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.23.1/src/util/ksysteminhibitor_windows.cpp 
new/kguiaddons-6.24.0/src/util/ksysteminhibitor_windows.cpp
--- old/kguiaddons-6.23.1/src/util/ksysteminhibitor_windows.cpp 1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.24.0/src/util/ksysteminhibitor_windows.cpp 2026-03-07 
21:30:37.000000000 +0100
@@ -0,0 +1,57 @@
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
+// SPDX-FileCopyrightText: 2026 Kai Uwe Broulik <[email protected]>
+
+#include "ksysteminhibitor.h"
+
+#include <windows.h>
+
+#include "kguiaddons_debug.h"
+
+using namespace Qt::StringLiterals;
+
+class KSystemInhibitorPrivate
+{
+public:
+    HANDLE m_handle = INVALID_HANDLE_VALUE;
+};
+
+KSystemInhibitor::KSystemInhibitor(const QString &reason, Types types, 
[[maybe_unused]] QWindow *window, QObject *parent)
+    : QObject(parent)
+    , d(std::make_unique<KSystemInhibitorPrivate>())
+{
+    REASON_CONTEXT context{};
+    context.Version = POWER_REQUEST_CONTEXT_VERSION;
+    context.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING;
+    context.Reason.SimpleReasonString = reason.toStdWString().data();
+
+    HANDLE handle = PowerCreateRequest(&context);
+    if (handle == INVALID_HANDLE_VALUE) {
+        qCWarning(KGUIADDONS_LOG) << "KSystemInhibitor Error: Failed to create 
power request:" << GetLastError();
+        return;
+    }
+
+    if (types & KSystemInhibitor::Type::Suspend) {
+        if (!PowerSetRequest(handle, PowerRequestExecutionRequired)) {
+            qCWarning(KGUIADDONS_LOG) << "KSystemInhibitor Error: Failed to 
set ExecutionRequired:" << GetLastError();
+        }
+    }
+
+    if (types & KSystemInhibitor::Type::Idle) {
+        if (!PowerSetRequest(handle, PowerRequestDisplayRequired)) {
+            qCWarning(KGUIADDONS_LOG) << "KSystemInhibitor Error: Failed to 
set DisplayRequired:" << GetLastError();
+        }
+    }
+
+    d->m_handle = handle;
+}
+
+KSystemInhibitor::~KSystemInhibitor()
+{
+    if (d->m_handle != INVALID_HANDLE_VALUE) {
+        PowerClearRequest(d->m_handle, PowerRequestExecutionRequired);
+        PowerClearRequest(d->m_handle, PowerRequestDisplayRequired);
+        CloseHandle(d->m_handle);
+    }
+}
+
+#include "moc_ksysteminhibitor.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.23.1/tests/CMakeLists.txt 
new/kguiaddons-6.24.0/tests/CMakeLists.txt
--- old/kguiaddons-6.23.1/tests/CMakeLists.txt  2026-03-02 16:31:07.000000000 
+0100
+++ new/kguiaddons-6.24.0/tests/CMakeLists.txt  2026-03-07 21:30:37.000000000 
+0100
@@ -21,4 +21,5 @@
   kcolorschemewatchertest
   kcountryflagemojiiconenginedemo
   clipboardtest
+  clipboardpixmaptest
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.23.1/tests/clipboardpixmaptest.cpp 
new/kguiaddons-6.24.0/tests/clipboardpixmaptest.cpp
--- old/kguiaddons-6.23.1/tests/clipboardpixmaptest.cpp 1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.24.0/tests/clipboardpixmaptest.cpp 2026-03-07 
21:30:37.000000000 +0100
@@ -0,0 +1,34 @@
+/*
+    SPDX-FileCopyrightText: 2026 David Edmundson <[email protected]>
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+#include <KSystemClipboard>
+
+#include <QApplication>
+#include <QClipboard>
+#include <QMimeData>
+#include <QPixmap>
+#include <QTimer>
+
+// Check that we can send massive content without any timeouts
+
+int main(int argc, char **argv)
+{
+    QApplication app(argc, argv);
+
+    QPixmap pixmap(8000, 8000);
+    pixmap.fill(Qt::red);
+
+    auto mimeData = new QMimeData;
+    mimeData->setImageData(pixmap);
+
+    auto clipboard = KSystemClipboard::instance();
+    clipboard->setMimeData(mimeData, QClipboard::Clipboard);
+
+    QTimer::singleShot(5000, &app, [&app]() {
+        app.quit();
+    });
+
+    return app.exec();
+}

Reply via email to