Thank you everyone for keeping the lights on for a bit longer. KDE snaps have been restored. I also released 24.12.3! In addition, I have moved “most” snaps to core24. The remaining snaps need newer qt6/kf6, which is a WIP. “The Bad luck girl” has been hit once again with another loss, so with that, I will be reducing my hours on snaps while I consider my options for my future. I am still around, just a bit less.
Welcome to a new issue of "This Week in Plasma"! Every week we cover the highlights of what's happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more.
This week, Plasma 6.4 began to take shape. A bunch of impactful features and UI improvements landed, not to mention some juicy technical changes in the form of a newly-implemented Wayland protocol and HDR energy efficiency improvements. Just a whole lot of good stuff! Check it out below:
Notable new Features
Plasma 6.4.0
After being punted from Plasma 6.3, per-virtual-desktop custom tile layouts are now implemented for 6.4! (Vlad Zahorodnii, link)
Clicking the "Details" button on a system notification showing file transfer progress will now reveal a graph showing the transfer speed over time! (Méven Car, link)
You can now fully disable System Tray icons provided by apps that lack an internal setting for this (looking at you, Discord). Note that this could potentially break apps as they won't know their tray icon isn't being shown, so only use this feature if you know what you're doing! A warning message explains this, too. (Nate Graham, link)
Notable UI Improvements
Plasma 6.3.4
Plasma's sidebar-style UI elements (e.g. the Activity Switcher sidebar) now overlap panels when shown outside of Edit Mode. This looks nicer and helps communicate focus better. (Niccolò Venerandi, link)
Plasma 6.4.0
Improved KRunner search result ordering by adding the power and session actions into the default set of favorite actions, ensuring they appear first when searched for. (Nate Graham, link)
Refined the heuristic for when a panel widget's popup will be displayed centered on the panel or the screen, so that it happens more often in cases where you obviously configured your panel with this in mind. (Niccolò Venerandi, link)
In the panel configuration dialog, the little wireframe visualizations for options now all visually reflect their panel's actual position on screen. (Niccolò Venerandi, link)
You can now configure which modifier keys plus a scroll trigger KWin's zoom effect. (Vlad Zahorodnii, link)
Improved keyboard navigation in KRunner's popup: now if the pointer happens to be hovering over an item, you can still use the arrow keys to move the selection highlight to a different item. (Christoph Wolk, link)
If you're being slowly driven mad by the system notification telling you how to regain control when an app like Input Leap is using the input devices, you can now disable it like you can any other notification. (David Redondo, link)
Plasma widgets in the System Tray that hide completely when they deem themselves not relevant no longer do this when placed in standalone form on the panel; we reasoned that in this case, if you put them there yourself, you probably always want to see them! (Niccolò Venerandi, link)
Widgets using the ExpandableListItem component — commonly seen in the System Tray — now display tooltips on hover for any list items with labels so long they've become elided. This was very uncommon, which is how we missed it until now! (Kai Uwe Broulik, link)
When you've configured the Kickoff Application Launcher to only show app names or only show app descriptions, you'll no longer see tooltips with the labels you said you didn't want. (Nate Graham, link)
Frameworks 6.13
Implemented touch scrolling in open/save dialogs. (Marco Martin, link)
Improved KRunner search result ordering in another way as well, by returning to the older style of strictly respecting the ordering that the user user configured. (Nate Graham, link)
Notable Bug Fixes
Plasma 6.3.3
Fixed a bug that could cause Discover to get stuck refreshing forever following flaky network connectivity. (Aleix Pol Gonzalez, link)
Fixed some layout glitches affecting the folder chooser dialog at certain window sizes. (Luke Horwell, link)
Plasma 6.3.4
Fixed a bug that would cause fit-content panels with Task Manager widgets on them to not immediately shrink as expected when apps or windows were closed. (Niccolò Venerandi, link)
Fixed a glitch in the Bluetooth wizard's scrollable device view that made scrolling using a touchscreen unreliable. (Marco Martin, link)
Plasma 6.4.0
A notorious Plasma 6 panel bug has been fixed: now when there are multiple panels sharing the same screen edge, they're all displayed properly, and reserve only as much space away from the screen edge as the thickest panel. (Niccolò Venerandi. link 1 and link 2)
Fixed a visual glitch involving the ruler for resizing custom-length panels in auto-hide mode. (Niccolò Venerandi, link)
98 KDE bugs of all kinds fixed over the past week. Full list of bugs
Notable in Performance & Technical
Plasma 6.3.4
Improved the pixel-perfection of various KWin effects, including Wobbly Windows. (Xaver Hugl, link)
Plasma 6.4.0
KWin's codebase has been formally split between an X11 version and a Wayland version, allowing the Wayland version to develop faster and the X11 version to avoid accumulating bugs due to changes in a shared base combined with a lack of testing (82% of users with telemetry turned on use Wayland now). This will continue until Plasma 7, at which point it's highly likely the dedicated X11 session will be removed. Note that the Wayland-only version will continue to run XWayland-using apps just as it can right now. More information about this can be found in Vlad's blog post on the topic!
Added support for P010 color-formatted videos, improving power efficiency for playing full-screen HDR video content. (Xaver Hugl, link)
Implemented support for the get_input_idle_notification Wayland Protocol. (Xaver Hugl, link)
Improved the reliability with which the Power & Battery widget is able to detect and display battery information for Bluetooth devices. (Kai Uwe Broulik, link)
It's no longer possible to create new Plasma Vaults using the EncFS encryption system, as it's been discontinued and has known security vulnerabilities. You can still use existing EncFS vaults; you just can't create new ones. (Nate Graham, link)
KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.
You can help KDE by becoming an active community member and getting involved somehow. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine!
You don’t have to be a programmer, either. Many other opportunities exist:
You can also help us by making a donation! Any monetary contribution — however small — will help us cover operational costs, salaries, travel expenses for contributors, and in general just keep KDE bringing Free Software to the world.
After four months of active maintenance and many weeks triaging bugs, the digiKam team is proud to present version 8.6.0 of its open source digital photo manager.
The digiKam team has continued to work on a better Artificial Intelligence integration in digiKam, and many parts have been improved with the 8.6.0 release.
This is a recipe post. I loathe and despise recipe sites, but this is one I regularly need
to look up. In Canadian measures, which is what I still do my baking in even after 30 years in Europe.
Mix well and let stand while collecting the rest:
1½ cups rye bran
1 c. milk
½ tsp. salt
Ready:
⅓ c. oil
1 egg
Ready:
⅔ c. brown sugar
1 c. flour
2 tsp. baking powder
½ c. raisins
Mix the wets. Stir in the drys. Fill muffin pan. Bake 25 minutes at 180℃. Makes 11 muffins
because my muffin pan has one broken cup. Uses rye bran because the local windmill has
that “left over” as animal feed after milling rye – apparently very few people in
the Netherlands use bran anyway, and rye bran even less so. Instead of flour and
baking powder use zelfrijzend bakmeel.
What does “PhD-level” AI mean? OpenAI’s rumored $20,000 agent plan explained
Tags: tech, ai, machine-learning, gpt, marketing, business
Here we go for a brand new marketing stunt from OpenAI. You can also tell the pressure is rising since all of this is still operating at a massive loss.
Ever wondered how to make a code formatter? This post does a good job showing the main problems you might encounter. The impact of Unicode is especially funny. Very interesting stuff.
What Makes Code Hard To Read: Visual Patterns of Complexity
Tags: tech, programming, maintenance
The whole field is unfortunately a bit fuzzy. That said, this article gives interesting ideas about what to pay attention to when writing code to ease the readability.
Might be going a bit far if you use everything listed here. That said, it gives lots of good ideas so you might want to decide on what you should adopt on your project.
It’s indeed not easy to go from individual contributions, to team level leadership, to organisation level leadership. Many things need to be learned or relearned at each step.
KDE today announces the release of KDE Frameworks 6.12.0.
KDE Frameworks are 72 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.
One of the biggest behind-the-scenes changes in the upcoming Plasma 6.4 release is the split of kwin_x11 and kwin_wayland codebases. With this blog post, I would like to delve in what led us to making such a decision and what it means for the future of kwin_x11.
Background
KWin started as an X11 window manager almost two and a half decades ago. Over the course of the years, it transformed drastically. It gained support for compositing on X, and it became a Wayland compositor.
Sharing the same codebase was critical in the early days of kwin_wayland. We already had working window management abstractions, which had been tested for many years, so we could reuse them on Wayland instead of writing new from scratch. Also, if kwin_x11 gained a new feature, then kwin_wayland would likely gain it for free too.
As time went by, kwin_wayland outgrew kwin_x11. They still shared code but they became quite distinct projects with different mental models how things operate, e.g. how pixels get on the screen or how input works. It also didn’t help that many Plasma developers jumped the X11 ship and turned to the Wayland side as part of the “eating your own dog food” practice, which eventually led to the feature freeze in KWin/X11 back in 2018 due to the lack of sufficient testing and various breakages.
Some time around 2020, we started taking a more bold and aggressive approach to Wayland session development because we saw that Plasma Wayland was trailing behind other desktop environments and something had to be changed in order to catch up. Such a policy produced great results, and Plasma is now one of the leading Wayland desktop environments. Unfortunately, it also greatly contributed to the number of regressions in the X11 session.
Another issue was that there were some features that we couldn’t make work as expected on Wayland so we had to drop them for everyone, which understandably made X11 users unhappy.
Goals
A few years ago, we started contemplating the idea of splitting the X11 and Wayland codebases because of the growing list of regressions affecting the X11 session, and architecture restrictions imposed on KWin/Wayland by the way KWin/X11 works.
That would allows us to keep KWin/X11 working as is without it breaking too often and freely change KWin/Wayland in ways that we think are best suited to make the Plasma Wayland session even better. Of course, it is not a silver bullet solution: we replace one problem with another problem (mainly related to maintenance and ensuring interface compatibility between two projects).
Details
After various discussions online and at Akademy and also seeing (impressive) Plasma Wayland usage statistics, we decided that it’s the right time to do such a split. The main kwin repository is going to host KWin/Wayland, while the kwin-x11 repository is going to host KWin/X11.
KWin/X11 and KWin/Wayland are co-installable so users can freely switch between the X11 and Wayland sessions back and forth and also make sure that updating to 6.4 is not a big hassle for distributions. You’ll be able to have only KWin/X11 or only KWin/Wayland on your computer, or both.
The codebase split doesn’t affect Xwayland support in KWin/Wayland. In other words, X11 applications will continue running on Plasma Wayland.
Extensions
Like any other Plasma component, KWin’s functionality can be extended using plugins. There’s good and bad news. The good news is that extensions written in JavaScript and QML (for example, fancy effects that are available at the KDE Store) will continue working both with kwin_x11 and kwin_wayland as expected, so extension developers don’t need to do anything about it. The bad news is that C++ extensions should be specifically targeted for kwin_x11 and kwin_wayland because neither provides API and ABI compatibility guarantees for its C++ API.
As Wayland progress moves forward, it is likely that the scripting API of KWin/Wayland will be further extended.
Future of KWin/X11
KWin/X11 will be still maintained for the foreseeable future. But that maintenance work will boil down to fixing build errors, adapting to new KDE Frameworks and Plasma APIs, and backporting window-related fixes from KWin/Wayland. There are no plans to drop KWin/X11 in the Plasma 6 lifecycle, although it’s highly possible that it will happen in Plasma 7.
KWin/X11 won’t receive new features anymore; until recently, it received new features that had been developed against KWin/Wayland passively (because both lived in the same repository). However, it might be actually a good thing because the X11 session doesn’t receive that much testing nowadays.
Qt Contributor’s Summit 2025 is taking place in Munich in May. Unfortunately, I won’t be able to make it this year, so let’s talk about some of my recent contributions to our favorite cross-platform UI toolkit.
KWrite with quick access to its scrollbar settings
A couple of years ago I added a context menu to the line number bar in KWrite and Kate. Rather than having to go to the menu to toggle automatic line breaks or bookmarks, those options were now accessible from the context menu. I’ve always wanted to do the same to the scrollbar and have a mini-map option there. However, it wasn’t possible to extend the default context menu and I didn’t want to re-implement all of its Up/Down/Pg Up/Pg Down/etc logic. I therefore added a QScrollBar::createStandardContextMenu method similar to what QLineEdit has. As the name implies, it builds the regular context menu and hands it to you, so you can add your own actions to it.
Speaking of menus, I uplifted SH_Menu_SelectionWrap that decides whether menu selection wraps around when using the arrow keys from QStyle to QStyleHints. This allows Qt Quick Controls Menu to behave the same as QMenu. This behavior is off by default on macOS, for instance, and our own Qt Quick Controls 2 Desktop Style currently handles keyboard input itself to implement wrapping.
I’ve talked about it before that I sometimes just fire up a profiler and look at application startup performance. That’s while working on KWrite I noticed that it was spending a good amount of time parsing the shared-mime-info database. It’s basically a huge XML file containing information about all file types there are and how to detect them, either by file extension or by magic bytes within. Now, why would it even load that database when opening a blank new document?
There’s several places where KWrite and the underlying KTextEditor Framework need to know the type of a viewed file: to load the correct syntax highlighter, display the correct file icon in the tab bar and recent documents list, and so on. When the file type isn’t already known it tries to guess from its contents. Qt caches the database of course but the first one to create a QMimeDatabase triggers a load. However, none of this really matters for an empty document so it now assumes an empty document be of type text/plain. The correct type is actually application/x-zerosize but that’s really not what you want here.
Using the “Keyboard” key to switch keyboard layouts, eh?
My trusty ThinkPad has a “keyboard key” (Fn+F11) which under Windows supposedly opens some keyboard settings page. For the longest time, I thought it just wasn’t supported under Linux because I couldn’t create a global shortcut with it. Recently I noticed in KWin’s Debug Console that it did in fact recognize the key. Turns out Qt just didn’t have a corresponding Qt::Key. Starting from Qt 6.10 there will be a new Qt::Key_Keyboard value.
Qt Wayland Client
Since last time I talked about Qt Wayland, I have done a few more optimizations to its SHM (Shared Memory) backing store. It’s the canvas that Qt provides to software-rendered applications for drawing their user interface.
I finally merged support for scrolling the backing store. This lets an application, such as a text editor or terminal emulator, optimize scrolling through a view by merely moving the pixels and filling in only the small gap that’s now left. Unfortunately, this optimization cannot be provided when using fractional scaling because there’s no integer number of pixels we can just move up or down.
Furthermore, Qt Wayland no longer uses a backing store with alpha channel if the window didn’t request one. Most toplevel application windows are opaque after all. It doesn’t really matter from the compositor’s POV since a wl_surface can carry an “opaque region” that indicates what part of the window is actually opaque and Qt sets it accordingly. ARGB32 and RGB32 are the same in-memory size, too. Nevertheless, not using an alpha channel lets Qt skip certain operations, such as clearing the paint area before starting to draw.
While investigating a performance problem in animations under Wayland, I noticed that StackView’s new pushItem methods didn’t use any animation by default. As part of the effort to give QML tooling, such as qmlcachegen and qmllint, more context, many generic methods were supplemented by proper overloads. For example, StackView.push(var) takes either an Item, a Component, or a URL but you could call it with anything and that’s why it has to be invoked dynamically. StackView.pushItem on the other hand is declared three times with an explicit type which allows to generate more efficient code.
It didn’t make much sense that they would behave differently, of course. Indeed online documentation clearly said “If no operation is provided, PushTransition will be used.” We concluded it was a copy-paste mistake and I changed this for Qt 6.8.3, even though it’s technically a behavior change.
I’ll be jealous of your Weißwurstfrühstück in Munich and am looking forward to attending Qt Contributor’s Summit again in 2026!
Standard support for Qt 5.15 will end after 26th of May 2025, as communicated earlier. After the support period, the release will be in EoS (End of Support) state and will only be supported through additional services, including Extended Security Maintenance for Qt 5.15, Extended Support, and Professional Services. Customers distributing applications and embedded devices using Qt 5.15 software should evaluate how to access technical support and maintenance patches which may include security fixes. Standard commercials terms still apply after End of Support.