KDE Frameworks 5.91.0

Sunday, 13 February 2022

KDE today announces the release of KDE Frameworks 5.91.0.

KDE Frameworks are 83 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement.

This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.

New in this version


  • Static libs linked into shared libs need -fPIC

Breeze Icons

  • start-here-kde: Make icon adaptable to dark themes (bug 416302)
  • Fix icon colors to be consistent across all sizes
  • Check executables exist in PATH before passing them to QProcess
  • Declare namespace for kongress icon
  • Fix naming of brightness icons

Extra CMake Modules

  • kde_package_app_templates: drop atime,ctime, consistently set mtime
  • kde_package_app_templates: use numeric owner/group with tar
  • Set the right @since version for ECMQmlModule
  • Only enable -bsymbolic-functions when Qt is built in a compatible way
  • Introduce ECMFindQmlModule.cmake
  • Add ecm_set_deprecation_versions cmake function

Framework Integration

  • Install plugin in kf
  • Fix wrong porting of KNSCore::Engine::configSearchLocations (bug 448237)


  • reduce boost


  • Use uppercase includes
  • Unharcode Qt major version


  • Move plugins in kf directory
  • Correct the dependencies specified for KAuth
  • Bump minimum required version of Polkit-Qt-1 to 0.112.0
  • Remove Polkit-Qt build support, Polkit-Qt-1 replaced it a long time ago
  • Adjust CMake code to find PolkitQt{5,6}-1


  • Revert “Honour STATUS:CANCELLED”
  • Serialize container sizes as 32bit integers
  • Compare timeSpec() for the due date/time, too
  • Fix generate pkg file
  • T12270: create an inheritance hierarchy of private types


  • Add KPluginWidget::load()
  • Remove assertion for KPluginMetaData param in KCModuleLoader::loadModule
  • KCModuleProxy: Use std::optional to check if we have a KPluginMetaData object
  • KCModuleProxy: Replace space with underscore when registering DBus service
  • Switch header style to ToolBar for system settings
  • kpluginmodel: Also copy plugin Id from KService to json object
  • KCMUtils can be built on Windows too


  • Introduce StandardShortcutWatcher to watch for runtime changes (bug 426656)
  • Extract isNonDeletedKey() helper function
  • Look for entries with common group prefix in entryMap’s subrange
  • KConfigPrivate::copyGroup: remove redundant entryMap lookup
  • groupList: convert each group name from UTF-8 once
  • Exclude deleted groups from groupList() (bug 384039)


  • KLanguageButton: Don’t insert duplicates
  • KLanguageButton: Adapt to new .desktop filenames
  • Change shortcuts of standard actions if standard shortcut changes (bug 426656)
  • Use BUILD* deprecation wrapper for virtual method (bug 448680)
  • Simplify KHamburgerMenu menu items
  • Only require KAuth on Linux/FreeBSD
  • Don’t use KAuth on Windows


  • Search in kf plugin
  • kcoreaddons_target_static_plugins: Use private linking for plugin registration file
  • klibexec helper to resolve libexec path relative
  • KPluginMetaDataTest: Fix check for service type querying error essage
  • desktopfileparser: Avoid a run-time string concatenation
  • KF5CoreAddonsConfig: check desktoptojson version when cross-compiling
  • desktoptojson: Further improvements to cross-compilation mode
  • Fix kcoreaddons_desktop_to_json when cross-compiling
  • Add KPluginMetaData::fromJsonFile()
  • KPluginMetadata: store all paths as absolute ones
  • KPluginMetaData::metaDataFileName: Fix broken check if we have the metaDataFileName value set
  • kcoreaddons_add_plugin: Throw error when we have unparsed args
  • Improve formatRelativeDateTime
  • Improve error message for KPluginFactory::loadFactory
  • Add missing copying of error text in KPluginFactory::instantiatePlugin


  • Fix header installation path to include module prefix
  • Use uppercase “KDAV” name as qmake identifier, to be match KF standards
  • Fix pri file to also note KCoreAddons dependency
  • Fix non-existing include path set in pri file


  • proper position for top separator
  • [KeySequenceItem] Make keySequence «non-null», «non-undefined» and «non-""»
  • [KeySequenceItem] Fix code style and bump QML imports
  • Make QML code depend less on the kcm context property
  • Fix QT_NO_OPENGL build after 66c5bb0efa
  • kquickcontrols: Improve accessibility in ColorButton.qml (bug 449282)
  • GridDelegate: Focus on the delegate after a menu is closed
  • GridDelegate: Open menu when Menu key is pressed
  • Exclude epoxy in qt6 => exclude plotter class
  • Deprecate KDeclarative::ConfigPropertyMap in favor of KConfigPropertyMap
  • It’s not necessary now as “the Frameworks that actually require
  • Don’t use KGlobalAccel on Windows


  • install plugins in kf
  • Set order of kded launching with systemd boot
  • kded supports building on Windows, make sure we have our dependencies available

