This commit is contained in:
2026-01-28 15:08:36 +08:00
parent fe7631efef
commit 06d1a07763
18 changed files with 2185 additions and 0 deletions

193
breeze6/breeze6.spec Normal file
View File

@@ -0,0 +1,193 @@
%define kf6_version 6.18.0
%define qt6_version 6.9.0
# Full Plasma 6 version (e.g. 6.0.0)
%{!?_plasma6_bugfix: %define _plasma6_bugfix %{version}}
# Latest ABI-stable Plasma (e.g. 6.0 in KF6, but 6.0.80 in KUF)
%{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')}
%define rname breeze
Name: breeze6
Version: 6.5.5
Release: 0
Summary: Plasma Desktop artwork, styles and assets
License: GPL-2.0-or-later
URL: https://www.kde.org
Source: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz
BuildRequires: cmake >= 3.16
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{kf6_version}
# W: desktopfile-without-binary /usr/share/applications/kcm_breezedecoration.desktop
BuildRequires: kf6-kcmutils >= %{kf6_version}
# Needed for Plasma/LookAndFeel service type declaration (kde#367923)
BuildRequires: plasma6-framework >= %{_plasma6_bugfix}
BuildRequires: pkgconfig
BuildRequires: cmake(KDecoration3) >= %{_plasma6_bugfix}
BuildRequires: cmake(KF6Config) >= %{kf6_version}
BuildRequires: cmake(KF6ConfigWidgets) >= %{kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{kf6_version}
BuildRequires: cmake(KF6FrameworkIntegration) >= %{kf6_version}
BuildRequires: cmake(KF6GuiAddons) >= %{kf6_version}
BuildRequires: cmake(KF6I18n) >= %{kf6_version}
BuildRequires: cmake(KF6IconThemes) >= %{kf6_version}
BuildRequires: cmake(KF6KCMUtils) >= %{kf6_version}
BuildRequires: cmake(KF6KirigamiPlatform) >= %{kf6_version}
BuildRequires: cmake(KF6WindowSystem) >= %{kf6_version}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
BuildRequires: cmake(Qt6Svg) >= %{qt6_version}
BuildRequires: cmake(Qt6Widgets) >= %{qt6_version}
Requires: breeze6-cursors >= %{version}
Requires: breeze6-style >= %{version}
Requires: kf6-breeze-icons >= %{kf6_version}
Recommends: breeze6-decoration >= %{version}
Recommends: breeze6-wallpapers >= %{version}
Provides: breeze = %{version}
Obsoletes: breeze < %{version}
%description
Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
%package -n breeze6-cursors
Summary: Plasma Desktop artwork, styles and assets
Provides: breeze5-cursors = %{version}
Obsoletes: breeze5-cursors < %{version}
BuildArch: noarch
%description -n breeze6-cursors
Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
This package provides Breeze cursor theme.
%package -n breeze6-style
Summary: Plasma Desktop artwork, styles and assets
Requires: kconf_update6
Provides: breeze5-style = %{version}
Obsoletes: breeze5-style < %{version}
Obsoletes: breeze5-style-lang < %{version}
%description -n breeze6-style
Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
This package provides Breeze style, color-scheme and aditional assets.
%package -n breeze6-wallpapers
Summary: Plasma Desktop artwork, styles and assets
Provides: breeze5-wallpapers = %{version}
Obsoletes: breeze5-wallpapers < %{version}
BuildArch: noarch
%description -n breeze6-wallpapers
Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
This package provides Breeze wallpaper theme.
%package -n breeze6-decoration
Summary: Plasma Desktop artwork, styles and assets
Obsoletes: breeze5-decoration < %{version}
%description -n breeze6-decoration
Artwork, styles and assets for the Breeze visual style for the Plasma Desktop.
This package provides Breeze KWin decoration.
# NOTE: The CMake files were split from breeze*-style and don't require anything on purpose.
# Otherwise, BuildRequires: cmake(Breeze) would pull some Qt5 and KF5 packages.
%package devel
Summary: Information about breeze setup
Conflicts: breeze5-style < 6.0.0
%description devel
This package ships a CMake config file used to get information about Breeze.
%lang_package -n breeze6-style
%prep
%autosetup -p1 -n %{rname}-%{version}
# Empty file used by the breeze6 packages
cat >> meta_package << EOF
This is a meta package, it does not contain any file
EOF
%build
%cmake_kf6 \
-DBUILD_QT6:BOOL=TRUE \
%if %{with plasma5}
-DBUILD_QT5:BOOL=TRUE
%else
-DBUILD_QT5:BOOL=FALSE
%endif
%kf6_build
%install
%kf6_install
%find_lang breeze6-style --all-name
%fdupes %{buildroot}
# TODO remove when breeze5 decoration won't be needed
mv %{buildroot}%{_kf6_applicationsdir}/kcm_breezedecoration.desktop %{buildroot}%{_kf6_applicationsdir}/kcm_breezedecoration6.desktop
%files
%doc meta_package
%files -n breeze6-cursors
%license LICENSES/*
%{_kf6_iconsdir}/breeze_cursors
%{_kf6_iconsdir}/Breeze_Light/
%files -n breeze6-style
%license LICENSES/*
%{_kf6_applicationsdir}/breezestyleconfig.desktop
%{_kf6_bindir}/breeze-settings6
%{_kf6_iconsdir}/hicolor/scalable/apps/breeze-settings.svgz
%dir %{_kf6_plugindir}/kstyle_config
%{_kf6_plugindir}/kstyle_config/breezestyleconfig.so
%dir %{_kf6_plugindir}/styles
%if %{with plasma5}
%dir %{_kf5_plugindir}/styles
%{_kf5_plugindir}/styles/breeze5.so
%endif
%{_kf6_plugindir}/styles/breeze6.so
%dir %{_kf6_sharedir}/QtCurve
%{_kf6_sharedir}/QtCurve/Breeze.qtcurve
%dir %{_kf6_sharedir}/color-schemes
%{_kf6_sharedir}/color-schemes/BreezeClassic.colors
%{_kf6_sharedir}/color-schemes/BreezeDark.colors
%{_kf6_sharedir}/color-schemes/BreezeLight.colors
%dir %{_kf6_sharedir}/kstyle
%dir %{_kf6_sharedir}/kstyle/themes
%{_kf6_sharedir}/kstyle/themes/breeze.themerc
%files -n breeze6-wallpapers
%license LICENSES/*
%dir %{_kf6_sharedir}/wallpapers
%{_kf6_sharedir}/wallpapers/Next/
%files -n breeze6-decoration
%license LICENSES/*
%{_kf6_applicationsdir}/kcm_breezedecoration6.desktop
%dir %{_kf6_plugindir}/org.kde.kdecoration3.kcm
%{_kf6_plugindir}/org.kde.kdecoration3.kcm/kcm_breezedecoration.so
%dir %{_kf6_plugindir}/org.kde.kdecoration3
%{_kf6_plugindir}/org.kde.kdecoration3/org.kde.breeze.so
%files devel
%{_kf6_bindir}/kcursorgen
%{_kf6_cmakedir}/Breeze/
%files -n breeze6-style-lang -f breeze6-style.lang
%changelog

View File

@@ -0,0 +1,91 @@
%define kf6_version 6.18.0
%define qt6_version 6.9.0
%define rname kdecoration
%global sover 6
%global private_sover 2
Name: kdecoration6
Version: 6.5.5
Release: 0
Summary: KDE's window decorations library
License: GPL-2.0-or-later
URL: https://www.kde.org
Source: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz
BuildRequires: kf6-extra-cmake-modules >= %{kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{kf6_version}
BuildRequires: cmake(KF6I18n) >= %{kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6Test) >= %{qt6_version}
%description
Plugin based library to create window decorations.
%package -n libkdecorations3-%{sover}
Summary: KDE's window decorations library
# boo#1239218: Translation files are unversioned and conflict.
# Needs a redesign, maybe a rename to kdecoration-lang +
# Provides: kdecoration where necessary.
Obsoletes: libkdecorations2-5-lang < %{version}
%description -n libkdecorations3-%{sover}
Plugin based library to create window decorations.
%package -n libkdecorations3private%{private_sover}
Summary: KDE's window decorations library
%description -n libkdecorations3private%{private_sover}
Plugin based library to create window decorations.
%package devel
Summary: KDE's window decorations library (development package)
Requires: libkdecorations3-%{sover} = %{version}
Requires: libkdecorations3private%{private_sover} = %{version}
Requires: cmake(Qt6Gui)
%description devel
Development files belonging to kdecoration,
plugin based library to create window decorations.
%lang_package -n libkdecorations3-%{sover}
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%find_lang %{name} --all-name
%ldconfig_scriptlets -n libkdecorations3-%{sover}
%ldconfig_scriptlets -n libkdecorations3private%{private_sover}
%files -n libkdecorations3-%{sover}
%license LICENSES/*
%{_kf6_libdir}/libkdecorations3.so.%{sover}
%{_kf6_libdir}/libkdecorations3.so.*
%files -n libkdecorations3private%{private_sover}
%{_kf6_libdir}/libkdecorations3private.so.%{private_sover}
%{_kf6_libdir}/libkdecorations3private.so.*
%files devel
%{_includedir}/KDecoration3/
%{_kf6_cmakedir}/KDecoration3/
%{_kf6_includedir}/kdecoration3_version.h
%{_kf6_libdir}/libkdecorations3.so
%{_kf6_libdir}/libkdecorations3private.so
%files -n libkdecorations3-%{sover}-lang -f %{name}.lang
%changelog

View File

@@ -0,0 +1,142 @@
%define qt6_version 6.8.0
%define rname kcmutils
# Internal QML import
%global __requires_exclude qt6qmlimport\\(org\\.kde\\.kcmutils\\.private.*\\)
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kcmutils
Version: 6.20.0
Release: 0
Summary: Classes to work with KCModules
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(KF6ConfigWidgets) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6GuiAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6I18n) >= %{_kf6_version}
BuildRequires: cmake(KF6ItemViews) >= %{_kf6_version}
BuildRequires: cmake(KF6KIO) >= %{_kf6_version}
BuildRequires: cmake(KF6WidgetsAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6XmlGui) >= %{_kf6_version}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Qml) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
BuildRequires: cmake(Qt6QuickWidgets) >= %{qt6_version}
BuildRequires: cmake(Qt6Test) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
BuildRequires: cmake(Qt6Widgets) >= %{qt6_version}
%description
KCMUtils provides various classes to work with KCModules. KCModules can be
created with the KConfigWidgets framework.
%package -n libKF6KCMUtils6
Summary: Classes to work with KCModules
Requires: kf6-kcmutils >= %{version}
%description -n libKF6KCMUtils6
KCMUtils provides various classes to work with KCModules. KCModules can be
created with the KConfigWidgets framework.
%package -n libKF6KCMUtilsCore6
Summary: Core library of classes to work with KCModules
%description -n libKF6KCMUtilsCore6
KCMUtils provides various classes to work with KCModules. This package provides
the main core library.
%package -n libKF6KCMUtilsQuick6
Summary: Classes to work with KCModules
%description -n libKF6KCMUtilsQuick6
KCMUtils provides various classes to work with KCModules. KCModules can be
created with the KConfigWidgets framework.
%package imports
Summary: QtQuick bindings for classes to work with KCModules
Requires: libKF6KCMUtils6 = %{version}
Requires: libKF6KCMUtilsCore6 = %{version}
Requires: libKF6KCMUtilsQuick6 = %{version}
%description imports
KCMUtils provides various classes to work with KCModules. KCModules can be
created with the KConfigWidgets framework. This package provides QtQuick bindings
for the KCMUtils libraries.
%package devel
Summary: Build environment for kcmutils, a set of classes to work with KCModules
Requires: libKF6KCMUtils6 = %{version}
Requires: libKF6KCMUtilsCore6 = %{version}
Requires: libKF6KCMUtilsQuick6 = %{version}
Requires: cmake(KF6ConfigWidgets) >= %{_kf6_version}
Requires: cmake(KF6CoreAddons) >= %{_kf6_version}
Requires: cmake(Qt6Qml) >= %{qt6_version}
%description devel
KCMUtils provides various classes to work with KCModules. KCModules can be
created with the KConfigWidgets framework. Development files.
%lang_package
%lang_package -n libKF6KCMUtils6
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%find_lang kcmutils6
%find_lang kcmshell6
%ldconfig_scriptlets -n libKF6KCMUtils6
%ldconfig_scriptlets -n libKF6KCMUtilsCore6
%ldconfig_scriptlets -n libKF6KCMUtilsQuick6
%files
%doc README.md
%{_kf6_bindir}/kcmshell6
%{_kf6_debugdir}/kcmutils.categories
%{_kf6_libexecdir}/kcmdesktopfilegenerator
%files -n libKF6KCMUtils6
%{_kf6_libdir}/libKF6KCMUtils.so.*
%files -n libKF6KCMUtilsCore6
%license LICENSES/*
%{_kf6_libdir}/libKF6KCMUtilsCore.so.*
%files -n libKF6KCMUtilsQuick6
%{_kf6_libdir}/libKF6KCMUtilsQuick.so.*
%files imports
%{_kf6_qmldir}/org/kde/kcmutils/
%files devel
%{_kf6_cmakedir}/KF6KCMUtils/
%{_kf6_includedir}/KCMUtils/
%{_kf6_includedir}/KCMUtilsCore/
%{_kf6_includedir}/KCMUtilsQuick/
%{_kf6_libdir}/libKF6KCMUtils.so
%{_kf6_libdir}/libKF6KCMUtilsCore.so
%{_kf6_libdir}/libKF6KCMUtilsQuick.so
%files lang -f kcmshell6.lang
%files -n libKF6KCMUtils6-lang -f kcmutils6.lang
%changelog

View File

@@ -0,0 +1,99 @@
%define qt6_version 6.8.0
%define rname kdeclarative
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kdeclarative
Version: 6.20.0
Release: 0
Summary: Integration of QML and KDE workspaces
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(KF6Config) >= %{_kf6_version}
BuildRequires: cmake(KF6GlobalAccel) >= %{_kf6_version}
BuildRequires: cmake(KF6GuiAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6I18n) >= %{_kf6_version}
BuildRequires: cmake(KF6WidgetsAddons) >= %{_kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6Qml) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
BuildRequires: cmake(Qt6ShaderTools) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
%description
KDeclarative provides integration of QML and KDE workspaces.
%package -n libKF6CalendarEvents6
Summary: Integration of QML and KDE workspaces
Recommends: kf6-kdeclarative-imports = %{version}
%description -n libKF6CalendarEvents6
KDeclarative provides integration of QML and KDE workspaces.
%package imports
Summary: KDeclarative QML imports
Requires: kf6-kirigami-imports >= %{_kf6_version}
%description imports
KDeclarative provides integration of QML and KDE workspaces.
%package devel
Summary: Integration of QML and KDE workspaces: Build Environment
Requires: libKF6CalendarEvents6 = %{version}
Requires: cmake(KF6Config) >= %{_kf6_version}
Requires: cmake(KF6CoreAddons) >= %{_kf6_version}
Requires: cmake(Qt6Quick) >= %{qt6_version}
%description devel
KDeclarative provides integration of QML and KDE workspaces.
Development files.
%lang_package -n libKF6CalendarEvents6
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%find_lang kdeclarative6
%ldconfig_scriptlets -n kf6-kdeclarative-imports
%ldconfig_scriptlets -n libKF6CalendarEvents6
%files -n libKF6CalendarEvents6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6CalendarEvents.so.*
%files imports
%{_kf6_libdir}/libkquickcontrolsprivate.so.*
%dir %{_kf6_qmldir}/org/kde/private
%{_kf6_qmldir}/org/kde/draganddrop/
%{_kf6_qmldir}/org/kde/graphicaleffects/
%{_kf6_qmldir}/org/kde/kquickcontrols/
%{_kf6_qmldir}/org/kde/kquickcontrolsaddons/
%{_kf6_qmldir}/org/kde/private/kquickcontrols/
%files devel
%{_kf6_cmakedir}/KF6Declarative/
%{_kf6_includedir}/KDeclarative/
%{_kf6_libdir}/libKF6CalendarEvents.so
%files -n libKF6CalendarEvents6-lang -f kdeclarative6.lang
%changelog

View File

@@ -0,0 +1,96 @@
%define qt6_version 6.8.0
%define rname kglobalaccel
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kglobalaccel
Version: 6.20.0
Release: 0
Summary: Global desktop keyboard shortcuts
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: pkgconfig
BuildRequires: qt6-gui-private-devel >= %{qt6_version}
BuildRequires: systemd-rpm-macros
BuildRequires: cmake(KF6Config) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6Crash) >= %{_kf6_version}
BuildRequires: cmake(KF6DBusAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6WindowSystem) >= %{_kf6_version}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6LinguistTools) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
BuildRequires: cmake(Qt6Widgets) >= %{qt6_version}
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-keysyms)
%description
KGlobalAccel allows you to have global accelerators that are independent of
the focused window. Unlike regular shortcuts, the application's window does not
need focus for them to be activated.
%package -n libKF6GlobalAccel6
Summary: Global desktop keyboard shortcuts
Requires: kf6-kglobalaccel >= %{version}
%description -n libKF6GlobalAccel6
KGlobalAccel allows you to have global accelerators that are independent of
the focused window. Unlike regular shortcuts, the application's window does not
need focus for them to be activated.
%package devel
Summary: Global desktop keyboard shortcuts: Build Environment
Requires: libKF6GlobalAccel6 = %{version}
Requires: cmake(Qt6DBus) >= %{qt6_version}
Requires: cmake(Qt6Widgets) >= %{qt6_version}
%description devel
KGlobalAccel allows you to have global accelerators that are independent of
the focused window. Unlike regular shortcuts, the application's window does not
need focus for them to be activated. Development files.
%lang_package -n libKF6GlobalAccel6
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%find_lang kglobalaccel6 --with-qt --without-mo
%ldconfig_scriptlets -n libKF6GlobalAccel6
%files
%{_kf6_debugdir}/kglobalaccel.categories
%{_kf6_debugdir}/kglobalaccel.renamecategories
%files -n libKF6GlobalAccel6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6GlobalAccel.so.*
%files devel
%{_kf6_libdir}/libKF6GlobalAccel.so
%{_kf6_cmakedir}/KF6GlobalAccel/
%{_kf6_includedir}/KGlobalAccel/
%{_kf6_dbusinterfacesdir}/kf6_org.kde.KGlobalAccel.xml
%{_kf6_dbusinterfacesdir}/kf6_org.kde.kglobalaccel.Component.xml
%files -n libKF6GlobalAccel6-lang -f kglobalaccel6.lang
%changelog

View File

@@ -0,0 +1,81 @@
%define qt6_version 6.8.0
%define rname kholidays
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kholidays
Version: 6.20.0
Release: 0
Summary: Holiday calculation library
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6LinguistTools) >= %{qt6_version}
BuildRequires: cmake(Qt6Qml) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
%description
This package contains a library which helps developers determining when holidays occur.
%package imports
Summary: QML imports for the KDE Holidays Franework
%description imports
QML imports for the KDE Holidays Franework.
%package -n libKF6Holidays6
Summary: Holiday API for KDE PIM
Requires: kf6-kholidays >= %{version}
%description -n libKF6Holidays6
This package contains a library which helps developers determining when holidays occur.
%package devel
Summary: Development files for the KDE PIM Holiday API
Requires: libKF6Holidays6 = %{version}
Requires: cmake(Qt6Core)
%description devel
This package contains necessary include files and libraries needed
to develop applications depending on the kholidays library
%lang_package -n libKF6Holidays6
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%find_lang libkholidays6 --with-man --all-name --with-qt
%ldconfig_scriptlets -n libKF6Holidays6
%files
%{_kf6_debugdir}/kholidays.categories
%files imports
%{_kf6_qmldir}/org/kde/kholidays/
%files -n libKF6Holidays6
%license LICENSES/*
%doc DESIGN README.md
%{_kf6_libdir}/libKF6Holidays.so.*
%files devel
%{_kf6_cmakedir}/KF6Holidays/
%{_kf6_includedir}/KHolidays/
%{_kf6_libdir}/libKF6Holidays.so
%files -n libKF6Holidays6-lang -f libkholidays6.lang
%changelog

View File

@@ -0,0 +1,98 @@
%define qt6_version 6.8.0
%define rname kidletime
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kidletime
Version: 6.20.0
Release: 0
Summary: User and system idle time reporting singleton
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: pkgconfig
BuildRequires: qt6-gui-private-devel >= %{qt6_version}
BuildRequires: cmake(PlasmaWaylandProtocols)
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
BuildRequires: cmake(Qt6WaylandClient) >= %{qt6_version}
BuildRequires: pkgconfig(wayland-protocols) >= 1.27
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xext)
BuildRequires: pkgconfig(xscrnsaver)
%description
KIdleTime is a singleton reporting information on idle time. It is useful not
only for finding out about the current idle time of the PC, but also for getting
notified upon idle time events, such as custom timeouts, or user activity.
%package plugins
Summary: User and system idle time reporting singleton
%description plugins
KIdleTime is a singleton reporting information on idle time. It is useful not
only for finding out about the current idle time of the PC, but also for getting
notified upon idle time events, such as custom timeouts, or user activity.
%package -n libKF6IdleTime6
Summary: User and system idle time reporting singleton
Requires: kf6-kidletime >= %{version}
Recommends: kf6-kidletime-plugins = %{version}
%description -n libKF6IdleTime6
KIdleTime is a singleton reporting information on idle time. It is useful not
only for finding out about the current idle time of the PC, but also for getting
notified upon idle time events, such as custom timeouts, or user activity.
%package devel
Summary: Build environment for kidletime, an idle time singleton
Requires: libKF6IdleTime6 = %{version}
%description devel
Development files for KIdleTime, which is a singleton reporting
information on idle time. It is useful not only for finding out about
the current idle time of the PC, but also for getting notified upon
idle time events, such as custom timeouts, or user activity.
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%ldconfig_scriptlets -n libKF6IdleTime6
%files
%{_kf6_debugdir}/kidletime.categories
%{_kf6_debugdir}/kidletime.renamecategories
%files plugins
%dir %{_kf6_plugindir}/kf6/org.kde.kidletime.platforms
%{_kf6_plugindir}/kf6/org.kde.kidletime.platforms/KF6IdleTimeWaylandPlugin.so
%{_kf6_plugindir}/kf6/org.kde.kidletime.platforms/KF6IdleTimeXcbPlugin0.so
%{_kf6_plugindir}/kf6/org.kde.kidletime.platforms/KF6IdleTimeXcbPlugin1.so
%files -n libKF6IdleTime6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6IdleTime.so.*
%files devel
%{_kf6_includedir}/KIdleTime/
%{_kf6_cmakedir}/KF6IdleTime/
%{_kf6_libdir}/libKF6IdleTime.so
%changelog

View File

@@ -0,0 +1,131 @@
%define qt6_version 6.8.0
%define rname knewstuff
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-knewstuff
Version: 6.20.0
Release: 0
Summary: Framework for downloading and sharing additional application data
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(KF6Archive) >= %{_kf6_version}
BuildRequires: cmake(KF6Attica) >= %{_kf6_version}
BuildRequires: cmake(KF6Config) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6I18n) >= %{_kf6_version}
BuildRequires: cmake(KF6Package) >= %{_kf6_version}
BuildRequires: cmake(KF6Syndication) >= %{_kf6_version}
BuildRequires: cmake(KF6WidgetsAddons) >= %{_kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6Qml) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
BuildRequires: cmake(Qt6QuickWidgets) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
BuildRequires: cmake(Qt6UiPlugin) >= %{qt6_version}
BuildRequires: cmake(Qt6Widgets) >= %{qt6_version}
BuildRequires: cmake(Qt6Xml) >= %{qt6_version}
%description
The KNewStuff library implements collaborative data sharing for
applications. It uses libattica to support the Open Collaboration Services
specification.
%package -n libKF6NewStuffCore6
Summary: Framework for downloading and sharing additional application data
Requires: kf6-knewstuff >= %{version}
%description -n libKF6NewStuffCore6
The KNewStuff library implements collaborative data sharing for
applications. It uses libattica to support the Open Collaboration Services
specification.
%package -n libKF6NewStuffWidgets6
Summary: Framework for downloading and sharing additional application data
%description -n libKF6NewStuffWidgets6
The KNewStuff library implements collaborative data sharing for
applications. It uses libattica to support the Open Collaboration Services
specification.
%package imports
Summary: Framework for downloading and sharing additional application data
Requires: kf6-kirigami-imports >= %{_kf6_version}
%description imports
The KNewStuff library implements collaborative data sharing for
applications. It uses libattica to support the Open Collaboration Services
specification.
%package devel
Summary: Framework for downloading and sharing additional application data
Requires: libKF6NewStuffCore6 = %{version}
Requires: libKF6NewStuffWidgets6 = %{version}
Requires: cmake(KF6Attica) >= %{_kf6_version}
Requires: cmake(KF6CoreAddons) >= %{_kf6_version}
Requires: cmake(Qt6Widgets) >= %{qt6_version}
Provides: kf6-knewstuff-core-devel = %{version}
Obsoletes: kf6-knewstuff-core-devel < %{version}
%description devel
The KNewStuff library implements collaborative data sharing for
applications. It uses libattica to support the Open Collaboration Services
specification. Development files.
%lang_package -n libKF6NewStuffCore6
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%find_lang knewstuff6
%ldconfig_scriptlets -n libKF6NewStuffCore6
%ldconfig_scriptlets -n libKF6NewStuffWidgets6
%files
%{_kf6_applicationsdir}/org.kde.knewstuff-dialog6.desktop
%{_kf6_bindir}/knewstuff-dialog6
%{_kf6_debugdir}/knewstuff.categories
%{_kf6_debugdir}/knewstuff.renamecategories
%files -n libKF6NewStuffCore6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6NewStuffCore.so.*
%files -n libKF6NewStuffWidgets6
%{_kf6_libdir}/libKF6NewStuffWidgets.so.*
%files imports
%{_kf6_qmldir}/org/kde/newstuff/
%files devel
%{_kf6_cmakedir}/KF6NewStuff/
%{_kf6_cmakedir}/KF6NewStuffCore/
%{_kf6_includedir}/KNewStuff/
%{_kf6_includedir}/KNewStuffCore/
%{_kf6_includedir}/KNewStuffWidgets/
%{_kf6_libdir}/libKF6NewStuffCore.so
%{_kf6_libdir}/libKF6NewStuffWidgets.so
%{_kf6_plugindir}/designer/knewstuff6widgets.so
%files -n libKF6NewStuffCore6-lang -f knewstuff6.lang
%changelog

View File

@@ -0,0 +1,84 @@
%define qt6_version 6.8.0
%define rname kpackage
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kpackage
Version: 6.20.0
Release: 0
Summary: Non-binary asset user-installable package managing framework
License: GPL-2.0-or-later AND LGPL-2.0-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(KF6Archive) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6DocTools) >= %{_kf6_version}
BuildRequires: cmake(KF6I18n) >= %{_kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
%description
This framework lets applications to manage user installable packages of
non-binary assets.
%package -n libKF6Package6
Summary: Non-binary asset user-installable package managing framework
Requires: kf6-kpackage >= %{version}
%description -n libKF6Package6
This framework lets applications to manage user installable packages of
non-binary assets.
%package devel
Summary: Non-binary asset user-installable package managing framework
Requires: libKF6Package6 = %{version}
Requires: cmake(KF6CoreAddons) >= %{_kf6_version}
%description devel
This framework lets applications to manage user installable packages of
non-binary assets.
Development files.
%lang_package
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%find_lang libkpackage6 --with-man --all-name
%ldconfig_scriptlets -n libKF6Package6
%files
%doc %lang(en) %{_kf6_mandir}/man1/kpackagetool6.1%{?ext_man}
%{_kf6_bindir}/kpackagetool6
%{_kf6_debugdir}/kpackage.categories
%{_kf6_debugdir}/kpackage.renamecategories
%files -n libKF6Package6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6Package.so.*
%files devel
%{_kf6_includedir}/KPackage/
%{_kf6_cmakedir}/KF6Package/
%{_kf6_libdir}/libKF6Package.so
%files lang -f libkpackage6.lang
%changelog

View File

@@ -0,0 +1,77 @@
%define qt6_version 6.8.0
%define rname krunner
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
%bcond_without released
Name: kf6-krunner
Version: 6.20.0
Release: 0
Summary: KDE Framework for providing different actions given a string query
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(KF6Config) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6I18n) >= %{_kf6_version}
BuildRequires: cmake(KF6ItemModels) >= %{_kf6_version}
BuildRequires: cmake(KF6ThreadWeaver) >= %{_kf6_version}
BuildRequires: cmake(KF6WindowSystem) >= %{_kf6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
%description
KDE Framework for providing different actions given a string query.
%package -n libKF6Runner6
Summary: KDE Framework for providing different actions given a string query
Requires: kf6-krunner >= %{version}
%description -n libKF6Runner6
KDE Framework for providing different actions given a string query.
%package devel
Summary: KDE Framework for providing different actions given a string query
Requires: libKF6Runner6 = %{version}
Requires: cmake(KF6CoreAddons) >= %{_kf6_version}
Requires: cmake(Qt6Core) >= %{qt6_version}
Requires: cmake(Qt6Gui) >= %{qt6_version}
%description devel
Files needed for developing custom runners or frontends.
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%ldconfig_scriptlets -n libKF6Runner6
%files
%{_kf6_debugdir}/krunner.categories
%{_kf6_debugdir}/krunner.renamecategories
%files -n libKF6Runner6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6Runner.so.*
%files devel
%{_kf6_cmakedir}/KF6Runner/
%{_kf6_dbusinterfacesdir}/kf6_org.kde.krunner1.xml
%{_kf6_includedir}/KRunner/
%{_kf6_libdir}/libKF6Runner.so
%{_kf6_sharedir}/kdevappwizard/
%changelog

View File

@@ -0,0 +1,612 @@
From f6c0806c455a7e46ad993507e3389c5f25642fab Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Sun, 9 Jun 2024 21:42:10 +0200
Subject: [PATCH] Revert "Support for fractional scaling"
This reverts commit 3dd28b0640d2c613654f992ad3453a0b92beebe1.
---
src/declarativeimports/framesvgitem.cpp | 9 ++-
src/declarativeimports/svgitem.cpp | 7 +-
src/ksvg/framesvg.cpp | 102 ++++++++++--------------
src/ksvg/private/framesvg_helpers.h | 22 ++---
src/ksvg/private/framesvg_p.h | 62 +++++++-------
src/ksvg/private/svg_p.h | 6 +-
src/ksvg/svg.cpp | 27 ++++---
7 files changed, 115 insertions(+), 120 deletions(-)
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/declarativeimports/framesvgitem.cpp
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/declarativeimports/framesvgitem.cpp 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/declarativeimports/framesvgitem.cpp 2025-10-29 05:53:35.434927031 +0100
@@ -123,7 +123,7 @@
void reposition(const QRect &frameGeometry, QSize &fullSize)
{
- QRectF nodeRect = FrameSvgHelpers::sectionRect(m_border, frameGeometry, fullSize);
+ QRect nodeRect = FrameSvgHelpers::sectionRect(m_border, frameGeometry, fullSize);
// ensure we're not passing a weird rectangle to updateTexturedRectGeometry
if (!nodeRect.isValid() || nodeRect.isEmpty()) {
@@ -153,7 +153,7 @@
QString elementId = prefix + FrameSvgHelpers::borderToElementId(m_border);
// re-render the SVG at new size
- updateTexture(nodeRect.size().toSize(), elementId);
+ updateTexture(nodeRect.size(), elementId);
textureRect = texture()->normalizedTextureSubRect();
} else if (texture()) { // for fast stretch.
textureRect = texture()->normalizedTextureSubRect();
@@ -731,7 +731,10 @@
void FrameSvgItem::updateDevicePixelRatio()
{
- const auto newDevicePixelRatio = std::max<qreal>(1.0, (window() ? window()->devicePixelRatio() : qApp->devicePixelRatio()));
+ // devicepixelratio is always set integer in the svg, so needs at least 192dpi to double up.
+ //(it needs to be integer to have lines contained inside a svg piece to keep being pixel aligned)
+ const auto newDevicePixelRatio = std::max<qreal>(1.0, floor(window() ? window()->devicePixelRatio() : qApp->devicePixelRatio()));
+
if (newDevicePixelRatio != m_frameSvg->devicePixelRatio()) {
m_frameSvg->setDevicePixelRatio(newDevicePixelRatio);
m_textureChanged = true;
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/declarativeimports/svgitem.cpp
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/declarativeimports/svgitem.cpp 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/declarativeimports/svgitem.cpp 2025-10-29 05:55:58.826843180 +0100
@@ -15,6 +15,7 @@
#include "ksvg/svg.h"
#include "managedtexturenode.h"
+#include <cmath> //floor()
#include <KColorScheme>
#include <KColorUtils>
@@ -273,7 +274,10 @@
void SvgItem::updateDevicePixelRatio()
{
- const auto newDevicePixelRatio = std::max<qreal>(1.0, (window() ? window()->devicePixelRatio() : qApp->devicePixelRatio()));
+ // devicepixelratio is always set integer in the svg, so needs at least 192dpi to double up.
+ //(it needs to be integer to have lines contained inside a svg piece to keep being pixel aligned)
+ const auto newDevicePixelRatio = std::max<qreal>(1.0, floor(window() ? window()->devicePixelRatio() : qApp->devicePixelRatio()));
+
if (newDevicePixelRatio != m_svg->devicePixelRatio()) {
m_svg->setDevicePixelRatio(newDevicePixelRatio);
m_textureChanged = true;
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/framesvg.cpp
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/ksvg/framesvg.cpp 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/framesvg.cpp 2025-10-29 05:53:35.435166833 +0100
@@ -15,7 +15,7 @@
#include <QCryptographicHash>
#include <QPainter>
#include <QRegion>
-#include <QSizeF>
+#include <QSize>
#include <QStringBuilder>
#include <QTimer>
@@ -194,7 +194,7 @@
QSizeF FrameSvg::frameSize() const
{
if (!d->frame) {
- return QSizeF(-1, -1);
+ return QSize(-1, -1);
} else {
return d->frameSize(d->frame.data());
}
@@ -490,6 +490,9 @@
if (maskFrame->cachedBackground.isNull()) {
generateBackground(maskFrame);
+ // When we take the maskFrame from cache, the pixel ratio gets
+ // reset to 1
+ maskFrame->cachedBackground.setDevicePixelRatio(q->devicePixelRatio());
}
return maskFrame->cachedBackground;
@@ -554,8 +557,8 @@
}
// Overlays
- QSizeF overlaySize;
- QPointF actualOverlayPos = QPointF(0, 0);
+ QSize overlaySize;
+ QPoint actualOverlayPos = QPoint(0, 0);
if (overlayAvailable && !overlayCached) {
overlaySize = q->elementSize(frame->prefix % QLatin1String("overlay")).toSize();
@@ -582,7 +585,7 @@
if (q->hasElement(QLatin1String("mask-") % prefix % QLatin1String("center"))) {
overlay = alphaMask();
} else {
- overlay = QPixmap(overlaySize.toSize());
+ overlay = QPixmap(overlaySize);
overlay.fill(Qt::white);
}
QPainter overlayPainter(&overlay);
@@ -590,13 +593,13 @@
// Tiling?
if (q->hasElement(frame->prefix % QLatin1String("hint-overlay-tile-horizontal"))
|| q->hasElement(frame->prefix % QLatin1String("hint-overlay-tile-vertical"))) {
- QSizeF s = q->size().toSize();
+ QSize s = q->size().toSize();
q->resize(q->elementSize(frame->prefix % QLatin1String("overlay")));
- overlayPainter.drawTiledPixmap(QRectF(QPointF(0, 0), overlaySize), q->pixmap(frame->prefix % QLatin1String("overlay")));
+ overlayPainter.drawTiledPixmap(QRect(QPoint(0, 0), overlaySize), q->pixmap(frame->prefix % QLatin1String("overlay")));
q->resize(s);
} else {
- q->paint(&overlayPainter, QRectF(actualOverlayPos, overlaySize), frame->prefix % QLatin1String("overlay"));
+ q->paint(&overlayPainter, QRect(actualOverlayPos, overlaySize), frame->prefix % QLatin1String("overlay"));
}
overlayPainter.end();
@@ -609,14 +612,14 @@
if (!overlay.isNull()) {
QPainter p(&frame->cachedBackground);
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
- p.drawPixmap(actualOverlayPos, overlay, QRectF(actualOverlayPos, overlaySize));
+ p.drawPixmap(actualOverlayPos, overlay, QRect(actualOverlayPos, overlaySize));
}
}
void FrameSvgPrivate::generateFrameBackground(const QSharedPointer<FrameData> &frame)
{
// qCDebug(LOG_KSVG) << "generating background";
- const QSizeF size = frameSize(frame) * q->devicePixelRatio();
+ const QSize size = frameSize(frame).toSize() * q->devicePixelRatio();
if (!size.isValid()) {
#ifndef NDEBUG
@@ -629,14 +632,13 @@
return;
}
- // Don't cut away pieces of the frame
- frame->cachedBackground = QPixmap(QSize(std::ceil(size.width()), std::ceil(size.height())));
+ frame->cachedBackground = QPixmap(size);
frame->cachedBackground.fill(Qt::transparent);
QPainter p(&frame->cachedBackground);
p.setCompositionMode(QPainter::CompositionMode_Source);
p.setRenderHint(QPainter::SmoothPixmapTransform);
- QRectF contentRect = contentGeometry(frame, size);
+ QRect contentRect = contentGeometry(frame, size);
paintCenter(p, frame, contentRect, size);
paintCorner(p, frame, FrameSvg::LeftBorder | FrameSvg::TopBorder, contentRect);
@@ -645,26 +647,25 @@
paintCorner(p, frame, FrameSvg::RightBorder | FrameSvg::BottomBorder, contentRect);
// Sides
- const qreal leftHeight = q->elementSize(frame->prefix % QLatin1String("left")).height();
- paintBorder(p, frame, FrameSvg::LeftBorder, QSizeF(frame->leftWidth, leftHeight) * q->devicePixelRatio(), contentRect);
- const qreal rightHeight = q->elementSize(frame->prefix % QLatin1String("right")).height();
- paintBorder(p, frame, FrameSvg::RightBorder, QSizeF(frame->rightWidth, rightHeight) * q->devicePixelRatio(), contentRect);
-
- const qreal topWidth = q->elementSize(frame->prefix % QLatin1String("top")).width();
- paintBorder(p, frame, FrameSvg::TopBorder, QSizeF(topWidth, frame->topHeight) * q->devicePixelRatio(), contentRect);
- const qreal bottomWidth = q->elementSize(frame->prefix % QLatin1String("bottom")).width();
- paintBorder(p, frame, FrameSvg::BottomBorder, QSizeF(bottomWidth, frame->bottomHeight) * q->devicePixelRatio(), contentRect);
+ const int leftHeight = q->elementSize(frame->prefix % QLatin1String("left")).height();
+ paintBorder(p, frame, FrameSvg::LeftBorder, QSize(frame->leftWidth, leftHeight) * q->devicePixelRatio(), contentRect);
+ const int rightHeight = q->elementSize(frame->prefix % QLatin1String("right")).height();
+ paintBorder(p, frame, FrameSvg::RightBorder, QSize(frame->rightWidth, rightHeight) * q->devicePixelRatio(), contentRect);
+
+ const int topWidth = q->elementSize(frame->prefix % QLatin1String("top")).width();
+ paintBorder(p, frame, FrameSvg::TopBorder, QSize(topWidth, frame->topHeight) * q->devicePixelRatio(), contentRect);
+ const int bottomWidth = q->elementSize(frame->prefix % QLatin1String("bottom")).width();
+ paintBorder(p, frame, FrameSvg::BottomBorder, QSize(bottomWidth, frame->bottomHeight) * q->devicePixelRatio(), contentRect);
p.end();
- // Set the devicePixelRatio only at the end, drawing all happened in device pixels
frame->cachedBackground.setDevicePixelRatio(q->devicePixelRatio());
}
-QRectF FrameSvgPrivate::contentGeometry(const QSharedPointer<FrameData> &frame, const QSizeF &size) const
+QRect FrameSvgPrivate::contentGeometry(const QSharedPointer<FrameData> &frame, const QSize &size) const
{
- const QSizeF contentSize(size.width() - frame->leftWidth * q->devicePixelRatio() - frame->rightWidth * q->devicePixelRatio(),
+ const QSize contentSize(size.width() - frame->leftWidth * q->devicePixelRatio() - frame->rightWidth * q->devicePixelRatio(),
size.height() - frame->topHeight * q->devicePixelRatio() - frame->bottomHeight * q->devicePixelRatio());
- QRectF contentRect(QPointF(0, 0), contentSize);
+ QRect contentRect(QPoint(0, 0), contentSize);
if (frame->enabledBorders & FrameSvg::LeftBorder && q->hasElement(frame->prefix % QLatin1String("left"))) {
contentRect.translate(frame->leftWidth * q->devicePixelRatio(), 0);
}
@@ -686,7 +687,7 @@
const QString oldPath = fd->imagePath;
const FrameSvg::EnabledBorders oldBorders = fd->enabledBorders;
- const QSizeF currentSize = fd->frameSize;
+ const QSize currentSize = fd->frameSize;
const int oldColorSet = fd->colorSet;
const auto oldColors = fd->colorOverrides;
@@ -751,28 +752,27 @@
}
}
-void FrameSvgPrivate::paintCenter(QPainter &p, const QSharedPointer<FrameData> &frame, const QRectF &contentRect, const QSizeF &fullSize)
+void FrameSvgPrivate::paintCenter(QPainter &p, const QSharedPointer<FrameData> &frame, const QRect &contentRect, const QSize &fullSize)
{
- // fullSize and contentRect are in device pixels
if (!contentRect.isEmpty()) {
const QString centerElementId = frame->prefix % QLatin1String("center");
if (frame->tileCenter) {
- QSizeF centerTileSize = q->elementSize(centerElementId);
- QPixmap center(centerTileSize.toSize());
+ QSize centerTileSize = q->elementSize(centerElementId).toSize();
+ QPixmap center(centerTileSize);
center.fill(Qt::transparent);
QPainter centerPainter(&center);
centerPainter.setCompositionMode(QPainter::CompositionMode_Source);
- q->paint(&centerPainter, QRectF(QPointF(0, 0), centerTileSize), centerElementId);
+ q->paint(&centerPainter, QRect(QPoint(0, 0), centerTileSize), centerElementId);
if (frame->composeOverBorder) {
- p.drawTiledPixmap(QRectF(QPointF(0, 0), fullSize), center);
+ p.drawTiledPixmap(QRect(QPoint(0, 0), fullSize), center);
} else {
p.drawTiledPixmap(FrameSvgHelpers::sectionRect(FrameSvg::NoBorder, contentRect, fullSize * q->devicePixelRatio()), center);
}
} else {
if (frame->composeOverBorder) {
- q->paint(&p, QRectF(QPointF(0, 0), fullSize), centerElementId);
+ q->paint(&p, QRect(QPoint(0, 0), fullSize), centerElementId);
} else {
q->paint(&p, FrameSvgHelpers::sectionRect(FrameSvg::NoBorder, contentRect, fullSize * q->devicePixelRatio()), centerElementId);
}
@@ -781,7 +781,7 @@
if (frame->composeOverBorder) {
p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
- p.drawPixmap(QRectF(QPointF(0, 0), fullSize), alphaMask(), QRectF(QPointF(0, 0), alphaMask().size()));
+ p.drawPixmap(QRect(QPoint(0, 0), fullSize), alphaMask());
p.setCompositionMode(QPainter::CompositionMode_SourceOver);
}
}
@@ -789,51 +789,35 @@
void FrameSvgPrivate::paintBorder(QPainter &p,
const QSharedPointer<FrameData> &frame,
const FrameSvg::EnabledBorders borders,
- const QSizeF &size,
- const QRectF &contentRect) const
+ const QSize &size,
+ const QRect &contentRect) const
{
- // size and contentRect are in device pixels
QString side = frame->prefix % FrameSvgHelpers::borderToElementId(borders);
if (frame->enabledBorders & borders && q->hasElement(side) && !size.isEmpty()) {
if (frame->stretchBorders) {
q->paint(&p, FrameSvgHelpers::sectionRect(borders, contentRect, frame->frameSize * q->devicePixelRatio()), side);
} else {
- QSize grownSize(std::ceil(size.width()), std::ceil(size.height()));
- QPixmap px(grownSize);
- // QPixmap px(QSize(std::ceil(size.width()), std::ceil(size.height())));
+ QPixmap px(size);
px.fill(Qt::transparent);
QPainter sidePainter(&px);
sidePainter.setCompositionMode(QPainter::CompositionMode_Source);
- // A QRect as we have to exactly fill a QPixmap of integer size, prefer going slightly outside it to not have empty edges in the pixmap to tile
- q->paint(&sidePainter, QRect(QPoint(0, 0), grownSize), side);
+ q->paint(&sidePainter, QRect(QPoint(0, 0), size), side);
- // We are composing QPixmaps here, so all objects with integer size
- // Rounding the position and ceiling the size is the way that gives better tiled results
- auto r = FrameSvgHelpers::sectionRect(borders, contentRect, frame->frameSize * q->devicePixelRatio());
- r.setTopLeft(r.topLeft().toPoint());
- r.setSize(QSizeF(std::ceil(r.size().width()), std::ceil(r.size().height())));
-
- p.drawTiledPixmap(r, px);
+ p.drawTiledPixmap(FrameSvgHelpers::sectionRect(borders, contentRect, frame->frameSize * q->devicePixelRatio()), px);
}
}
}
-void FrameSvgPrivate::paintCorner(QPainter &p, const QSharedPointer<FrameData> &frame, KSvg::FrameSvg::EnabledBorders border, const QRectF &contentRect) const
+void FrameSvgPrivate::paintCorner(QPainter &p, const QSharedPointer<FrameData> &frame, KSvg::FrameSvg::EnabledBorders border, const QRect &contentRect) const
{
- // contentRect is in device pixels
// Draw the corner only if both borders in both directions are enabled.
if ((frame->enabledBorders & border) != border) {
return;
}
const QString corner = frame->prefix % FrameSvgHelpers::borderToElementId(border);
if (q->hasElement(corner)) {
- auto r = FrameSvgHelpers::sectionRect(border, contentRect, frame->frameSize * q->devicePixelRatio());
- // We are composing QPixmaps here, so all objects with integer size
- // Rounding the position and ceiling the size is the way that gives better tiled results
- r.setTopLeft(r.topLeft().toPoint());
- r.setSize(QSizeF(std::ceil(r.size().width()), std::ceil(r.size().height())));
- q->paint(&p, r.toRect(), corner);
+ q->paint(&p, FrameSvgHelpers::sectionRect(border, contentRect, frame->frameSize * q->devicePixelRatio()), corner);
}
}
@@ -891,7 +875,7 @@
// qCDebug(LOG_KSVG) << "!!!!!!!!!!!!!!!!!!!!!! updating sizes" << prefix;
Q_ASSERT(frame);
- QSizeF s = q->size();
+ QSize s = q->size().toSize();
q->resize();
if (!frame->cachedBackground.isNull()) {
frame->cachedBackground = QPixmap();
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/private/framesvg_helpers.h
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/ksvg/private/framesvg_helpers.h 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/private/framesvg_helpers.h 2025-10-29 05:53:35.435298165 +0100
@@ -45,7 +45,7 @@
/*
* Returns the suggested geometry for the borders given a fullSize frame size and a contentRect
*/
-QRectF sectionRect(KSvg::FrameSvg::EnabledBorders borders, const QRectF &contentRect, const QSizeF &fullSize)
+QRect sectionRect(KSvg::FrameSvg::EnabledBorders borders, const QRect &contentRect, const QSize &fullSize)
{
// don't use QRect corner methods here, they have semantics that might come as unexpected.
// prefer constructing the points explicitly. e.g. from QRect::topRight docs:
@@ -54,26 +54,26 @@
if (borders == FrameSvg::NoBorder) {
return contentRect;
} else if (borders == FrameSvg::TopBorder) {
- return QRectF(QPointF(contentRect.left(), 0), QSizeF(contentRect.width(), contentRect.top()));
+ return QRect(QPoint(contentRect.left(), 0), QSize(contentRect.width(), contentRect.top()));
} else if (borders == FrameSvg::BottomBorder) {
- return QRectF(QPointF(contentRect.left(), contentRect.bottom()), QSizeF(contentRect.width(), fullSize.height() - contentRect.bottom()));
+ return QRect(QPoint(contentRect.left(), contentRect.bottom() + 1), QSize(contentRect.width(), fullSize.height() - contentRect.bottom() - 1));
} else if (borders == FrameSvg::LeftBorder) {
- return QRectF(QPointF(0, contentRect.top()), QSizeF(contentRect.left(), contentRect.height()));
+ return QRect(QPoint(0, contentRect.top()), QSize(contentRect.left(), contentRect.height()));
} else if (borders == FrameSvg::RightBorder) {
- return QRectF(QPointF(contentRect.right(), contentRect.top()), QSizeF(fullSize.width() - contentRect.right(), contentRect.height()));
+ return QRect(QPoint(contentRect.right() + 1, contentRect.top()), QSize(fullSize.width() - contentRect.right() - 1, contentRect.height()));
} else if (borders == (FrameSvg::TopBorder | FrameSvg::LeftBorder)) {
- return QRectF(QPointF(0, 0), QSizeF(contentRect.left(), contentRect.top()));
+ return QRect(QPoint(0, 0), QSize(contentRect.left(), contentRect.top()));
} else if (borders == (FrameSvg::TopBorder | FrameSvg::RightBorder)) {
- return QRectF(QPointF(contentRect.right(), 0), QSizeF(fullSize.width() - contentRect.right(), contentRect.top()));
+ return QRect(QPoint(contentRect.right() + 1, 0), QSize(fullSize.width() - contentRect.right() - 1, contentRect.top()));
} else if (borders == (FrameSvg::BottomBorder | FrameSvg::LeftBorder)) {
- return QRectF(QPointF(0, contentRect.bottom()), QSizeF(contentRect.left(), fullSize.height() - contentRect.bottom()));
+ return QRect(QPoint(0, contentRect.bottom() + 1), QSize(contentRect.left(), fullSize.height() - contentRect.bottom() - 1));
} else if (borders == (FrameSvg::BottomBorder | FrameSvg::RightBorder)) {
- return QRectF(QPointF(contentRect.right(), contentRect.bottom()),
- QSizeF(fullSize.width() - contentRect.right(), fullSize.height() - contentRect.bottom()));
+ return QRect(QPoint(contentRect.right() + 1, contentRect.bottom() + 1),
+ QSize(fullSize.width() - contentRect.right() - 1, fullSize.height() - contentRect.bottom() - 1));
} else {
qWarning() << "unrecognized border" << borders;
}
- return QRectF();
+ return QRect();
}
}
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/private/framesvg_p.h
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/ksvg/private/framesvg_p.h 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/private/framesvg_p.h 2025-10-29 05:53:35.435356265 +0100
@@ -80,39 +80,38 @@
static const int MAX_CACHED_MASKS = 10;
uint lastModified = 0;
- // Those sizes are in logical pixels
- QSizeF frameSize;
+ QSize frameSize;
uint cacheId;
// measures
- qreal topHeight;
- qreal leftWidth;
- qreal rightWidth;
- qreal bottomHeight;
+ int topHeight;
+ int leftWidth;
+ int rightWidth;
+ int bottomHeight;
// margins, are equal to the measures by default
- qreal topMargin;
- qreal leftMargin;
- qreal rightMargin;
- qreal bottomMargin;
+ int topMargin;
+ int leftMargin;
+ int rightMargin;
+ int bottomMargin;
// measures
- qreal fixedTopHeight;
- qreal fixedLeftWidth;
- qreal fixedRightWidth;
- qreal fixedBottomHeight;
+ int fixedTopHeight;
+ int fixedLeftWidth;
+ int fixedRightWidth;
+ int fixedBottomHeight;
// margins, are equal to the measures by default
- qreal fixedTopMargin;
- qreal fixedLeftMargin;
- qreal fixedRightMargin;
- qreal fixedBottomMargin;
-
- // margins, we only have the hqreal for insets
- qreal insetTopMargin;
- qreal insetLeftMargin;
- qreal insetRightMargin;
- qreal insetBottomMargin;
+ int fixedTopMargin;
+ int fixedLeftMargin;
+ int fixedRightMargin;
+ int fixedBottomMargin;
+
+ // margins, we only have the hint for insets
+ int insetTopMargin;
+ int insetLeftMargin;
+ int insetRightMargin;
+ int insetBottomMargin;
// size of the svg where the size of the "center"
// element is contentWidth x contentHeight
@@ -161,17 +160,14 @@
return frameSize(frame.data());
}
QSizeF frameSize(FrameData *frame) const;
-
- // paintBorder, paintCorder and paintCenter sizes are in device pixels
void paintBorder(QPainter &p,
const QSharedPointer<FrameData> &frame,
KSvg::FrameSvg::EnabledBorders border,
- const QSizeF &originalSize,
- const QRectF &output) const;
- void paintCorner(QPainter &p, const QSharedPointer<FrameData> &frame, KSvg::FrameSvg::EnabledBorders border, const QRectF &output) const;
- void paintCenter(QPainter &p, const QSharedPointer<FrameData> &frame, const QRectF &contentRect, const QSizeF &fullSize);
-
- QRectF contentGeometry(const QSharedPointer<FrameData> &frame, const QSizeF &size) const;
+ const QSize &originalSize,
+ const QRect &output) const;
+ void paintCorner(QPainter &p, const QSharedPointer<FrameData> &frame, KSvg::FrameSvg::EnabledBorders border, const QRect &output) const;
+ void paintCenter(QPainter &p, const QSharedPointer<FrameData> &frame, const QRect &contentRect, const QSize &fullSize);
+ QRect contentGeometry(const QSharedPointer<FrameData> &frame, const QSize &size) const;
void updateFrameData(uint lastModified, UpdateType updateType = UpdateFrameAndMargins);
QSharedPointer<FrameData> lookupOrCreateMaskFrame(const QSharedPointer<FrameData> &frame, const QString &maskPrefix, const QString &maskRequestedPrefix);
@@ -183,7 +179,7 @@
FrameSvg *const q;
- QPointF overlayPos;
+ QPoint overlayPos;
QSharedPointer<FrameData> frame;
QSharedPointer<FrameData> maskFrame;
@@ -191,7 +187,7 @@
// those can differ from frame->enabledBorders if we are in a transition
FrameSvg::EnabledBorders enabledBorders;
// this can differ from frame->frameSize if we are in a transition
- QSizeF pendingFrameSize;
+ QSize pendingFrameSize;
static QHash<ImageSetPrivate *, QHash<uint, QWeakPointer<FrameData>>> s_sharedFrames;
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/private/svg_p.h
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/ksvg/private/svg_p.h 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/private/svg_p.h 2025-10-29 05:53:35.435391006 +0100
@@ -141,8 +141,8 @@
void setNaturalSize(const QString &path, const QSizeF &size);
QSizeF naturalSize(const QString &path);
- QList<QSizeF> sizeHintsForId(const QString &path, const QString &id);
- void insertSizeHintForId(const QString &path, const QString &id, const QSizeF &size);
+ QList<QSize> sizeHintsForId(const QString &path, const QString &id);
+ void insertSizeHintForId(const QString &path, const QString &id, const QSize &size);
QString iconThemePath();
void setIconThemePath(const QString &path);
@@ -169,7 +169,7 @@
*/
QHash<size_t, QRectF> m_localRectCache;
QHash<QString, QSet<unsigned int>> m_invalidElements;
- QHash<QString, QList<QSizeF>> m_sizeHintsForId;
+ QHash<QString, QList<QSize>> m_sizeHintsForId;
QHash<QString, unsigned int> m_lastModifiedTimes;
};
}
Index: ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/svg.cpp
===================================================================
--- ksvg-6.11.0git.20251028T204230~9eebb9d6.orig/src/ksvg/svg.cpp 2025-10-28 19:42:30.000000000 +0100
+++ ksvg-6.11.0git.20251028T204230~9eebb9d6/src/ksvg/svg.cpp 2025-10-29 05:53:35.435444116 +0100
@@ -273,7 +273,7 @@
QMetaObject::invokeMethod(m_configSyncTimer, qOverload<>(&QTimer::start));
}
-QList<QSizeF> SvgRectsCache::sizeHintsForId(const QString &path, const QString &id)
+QList<QSize> SvgRectsCache::sizeHintsForId(const QString &path, const QString &id)
{
const QString pathId = path % id;
@@ -281,7 +281,7 @@
if (it == m_sizeHintsForId.constEnd()) {
KConfigGroup imageGroup(m_svgElementsCache, path);
const QStringList &encoded = imageGroup.readEntry(id, QStringList());
- QList<QSizeF> sizes;
+ QList<QSize> sizes;
for (const auto &token : encoded) {
const auto &parts = token.split(QLatin1Char('x'));
if (parts.size() != 2) {
@@ -299,10 +299,10 @@
return *it;
}
-void SvgRectsCache::insertSizeHintForId(const QString &path, const QString &id, const QSizeF &size)
+void SvgRectsCache::insertSizeHintForId(const QString &path, const QString &id, const QSize &size)
{
// TODO: need to make this more efficient
- auto sizeListToString = [](const QList<QSizeF> &list) {
+ auto sizeListToString = [](const QList<QSize> &list) {
QString ret;
for (const auto &s : list) {
ret += QString::number(s.width()) % QLatin1Char('x') % QString::number(s.height()) % QLatin1Char(',');
@@ -563,7 +563,7 @@
// Look at the size hinted elements and try to find the smallest one with an
// identical aspect ratio.
if (s.isValid() && !elementId.isEmpty()) {
- const QList<QSizeF> elementSizeHints = SvgRectsCache::instance()->sizeHintsForId(path, elementId);
+ const QList<QSize> elementSizeHints = SvgRectsCache::instance()->sizeHintsForId(path, elementId);
if (!elementSizeHints.isEmpty()) {
QSizeF bestFit(-1, -1);
@@ -890,11 +890,18 @@
void Svg::setDevicePixelRatio(qreal ratio)
{
+ // be completely integer for now
+ // devicepixelratio is always set integer in the svg, so needs at least 192dpi to double up.
+ //(it needs to be integer to have lines contained inside a svg piece to keep being pixel aligned)
+ if (floor(d->devicePixelRatio) == floor(ratio)) {
+ return;
+ }
+
if (FrameSvg *f = qobject_cast<FrameSvg *>(this)) {
f->clearCache();
}
- d->devicePixelRatio = ratio;
+ d->devicePixelRatio = floor(ratio);
Q_EMIT repaintNeeded();
}
@@ -922,7 +929,7 @@
void Svg::paint(QPainter *painter, const QPointF &point, const QString &elementID)
{
Q_ASSERT(painter->device());
- const qreal ratio = painter->device()->devicePixelRatio();
+ const int ratio = painter->device()->devicePixelRatio();
QPixmap pix((elementID.isNull() || d->multipleImages) ? d->findInCache(elementID, ratio, size()) : d->findInCache(elementID, ratio));
if (pix.isNull()) {
@@ -940,16 +947,16 @@
void Svg::paint(QPainter *painter, const QRectF &rect, const QString &elementID)
{
Q_ASSERT(painter->device());
- const qreal ratio = painter->device()->devicePixelRatio();
+ const int ratio = painter->device()->devicePixelRatio();
QPixmap pix(d->findInCache(elementID, ratio, rect.size()));
- painter->drawPixmap(rect, pix, QRect(QPoint(0, 0), pix.size()));
+ painter->drawPixmap(QRectF(rect.topLeft(), rect.size()), pix, QRectF(QPointF(0, 0), pix.size()));
}
void Svg::paint(QPainter *painter, int x, int y, int width, int height, const QString &elementID)
{
Q_ASSERT(painter->device());
- const qreal ratio = painter->device()->devicePixelRatio();
+ const int ratio = painter->device()->devicePixelRatio();
QPixmap pix(d->findInCache(elementID, ratio, QSizeF(width, height)));
painter->drawPixmap(x, y, pix, 0, 0, pix.size().width(), pix.size().height());
}

85
kf6-ksvg/kf6-ksvg.spec Normal file
View File

@@ -0,0 +1,85 @@
%define qt6_version 6.8.0
%define rname ksvg
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-ksvg
Version: 6.20.0
Release: 0
Summary: Components for handling SVGs
License: GPL-2.0-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
# PATCH-FIX-OPENSUSE
Patch0: 0001-Revert-Support-for-fractional-scaling.patch
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: cmake(KF6Archive) >= %{_kf6_version}
BuildRequires: cmake(KF6ColorScheme) >= %{_kf6_version}
BuildRequires: cmake(KF6Config) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6GuiAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6KirigamiPlatform) >= %{_kf6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6Qml) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
BuildRequires: cmake(Qt6QuickControls2) >= %{qt6_version}
BuildRequires: cmake(Qt6Svg) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
Requires: kf6-kirigami-imports >= %{_kf6_version}
%description
Components for handling SVGs
%package imports
Summary: QML Components for ksvg
%description imports
This package contains QML imports for SVG handling.
%package -n libKF6Svg6
Summary: ksvg library
Requires: kf6-ksvg >= %{version}
Recommends: kf6-ksvg-imports = %{version}
%description -n libKF6Svg6
The ksvg library.
%package devel
Summary: Development Files for the ksvg framework
Requires: libKF6Svg6 = %{version}
%description devel
Development Files for the ksvg framework.
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
%ldconfig_scriptlets -n libKF6Svg6
%files
%{_kf6_debugdir}/ksvg.categories
%files imports
%{_kf6_qmldir}/org/kde/ksvg/
%files -n libKF6Svg6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6Svg.so.*
%files devel
%{_kf6_cmakedir}/KF6Svg/
%{_kf6_includedir}/KSvg/
%{_kf6_libdir}/libKF6Svg.so
%changelog

View File

@@ -0,0 +1,143 @@
%define qt6_version 6.8.0
%define rname kxmlgui
%bcond_with kde_python_bindings
%if %{with kde_python_bindings}
%global mypython python3
%global __mypython %{expand:%%__python3}
%global mypython_sitearch %{python3_sitearch}
%endif
# Full KF6 version (e.g. 6.22.0)
%{!?_kf6_version: %global _kf6_version %{version}}
Name: kf6-kxmlgui
Version: 6.20.0
Release: 0
Summary: Framework for managing menu and toolbar actions
License: LGPL-2.1-or-later AND GPL-2.0-or-later
URL: https://www.kde.org
Source: https://ftp.ntu.edu.tw/pub/kde/stable/frameworks/6.20/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{_kf6_version}
BuildRequires: pkgconfig
BuildRequires: qt6-core-private-devel >= %{qt6_version}
BuildRequires: cmake(KF6Config) >= %{_kf6_version}
BuildRequires: cmake(KF6ConfigWidgets) >= %{_kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6GlobalAccel) >= %{_kf6_version}
BuildRequires: cmake(KF6GuiAddons) >= %{_kf6_version}
BuildRequires: cmake(KF6I18n) >= %{_kf6_version}
BuildRequires: cmake(KF6IconThemes) >= %{_kf6_version}
BuildRequires: cmake(KF6ItemViews) >= %{_kf6_version}
BuildRequires: cmake(KF6WidgetsAddons) >= %{_kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Network) >= %{qt6_version}
BuildRequires: cmake(Qt6PrintSupport) >= %{qt6_version}
BuildRequires: cmake(Qt6ToolsTools) >= %{qt6_version}
BuildRequires: cmake(Qt6UiPlugin) >= %{qt6_version}
BuildRequires: cmake(Qt6Widgets) >= %{qt6_version}
BuildRequires: cmake(Qt6Xml) >= %{qt6_version}
BuildRequires: pkgconfig(x11)
# SECTION bindings
%if %{with kde_python_bindings}
BuildRequires: python3 >= 3.9
BuildRequires: python3-devel >= 3.9
BuildRequires: python3-build
BuildRequires: python3-setuptools
BuildRequires: python3-wheel
BuildRequires: cmake(Shiboken6)
BuildRequires: cmake(PySide6)
%endif
# /SECTION
%description
libkxmlgui provides a framework for managing menu and toolbar actions in an
abstract way. The actions are configured through a XML description and hooks
in the application code. The framework supports merging of multiple
description for example for integrating actions from plugins.
%package -n libKF6XmlGui6
Summary: Framework for managing menu and toolbar actions
Requires: kf6-kxmlgui >= %{version}
%description -n libKF6XmlGui6
libkxmlgui provides a framework for managing menu and toolbar actions in an
abstract way. The actions are configured through a XML description and hooks
in the application code. The framework supports merging of multiple
description for example for integrating actions from plugins.
%package devel
Summary: Framework for managing menu and toolbar actions
Requires: libKF6XmlGui6 = %{version}
Requires: cmake(KF6Config) >= %{_kf6_version}
Requires: cmake(KF6ConfigWidgets) >= %{_kf6_version}
Requires: cmake(Qt6DBus) >= %{qt6_version}
Requires: cmake(Qt6Widgets) >= %{qt6_version}
Requires: cmake(Qt6Xml) >= %{qt6_version}
%description devel
libkxmlgui provides a framework for managing menu and toolbar actions in an
abstract way. The actions are configured through a XML description and hooks
in the application code. The framework supports merging of multiple
description for example for integrating actions from plugins. Development files.
%if %{with kde_python_bindings}
%package -n python3-kf6-kxmlgui
Summary: Python interface for kf6-kxmlgui
%description -n python3-kf6-kxmlgui
This package provides a python interface for kf6-kxmlgui.
%endif
%lang_package -n libKF6XmlGui6
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6 \
%if %{with kde_python_bindings}
-DPython_EXECUTABLE:STRING=%{__mypython}
%else
-DBUILD_PYTHON_BINDINGS=OFF
%endif
%{nil}
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%find_lang kxmlgui6
%ldconfig_scriptlets -n libKF6XmlGui6
%files
%{_kf6_debugdir}/kxmlgui.categories
%{_kf6_debugdir}/kxmlgui.renamecategories
%files -n libKF6XmlGui6
%license LICENSES/*
%doc README.md
%{_kf6_libdir}/libKF6XmlGui.so.*
%files devel
%{_kf6_cmakedir}/KF6XmlGui/
%{_kf6_includedir}/KXmlGui/
%{_kf6_libdir}/libKF6XmlGui.so
%{_kf6_plugindir}/designer/kxmlgui6widgets.so
%if %{with kde_python_bindings}
%files -n python3-kf6-kxmlgui
%{mypython_sitearch}/*.so
%endif
%files -n libKF6XmlGui6-lang -f kxmlgui6.lang
%changelog

View File

@@ -0,0 +1,96 @@
%define kf6_version 6.18.0
%define qt6_version 6.9.0
%define soversion 0
%define rname knighttime
# Full Plasma 6 version (e.g. 6.0.0)
%{!?_plasma6_bugfix: %define _plasma6_bugfix %{version}}
# Latest ABI-stable Plasma (e.g. 6.0 in KF6, but 6.0.80 in KUF)
%{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')}
Name: knighttime6
Version: 6.5.5
Release: 0
Summary: Day-night cycle helper library
License: LGPL-2.1-or-later
URL: https://www.kde.org
Source: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz
BuildRequires: fdupes
BuildRequires: kf6-extra-cmake-modules >= %{kf6_version}
BuildRequires: cmake(KF6Config) >= %{kf6_version}
BuildRequires: cmake(KF6CoreAddons) >= %{kf6_version}
BuildRequires: cmake(KF6DBusAddons) >= %{kf6_version}
BuildRequires: cmake(KF6Holidays) >= %{kf6_version}
BuildRequires: cmake(KF6I18n) >= %{kf6_version}
BuildRequires: cmake(Qt6Core) >= %{qt6_version}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Gui) >= %{qt6_version}
BuildRequires: cmake(Qt6Test) >= %{qt6_version}
BuildRequires: cmake(Qt6Positioning) >= %{qt6_version}
Requires: libKNightTime%{soversion} = %{version}
%description
KNightTime provides helpers for scheduling the dark-light cycle. It can be used to implement
features such as adjusting the screen color temperature based on time of day, etc.
%package -n libKNightTime%{soversion}
Summary: Day-night cycle helper library
%description -n libKNightTime%{soversion}
This package contains the core library for KNightTime, a helper for dark-light day cycles.
%package devel
Summary: Development files for KNightTime
Requires: libKNightTime%{soversion} = %{version}
%description devel
Development files for KNightTime, a helper for dark-light day cycles.
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6 -DBUILD_TESTING:BOOL=TRUE
%kf6_build
%install
%kf6_install
%fdupes %{buildroot}
%ldconfig_scriptlets -n libKNightTime%{soversion}
%check
%ctest
%post
%{systemd_user_post plasma-knighttimed.service}
%preun
%{systemd_user_preun plasma-knighttimed.service}
%postun
%{systemd_user_postun plasma-knighttimed.service}
%files
%{_kf6_applicationsdir}/org.kde.knighttimed.desktop
%{_kf6_dbusinterfacesdir}/org.kde.NightTime.xml
%{_kf6_debugdir}/knighttime.categories
%{_kf6_sharedir}/dbus-1/services/org.kde.NightTime.service
%{_libexecdir}/knighttimed
%{_userunitdir}/plasma-knighttimed.service
%files -n libKNightTime%{soversion}
%license LICENSES/*
%{_kf6_libdir}/libKNightTime.so.%{soversion}
%{_kf6_libdir}/libKNightTime.so.*
%files devel
%doc README.md
%{_includedir}/KNightTime/
%{_kf6_cmakedir}/KNightTime/
%{_kf6_libdir}/libKNightTime.so
%changelog

6
kscreenlocker6/kde Normal file
View File

@@ -0,0 +1,6 @@
#%PAM-1.0
# This service is only used by kcheckpass for unlocking,
# so only auth is really relevant here.
auth include common-auth
account include common-account
password include common-password

View File

@@ -0,0 +1,13 @@
#%PAM-1.0
auth required pam_shells.so
auth requisite pam_nologin.so
auth requisite pam_faillock.so preauth
-auth required pam_fprintd.so
account substack common-account
account include postlogin-account
password required pam_deny.so
session substack common-session
session include postlogin-session

View File

@@ -0,0 +1,13 @@
#%PAM-1.0
auth required pam_shells.so
auth requisite pam_nologin.so
auth requisite pam_faillock.so preauth
-auth required pam_pkcs11.so wait_for_card card_only
account substack common-account
account include postlogin-account
password required pam_deny.so
session substack common-session
session include postlogin-session

View File

@@ -0,0 +1,125 @@
%define kf6_version 6.18.0
%define qt6_version 6.9.0
%define rname kscreenlocker
# Full Plasma 6 version (e.g. 6.0.0)
%{!?_plasma6_bugfix: %define _plasma6_bugfix %{version}}
# Latest ABI-stable Plasma (e.g. 6.0 in KF6, but 6.0.80 in KUF)
%{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')}
Name: kscreenlocker6
Version: 6.5.5
Release: 0
Summary: Library and components for secure lock screen architecture
License: GPL-2.0-or-later
URL: https://www.kde.org
Source: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz
Source1: kde
Source2: kde-fingerprint
Source3: kde-smartcard
BuildRequires: cmake >= 3.16
BuildRequires: kf6-extra-cmake-modules >= %{kf6_version}
BuildRequires: pam-devel
BuildRequires: pkgconfig
BuildRequires: qt6-gui-private-devel >= %{qt6_version}
BuildRequires: cmake(KF6Config) >= %{kf6_version}
BuildRequires: cmake(KF6Crash) >= %{kf6_version}
BuildRequires: cmake(KF6GlobalAccel) >= %{kf6_version}
BuildRequires: cmake(KF6I18n) >= %{kf6_version}
BuildRequires: cmake(KF6IdleTime) >= %{kf6_version}
BuildRequires: cmake(KF6KCMUtils) >= %{kf6_version}
BuildRequires: cmake(KF6KIO) >= %{kf6_version}
BuildRequires: cmake(KF6Notifications) >= %{kf6_version}
BuildRequires: cmake(KF6Screen) >= %{_plasma6_bugfix}
BuildRequires: cmake(KF6Solid) >= %{kf6_version}
BuildRequires: cmake(KF6Svg) >= %{kf6_version}
BuildRequires: cmake(KF6WindowSystem) >= %{kf6_version}
BuildRequires: cmake(KF6XmlGui) >= %{kf6_version}
BuildRequires: cmake(KWayland) >= %{_plasma6_bugfix}
BuildRequires: cmake(LayerShellQt) >= %{_plasma6_bugfix}
BuildRequires: cmake(PlasmaQuick) >= %{_plasma6_bugfix}
BuildRequires: cmake(Qt6DBus) >= %{qt6_version}
BuildRequires: cmake(Qt6Quick) >= %{qt6_version}
BuildRequires: cmake(Qt6Test) >= %{qt6_version}
BuildRequires: cmake(Qt6Widgets) >= %{qt6_version}
BuildRequires: pkgconfig(wayland-client)
BuildRequires: pkgconfig(wayland-server)
BuildRequires: pkgconfig(x11)
BuildRequires: pkgconfig(xcb)
BuildRequires: pkgconfig(xcb-keysyms)
BuildRequires: pkgconfig(xcb-xtest)
BuildRequires: pkgconfig(xcursor)
BuildRequires: pkgconfig(xi)
Requires: pam-config
Provides: kscreenlocker = %{version}
Provides: qt6qmlimport(org.kde.kscreenlocker.1) = 0
Obsoletes: kscreenlocker < %{version}
Obsoletes: kscreenlocker-lang < %{version}
%description
Library and components for secure lock screen architecture.
%package -n libKScreenLocker6
Summary: Library and components for secure lock screen architecture
%description -n libKScreenLocker6
Library and components for secure lock screen architecture.
%package devel
Summary: Library and components for secure lock screen architecture - development files
Requires: libKScreenLocker6 = %{version}
Requires: cmake(Qt6Core) >= %{qt6_version}
Conflicts: kscreenlocker-devel
%description devel
Development files for Library and components for secure lock screen architecture.
%lang_package
%prep
%autosetup -p1 -n %{rname}-%{version}
%build
%cmake_kf6
%kf6_build
%install
%kf6_install
# Ship our own files to not depend on a display manager being installed (boo#1108329)
install -D -m0644 %{SOURCE3} %{buildroot}%{_pam_vendordir}/kde
install -D -m0644 %{SOURCE4} %{buildroot}%{_pam_vendordir}/kde-fingerprint
install -D -m0644 %{SOURCE5} %{buildroot}%{_pam_vendordir}/kde-smartcard
%find_lang %{name} --all-name
%ldconfig_scriptlets -n libKScreenLocker6
%files
%license LICENSES/*
%{_kf6_applicationsdir}/kcm_screenlocker.desktop
%{_kf6_debugdir}/kscreenlocker.categories
%{_kf6_notificationsdir}/ksmserver.notifyrc
%{_kf6_plugindir}/plasma/kcms/systemsettings/kcm_screenlocker.so
%{_kf6_sharedir}/ksmserver/
%{_libexecdir}/kscreenlocker_greet
%{_pam_vendordir}/kde
%{_pam_vendordir}/kde-fingerprint
%{_pam_vendordir}/kde-smartcard
%files -n libKScreenLocker6
%{_kf6_libdir}/libKScreenLocker.so.*
%files devel
%{_includedir}/KScreenLocker/
%{_kf6_cmakedir}/KScreenLocker/
%{_kf6_cmakedir}/ScreenSaverDBusInterface/
%{_kf6_libdir}/libKScreenLocker.so
%{_kf6_sharedir}/dbus-1/interfaces/kf6_org.freedesktop.ScreenSaver.xml
%{_kf6_sharedir}/dbus-1/interfaces/org.kde.screensaver.xml
%files lang -f %{name}.lang
%changelog