Planet KDE

Subscribe to Planet KDE feed Planet KDE
Planet KDE | English
Updated: 10 hours 58 min ago

QCoro 0.10.0 Release Announcement

Tue, 2023-12-05 16:30
SPDX-License-Identifier: GFDL-1.3-or-later --> QCoro 0.10.0 Release Announcement

Thank you to everyone who reported issues and contributed to QCoro. Your help is much appreciated!

Support for awaiting Qt signals with QPrivateSignal

Qt has a feature where signals can be made “private” (in the sense that only class that defines the signal can emit it) by appending QPrivateSignal argument to the signal method:

class MyObject : public QObject { Q_OBJECT ... Q_SIGNALS: void error(int code, const QString &message, QPrivateSignal); };

QPrivateSignal is a type that is defined inside the Q_OBJECT macro, so it’s private and as such only MyObject class can emit the signal, since only MyObject can instantiate QPrivateSignal:

void MyObject::handleError(int code, const QString &message) { Q_EMIT error(code, message, QPrivateSignal{}); }

QCoro has a feature that makes it possible to co_await a signal emission and returns the signals arguments as a tuple:

MyObject myObject; const auto [code, message] = co_await qCoro(&myObject, &MyObject::handleError);

While it was possible to co_await a “private” signal previously, it would get return the QPrivateSignal value as an additional value in the result tuple and on some occasions would not compile at all.

In QCoro 0.10, we can detect the QPrivateSignal argument and drop it inside QCoro so that it does not cause trouble and does not clutter the result type.

Achieving this wasn’t simple, as it’s not really possible to detect the type (because it’s private), e.g. code like this would fail to compile, because we are not allowed to refer to Obj::QPrivateSignal, since that type is private to Obj.

template<typename T, typename Obj> constexpr bool is_qprivatesignal = std::same_as_v<T, typename Obj::QPrivateSignal>;

After many different attempts we ended up abusing __PRETTY_FUNCTION__ (and __FUNCSIG__ on MSVC) and checking whether the function’s name contains QPrivateSignal string in the expected location. It’s a whacky hack, but hey - if it works, it’s not stupid :). And thanks to improvements in compile-time evaluation in C++20, the check is evaluated completely at compile-time, so there’s no runtime overhead of obtaining current source location and doing string comparisons.

Source Code Reorganization (again!)

Big part of QCoro are template classes, so there’s a lot of code in headers. In my opinion, some of the files (especially qcorotask.h) were getting hard to read and navigate and it made it harder to just see the API of the class (like you get with non-template classes), which is what users of a library are usually most interested in.

Therefore I decided to move definitions into separated files, so that they don’t clutter the main include files.

