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"
