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-02-16 13:02:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-kguiaddons (Old)
 and      /work/SRC/openSUSE:Factory/.kf6-kguiaddons.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kf6-kguiaddons"

Mon Feb 16 13:02:03 2026 rev:25 rq:1332929 version:6.23.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-kguiaddons/kf6-kguiaddons.changes    
2026-01-14 16:20:44.691115797 +0100
+++ /work/SRC/openSUSE:Factory/.kf6-kguiaddons.new.1977/kf6-kguiaddons.changes  
2026-02-16 13:05:18.344040030 +0100
@@ -1,0 +2,21 @@
+Fri Feb  6 14:25:51 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.23.0
+  * New feature release
+  * For more details please see:
+  * https://kde.org/announcements/frameworks/6/6.23.0
+- Changes since 6.22.1:
+  * Update dependency version to 6.23.0
+  * Add Android support for idle inhibition
+  * WaylandClipboard: fix pasting text when QMimeData also has an image 
(kde#513701)
+  * add KSystemInhibitor as frontend to the xdg-desktop-portal inhibition 
system
+  * Restore building with wayland < 1.23.0
+  * ksystemclipboard: Check m_thread in destructor (kde#514512)
+  * examples/python: add an example for KSystemClipboard
+  * python: fix crash when using KSystemClipboard::setMimeData
+  * python: specify enum type for KKeySequenceRecorder::Pattern
+  * KImageCache: make findPixmap destination QPixmap have alpha channel if 
inserted QPixmap had alpha channel
+  * Add another explicit moc include to source file for moc-covered header
+  * Update version to 6.23.0
+
+-------------------------------------------------------------------

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

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

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

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


++++++ kguiaddons-6.22.1.tar.xz -> kguiaddons-6.23.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/CMakeLists.txt 
new/kguiaddons-6.23.0/CMakeLists.txt
--- old/kguiaddons-6.22.1/CMakeLists.txt        2026-01-13 15:15:42.000000000 
+0100
+++ new/kguiaddons-6.23.0/CMakeLists.txt        2026-02-06 13:14:28.000000000 
+0100
@@ -1,10 +1,10 @@
-cmake_minimum_required(VERSION 3.16)
+cmake_minimum_required(VERSION 3.27)
 
-set(KF_VERSION "6.22.1") # handled by release scripts
+set(KF_VERSION "6.23.0") # handled by release scripts
 project(KGuiAddons VERSION ${KF_VERSION})
 
 include(FeatureSummary)
-find_package(ECM 6.22.0  NO_MODULE)
+find_package(ECM 6.23.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)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/examples/python/ksystemclipboard.py 
new/kguiaddons-6.23.0/examples/python/ksystemclipboard.py
--- old/kguiaddons-6.22.1/examples/python/ksystemclipboard.py   1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/examples/python/ksystemclipboard.py   2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+"""
+SPDX-FileCopyrightText: 2025 David Edmundson <[email protected]>
+SPDX-FileCopyrightText: 2026 Fushan Wen <[email protected]>
+SPDX-License-Identifier: LGPL-2.0-or-later
+"""
+
+import sys
+
+from KGuiAddons import KSystemClipboard
+from PySide6.QtCore import QMimeData, Slot
+from PySide6.QtGui import QClipboard
+from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QPushButton, 
QSizePolicy, QTextEdit, QVBoxLayout, QWidget)
+
+
+class KSystemClipboardExample(QWidget):
+
+    def __init__(self) -> None:
+        super().__init__()
+        self.setWindowTitle("KSystemClipboard")
+        self.__setup_ui()
+
+    def __setup_ui(self) -> None:
+        self.system_clipboard_view = QTextEdit()
+        self.system_text_edit = QTextEdit()
+        self.__setup_system_clipboard()
+
+        self.resize(600, 500)
+
+    def __setup_system_clipboard(self) -> None:
+        clipboard = KSystemClipboard.instance()
+
+        layout = QVBoxLayout(self)
+
+        title_label = QLabel("System Clipboard (KSystemClipboard)")
+        layout.addWidget(title_label)
+
+        self.system_clipboard_view.setReadOnly(True)
+        self.system_clipboard_view.setMinimumHeight(200)
+        self.system_clipboard_view.setSizePolicy(QSizePolicy.Expanding, 
QSizePolicy.Expanding)
+
+        clipboard.changed.connect(self.on_system_clipboard_changed)
+
+        
self.system_clipboard_view.setText(clipboard.text(QClipboard.Mode.Clipboard))
+
+        layout.addWidget(self.system_clipboard_view)
+
+        self.system_text_edit.setPlaceholderText("Enter clipboard content 
here…")
+        self.system_text_edit.setMinimumHeight(120)
+        self.system_text_edit.setSizePolicy(QSizePolicy.Expanding, 
QSizePolicy.Expanding)
+        layout.addWidget(self.system_text_edit)
+
+        btn_row = QHBoxLayout()
+        btn_row.addStretch()
+
+        submit_btn = QPushButton("Submit")
+        submit_btn.clicked.connect(self.submit_system_clipboard)
+        btn_row.addWidget(submit_btn)
+
+        layout.addLayout(btn_row)
+
+    @Slot(QClipboard.Mode)
+    def on_system_clipboard_changed(self, mode) -> None:
+        if mode != QClipboard.Mode.Clipboard:
+            return
+        clipboard = KSystemClipboard.instance()
+        self.system_clipboard_view.setText(clipboard.text(mode))
+
+    @Slot()
+    def submit_system_clipboard(self) -> None:
+        clipboard = KSystemClipboard.instance()
+        mime_data = QMimeData()
+        mime_data.setText(self.system_text_edit.toPlainText())
+        clipboard.setMimeData(mime_data, QClipboard.Mode.Clipboard)
+
+
+if __name__ == "__main__":
+    app = QApplication(sys.argv)
+
+    window = KSystemClipboardExample()
+    window.show()
+
+    sys.exit(app.exec())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/python/bindings.h 
new/kguiaddons-6.23.0/python/bindings.h
--- old/kguiaddons-6.22.1/python/bindings.h     2026-01-13 15:15:42.000000000 
+0100
+++ new/kguiaddons-6.23.0/python/bindings.h     2026-02-06 13:14:28.000000000 
+0100
@@ -7,6 +7,7 @@
 #define QT_ANNOTATE_ACCESS_SPECIFIER(a) __attribute__((annotate(#a)))
 
 #include <QDate>
+#include <QMimeData>
 
 #include <KColorMimeData>
 #include <KColorSchemeWatcher>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/python/bindings.xml 
new/kguiaddons-6.23.0/python/bindings.xml
--- old/kguiaddons-6.22.1/python/bindings.xml   2026-01-13 15:15:42.000000000 
+0100
+++ new/kguiaddons-6.23.0/python/bindings.xml   2026-02-06 13:14:28.000000000 
+0100
@@ -4,6 +4,7 @@
 SPDX-FileCopyrightText: 2024 Manuel Alcaraz Zambrano 
<[email protected]>
 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
 -->
+    <load-typesystem name="typesystem_core.xml" generate="no"/> 
<!--QMimeData-->
     <load-typesystem name="typesystem_gui.xml" generate="no"/>
 
     <namespace-type name="KColorMimeData" />
@@ -19,9 +20,17 @@
     </namespace-type>
     <namespace-type name="KIconUtils" />
     <namespace-type name="KJobWindows" />
-    <object-type name="KKeySequenceRecorder" />
+    <object-type name="KKeySequenceRecorder">
+        <enum-type name="Pattern" flags="yes" />
+    </object-type>
     <object-type name="KModifierKeyInfo" />
-    <object-type name="KSystemClipboard" />
+    <object-type name="KSystemClipboard">
+        <modify-function signature="setMimeData(QMimeData *, 
QClipboard::Mode)">
+            <modify-argument index="1">
+                <define-ownership class="target" owner="c++" />
+            </modify-argument>
+        </modify-function>
+    </object-type>
     <object-type name="KWordWrap" />
 
 </typesystem>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/CMakeLists.txt 
new/kguiaddons-6.23.0/src/CMakeLists.txt
--- old/kguiaddons-6.22.1/src/CMakeLists.txt    2026-01-13 15:15:42.000000000 
+0100
+++ new/kguiaddons-6.23.0/src/CMakeLists.txt    2026-02-06 13:14:28.000000000 
+0100
@@ -75,8 +75,12 @@
 endif()
 
 if(WITH_DBUS)
-    target_sources(KF6GuiAddons PRIVATE colors/kcolorschemewatcher_xdg.cpp)
+    target_sources(KF6GuiAddons PRIVATE
+        colors/kcolorschemewatcher_xdg.cpp
+        util/ksysteminhibitor_dbus.cpp
+    )
     target_link_libraries(KF6GuiAddons PRIVATE Qt6::DBus)
+    target_compile_definitions(KF6GuiAddons PRIVATE WITH_DBUS)
 endif()
 
 if(WITH_WAYLAND)
@@ -112,9 +116,18 @@
 endif()
 
 if(ANDROID)
+    target_sources(KF6GuiAddons PRIVATE
+        util/ksysteminhibitor_android.cpp
+    )
     add_subdirectory(android)
 endif()
 
+if (NOT WITH_DBUS AND NOT ANDROID)
+    target_sources(KF6GuiAddons PRIVATE
+        util/ksysteminhibitor_dummy.cpp
+    )
+endif()
+
 ecm_generate_export_header(KF6GuiAddons
     BASE_NAME KGuiAddons
     GROUP_BASE_NAME KF
@@ -173,6 +186,7 @@
   KCursorSaver
   KCountryFlagEmojiIconEngine
   KJobWindows
+  KSystemInhibitor
 
   RELATIVE util
   REQUIRED_HEADERS KGuiAddons_HEADERS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/android/org/kde/guiaddons/KSystemInhibitor.java 
new/kguiaddons-6.23.0/src/android/org/kde/guiaddons/KSystemInhibitor.java
--- old/kguiaddons-6.22.1/src/android/org/kde/guiaddons/KSystemInhibitor.java   
1970-01-01 01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/android/org/kde/guiaddons/KSystemInhibitor.java   
2026-02-06 13:14:28.000000000 +0100
@@ -0,0 +1,20 @@
+/*
+    SPDX-FileCopyrightText: 2018 Nicolas Fella <[email protected]>
+    SPDX-License-Identifier: LGPL-2.0-or-later
+*/
+
+package org.kde.guiaddons;
+
+import android.app.Activity;
+import android.view.WindowManager;
+
+public class KSystemInhibitor
+{
+    public static void setLockInhibitionOn(Activity activity) {
+        activity.runOnUiThread(() -> 
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON));
+    }
+
+    public static void setLockInhibitionOff(Activity activity) {
+        activity.runOnUiThread(() -> 
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON));
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/geo-scheme-handler/google-maps-geo-handler.desktop 
new/kguiaddons-6.23.0/src/geo-scheme-handler/google-maps-geo-handler.desktop
--- 
old/kguiaddons-6.22.1/src/geo-scheme-handler/google-maps-geo-handler.desktop    
    2026-01-13 15:15:42.000000000 +0100
+++ 
new/kguiaddons-6.23.0/src/geo-scheme-handler/google-maps-geo-handler.desktop    
    2026-02-06 13:14:28.000000000 +0100
@@ -15,6 +15,7 @@
 Name[eu]=Google Maps
 Name[fi]=Google Maps
 Name[fr]=Google Maps
+Name[ga]=Google Maps
 Name[gl]=Google Maps
 Name[he]=Google מפות
 Name[hi]=गूगल मैप्स
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/geo-scheme-handler/openstreetmap-geo-handler.desktop 
new/kguiaddons-6.23.0/src/geo-scheme-handler/openstreetmap-geo-handler.desktop
--- 
old/kguiaddons-6.22.1/src/geo-scheme-handler/openstreetmap-geo-handler.desktop  
    2026-01-13 15:15:42.000000000 +0100
+++ 
new/kguiaddons-6.23.0/src/geo-scheme-handler/openstreetmap-geo-handler.desktop  
    2026-02-06 13:14:28.000000000 +0100
@@ -15,6 +15,7 @@
 Name[eu]=OpenStreetMap
 Name[fi]=OpenStreetMap
 Name[fr]=OpenStreetMap
+Name[ga]=OpenStreetMap
 Name[gl]=OpenStreetMap
 Name[he]=OpenStreetMap
 Name[hi]=ओपनस्ट्रीटमैप
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/geo-scheme-handler/wheelmap-geo-handler.desktop 
new/kguiaddons-6.23.0/src/geo-scheme-handler/wheelmap-geo-handler.desktop
--- old/kguiaddons-6.22.1/src/geo-scheme-handler/wheelmap-geo-handler.desktop   
2026-01-13 15:15:42.000000000 +0100
+++ new/kguiaddons-6.23.0/src/geo-scheme-handler/wheelmap-geo-handler.desktop   
2026-02-06 13:14:28.000000000 +0100
@@ -15,6 +15,7 @@
 Name[eu]=wheelmap.org
 Name[fi]=wheelmap.org
 Name[fr]=wheelmap.org
+Name[ga]=wheelmap.org
 Name[gl]=wheelmap.org
 Name[he]=wheelmap.org
 Name[hi]=व्हीलमैप्स.ऑर्ग
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/qml/CMakeLists.txt 
new/kguiaddons-6.23.0/src/qml/CMakeLists.txt
--- old/kguiaddons-6.22.1/src/qml/CMakeLists.txt        2026-01-13 
15:15:42.000000000 +0100
+++ new/kguiaddons-6.23.0/src/qml/CMakeLists.txt        2026-02-06 
13:14:28.000000000 +0100
@@ -1,11 +1,16 @@
 # SPDX-FileCopyrightText: 2024 Volker Krause <[email protected]>
 # SPDX-License-Identifier: BSD-2-Clause
 
-ecm_add_qml_module(kguiaddonsqml URI "org.kde.guiaddons" CLASS_NAME 
KGuiAddonsPlugin INSTALLED_PLUGIN_TARGET KF6::kguiaddonsqml)
+ecm_add_qml_module(kguiaddonsqml
+    URI "org.kde.guiaddons"
+    CLASS_NAME KGuiAddonsPlugin
+    DEPENDENCIES QtQuick
+    INSTALLED_PLUGIN_TARGET KF6::kguiaddonsqml)
 target_sources(kguiaddonsqml PRIVATE
     kcolorutilssingleton.cpp
     kguiaddonsplugin.cpp
     types.h
+    systeminhibitor.cpp
 )
 target_link_libraries(kguiaddonsqml PRIVATE KF6GuiAddons Qt6::Qml)
 ecm_finalize_qml_module(kguiaddonsqml EXPORT KF6GuiAddonsTargets)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/qml/systeminhibitor.cpp 
new/kguiaddons-6.23.0/src/qml/systeminhibitor.cpp
--- old/kguiaddons-6.22.1/src/qml/systeminhibitor.cpp   1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/qml/systeminhibitor.cpp   2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
+// SPDX-FileCopyrightText: 2025 Harald Sitter <[email protected]>
+
+#include "systeminhibitor.h"
+
+void SystemInhibitor::classBegin()
+{
+}
+
+void SystemInhibitor::componentComplete()
+{
+    m_ready = true;
+    apply();
+}
+
+void SystemInhibitor::setEnabled(bool enable)
+{
+    if (m_enabled == enable) {
+        return;
+    }
+    m_enabled = enable;
+    Q_EMIT enabledChanged();
+
+    apply();
+}
+
+void SystemInhibitor::apply()
+{
+    if (!m_ready) {
+        return;
+    }
+
+    m_inhibitor.reset();
+    if (m_enabled) {
+        m_inhibitor.emplace(m_reason, m_types, m_window, this);
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/qml/systeminhibitor.h 
new/kguiaddons-6.23.0/src/qml/systeminhibitor.h
--- old/kguiaddons-6.22.1/src/qml/systeminhibitor.h     1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/qml/systeminhibitor.h     2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
+// SPDX-FileCopyrightText: 2025 Harald Sitter <[email protected]>
+
+#pragma once
+
+#include <KSystemInhibitor>
+
+#include <QWindow>
+#include <qqml.h>
+
+/*!
+    \qmltype SystemInhibitor
+    \since 6.23
+    \inqmlmodule org.kde.guiaddons
+    \brief Inhibit system actions such as logout, suspend, etc.
+
+    \qml
+    readonly property SystemInhibitor inhibitor: SystemInhibitor {
+        window: ApplicationWindow.window
+        types: SystemInhibitor.Suspend | SystemInhibitor.Idle
+        enabled: true
+        reason: KI18n.i18nc("inhibition reason", "Playing a video")
+    }
+    \endqml
+*/
+class SystemInhibitor : public QObject, public QQmlParserStatus
+{
+    Q_OBJECT
+    Q_INTERFACES(QQmlParserStatus)
+    QML_ELEMENT
+    // Grab the enums from KSystemInhibitor into our namespace for consistent 
QML API - so we can address it as SystemInhibitor.Logout rather than
+    // KSystemInhibitor.Logout
+    QML_EXTENDED_NAMESPACE(KSystemInhibitor)
+
+    /*!
+        \qmlproperty Window SystemInhibitor::window
+        The window for which to apply the inhibition. May be null in which 
case possible user queries will not be associated with any window.
+    */
+    Q_PROPERTY(QWindow *window MEMBER m_window NOTIFY windowChanged)
+
+    /*!
+        \qmlproperty enumeration SystemInhibitor::types
+        \qmlenumeratorsfrom KSystemInhibitor::Type
+        \required
+        The types of inhibition to apply. May be a combination of multiple 
types.
+    */
+    Q_PROPERTY(KSystemInhibitor::Types types MEMBER m_types NOTIFY 
typesChanged REQUIRED)
+
+    /*!
+        \qmlproperty string SystemInhibitor::reason
+        \required
+        The user-facing reason why ths inhibition is in place (e.g. "Playing a 
video").
+    */
+    Q_PROPERTY(QString reason MEMBER m_reason NOTIFY reasonChanged REQUIRED)
+
+    /*!
+        \qmlproperty bool SystemInhibitor::enabled
+        Toggle for enabling/disabling the inhibition. Please note that 
inhibiting is an asynchronous operation and may be delayed or fail, the 
property always
+        reflects the requested state, not the actual state.
+    */
+    Q_PROPERTY(bool enabled MEMBER m_enabled WRITE setEnabled NOTIFY 
enabledChanged)
+public:
+    using QObject::QObject;
+
+    void classBegin() override;
+    void componentComplete() override;
+    void setEnabled(bool enable);
+
+Q_SIGNALS:
+    void windowChanged();
+    void typesChanged();
+    void reasonChanged();
+    void enabledChanged();
+
+private:
+    void apply();
+
+    bool m_ready = false;
+
+    QWindow *m_window = nullptr;
+    KSystemInhibitor::Types m_types;
+    QString m_reason;
+    bool m_enabled = false;
+
+    std::optional<KSystemInhibitor> m_inhibitor;
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/systemclipboard/waylandclipboard.cpp 
new/kguiaddons-6.23.0/src/systemclipboard/waylandclipboard.cpp
--- old/kguiaddons-6.22.1/src/systemclipboard/waylandclipboard.cpp      
2026-01-13 15:15:42.000000000 +0100
+++ new/kguiaddons-6.23.0/src/systemclipboard/waylandclipboard.cpp      
2026-02-06 13:14:28.000000000 +0100
@@ -352,23 +352,21 @@
     }
 
     QByteArray ba;
-    if (m_mimeData->hasImage()) {
-        // adapted from QInternalMimeData::renderDataHelper
-        if (mime_type == applicationQtXImageLiteral()) {
-            QImage image = qvariant_cast<QImage>(m_mimeData->imageData());
-            QBuffer buf(&ba);
-            buf.open(QBuffer::WriteOnly);
-            // would there not be PNG ??
-            image.save(&buf, "PNG");
 
-        } else if (mime_type.startsWith(QLatin1String("image/"))) {
-            QImage image = qvariant_cast<QImage>(m_mimeData->imageData());
+    // adapted from QInternalMimeData::renderDataHelper
+    if (mime_type == applicationQtXImageLiteral() || 
mime_type.startsWith(QLatin1String("image/"))) {
+        if (m_mimeData->hasImage()) {
+            const QImage image = 
qvariant_cast<QImage>(m_mimeData->imageData());
             QBuffer buf(&ba);
             buf.open(QBuffer::WriteOnly);
-            image.save(&buf, mime_type.mid(mime_type.indexOf(QLatin1Char('/')) 
+ 1).toLatin1().toUpper().data());
+            if (mime_type == applicationQtXImageLiteral()) {
+                // would there not be PNG ??
+                image.save(&buf, "PNG");
+            } else {
+                image.save(&buf, 
mime_type.mid(mime_type.indexOf(QLatin1Char('/')) + 
1).toLatin1().toUpper().data());
+            }
         }
-        // end adapted
-    } else {
+    } else { // end adapted
         ba = m_mimeData->data(send_mime_type);
     }
 
@@ -524,7 +522,11 @@
     ClipboardThread(wl_display *display)
         : m_display(display)
     {
+#if QT_VERSION_CHECK(WAYLAND_VERSION_MAJOR, WAYLAND_VERSION_MINOR, 
WAYLAND_VERSION_MICRO) >= QT_VERSION_CHECK(1, 23, 0)
         m_queue = wl_display_create_queue_with_name(m_display, 
"ksystemclipboard queue");
+#else
+        m_queue = wl_display_create_queue(m_display);
+#endif
     }
 
     ~ClipboardThread()
@@ -719,4 +721,5 @@
     return nullptr;
 }
 
+#include "moc_waylandclipboard_p.cpp"
 #include "waylandclipboard.moc"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/util/kimagecache.h 
new/kguiaddons-6.23.0/src/util/kimagecache.h
--- old/kguiaddons-6.22.1/src/util/kimagecache.h        2026-01-13 
15:15:42.000000000 +0100
+++ new/kguiaddons-6.23.0/src/util/kimagecache.h        2026-02-06 
13:14:28.000000000 +0100
@@ -151,7 +151,7 @@
         }
 
         if (destination) {
-            destination->loadFromData(cachedData, "PNG");
+            destination->loadFromData(cachedData, "PNG", 
Qt::NoOpaqueDetection);
 
             // Manually re-insert to pixmap cache if we'll be using this one.
             insertLocalPixmap(key, *destination);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/util/ksysteminhibitor.h 
new/kguiaddons-6.23.0/src/util/ksysteminhibitor.h
--- old/kguiaddons-6.22.1/src/util/ksysteminhibitor.h   1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/util/ksysteminhibitor.h   2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,63 @@
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
+// SPDX-FileCopyrightText: 2025 Harald Sitter <[email protected]>
+
+#pragma once
+
+#include <kguiaddons_export.h>
+
+#include <QObject>
+
+class QWindow;
+
+/*!
+    \class KSystemInhibitor
+    \inmodule KGuiAddons
+    \since 6.23
+
+    \brief Inhibit system actions such as logout, suspend, etc.
+*/
+class KGUIADDONS_EXPORT KSystemInhibitor : public QObject
+{
+    Q_OBJECT
+public:
+    /*!
+        Inhibition types.
+
+        \value Logout Inhibit logout/shutdown
+        \value UserSwitch Inhibit user switching
+        \value Suspend Inhibit suspend/hibernate
+        \value Idle Inhibit idle actions (e.g. screen locking)
+    */
+    enum class Type {
+        Logout = 1,
+        UserSwitch = 2,
+        Suspend = 4,
+        Idle = 8
+    };
+    Q_ENUM(Type)
+    Q_DECLARE_FLAGS(Types, Type)
+    Q_FLAG(Types)
+
+    /*!
+        Claim inhibition.
+
+        \a reason is the user-visible reason for the inhibition.
+
+        \a types is a combination of inhibition types.
+
+        \a window is the window for which to apply the inhibition. May be null 
in which case possible user queries will not be associated with any window.
+
+        \a parent is the parent QObject.
+    */
+    KSystemInhibitor(const QString &reason, Types types, QWindow *window, 
QObject *parent = nullptr);
+
+    /*!
+        Release inhibition
+    */
+    ~KSystemInhibitor() override;
+
+    Q_DISABLE_COPY_MOVE(KSystemInhibitor)
+
+private:
+    std::unique_ptr<class KSystemInhibitorPrivate> const d;
+};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/util/ksysteminhibitor_android.cpp 
new/kguiaddons-6.23.0/src/util/ksysteminhibitor_android.cpp
--- old/kguiaddons-6.22.1/src/util/ksysteminhibitor_android.cpp 1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/util/ksysteminhibitor_android.cpp 2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: LGPL-2.0-or-later
+// SPDX-FileCopyrightText: 2019 Nicolas Fella <[email protected]>
+// SPDX-FileCopyrightText: 2025 Volker Krause <[email protected]>
+
+#include "ksysteminhibitor.h"
+
+#include <QCoreApplication>
+#include <QJniObject>
+
+class KSystemInhibitorPrivate
+{
+public:
+    KSystemInhibitor::Types m_types;
+};
+
+KSystemInhibitor::KSystemInhibitor([[maybe_unused]] const QString &reason, 
Types types, [[maybe_unused]] QWindow *window, QObject *parent)
+    : QObject(parent)
+    , d(std::make_unique<KSystemInhibitorPrivate>())
+{
+    d->m_types = types;
+    if (d->m_types & KSystemInhibitor::Type::Idle) {
+        
QJniObject::callStaticMethod<void>("org.kde.guiaddons.KSystemInhibitor",
+                                           "setLockInhibitionOn",
+                                           "(Landroid/app/Activity;)V",
+                                           
QNativeInterface::QAndroidApplication::context());
+    }
+}
+
+KSystemInhibitor::~KSystemInhibitor()
+{
+    if (d->m_types & KSystemInhibitor::Type::Idle) {
+        
QJniObject::callStaticMethod<void>("org.kde.guiaddons.KSystemInhibitor",
+                                           "setLockInhibitionOff",
+                                           "(Landroid/app/Activity;)V",
+                                           
QNativeInterface::QAndroidApplication::context());
+    }
+}
+
+#include "moc_ksysteminhibitor.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kguiaddons-6.22.1/src/util/ksysteminhibitor_dbus.cpp 
new/kguiaddons-6.23.0/src/util/ksysteminhibitor_dbus.cpp
--- old/kguiaddons-6.22.1/src/util/ksysteminhibitor_dbus.cpp    1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/util/ksysteminhibitor_dbus.cpp    2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,77 @@
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
+// SPDX-FileCopyrightText: 2025 Harald Sitter <[email protected]>
+
+#include "ksysteminhibitor.h"
+
+#include <QDBusConnection>
+#include <QDBusMessage>
+#include <QDBusPendingCall>
+#include <QDBusPendingReply>
+#include <private/qdesktopunixservices_p.h>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
+
+#include "kguiaddons_debug.h"
+
+using namespace Qt::StringLiterals;
+
+namespace
+{
+void release(const QDBusObjectPath &path)
+{
+    QDBusMessage message = 
QDBusMessage::createMethodCall(u"org.freedesktop.portal.Desktop"_s, 
path.path(), u"org.freedesktop.portal.Request"_s, u"Close"_s);
+    QDBusConnection::sessionBus().asyncCall(message);
+};
+} // namespace
+
+class KSystemInhibitorPrivate
+{
+public:
+    std::optional<QDBusObjectPath> m_inhibition;
+};
+
+KSystemInhibitor::KSystemInhibitor(const QString &reason, Types types, QWindow 
*window, QObject *parent)
+    : QObject(parent)
+    , d(std::make_unique<KSystemInhibitorPrivate>())
+{
+    QDBusMessage message = 
QDBusMessage::createMethodCall(u"org.freedesktop.portal.Desktop"_s,
+                                                          
u"/org/freedesktop/portal/desktop"_s,
+                                                          
u"org.freedesktop.portal.Inhibit"_s,
+                                                          u"Inhibit"_s);
+
+    const QString windowIdentifier = [window] {
+        if (window) {
+            auto services = 
QGuiApplicationPrivate::platformIntegration()->services();
+            if (auto unixServices = dynamic_cast<QDesktopUnixServices 
*>(services)) {
+                return unixServices->portalWindowIdentifier(window);
+            }
+        }
+        return QString();
+    }();
+    message << windowIdentifier << static_cast<unsigned>(types.toInt()) << 
QVariantMap({{QLatin1String("reason"), reason}});
+
+    auto watcher = new 
QDBusPendingCallWatcher(QDBusConnection::sessionBus().asyncCall(message), qApp);
+    QObject::connect(watcher,
+                     &QDBusPendingCallWatcher::finished,
+                     qApp,
+                     [that = QPointer(this) /* we bind to the lifetime of 
qApp, guard this!*/](QDBusPendingCallWatcher *watcher) {
+                         watcher->deleteLater();
+                         QDBusPendingReply<QDBusObjectPath> reply = *watcher;
+                         if (reply.isError()) {
+                             qCWarning(KGUIADDONS_LOG) << "KSystemInhibitor 
Error: " << reply.error().message();
+                         } else if (that) {
+                             that->d->m_inhibition.emplace(reply.value());
+                         } else { // KSystemInhibitor got deleted before we 
could store the inhibition, release it immediately.
+                             release(reply.value());
+                         }
+                     });
+}
+
+KSystemInhibitor::~KSystemInhibitor()
+{
+    if (d->m_inhibition.has_value()) {
+        release(d->m_inhibition.value());
+    }
+}
+
+#include "moc_ksysteminhibitor.cpp"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kguiaddons-6.22.1/src/util/ksysteminhibitor_dummy.cpp 
new/kguiaddons-6.23.0/src/util/ksysteminhibitor_dummy.cpp
--- old/kguiaddons-6.22.1/src/util/ksysteminhibitor_dummy.cpp   1970-01-01 
01:00:00.000000000 +0100
+++ new/kguiaddons-6.23.0/src/util/ksysteminhibitor_dummy.cpp   2026-02-06 
13:14:28.000000000 +0100
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR 
LicenseRef-KDE-Accepted-LGPL
+// SPDX-FileCopyrightText: 2025 Harald Sitter <[email protected]>
+
+#include "ksysteminhibitor.h"
+
+class KSystemInhibitorPrivate
+{
+};
+
+KSystemInhibitor::KSystemInhibitor([[maybe_unused]] const QString &reason, 
[[maybe_unused]] Types types, [[maybe_unused]] QWindow *window, QObject *parent)
+    : QObject(parent)
+{
+}
+
+KSystemInhibitor::~KSystemInhibitor() = default;
+
+#include "moc_ksysteminhibitor.cpp"

Reply via email to