KDELibs 4 Support

  • Link against KF5::Auth
  • Also add the KAuth dependency in the CI metadata


  • Check executables exist in PATH before passing them to QProcess
  • Port from KToolInvocation::kdeinitExecWait (deprecated) to QProcess
  • kdesud: close all file descriptors > 3 on exec()


  • Check executables exist in PATH before passing them to QProcess
  • Don’t hardcode “kf5” for the catalog search path


  • make TypInfo comparison const
  • Install plugins in kf
  • deprecate image extraction via embeddedimagedata


  • Fix action registration and unregistration order (bug 448369)
  • Check executables exist in PATH before passing them to QProcess

KDE GUI Addons

  • Add Google Maps Geo URI handler
  • Add Qwant Maps to CMakeLists
  • Add Qwant Maps Geo URI handler
  • Add a fallback handler for the geo: URI scheme
  • Install plugins in kf


  • Update Taiwanese holidays
  • UK holiday change 2022 (Spring bank holiday) (bug 448305)


  • fix khtml crash in wayland session
  • [ci] Fix phonon dep


  • Default initialize QVariants as such, not as a QString
  • install plugins in kf
  • Fix warning info
  • KuitSetup: fix setting classification of tags


  • Check executables exist in PATH before passing them to QProcess
  • Don’t create a new KColorScheme for each KIconColors


  • Change plugin install dir on macOS
  • Install plugins in kf


  • Check executables exist in PATH before passing them to QProcess


  • [KFilePlacesView] Use helpEvent for teardown action tooltip
  • KPropertiesDialog: only load plugins suitable for mime type of file
  • Use new KLibexec to locate kioslave5
  • Consider slow files as remote files in previewjob (bug 372849)
  • [KFilePlacesView] Elide section header if needed
  • exec line is not necessary now
  • [desktopexecparser] Consider associations from mimeapps.list to determine whether an app supports a scheme (bug 439132)
  • [kopenwithdialog] Fix filtering (bug 449330)
  • [KFilePlacesView] Adjust entire delegate height during (dis) appear animation
  • kdirmodel: Allow using full path for Icon in .desktop file (bug 448596)
  • Deprecate class KNTLM & methods, no users known outside of kio-http
  • [previewjob] Don’t recreate same regex
  • KDirOperator: on first show, don’t display files in dir-only mode
  • Group configure_file and kcoreaddons_add_plugin
  • Install plugins in kf
  • Officially deprecate kcoredirlister methods that use QRegExp
  • Utilize KPluginMetaData::value overloads
  • Install kio_version.h in the KIO include prefix
  • Add option of using DBus activation for ApplicationLauncherJob
  • [KFilePlacesView] Don’t highlight delegate when hovering header area
  • [KFilePlacesView] Call teardownFunction from inline eject button, too
  • [KFilePlacesView] Don’t hide hidden entries when clicking one
  • [KFilePlacesView] Add inline eject button
  • [KFilePlacesModel] Introduce TeardownAllowedRole
  • [KFilePlacesView] Wire up QAbstractItemView::iconSize
  • [KFilePlacesView] Add getter and change signal for showAll
  • [KFilePlacesView] Allow to provide a teardown function
  • [KFilePlacesView] Add middle click support and signals for item activation
  • [KFilePlacesView] Refactor context menu
  • file_unix: Do not try to preserve ownership when permission is -1 (bug 447779)
  • KPropertiesDialog: use the KFileItem when checkig if the url is local (bug 444624)
  • Deprecate the “connected slave” feature


  • OverlaySheet: Accommodate the left and right padding
  • OverlaySheet: Initialise the view with sound values
  • FormLayout: Replace heuristic approach with an instanceof check
  • Fix install plugin in kf
  • libkirigami: Port to target_sources and other target-specific properties
  • Add Chip Component
  • Add android related files to template
  • Add BasicListItem.iconSelected property and use it in CheckableListItem
  • Take in count difference in bottom and top padding in search icon
  • API dox: document CamelCase include headers
  • KF5Kirigami2: install headers to path prefix matching C++ namespace Kirigami
  • Introduce “InputMethod” singleton and supporting code to detect virtual keyboard
  • Properly document ShadowedRectangle and co
  • Deprecate TabBar toolbar style
  • Dialog: Smoothen enter/exit animation, and ensure themes don’t add footer background
  • Improve search icon inside SearchField
  • Give the NavigationTabBar component an ocean style
  • Add a search icon to the SearchField
  • template: remove title from AboutPage
  • examples/PageRouter: don’t introduce applicationWindow id
  • Make enter/key presses “click” BasicListItems
  • Improve default template
  • Dialog: Use performant shadow
  • Use version-less/non-deprecated install location variables
  • Fix find_dependency
  • change color when card is highlighted
  • Kirigami supports Windows, ensure we have our dependencies there too


  • Rework removeParentMappings() to not rely on stable QHash iterators
  • Don’t cache end iterator when modifying the container


  • Check executables exist in PATH before passing them to QProcess


  • Revert “Install kjs_version.h in /usr/include/KF5/KJS/”


  • Update code snippet for NewStuff.Action
  • Register KNSCore::Entry under name “Entry” as a Q_GADGET to QML
  • Consume string views before they become invalid
  • Focus search field by default unless doing so would show the virtual keyboard (bug 444727)
  • Deprecate KNS3::Button class in favor of KNSWidgets::Button
  • Introduce KNSWidgets::Button class for better compatibility with KF6 changes
  • KNSWidgets::Action add compatibility for unified entry class in KF6
  • Unify how kpackageType is determined for the addons
  • Button.qml Fix binding for engine property
  • Button.qml: Use QML loaders for dialog component
  • Fix broken usage example for NewStuff.Action
  • Remove QProcess::ExitStatus parameter from signal handler parameter list if we don’t need it


  • Remove Phonon from Linux CI
  • Add KStatusNotifierItem::hideAssociatedWidget()
  • KStatusNotifierItem: use actions instead of Yes/No in Quit confirm dialog