This change is completely source- and binary-compatible, so QCoro users don’t have to make any changes to their code. The only difference is that the main QCoro headers are much prettier to look at now.

  • QCoro::waitFor() now re-throws exceptions (#172, Daniel Vrátil)
  • Replaced deprecated QWebSocket::error with QWbSocket::errorOccured in QCoroWebSockets module (#174, Marius P)
  • Fix QCoro::connect() not working with lambdas (#179, Johan Brüchert)
  • Fix library name postfix for qmake compatibilty (#192, Shantanu Tushar)
  • Fix std::coroutine_traits isn't a class template error with LLVM 16 (#196, Rafael Sadowski)
Full changelog

See changelog on Github

Categories: FLOSS Project Planets

KDE Plasma 5.27.10, Bugfix Release for December

Mon, 2023-12-04 19:00

Tuesday, 5 December 2023. Today KDE releases a bugfix update to KDE Plasma 5, versioned 5.27.10.

Plasma 5.27 was released in February 2023 with many feature refinements and new modules to complete the desktop experience.

The bugfixes are typically small but important and include:

  • Powerdevil Backlighthelper: Implement support for the FreeBSD backlight(8) interface. Commit.
  • KWin: Allow running kwin5 windowed in kwin6. Commit.
  • Discover: Support AppStream 1.0 and 0.x versions. Commit.
View full changelog
Categories: FLOSS Project Planets

KStars 3.6.8 is Released

Sun, 2023-12-03 01:09

KStars v3.6.8 is released on 2023.12.03 for Windows, MacOS & Linux. It's a bi-monthly bug-fix release with a couple of exciting features.
Aberration Inspector
John Evans introduces the very exciting Aberration Inspector tool. The Aberration Inspector is a tool that makes use of Autofocus to analyze backfocus and sensor tilt in the connected optical train. It solves up to 9 virtual tiles on the sensor as defined by the existing Mosaic Mask.

The information is then used to analyze:
  • Back focus.
  • Sensor Tilt.
There are 4 sections:
  • V-curve for the each tile.
  • Table of data detailing the curve fitting results.
  • Analysis of back focus and tilt.
  • 3D Surface graphic to explain the Petzval Surface intersection with the sensor.
This release provides display only functionality. In future it would be possible to add functionality to offer recommendations for adjustments using Octopi, PhotonCage, etc.

Sub-exposure Calculator
Joseph McGee continues to add improvements and fixes for the Sub-exposure calculator. For usability, the window is now re-sizeable, an issue with the display of tool tips was corrected, and an indicator has been added for the sensor type of the selected camera (Mono / Color).  For functionality: the upper limit of the Noise Increase input parameter was increased, support was added for cameras with non-variable read noise, (cameras with CCD sensors).

Several new camera data files were added to the KStars source code repository, and a function to allow direct direct download of camera files from the repository was enabled. (Note: users who have created their own camera data files, may wish set the file attribute to read-only, and/or make a back up copy in case of an accidental over-write from the download function if the camera file has the same name).
A new experimental graphical tool to determine an appropriate number of sub-exposures for integration was added. This tool allows the selection of an exposure time to noise ratio for a stacked image; the tool will compute the number of sub-exposures required to achieve that value.
Added several new camera data files:
  • Atik-16200CCD_Mono.xml
  • FLI-16200CCD_Mono.xml 
  • QHY_CCD_294M_Pro.xml
  • QHY_CCD_461_PH.xml
  • QHY_CCD_163C.xml 
  • QHY_CCD_163M.xml
  • QHY_CCD_268C.xml
  • QHY_CCD_294M.xml
  • QHY_CCD_600_PH.xml
  • Pro.xml ZWO_CCD_ASI294MM
  • Pro.xml ZWO_CCD_ASI533MC
  • Pro.xml ZWO_CCD_ASI2600MC
  • Pro.xml ZWO_CCD_ASI6200MC
  • Pro.xml ZWO_CCD_ASI533MC
  • Pro.xml ZWO_CCD_ASI533MM
  • Pro.xml Nikon_DSLR_DSC_D5100_(PTP_mode).xml Nikon_DSLR_DSC_D700_(PTP_mode).xml
FITSViewer Solver
Hy Murveit added a very useful feature to the FITS Viewer: a built-in solver!
The FITS Viewer Solver is used to plate-solve the image loaded in the FITS Viewer's tab. It only works with the internal StellarSolver. You get the RA and DEC coordinates for the center of the image, the image's scale, the angle of rotation, and the number of stars detected in the image. Its main use case is debugging plate-solving issues in Ekos, though the information displayed can be generally useful. The controls and displays are described below.

This adds a new tool inside the splitter on the FITS Viewer. It plate-solves the displayed image, and allows the user to experiment with a number of plate-solving parameters, and thus help debug plate-solving issues.
How to test it out?
  • Open the sliding panel on the left part way, click on Plate Solving, and resize the windows appropriately.
  • Experiment with the parameters available (Use Scale, Use Position, the scale and RA/DEC positions, choose a profile and/or edit it)
  • Click Solve, and the image is solved and the solution presented in the Scale and RA & DEC and Angle boxes.
  • If you enable "Mark Stars" above the image window, you will also see the stars that were detected.
Quality of Life improvements
  • Make "Set Coordinates Manually" dialog more intuitive.
  • Telescope name specified in the optical trains are now saved in the  FITS header (the mount name was saved before).
  • New placeholders for ISO, binning and pure exposure time added.
  • Add a new not-default scheduler option to disable greedy scheduling.
  • Reduce latency between captures, especially when guiding / dithering.
  • Fix issue with differential slewing.
  • Separate Business Logic from UI in Scheduler.
  • Fix bug in estimating job time, capture delays were misinterpreted.
  • Fixed guide start deviation was not saved properly in esq file.
  • Bugfix in one-pulse dither. Dither pulses were going the wrong way.
  • Fix Scheduler hangs when Focus does not signal Autofocus start failure.
  • Focus Guide Settle Bug.
Categories: FLOSS Project Planets

digiKam 8.2.0 is released

Sat, 2023-12-02 19:00
Dear digiKam fans and users, After five months of active maintenance and long bugs triage, the digiKam team is proud to present version 8.2.0 of its open source digital photo manager. See below the list of most important features coming with this release. Libraw : Updated to snapshot 2023-11-21 Bundles : Updated Exiv2 to last 0.28.1 release Bundles : Updated ExifTool to last 12.70 release. Bundles : Linux and macOS uses KF5 framework to last 5.
Categories: FLOSS Project Planets

October/November in KDE Itinerary

Sat, 2023-12-02 04:30

It’s been two busy months for KDE Itinerary again since the last summary, with new journey timeline entries, public transport arrival search, nearby amenity discovery and many more improvements.

New Features Journey details in the timeline

After the update of the journey details page Mathis Brüchert also updated the timeline entry for train and bus trips. This can now be expanded inline to show the intermediate stops and ongoing delays and disruptions.

Expanded timeline entry for an ongoing train journey.

Eventually this should also show the trip progress when that information is available from onboard live data, but that’s not fully done yet.

Public transport arrival search

When adding train or bus trips from a manual search, it’s now also possible to search by arrival time rather than just by departure time.

Train journey search allowing to search by arrival time. Amenity search

The indoor map in Itinerary now can list all amenities in the building or area currently looked at. This enables things like finding a place to grab a coffee in a big train station or searching for a place to get food in the vicinity of your hotel, powered by OSM and without any search term ever leaving your device.

Itinerary's amenity search in the vicinity of a train station.

This post has some more details.

Exporting individual reservations

After adding the ability to export entire trips and sending them directly via KDE Connect to your phone it’s now also possible to do this for individual entries. This is available from the corresponding details pages.

OSM editing support

For OSM contributors Itinerary’s indoor map can now open the currently selected element directly in an OSM editor for fixing or improving map data.

Edit actions for a selected map element.

This supports iD, JOSM and Vespucci so far, this post has some more information.

Infrastructure Work Qt 6 Android APKs

With the transition of much of KDE’s software to Qt 6 underway, a big obstacle for Itinerary to follow along has been and still is the state of the Android support. There has been quite some progress around building Qt 6 based APKs recently though, which addressed several major blockers.

There have been three blog posts with more details:

We still need to get things to run properly as well though.

OSM raw data tiles

The OSM raw data tile server powering e.g. Itinerary’s train station maps has received a number of fixes and performance improvements, motivated by work on properly rendering directional lines (e.g. one way streets, escalators, cliffs/embankments, etc).

To support this work we now have a new automated test rig for the tile server code, which makes changing this code far less risky.

For more information, see this post.

OSM MapCSS renderer

There has been also more user-visible work on the OSM indoor map renderer, around the positioning and visibility of potentially overlapping icons and labels as well as for rendering of merged polygon and line casings.

Densely packed icons/labels with explicit overlap control for the entrances.

As those changes involve extra computational cost the map renderer also received a number of performance optimization to more than make up for that. More details can be found in this post.

Fixes & Improvements Travel document extractor
  • New or improved travel document extractors for 12go, Amadeus,, bookingkit, European Sleeper, Eurostar, FlixBus, GWR, Iberia, Motel One, no-q, PKP, Pretix, Renfe, Qatar Airways, SAS, Thalys and UK railway.
  • Improved generic extractors for ERA FCB and RCT2 ticket barcodes.
  • Fixed barcode decoding when PDFs apply a non-uniform scaling transformation.
  • Increase maximum document size threshold after encountering boarding pass PDFs bigger than 4Mb.
  • Fixed compatibility with libxml >= 2.11.
  • Improved workarounds for non-compliant Apple Wallet pass message catalogs.
  • Correctly compare times with and without timezones when merging reservation data.

All of this has been made possible thanks to your travel document donations!

Public transport data
  • Handle canceled stops in DB ICE onboard API journey data (can be seen in the first screenshot above).
  • Add onboard API support for Lufthansa, Eurostar and United.
  • Fixed Navitia coverage for Australia.
  • New tools to generate coverage area polygons from ISO 3166-1/2 boundaries for the Transport API Repository.
Itinerary app
  • Notification permissions for Android 13 are now supported, as described here.
KDE Itinerary's notification settings.
  • Booking references, ticket numbers and program membership numbers can now be copied. This is useful when you have to enter them in e.g. a web form.
  • Online ticket import now also works for DB Next tickets (those with a 12 digit number rather than a 6 character alpha-numeric code).
  • Train coach layout actions are now in the seat section of the details page, and more seat details are shown on the event page.
  • Fixed various layout issues when displaying Apple Wallet passes.
  • Added more sanity checks for automatically adding transfers. This should fix nonsense transfers being added when flights or train tickets without times end up in the timeline in the wrong order.
  • Fixed the live status page showing broken content when no live data is available yet.
How you can help

Feedback and travel document samples are very much welcome, as are all other forms of contributions. The KDE Itinerary workboard or the more specialized indoor map workboard show what’s on the todo list, and are a good place for collecting new ideas. For questions and suggestions, please feel free to join us in the KDE Itinerary channel on Matrix.

Categories: FLOSS Project Planets

This week in KDE: changing the wallpaper from within System Settings

Sat, 2023-12-02 01:10

Plasma 6 beta 1 has been released! And so far the feedback has been very positive. A few final features snuck in before we started on the mega bugfixing marathon, which began this week! Please do continue to test the beta and report bugs. Other useful activities include fixing bugs and donating to the Plasma 6 fundraiser.

KDE 6 Mega-Release

(Includes all software to be released on the February 28th mega-release: Plasma 6, Frameworks 6, and apps from Gear 24.02)

General infoOpen issues: 164

New features

You can now set the wallpaper for any of your screens from a page in System Settings! (Méven Car, link):

Discover now features a “Newly Published & Recently Updated” section on the main page when using Flatpak or Snap as your default apps backend, which makes the Linux app ecosystem feel more alive! Work is pending to also show this section when using distro packages for your default source, provided the distro actually ships relatively frequent updates to apps and not ancient years-old software all on the same date, which would make the section useless (Ivan Tkachenko, link):

The Night Light page in System Settings now shows you a graphical representation of the active and inactive periods as well as the transition times (Ismael Asensio, link):

Implemented a “Shake to find your cursor” KWin effect, similar to the one in macOS. Note that it’s off by default for now, so you’ll need to manually turn it on in System Settings’ Desktop Effects page if you want to use it (Vlad Zahorodnii, link)

Ark now offers a new “Extract here and delete archive” option for its context menu plugin! As part of the process of making this possible, we decided to remove infrequently-used items in the menu in favor of keeping the “Extract here, autodetect subfolder” option, which was the most useful one and has now been renamed to “Extract here” for clarity (Severin von Wnuck, link):

User Interface improvements

Auto-Hide panels now respect the user-configurable delay setting that currently affects other screen edge effects, so you can configure whether they will un-hide immediately upon being touched, or wait an amount of time of your choosing (Bharadwaj Raju, link)

The glow effect that appears when your pointer gets close to a screen edge or corner that will do something when touched now respects the system’s accent color (Ivan Tkachenko, link)

The Morphing Popups effect now animates with the standard easing curve, which feels more consistent and nicer and also makes it feel faster (Timothy Bautista, link)

KRunner and other KRunner-based searches like the one in Overview now have proper visual click feedback when you click on a search result (Kai Uwe Broulik, link)

Tool views and sidebar tabs in Kate can now be dragged-and-dropped to other locations (Waqar Ahmed, link 1 and link 2)

Hitting the Escape key in Spectacle while in Rectangular Region mode now takes you back to the main window instead of quitting the app (Noah Davis, link)

Bug fixes

Fixed the most common crash in Dolphin which could happen when copying a large number of files to another location, closing Dolphin’s window, and then interacting with the overwrite/skip dialog (Akseli Lahtinen, link)

Fixed another common crash in Dolphin that could happen after entering edit mode and then changing the Application Style (Akseli Lahtinen, link)

In the Plasma Wayland session, sub-menus from Kicker no longer go underneath a bottom panel, and windows marked “Keep above other windows” no longer also go above panel popups (David Edmundson, link 1 and link 2)

Fixed various visual glitches with the bouncy app launch feedback effect on Wayland when using a scale factor higher than 100% (Vlad Zahorodnii, link 1, link 2, and link 3)

Window titles that contain a hyphen character no longer get mangled when displayed in Task Manager preview popups (Niccolò Venerandi, link)

Fixed OSDs on the lock screen looking pointlessly different from OSDs shown everywhere else (Bharadwaj Raju, link)

When you have multiple Battery widgets, the “Manually block sleep and screen locking” switch is now synced between all of them (Natalie Clarius, link)


Added support for hardware cursors on NVIDIA GPUs (Doğukan Korkmaztürk, link)

System Settings’ Firewall page has been fully ported to Qt6 (Guillaume Frognier and David Redondo, link)

KDE Connect’s Plasma widget has been fully ported to be compatible with Plasma 6 (Prajna Sariputra, link)

Automation & Systematization

Added an autotest to make sure that files and folders added to the desktop actually show up immediately (Fushan Wen, link)

Added an autotest to make sure that accent colors can be correctly extracted from wallpapers (Fushan Wen, link)

Added an autotest to make sure that Global Theme layouts can be correctly applied (Fushan Wen, link)

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out, where you can find more news from other KDE contributors.

How You Can Help

We’re hosting our Plasma 6 fundraiser right now and need your help! Thanks to you we’re at 83% right of our goal of 500 members now! I think we might actually make it! If you like the work we’re doing, spreading the wealth is a great way to share the love.

If you’re a developer, work on Qt6/KF6/Plasma 6 issues! Which issues? These issues. Plasma 6 is very usable for daily driving now, but still in need of bug-fixing and polishing to get it into a releasable state by February.

Otherwise, visit to discover other ways to be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Categories: FLOSS Project Planets

KDE neon and snaps, Debian Weekly report.

Fri, 2023-12-01 13:05

While the winter sets in, I have been mostly busy following up on job leads and applying to anything and everything. Something has to stick… I am trying! Even out of industry.


This weeks main focus was getting involved and familiar with Debian rust-packaging. It is really quite different from other teams! I was successful and the MR is if anyone on the rust team can take a gander, I will upload when merged. I will get a few more under my belt next week now that I understand the process.

KDE neon:

Unfortunately, I did not have much time for neon, but I did get some red builds fixed and started uploading the new signing key for mauikit* applications.

KDE snaps:

A big thank you to Josh and Albert for merging all my MR’s and I have finished 23.08.3 releases to stable.

I released a new Krita 5.2.1 with some runtime fixes, please update.

Still no source of income so I must ask, if you have any spare change, please consider a donation.

Thank you, Scarlett

Categories: FLOSS Project Planets

Web Review, Week 2023-48

Fri, 2023-12-01 06:29

Let’s go for my web review for the week 2023-48.

KDE’s 6th Megarelease - Beta 1 - KDE Community

Tags: tech, kde

The best time to test it and provide fixes is now!

PeerTube v6 is out, and powered by your ideas! – Framablog

Tags: tech, video, self-hosting

Another great release. Definitely welcome features.

Where Is OpenCV 5? - OpenCV

Tags: tech, graphics, opencv, vision

This is an important project, they’re starting a crowdfunding. Time to give back!

Red Hat Enterprise Linux 10 plans for Wayland and Xorg server

Tags: tech, redhat, wayland

The beginning of the end for X11. The writing is now on the wall.

New Outlook is good, both for yourself and 766 third parties

Tags: tech, microsoft, privacy

They respect privacy apparently… oh wait!

Pluralistic: The real AI fight

Tags: tech, ai, ethics

Excellent piece from Cory Doctorow, it’s a good summary of where the real debates about AI should be… and it’s nowhere near the OpenAI soap opera.

UK school pupils ‘using AI to create indecent imagery of other children’

Tags: tech, ai, gpt, criticism

School bullying has a new tool to its belt… and this one is rather creepy.

GAIA: A Benchmark for General AI Assistants

Tags: tech, ai, gpt, benchmarking

That’s the beginning of interesting benchmarks for AI assistants. Still a long way to go but this is a good start.

Neil Gaiman’s Radical Vision for the Future of the Internet - Cal Newport

Tags: tech, web, blog, social-media

Hopefully this becomes true. I wouldn’t mind a post-Social Media era of the Web.

An ode to the neo-grotesque web | Redowan’s Reflections

Tags: tech, web, blog, history, ux

There was definitely something we lost from the early days of the web. It was not perfect, far from it, but some of that spark is missing.

cohost! - “Paper: You Want My Password or a Dead Patient?”

Tags: tech, medecine, usability, security, safety

How the medical sector is struggling with badly designed software. Also important to note how security is just getting in the way of nurses and doctors jobs.

Secure DNS (DoT & DoH) is not enough

Tags: tech, browser, dns, privacy

Looking forward to Encrypted Client Hello to be widely available. This was no more clear text SNI, and privacy should be really ensured when browsing the web.

Beej’s Guide to Interprocess Communications

Tags: tech, unix, processes, communication

Looks like a good resource for someone who needs to get into IPC mechanisms on UNIX flavors.

Modern C++ Programming Course (C++11/14/17/20)

Tags: tech, c++, learning

Looks like a fairly comprehensive course to get started or refresh your Modern C++

On harmful overuse of std::move - The Old New Thing

Tags: tech, c++, performance

Seen this a bit too often indeed. When people learn about std::move they tend to sprinkle it too much preventing proper optimizations. Its use should be fairly limited usually.

Live and Let Die

Tags: tech, programming, c++, raii, resources

Interesting dive on the limits of destructors and when they’re called. This can have implications on how programs are stopped.

Brandt Bucher – A JIT Compiler for CPython

Tags: tech, python, compiler

If you wonder what’s happening on the JIT front in CPython land, here is a talk explaining what’s coming in 3.13.


Tags: tech, ai, machine-learning, gpt, vim, command-line, self-hosting, foss

Interesting terminal oriented tool to interacting with LLM. Let you choose to self-host or run locally.

Distribute and run LLMs with a single file

Tags: tech, ai, machine-learning, gpt, foss, portability

Interesting experiment. It makes for a very large file but there are a few clever tricks in there.

Using Polars in a Pandas world

Tags: tech, data, pandas, polars

Good things to keep in mind if you’re pondering between pandas or polars for your data processing.

Ray Marching Fog With Blue Noise « The blog at the bottom of the sea

Tags: tech, graphics, 3d, noise

I keep being baffled at how the right type of noise can really make a difference in the rendering of some effects.

Animotion — a visual CSS animation app

Tags: tech, web, css, animation, tools

Nice little editor for CSS animations. Should definitely help building those.

The Weirdest Bug I’ve Seen Yet

Tags: tech, debugging

Definitely a weird one… still a mystery and unfortunately will probably stay this way. Having the code source could have helped nail it down, could have been interesting.

CUPID—for joyful coding - Dan North & Associates Limited

Tags: tech, craftsmanship, design, programming, quality

This is a good set of properties to strive for. Since the SOLID principles start to show their age this might be a worthwhile alternative.

Code is run more than read

Tags: tech, business, craftsmanship, foss

Interesting food for thought. The later point about the tension between business and users lately is also a good one and should be kept in mind. That’s an ethical concern you find most in companies publishing Free Software though. It’s not the full packaged solution but a good starting point.

Supporting Sustainability

Tags: tech, project-management, communication, sustainability

Interesting set of advices for better communication and more sustainable production of software.

Be Indirect in Your Research Questionnaire to Gain More Honesty

Tags: sociology, polling

Definitely this. When polling the questions shouldn’t be too obvious, otherwise people will tell you what you want to hear.

Bye for now!

Categories: FLOSS Project Planets

Maui Release Briefing # 4

Thu, 2023-11-30 22:02
MauiKit: A Toolkit for Multi Adaptable User Interfaces.

Today, we bring you a report on the brand-new release of the Maui Project.

We are excited to announce the latest release of MauiKit version 3.0.2, our comprehensive user interface toolkit specifically designed for convergent interfaces, the complying frameworks, and an in-house developed set of convergent applications.

Built on the foundations of Qt Quick Controls, QML, and the power and stability of C++, MauiKit empowers developers to create adaptable and seamless user interfaces across a range of devices, and with this release, we are a step closer to finalizing the migration to a new major version – the upcoming MauiKit4 release, now fully documented.

Join us on this journey as we unveil the potential of MauiKit3 for building convergent interfaces, the roadmap towards MauiKit4 and its new additions, and finally discover the possibilities offered by the enhanced Maui App stack.


To follow the Maui Project’s development or to just say hi, you can join us on Telegram @mauiproject

We are present on Twitter and Mastodon:

Thanks to the KDE contributors who have helped translate the Maui Apps and Frameworks!

Downloads & Sources

You can get the stable release packages [APKs, AppImage, TARs] directly from the KDE downloads server at

And if you are feeling a bit curious about the Maui DE, you can download the Manjaro-based image for **testing** the project’s state as a snapshot of MauiKit3.

Note: Please be aware that this is an ISO image from a third party.

All of the Maui repositories have the newly release branches and tags. You can get the sources right from the Maui group:

What’s new?

With this update, we have focused on publishing the comprehensive documentation for the recently ported MauiKit4 Frameworks, polishing and updating the upcoming MauiKit4 frameworks code base, and starting to get the Maui Applications into shape for the migration to MauiKit4 – all while fixing bugs, improving performance, and fine-tuning all visual details.

MauiKit3 & 4

While documenting the source code – for the ported MauiKit4 frameworks – a lot of the implementation details of the visual controls have been reviewed and refined, this has resulted in a more curated set of UI elements, performance boost, cleaner code an early addition of new features.


All of the frameworks have a new information header, with information about the module, such as version number, build version, and all of the open-source tools that are part of it.

A quick overview of the changes made include:

  • Startup optimizations for the ApplicationWindow
  • The SettingsDialog layout is now cleaner when using the accompanying SectionGroup and SectionItem controls
  • Fix regressions introduced with the dialogs now based on QQC2 Dialog component
  • The TabView overview preview thumbnails are now correctly scaled and more tab information, such as the custom color and tooltip text – are now used.
  • Lazy loading elements until they are needed resulting in small performance boost
  • The AboutDialog links are clearer without using any special styling, and some parts have been refactored for a cleaner source code
  • Fixes to the GridBrowserDelegate and ListBrowserDelegate checkable state
Terminal, TextEditor & FileBrowsing

The FileDialog issues on mobile devices with the single click preference have been solved. Another bunch of small fixes include fixes to the dialog buttons, the FileBrowser action dialogs, information about tag locations, and the addition of more methods to the file management classes.

MauiKitTerminal now exposes more interface properties for handling processes that have gone silent, and functions to correctly change the current working directory.

Documents, Accounts, Calendar &ImageTools

Added the header with module information, and started the porting work.

And, as for MauiKit4:

  • The Holder control can now have an image source as the emoji
  • Many corrections in the QML syntax for the definition of catching signals.
  • The SettingsDialog is now a detached window on desktop environments
  • Added a new control DialogWindow and BaseWindow, from which ApplicationWindow now inherits. The new DialogWindow is correctly set as a dialog window and it’s modal.
  • Simplify the implementation of controls, such as the InputDialog
  • Fixes to CSD buttons controls, and now respects hints of no resizable windows or windows that should not be minimized.
  • Added a build flag `-DBUILD_DEMO=ON` for building or skipping the MauiKit4 demo app.
  • Added documentation to the sources and example files for all the visual controls
  • The SectionItem has been changed into two different variants: SectionItem and FlexSectionItem, more information about their use cases is in the documentation linked in the section below
  • Some of the previously public types that were only part of the implementation have now become private, such as the SideBar for the SideBarView
MauiKit4 Documentation

Documentation has been published for the ported MauiKit4 frameworks, as part of the migration plan. As new frameworks get ported, the accompanying documentation will be published. You can find the documentation online at

At the time of this release, the following frameworks have now been fully documented, and have a comprehensive list of example source files:

The documentation effort also resulted in a complete set of example source files, which can be used for interested users to quickly hack and learn about MauiKit4, and for testers – and unit tests, to monitor all parts are functional.

If you are interested in contributing to the project, or in developing a MauiKit-based application, and you find any issues, bugs about the documentation text readability, or any other comments, please feel free to open a bug report on the corresponding repository issues page, and/or joining us at our telegram public chat group, where any concerns or questions will be answered promptly.

MauiKit3 Apps

Among specific new features and updates listed below, all of the Maui apps have been updated to the latest MauiKit3 changes, which also include fixes to some regressions introduced in the porting to MauiKit4 – and have also received an initial set of tweaks to get ready for their migration to MauiKit4.

Fix regression to the new dialogs versus the previous implementation.

Updated translations to multiple languages, thanks to the KDE community.

Index, Vvave & Shelf

Index now allows previewing files by default instead of opening them in an external application, and the dialog can be detached on desktop environments. Some UI elements have been improved to be loaded only when needed.

In Index, the previewer model is now independent of the current directory model, and the previews of videos and audios now have a playback button for pausing and resuming.

The albums and artist view in Vvave, now display a quick play button on hovering over the cover, to quickly start playing a full album or artist collection.

Shelf correct browsing by categories.

Clip, Nota & Station

The alerts on Station, for inactive or silent processes are now optional and exposed in the settings dialog. Now the last session can be restored if preferred.

For Nota, the crashing issues on Android have been addressed. Menus and other elements are now being lazy-loaded, making the app quicker. Also, menus have been revised and the mobile contextual menu is now correctly working.

Fiery, Buho & More

Fiery now has detachable tabs.

Maui Shell Cask, Maui Settings & More

The session startup manager now has been fully ported to Qt6 and it’s working correctly.

Many fixes were done to the Cask panels and dock, fixing regressions introduced in the migration to MauiKit4. This is still a work in progress and more development will go into this for the upcoming release of the Shell in February.

2024 Roadmap

For the upcoming release scheduled for February, most of the work will go into the Shell and its sub-projects, as decided in the release chronogram, however, this will also be the time when the remaining MauiKit frameworks will be ported from Qt5 to Qt6, those include Documents, Terminal,ImageTools, TextEditor, Accounts.

It is expected that most of the Maui Applications will be ported to MauiKit4 Frameworks and Qt6, for their new release around May 2024. And by August release it is expected that all of the Maui Project has been successfully migrated to Qt6.

To follow the Maui Project’s development or say hi, you can join us on Telegram:

We are present on Twitter and Mastodon:

New release schedule


The post Maui Release Briefing # 4 appeared first on MauiKit — #UIFramework.

Categories: FLOSS Project Planets

Qt for MCUs 2.5.2 LTS Released

Thu, 2023-11-30 14:22

Qt for MCUs 2.5.2 LTS (Long-Term Support) has been released and is available for download. As a patch release, Qt for MCUs 2.5.2 LTS provides bug fixes and other improvements, and maintains source compatibility with Qt for MCUs 2.5.x. It does not add any new functionality.

Categories: FLOSS Project Planets

KDiagram 3.0.0

Wed, 2023-11-29 11:05

KDiagram is two powerful libraries (KChart, KGantt) for creating business diagrams.

Version 3.0.0 is now available for packaging.

It moves KDiagram to use Qt 6. It is co-installable with previous Qt 5 versions and distros may want to package both alongside each other for app compatibility.

SHA256: 6d5f53dfdd019018151c0193a01eed36df10111a92c7c06ed7d631535e943c21

Signed by E0A3EB202F8E57528E13E72FD7574483BB57B18D Jonathan Esk-Riddell

Categories: FLOSS Project Planets

KWeatherCore 0.8.0

Wed, 2023-11-29 10:56

KWeatherCore is a library to facilitate retrieval of weather information including forecasts and alerts.

0.8.0 is available for packaging now

SHA256: 9bcac13daf98705e2f0d5b06b21a1a8694962078fce1bf620dbbc364873a0efeS
Signed by E0A3EB202F8E57528E13E72FD7574483BB57B18D Jonathan Esk-Riddell <>

This release moves the library to use Qt 6. It is not compatible with older Qt 5 versions of the library so should only be packaged when KWeather is released or in testing archives.

Categories: FLOSS Project Planets

KDE's 6th Megarelease - Beta 1

Tue, 2023-11-28 19:00
En route to the new Plasma, Frameworks and Gear

Every few years we port the key components of our software to a new version of Qt, taking the opportunity to remove cruft and leverage the updated features the most recent version of Qt has to offer us.

It has been nearly 10 years since the last big release of our flagship Plasma desktop environment, and the time has come again. KDE is making available today the Beta version of all the software we will include in a megarelease scheduled for the end of February 2024.

To ensure all parts of KDE's software stack are working together, we are releasing all our major bundles at the same time. Today sees the continuation of that journey with the Beta releases of Plasma 6, KDE Frameworks 6 and the KDE Gear bundle of apps.

This is a very early preview intended for developers and testers only. We hope it will be picked up by rolling unstable distros, but it is far from being ready for day-to-day use yet.

Read on to find out more about KDE's 6th Megarelease, what it covers, and how you can help make the new versions of Plasma, KDE's apps and Frameworks a success now.


Plasma is KDE's flagship desktop environment. Plasma is like Windows or macOS, but is renowned for being flexible, powerful, lightweight and configurable. It can be used at home, at work, for schools and research.

Plasma 6 is the upcoming version of Plasma that integrates the latest version of Qt, Qt 6, the framework upon which Plasma is built.

Plasma 6 incorporates new technologies from Qt and other constantly evolving tools, providing new features, better support for the latest hardware, and supports for the hardware and software technologies to come.

You can be part of the new Plasma. Download and install a Plasma 6-powered distribution (like Neon Unstable) to a test machine and start trying all its features. Check the Contributing section below to find out how you can deliver reports of what you find to the developers.

KDE Gear

KDE Gear is a collection of applications produced by the KDE community. Gear includes file explorers, music and video players, text and video-editors, apps to manage social media and chats, email and calendaring applications, travel assistants, and much more.

Developers of these apps also rely on the Qt toolbox, so most of the software will also be adapted to use the new Qt6 toolset and we need you to help us test them too.


KDE's Frameworks add tools created by the KDE community on top of those provided by the Qt toolbox. These tools give developers more and easier ways of developing interfaces and functionality that work on more platforms.

Among many other things, KDE Frameworks provide

  • widgets (buttons, text boxes, etc.) that make building your apps easier and their looks more consistent across platforms, including Windows, Linux, Android and macOS
  • libraries that facilitate storing and retrieving configuration settings
  • icon sets, or technologies that make the integration of the translation workflow of applications easier

KDE's Frameworks also rely heavily on Qt and will also be upgraded to adapt them to the new version 6. This change will add more features and tools, enable your applications to work on more devices, and give them a longer shelf life.


KDE relies on volunteers to create, test and maintain its software. You can help too by...

  • Reporting bugs -- When you come across a bug when testing the software included in this Alpha Megarelease, you can report it so developers can work on it and remove it. When reporting a bug
    • make sure you understand when the bug is triggered so you can give developers a guide on how to check it for themselves
    • check you are using the latest version of the software you are testing, just in case the bug has been solved in the meantime
    • go to KDE's bug-tracker and search for your bug to make sure it does not get reported twice
    • if no-one has reported the bug yet, fill in the bug report, giving all the details you think are significant.
    • keep tabs on the report, just in case developers need more details.
  • Solving bugs -- Many bugs are easy to solve. Some just require changing a version number or tweaking the name of a library to its new name. If you have some basic programming knowledge of C++ and Qt, you too can help carry the weight of debugging KDE's software for the grand release in February.
  • Joining the development effort -- You may have a deeper knowledge development, and would like to contribute to KDE with your own solutions. This is the perfect moment to get involved in KDE and contribute with your own code.
  • Donating to KDE -- Creating, debugging and maintaining the large catalogue of software KDE distributes to users requires a lot of resources, many of which cost money. Donating to KDE helps keep the day-to-day operation of KDE running smoothly and allows developers to concentrate on creating great software. KDE is currently running a drive to encourage more people to become contributing supporters, but you can also give one-time donations if you want.
A note on pre-release software

Pre-release software is only suited for developers and testers. Alpha/Beta/RC software is unfinished, will be unstable and will contain bugs. It is published so volunteers can trial-run it, identify its problems, and report them so they can be solved before the publication of the final product.

The risks of running pre-release software are many. Apart from the hit to productivity produced by instability and the lack of features, the using pre-release software can lead to data loss, and, in extreme cases, damage to hardware. That said, the latter is highly unlikely in the case of KDE software.

The version of the software included in KDE's 6th Megarelease is beta software. We strongly recommend you do not use it as your daily driver.

If, despite the above, you want to try the software distributed in KDE's 6th Megarelease, you do so under your sole responsibility, and in the understanding that the main aim, as a tester, you help us by providing feedback and your know-how regarding the software. Please see the Contributing section above.

Categories: FLOSS Project Planets

Off-Theme Presents: Shades of Purple

Tue, 2023-11-28 11:51
In the third installment of Off-Theme, we cover Shades of Purple, a global theme with a rather striking set of shades that sets it apart from many other flat themes.
Categories: FLOSS Project Planets

Anniversary release: KPhotoAlbum 5.12.0

Sun, 2023-11-26 19:00

We're happy to announce the new release 5.12.0 of KPhotoAlbum, the KDE photo management program!

20 years KPhotoAlbum

This is some kind of "special" release, as exactly 20 years ago, on 2003-11-27, version 1.0 was tagged (we tagged this release already on saturday, so that it will hit the mirrors and we can publish this release announcement at this very date though ;-).

20 years is quite a long time for such a "small" FLOSS project. Enough times, nice programs die from bit rot, because the only dev or too many of the few lose interest in it, don't need it anymore and/or nobody wants to take over maintainership. Happily, this is not the case for KPA! After all these years, the project is still alive and kicking, and – when the family, the job and everything else allow it (after all, we're all not fulltime KPA devs), we work on it to make it better.

Just speaking of me, I joined the project back in 2014, almost ten years ago now (which is arguably also quite a long period of time). And I'm really proud to still be a part of this great project :-)

So, I think it's time to especially thank Jesper Pedersen for initiating the project back then, and Johannes Zarl-Zierl for taking over the maintainership and being the project leader since 2019! Joyfully, Jesper never really stopped contributing to KPA and still works on it until now.

After all, we're still – without too much self-laudation – a small but excellent crew of FLOSS enthusiasts ;-)

But about the release itself:

What's new? Bugfixes

Most notably, we could fix a really big amount of crashes and unexpected behavior. The following bug reports could be closed as "fixed": #472427, #472523, #473231, #473324, #473587, #473762, #474151, #474392, #475387, #475388, #475529, #475585, #476131, #476561, #476651, #476862 and #477195. That's quite an impressive list, isn't it?!

Kudos to our new super-diligent beta tester Victor Lobo for filing 17 of those bug reports alone, always providing meaningful information about how to reproduce the issue and tirelessly testing the fixes. Thank you! As a dev, you really appreciate this! Apart from that, also big thanks to Pierre Etchemaïté and Andreas Schleth for providing equivalently excellent bug reports!

Thanks to you all for helping making KPhotoAlbum better!

New features and changes

Apart from that, there are also some new interesting features:

  • Support annotating images from the viewer by using letters to assign tags. Use the context menu and select "Annotate | Assign Tags" to enable. More information is available in the KPhotoAlbum handbook.
  • Add option to sort category page by natural order (feature #475339). Natural sort order takes the locale into account and sorts numeric values properly (e.g. sort "9" before "10").
  • Allow selecting a date range in the DateBar via keyboard (Use "Shift + Left|Right")
  • Allow closing the annotation dialog's fullscreen preview using the Escape key.

… as well as sone changes:

  • In the viewer window, using the letters A-Z to assign tokens now needs to be explicitly enabled. You can do this by opening the context menu and selecting "Annotate | Assign Tokens".
  • When KPhotoAlbum is started in demo mode and a previously saved demo database exists, the old demo database is no longer overwritten.
  • The ui.rc file (kphotoalbumui.rc) is now deployed as a Qt resource instead of an on-disk file.
  • Improved usability of "Invoke external program" menu (#474819)
  • No longer set the default shortcut for "Use current video frame in thumbnail view" to Ctrl+S and avoid shortcut conflict.
  • Restrict context menu entries for fullscreen preview of annotation dialog to a sane set of actions.
  • It is no longer possible to annotate images from the viewer by pressing "/" and typing tag names.
  • It is no longer possible to change an image through the annotation dialog's fullscreen image preview.
Thanks to everybody involved!

According to git, the following individuals pushed commits:

  • Yuri Chornoivan
  • Friedrich W. H. Kossebau
  • Nicholas Leggiero
  • Tobias Leupold
  • Alexander Lohnau
  • Scarlett Moore
  • Jesper K. Pedersen
  • Johannes Zarl-Zierl

Thanks for spending your time with coding on KPA and for contributing your work!

Have a lot of fun with the new release, and keep KPA the best photo management program out there, also for the 20 years to come :-)

— Tobias

Categories: FLOSS Project Planets

My work in KDE for November 2023

Sun, 2023-11-26 19:00

We’re already in November, but I managed to do a lot of work this month which I’m really happy about.

Quickly something that’s not strictly programming: I was accepted as a member of KDE e.V. early this month, thank you all very much! I was also given moderation powers on Discuss so maybe it will stop rate limiting me when moving posts around.

I also went on a crusade of merging and triaging merge requests on Invent, which some of you might’ve seen. Notably I was able to take care one or two pages worth of open MRs, which I’m really happy about.

Without further ado, let’s begin.

Plasma #

Feature Merged the Game Controller KCM into Plasma, starting with a simple rewrite in QML. I’m aiming to add back the visual representation in 6.1 (which still exists in the standalone repository if you want to take a shot at it.) At least for right now the code is much better and it supports more devices than the 5.X Joystick KCM ever could. 6.0

The new and not much improved Game Controller KCM

My hope is that since it’s much cleaner and easier to work with, it would invite more contributors… and it’s already doing that as we speak! :-)

NeoChat #

Feature Blockquotes now look more like quotes, and no longer just somewhat indented blocks of text. 24.02

New blockquote stylings

Bugfix You can now right-click (or long tap) on rooms to access the context menu without switching to it. I gave the treatment for spaces a while back. 24.02

Feature Added UnifiedPush support! It’s functional already and I have used it to receive push notifications even when NeoChat is closed. 24.02

Tokodon #

Feature I merged the post redesign I was teasing on Mastodon, which includes better margins and standalone tags. 24.02

The new post design, which includes standalone tags!

Feature The language selector is now a regular dialog and not the buggy custom combo box we had before. It now displays the native language name, if available. 24.02

The new language selector

Feature Muting and blocking users has been accessible through profile pages, and now those actions are present in the post menu like on Mastodon Web. Useful for taking action against harmful users without navigating to a cesspool of a profile too. 24.02

Feature Added a report dialog. It’s a little basic right now, which I want to improve before release. 24.02

The new report dialog

Feature Rebased and merged Rishi’s Moderation Tool, which works fantastic and I used this to test my reporting feature! 24.02

Feature Added a way to filter out boosts and replies from timeline pages. 24.02

New filter controls

Feature Added supports for lists. You can’t add people to lists (you must use another client to do that) but you can at least view and manage them. 24.02

New list management Kiten #

Bugfix Marked the X11 socket as fallback. This removes a warning on the Flathub page about the deprecated windowing system. 23.08

Now the Flathub page is all green!

Bugfix Numerous UI improvements, such as improving the margins of configuration dialogs. I also redid the toolbar layout. 24.02

The new toolbar layout

Feature Added a search function to the Kanji browser. 24.02

Kirigami #

Bugfix Fixed an edge cases of ToolBar incubation, which liked to spam logs. I squashed some other log spam, so Kirigami applications should be less noisy. 6.0

Feature Added a property to FlexColumn that allows you to read the inner column’s width. We use this in Tokodon to set the width of the separator between posts. 6.0

Craft #

I’m getting addicted to fixing Craft recipes, and there’s a lot to fix in the upcoming 6.0 megarelease:

KUnifiedPush #

Feature Improved the look of it’s KCM. Not only does it look nice, and it’s design is more in line with other list based ones.

The new look for the Push Notifications KCM! PlasmaTube #

Feature Added better hover effects for video items. I did a bunch of refactoring to unify the two types (list and grid) so they work better in general (especially for keyboard-only navigation.) 24.02

Feature Added a video queue system, which is exactly what you think it is. You can queue up an entire playlist, or add videos manually like on YouTube. 24.02

Feature Different types of search results is supported now, so you can find channels and playlists. 24.02

Feature Public Piped instances are now fetched and displayed on initial setup. 24.02

Feature Features of PlasmaTube that are unsupported by the current video source are now disabled or hidden. This should result in less buggy and broken looking behavior depending on which video source you use. 24.02

Feature Added support for MPRIS, which is used by the Media Player applet, the lockscreen and KDE Connect. 24.02

Accessibility #

Bugfix Fixed our spinboxes not being read correctly by screen readers, since they were editable by default. Now the accessible descriptions and other data is passed down to the text field. Fixed in QQC2 Desktop Style (used on Plasma Desktop) and QQC2 Breeze Style (Plasma Mobile and Android.) 6.0

Documentation #

Found lots more missing Bugzilla links in Invent, and did some more README updating!

KWeather #

Bugfix Fixed the setup wizard. 24.02

Upcoming #

Feature Not merged yet, but I’m adding a pen calibration tool to the Tablet KCM. If you have the required equipment and can test, please help out! It’s cutting it close to the feature freeze, so this will most likely be pushed off until 6.1.

The new calibrator

See you in December!

Categories: FLOSS Project Planets

Packaging changes for KDE Android apps

Sat, 2023-11-25 04:15

Following my recent post on porting KDE Android applications to Qt 6 and Ingo’s post on the CI/CD changes for APKs here are some more details about packaging changes for KDE’s Android apps.

APK packaging so far

The basic flow for creating APKs so far is:

  • ECM identifies the various pieces of information needed for androiddeployqt, such as the application binary, the location of the Android manifest file, Java source code, and install prefixes of dependencies.
  • androiddeployqt gathers all of this together into a temporary directory, considering things like link dependencies and additional dependency metadata. Offering very little external control this tends to err on the side of including too much in the package.
  • Gradle is then used to compile the Java code (if any) and create the actual APK. This offers some limited amount of control for excluding unused files.

This isn’t pretty but kinda worked so far. With the KF6 transition we hit a limit there though, with the combination of androiddeployqt and Gradle failing to properly strip and exclude all debug information. That’s not breaking the APK as such, but it massively bloats its size.


Our APK builds are driven by Craft, which manages the build environment and takes care of building all dependencies as well. It however also has infrastructure for packaging, something we haven’t used for APKs so far.

That changed now though, solving the above mentioned debug information problem and giving us much more fine-grained control over what goes into the APK, and doing that in a way that’s easy to manage even (ECM MR, Craft MR).

Craft has multi-level exclusion lists for defining patterns that should not be in the package:

  • A global list that applies to all package on all platforms. This typically contains development files and development tools that are needed to build the application but that aren’t needed at runtime.
  • A platform specific exclusion list. For Android this could contain for example Qt Quick Controls styles we don’t use there, or translations for locales not available on Android.
  • Application-specific exclusion lists, for anything not used by a particular app.

Being able to manage the first two in a shared place is a major benefit, as those lists tend to be long and change quite a bit over time as libraries/dependencies evolve.

Adapting applications

No changes are required for applications to benefit from this for the most part, only adding an application-specific exclusion list requires a minor change to the Craft blueprint.

class Package(CMakePackageBase): def __init__(self): CMakePackageBase.__init__(self) # register application-specific exclusion list self.blacklist_file.append(self.packageDir() / "blacklist.txt")

The format of the exclusion list file itself is rather intuitive, consisting of one regular expression applied to the full path per line.

# data files for ki18n that we don't need share/iso-codes/.* share/locale/.*/LC_MESSAGES/iso_.*\.mo # other KF6 data files we don't need share/mime/packages/kde6\.xml

See the Kongress blueprint as an example.

Also, the previous mechanisms excluding files via build.gradle still works and is applied on top of this.

Categories: FLOSS Project Planets

This week in KDE: the Plasma 6 feature freeze approaches

Sat, 2023-11-25 00:02

At this point nearly all the planned features for Plasma 6 are done, and everyone’s focus has begun to shift to bug-fixing and polishing. People are reporting plenty of bugs (most of them fairly minor) and we’re fixing them as fast as we can! In addition to that, some larger and more notable changes went in too:

KDE 6 Mega-Release

(Includes all software to be released on the February 28th mega-release: Plasma 6, Frameworks 6, and apps from Gear 24.02)

General infoOpen issues: 162

Shutting down or restarting the machine while in the Plasma Wayland session now causes apps with unsaved changes to prompt the user to save them, rather than just quitting immediately and losing the changes. No new Wayland protocol ended up being necessary after all! This was one of the last three Wayland Showstoppers (David Redondo, link)

“Bounce Keys” now fully work in the Plasma Wayland session. This was the second of the last three Wayland Showstoppers! Now we’re just down to one, and it too is being worked on! (Nicolas Fella, link)

Partition Manager no longer lets you write entries to your fstab file that could prevent mounting a partition in the future by closing the partition editing dialog without changing the mountpoint, when the mountpoint was previously undefined (Arjen Hiemstra, link 1 and link 2)

Files and folders created in ~/Desktop but outside of Plasma itself should now always appear there immediately (Harald Sitter, link)

Changing your user picture in System Settings now results in the picture in Kickoff changing immediately, rather than only after Plasma was restarted (Akseli Lahtinen, link)

Fixed a visual glitch in Kate and other KTextEditor-based apps involving the completion popup (Waqar Ahmed, link)

Since the API for Plasma Widgets has changed in Plasma 6, widgets that you migrate from a Plasma 5 installation but aren’t compatible with Plasma 6 are now shown in a relatively user-friendly way, so at least you know what to do and don’t think that Plasma 6 is just totally broken (Marco Martin, link 1, link 2)

When you’ve downloaded an offline update, there’s now an option to reboot without applying it on the next boot-up. We’re considering adding this as an option when shutting down, too (Kai Uwe Broulik, link)

The “Battery and Brightness” widget has been split into two new widgets: “Brightness and Color” and “Power and Battery.” The former one integrates controls for Night Color, so in the end the total number of widgets in your System Tray isn’t increasing; they’re just better organized and relevant now! (Natalie Clarius, link):

KMail now gains support for the beautiful new frameless styling in the Plasma 6 Breeze theme (Carl Schwan, link):

The “Kill unresponsive window?” dialog now exists in the Plasma Wayland session and has received a visual overhaul to brings its UI into the 21st century (Kai Uwe Broulik, link):

Spectacle now opens on Meta+Shift+S, for the benefit of those whose keyboards don’t have a PrintScreen key (Noah Davis, link)

Welcome Center gains a dedicated page shown to people who use the beta version of Plasma (Oliver Beard, link):

The Samba sharing configuration wizard has been fully ported to Qt6 (Harald Sitter, link)

Other Bug-Related Information of Interest:

This section is short because all notable bugfixes are included in the mega-release! Expect this to be more and more true as we get closer to the final release, which, as a reminder, is planned for February 28, 2024.

…And Everything Else

This blog only covers the tip of the iceberg! If you’re hungry for more, check out, where you can find more news from other KDE contributors.

How You Can Help

We’re hosting our Plasma 6 fundraiser right now and need your help! Thanks to you we’re past the 75% mark, but we’re not there yet! So if you like the work we’re doing, spreading the wealth is a great way to share the love.

If you’re a developer, work on Qt6/KF6/Plasma 6 issues! Which issues? These issues. Plasma 6 is usable for daily driving now, but still in need of bug-fixing and polishing to get it into a releasable state by February.

Otherwise, visit to discover other ways to be part of a project that really matters. Each contributor makes a huge difference in KDE; you are not a number or a cog in a machine! You don’t have to already be a programmer, either. I wasn’t when I got started. Try it, you’ll like it! We don’t bite!

Categories: FLOSS Project Planets

Freezing in Style

Fri, 2023-11-24 16:47

One of the the less apparent omissions in Plasma’s Wayland session compared to X was the lack of a prompt for terminating an unresponsive app. Of course, you should never see one because any decent app will just crash and quit rather than get stuck. Nevertheless, over the course of three evenings I spent way too much time making the “KWin Killer Helper” work on Wayland and while at it revamped its user interface entirely.

Isn’t it pretty? Of course this is staged using SIGSTOP – KWrite is awesome and never freezes like this!

It’s always fun to add your copyright from 2023 to a file with “© 2003” at the top. Times were surely different back then and what was considered good user interface design, too. The prompt for terminating an app is actually a separate executable since under X KWin isn’t really designed to open windows by itself and even under Wayland it’s tough. The helper might also use KAuth to end a privileged process. Being an external process, however, poses some challenges under Wayland because unlike X, it actually has some notion of security, and thus no random client can just mess with another one.

In order for the helper to attach itself to the frozen application window, it needs to use the XDG Foreign protocol. It’s designed for this particular use case of parenting oneself to a window in another process and used by for example the XDG Desktop Portal where a file dialog should appear as if it were coming from the application that requested it. The way it works is relatively simple: A client can ask the compositor to “export” a surface and receives a unique token for it. This token can then be passed to another application by any means (DBus, environment variable, doesn’t matter) which uses it to “import” that surface (to put it simply) and parent a window to it. But it’s a one-way street – you cannot pull a surface from another client, it has to send it to you.

KWin of course supports this protocol but its internals weren’t designed for it to launch an application by itself and export a surface to it, it would only export surfaces on the request of an actual Wayland client. It took me like three different attempts to find a good solution everyone was happy about: just create a base class that is referenced internally and create a sublass including the Wayland resources when actually needed. I’m still having a bit of a hard time wrapping my head around the ownership model employed by the classes generated by Qt Wayland Scanner. It’s a build tool which takes a Wayland XML Protocol description and generates C++ classes out it for use in your Qt application.

The original prompt, just running under Wayland. Quite a mouthful, isn’t it?

Next, I introduced a KillPrompt class that managed the life cycle of the process so its logic could easily be shared between X11 and Wayland windows. Originally, the X11Window class even used lowlevel ::kill(0) calls scattered throughout it to check whether the helper was still alive. Not something you would do today thanks to QProcess. The helper takes a bunch of command-line arguments, such as the window title, application name, process ID, etc. Of course, instead of sending a X Window ID I use the UUID of the aforementioned exported surface and instead of using the “Window Class” I use the more contemporary “desktop file name” (application ID) – that’s also why the original version above reads “org.kde.kwrite” instead of just “kwrite”.

Additionally, instead of setting the “X User Time” for soothing Kwin’s focus stealing prevention I generate an activation token to enable the dialog to properly get input focus. That’s using XDG Activation, another Wayland protocol for passing focus between windows, for instance clicking a link in a chat app should bring the browser to the front. The same principle applies: you ask the compositor for a token and then pass it to another application. However, the compositor may invalidate that token if you’re typing elsewhere in the meantime or the window wasn’t actually active at the time it requested the token and so on.

KWin also has a killPingTimeout setting (despite what some people say about KDE software being jammed with settings, this one isn’t in a spin box in System Settings) which defaults to 5 seconds. When clicking the close button, at half that time is when the window starts getting de-saturated as “not responding” and once the full timeout has passed the prompt asks whether to terminate the application. Now you might be asking yourself: Wait a minute, I have seen my windows getting all white and washed out even without trying to close them!

I will never figure out the wrapping logic for message boxes. Again, staged using SIGSTOP.

I congratulate you on using Wayland then! On X we only ping a window when asking it to close because we cannot really be certain that it will respond to our ping or even implement the interfaces that we need for that. On Wayland however, your typical floating desktop application will implement the XDG Shell protocol which handles things such as the window title, title bar buttons, and popup menus, and specifies a “ping” operation. In addition to pinging a window when closing it, KWin can also now safely ping it whenever it gets focus, and thus realize sooner that it has become frozen.

Coming back to the timeout, I found that it was actually hard-coded to 1 second in the Wayland case. Sometimes even my IDE loading a large project or the email client handling lots of incoming messages was enough to cause a brief white flash. How hard can it be to pass an int around? Well, KWin’s Wayland interfaces are to be kept separate from its main application logic (most importantly to ease unit testing them) so I couldn’t just access KWin’s options dict and read the setting out of it. Instead, I had to inject the value from the outside and refactor KWin’s startup a bit so that the XDG Shell integration is only initialized once the options have actually been read.

Concept: Should we use this icon with a badge approach in more places?

Finally, I figured, if I’m working on this piece of code anyway, I might as well overhaul its design which hasn’t changed much in two decades. You might recall I like doing that sort of thing. First of all, I used the desktop file name to look up the actual application name. Next, I significantly reduced the amount of text – by the time you finished reading the original dialog, the app might already be responding again ;) Technical information like the process ID and host name (in case of remote X applications) was then tucked away in the expandable “Details” section. I also tried hard to remove the redundant application name from the displayed title but some apps use an ndash, some an mdash, some just a regular hyphen, and some even put it before the window title.

I felt the need to more prominently link the dialog to the application that is about to be terminated and used its icon instead of the generic orange exclamation mark. The overlay you can see in the screenshots was achieved using KIconUtils in our KGuiAddons framework which – instead of rendering a pixmap once – creates a “live” QIconEngine that can re-render when the window gets moved between screens of different DPI. Finally, the helper received a proper .desktop file which is needed to give it a proper icon and by setting StartupFeedback to false suppress the bouncing cursor it would otherwise get. Originally, I wanted to restore the “bomb” icon it used to have but given the circumstances in the world I opted for that sad face we also use in DrKonqi when an application crashes.

Next time you’re wondering why it took so long to implement this tiny feature X and Y, think of me and all the plumbing that had to be done for a stupid freaking message box that you should never even see in the first place and the love and attention to detail that me and my fellow KDE developers put in our software.

Categories: FLOSS Project Planets

CXX-Qt 0.6 Release

Fri, 2023-11-24 06:30

We just released CXX-Qt version 0.6!

CXX-Qt is a set of Rust crates for creating bidirectional Rust ⇄ C++ bindings with Qt. It can be used to integrate Rust into C++ applications using CMake or build Rust applications with Cargo. CXX-Qt provides tools for implementing QObject subclasses in Rust that can be used from C++, QML, and JavaScript.

For 0.6, we’re excited to announce that we’re on the road to stabilization! We’ve done a (hopefully final) iteration of our API and are now happier than ever to release it.

The new API is now truly in the spirit of CXX. All implementation has moved out of the #[cxx_qt::bridge] and is now simply outside the bridge, like it is for CXX as well. To get an overview of the new API, check out our the planned 1.0 API, which is available starting with this release.

Check out the new release through the usual channels:

Some of the more extensive developer-facing changes are listed below.

New CXX-style API extern “C++Qt”

Like extern "C++" in CXX, the extern "C++Qt" block now only uses a declaration-like syntax to expose functionality to C++/Qt. This is an extension to CXX’s extern "C++" blocks, which allow defining methods as #[qsignal]. These signals can then be emitted from Rust, as well as connected to.

extern “RustQt”

Like extern "Rust" in CXX, the extern "RustQt" block now only uses a declaration-like syntax to expose functionality to C++/Qt. Most existing features have moved to an attribute-syntax, which should look very familiar to existing Qt developers.

The new API includes:

  • #[qobject] is now on a type alias to distinguish between QObject and Rust struct clearer
  • #[qproperty(...)] is now just an attribute on the #[qobject]
  • #[inherit],#[qsignal] & #[qinvokable] have now moved to attributes of external function declarations. They can also now be freely mixed
  • #[cxx_override], #[cxx_final], #[cxx_virtual] are now independent attributes rather than imbedded in #[qinvokable]
Support for Qt enums as shared types

Like shared types in CXX, enums for Qt can be declared using a shared enum in the bridge. These can be defined using the #[qenum] attribute and qnamespace!(...) macro.

Implementation is outside the bridge

Like CXX the implementations on types are now defined outside of the bridge rather than inside. This allows you to choose the prefix for QObjects, as the hard-coded qobject:: prefix is now simply the name of the #[cxx_qt::bridge] module.

Another great new feature in this release: Connecting to Signals via Rust is now possible! Simply use the on_[SIGNAL-NAME]/connect_[SIGNAL-NAME] methods generated for each signal. Closures are supported when connecting to signals as well.

QML modules can now be built

The build system has been improved so that QML modules can now be output by CXX-Qt. This allows for using the declarative syntax of #[qml_element] and #[qml_singleton] on a #[qobject], whereas before Rust QObject types needed to be registered in C++ with the QML engine.

use cxx_qt_build::{CxxQtBuilder, QmlModule}; fn main() { CxxQtBuilder::new() .qml_module(QmlModule { uri: "com.kdab.cxx_qt.demo", rust_files: &["src/"], qml_files: &["qml/main.qml"], ..Default::default() }) .build(); }

This should also allow for tooling to inspect QML modules that were generated from Rust in the future.

New traits for shaping code generation and interacting with features

Most features of the CXX-Qt code generation are now expressed through Rust traits and can be enabled/disabled or otherwise configured using a syntax similar to CXX shim trait impls.

New features

  • Custom constructors through cxx_qt::Constructor – this drops the requirement for Default on the Rust struct.
  • Easy default-constructor implementation through cxx_qt::Initialize.
  • cxx_qt::CxxQtType trait for reflection and less “magic” methods.

Existing features that can now be enabled/disabled:

  • Threading through the cxx_qt::Threading trait.
  • Locking through the cxx_qt::Locking trait.
Thanks to all of our contributors that helped us with this release
  • Be Wilson
  • Laurent Montel
  • Olivier Le Doeuff
  • Jimmy van Hest
  • Michael (aka @mmMike)
  • Cyril Jacquet
  • Magnus Groß
  • jimmyvanhest

About KDAB

If you like this article and want to read similar material, consider subscribing via our RSS feed.

Subscribe to KDAB TV for similar informative short video content.

KDAB provides market leading software consulting and development services and training in Qt, C++ and 3D/OpenGL. Contact us.

The post CXX-Qt 0.6 Release appeared first on KDAB.

Categories: FLOSS Project Planets