KPackage Framework

  • Simplify code using KPluginMetaData::fromJsonFile
  • Explicitly call KPluginMetaData::fromJsonFile when constructing metadata objects
  • Fix unintended result in readKPackageTypes (bug 448625)
  • Use ecm_mark_nongui_executable() for mock:// handler
  • PackageJob: Use QStandardPaths::findExecutable() to find resolvers
  • QueryTest: validate the install() result
  • Build static libs which are linked into shared libs as PIC


  • ModelSource: Don’t use QPointer for storing the model
  • ModelSource: Cache minimum/maximum properties of the model


  • search plugins in kf
  • Put aliased classes in “KRunner”-namespace
  • Fix flickering in Application Launcher for every character typed (bug 423161)
  • Port to KDEDeprecationSettings cmake function
  • KF5RunnerConfig.cmake.in: Explicitly require QtGui and KCoreAddons, exclude Plasma on deprecation free builds
  • Add compatibility type definitions for classes without ‘Plasma’ namespace
  • Fixups for building without including KService/KIO/Plasma-Frameworks (bug 447908)
  • Silence deprecation warning for KPluginInfo/KServiceTypeTrader in compatibility blocks


  • Install kservice_version.h in KService include prefix
  • Make parseLayoutNode function const
  • Make “missing merge tag” error actionable


  • Abort completion on view scroll on wayland
  • Avoid flicker on refresh
  • install plugin in kf
  • Use QDir::temp().filepath() instead of manually creating temp file paths
  • KateModOnHdPrompt::slotDiff: Create diff file in temp folder (bug 448257)
  • avoid flicker for border on size changes (bug 435361)
  • Fix undo manager leaks more properly
  • When using tabs, use tabs to auto indent (bug 367966 375529)
  • Fix @since for aboutToSave
  • Fix leaks in undo manager
  • Don’t scroll on select all (bug 435855)
  • Fix auto-reloading files in git repositories
  • Handle single statement condition blocks better (bug 385472)
  • Fix cstyle for cases where there is a func in param
  • Reload doc on OnDiskCreated
  • Allow disabling focus frame (bug 418657)
  • Fix selection scrolling from line border works only downwards (bug 419076)
  • Fix camel cursor when last word is of one letter only (bug 448692)
  • only execute diff in path
  • only start programs in user’s path
  • completion: Use scored fuzzy matching
  • Do proper fuzzy matching in completion (bug 401509)
  • Fix undo history wrongfully restored in some cases
  • Revert “Do not cancel mouse selection when using the keyboard” (bug 446189)
  • don’t let auto-detection overwrite user settings
  • Introduce auto indent detection
  • Restore undo history when document is same (bug 297883)
  • Fix drag pixmap highlight sometimes does not match original text (bug 438567)
  • Find: Update working range when replacing (bug 447972)
  • set QClipboard::Selection for select all (bug 428099)
  • Fix rash when switching between tabs while search is running (bug 445683)
  • improve wording for modified on disk warnings (bug 372638)
  • KTextEditor has a hard dependency on KAuth - ensure it is available
  • Introduce Document::aboutToSave signal
  • Fix creative QString constructions from numerical values
  • Use version-less install target default arguments
  • Use non-deprecated style option initialization
  • Combine keys and modifiers using the | operator
  • Disambiguate QStringBuilder to QByteArray conversion for hashing
  • Make comparison operator const
  • Don’t pass a QString pointer to QString::compare
  • Automatically determine iterator type
  • Fix QChar conversion ambiguities

KWallet Framework

  • Fix install headers


  • Ensure when unmapped is emitted, ::windows() will not contain unmapped window
  • Don’t use hard-coded versions with targets and variables
  • Install pkg-config file
  • Deprecate PlasmaWindowModel::requestVirtualDesktop()
  • kwayland server has been moved to plasma kwayland-server since 5.73
  • src/client: wrap deprecated methods in deprecation macros


  • Check executables exist in PATH before passing them to QProcess
  • install plugins in kf
  • Avoid XKeycodeToKeysym in KKeyServer::initializeMods (bug 426684)
  • Remove placeholder wayland platform plugin
  • [kwindowinfo] Add support for reading _GTK_APPLICATION_ID
  • Add KWindowSystem::updateStartupId(QWindow *window)


  • Check executables exist in PATH before passing them to QProcess
  • Use uppercase includes
  • Allow KToolBar to be in other places than MainWindow’s ToolBarArea
  • Fix i18n comment not being properly extracted


  • Explicitly register QDBusObjectPath type


  • Don’t write to QByteArray out of bounds
  • Make de/serializing of the parity option symmetric
  • Add support for WPA3-Enterprise 192-bit mode

Oxygen Icons

  • Check executables exist in PATH before passing them to QProcess

Plasma Framework

  • Check executables exist in PATH before passing them to QProcess
  • ExpandableListItem: Deprecate custom isEnabled property and alias it to enabled (bug 449539)
  • PC3 ButtonContent: Move property defaultIconSize to the top-level component
  • Identify containments using X-Plasma-ContainmentType instead of service types
  • Native interface always available
  • ModelContextMenu: drop Accessible.role property
  • Do not use Control for PC3::IconLabel (bug 445899)
  • Corona::containmentForScreen: Ignore activities when an empty string is used (bug 448590)
  • Change where add_feature_info(EGL) is called
  • Fix detection of GLX support in QtGui
  • PC3 ScrollView: set step sizes based on devicePixelRatio
  • ConfigModel: Expose Roles enum to QML
  • Adapt build system for building against qt6 + fix some compile errors
  • Don’t fallback to EGL::EGL, just don’t link to EGL when it’s not found
  • Always sync the setPanelBehavior to wayland (bug 448373)
  • PlasmaQuick::Dialog - Fix flickering issues when resizing (specially in krunner) (bug 427672)
  • Always sync the setPanelBehavior to wayland (bug 426969)
  • PC3 ScrollView: Avoid importing QtQuick.Controls.2
  • Doc: Improve descriptions of Plasma::DataSource methods
  • Don’t crash when a screen gets disabled and enabled again (bug 447752)
  • PC3 RadioIndicator: use radiobutton.svg for breeze-light and breeze-dark
  • KWayland does not make sense outside of Linux/FreeBSD, so don’t try to depend on it there
  • Add Yakuake panel icon (bug 427485)
  • Deprecated PlasmaExtras.ScrollArea component
  • PC3 SwipeView: use longDuration for highlight animation


  • Prison supports Windows


  • Avoid needlessly reading font settings
  • StyleItem: emit signal on style changes
  • install plugins in kf
  • take icon width into account
  • adapt width of combobox to its content (bug 403153)
  • Theme placeholderTextColor
  • Make menu items taller in Tablet Mode
  • Fix find_package
  • Remove QStyle::State_Horizontal when it’s not horizontal
  • Adapt build system for building against qt6
  • Slider: handle scrolling (bug 417211)
  • Use upstream scroll implementations for Combobox and SpinBox
  • Use metrics from Breeze for menu items (bug 447289)


  • Convert some connect to new signature style
  • [UDisks2 Backend] Don’t do media check for loop devices
  • [upower] Properly round up battery’s capacity (bug 448372)
  • [UPower Backend] Check for Bluez for any unknown battery type
  • [UDisks2] Ignore file systems mounted with x-gdu.hide option


  • Allow to install plugin in kf5 or kf6 directory

Syntax Highlighting

  • Python: fix line continuation starting with a string
  • CSS: add some values and functions
  • CSS: fix nested function call (bug 444506)
  • Zsh: fix line-break and pattern in double bracket condition
  • Bash: fix line-break in double bracket condition (bug 448126)
  • Bash: fix parameter expansion replacement with extended glob
  • [R] Add support for new pipe from R 4.1
  • Update Stan highlighting

Security information

The released code has been GPG-signed using the following key: pub rsa2048/58D0EE648A48B3BB 2016-09-05 David Faure faure@kde.org Primary key fingerprint: 53E6 B47B 45CE A3E0 D5B7 4577 58D0 EE64 8A48 B3BB

Installing binary packages

On Linux, using packages for your favorite distribution is the recommended way to get access to KDE Frameworks. Get KDE Software on Your Linux Distro wiki page

Compiling from sources

The complete source code for KDE Frameworks 5.91.0 may be freely downloaded. Instructions on compiling and installing KDE Frameworks 5.91.0 are available from the KDE Frameworks 5.91.0 Info Page.

Building from source is possible using the basic cmake .; make; make install commands. For a single Tier 1 framework, this is often the easiest solution. People interested in contributing to frameworks or tracking progress in development of the entire set are encouraged to use kdesrc-build. Frameworks 5.91.0 requires Qt .

A detailed listing of all Frameworks and other third party Qt libraries is at inqlude.org, the curated archive of Qt libraries. A complete list with API documentation is on api.kde.org.

Get Involved

Those interested in following and contributing to the development of Frameworks can check out the git repositories and follow the discussions on the KDE Frameworks Development mailing list. Policies and the current state of the project and plans are available at the Frameworks wiki. Real-time discussions take place on the #kde-devel IRC channel on freenode.net.

Supporting KDE

KDE is a Free Software community that exists and grows only because of the help of many volunteers that donate their time and effort. KDE is always looking for new volunteers and contributions, whether it is help with coding, bug fixing or reporting, writing documentation, translations, promotion, money, etc. All contributions are gratefully appreciated and eagerly accepted. Please read through the Supporting KDE page for further information or become a KDE e.V. supporting member through our Join the Game initiative


鸟语看不懂 浏览器扩展的翻译又不准 看得人头大