Skip to content

Sunday, 10 October 2021

Good news! We have spent time this week preparing Kalendar for KDE Review — the two-week process that new KDE applications are subjected to before initial release. Don’t worry, we’re going to go over what that means in a second. We will also go through some of the refactoring, tweaking, and boatload bug-fixing that has …

Saturday, 9 October 2021

Stay in the loop: If you want to help me make these videos: Patreon: Youtube: Paypal: My website is and if you want to contact me, my telegram handle is [at] veggero.

After almost 19 month I finally got to attend a non-virtual event for KDE again, the ITS City Hack Hamburg 2021 last weekend. This has been a good opportunity for exchange and connecting with the Open Transport community, people and organizations we are collaborating with to make applications like KDE Itinerary or KTrip possible.

OpenTripPlanner and KPublicTransport

Meeting some of the people working on OpenTripPlanner (OTP) and operating instances of that has been particularly useful for KPublicTransport, our client library for realtime public transport data queries.

One issue we had been struggling with is automatically selecting the right instance for a given location. This has been complicated by some installations reporting bizarre bounding polygons. This is typically caused by a few issues in the data consumed by OTP. I got shown diagnostic tools and new API to identify those problems, which allows better bug reports to upstream, fixing OSM input data ourselves, and applying outlier filters we already have in the library anyway.

Screenshot of the OpenTripPlanner diagnostic interface showing an unintended spike to the south-west.
OpenTripPlanner diagnostic interface showing an unintended spike to the south-west.

A big topic at the event was combining public transport with means of individual transport for the first and last parts of a journey, say your own bike that you either need to park at the first station, or take with you on the train. This can evolve into rather complex scenarios the routing engines such as OTP have to deal with (where are available parking spots? is taking a bike on a train allowed and practically possible at that time of day? etc).

Our client API hasn’t exposed any of that so far, we just implicitly assumed the first and last part of a journey are traveled by walking. This is changing now, the first bits for supporting much fine-grained control over individual transport modes have already been integrated. Applications will also need support for this though, e.g. for remembering where you parked your own vehicle on the outbound journey, as the routing engine otherwise doesn’t know where you need to go to pick it up again for the return trip.

Events and the pandemic

Another interesting aspect was of course to see how non-virtual events can look like now, in particular also looking at how we can get KDE meetings/events back.

Both being fully vaccinated and daily rapid antigen tests were mandatory (which is way above the legally required minimum here), and a very spacious and well ventilated venue added some extra safety on top.

Masks reach their limits though once you eat together, or have a chat over coffee, which is inevitable over a course of 8+ hours per day.

I also found clear communication about the planned safety measure before signing up something that helped me decide to attend.

Technically this was a hybrid event, there was live streaming and remote participation via chat/video calls, but it’s hard to judge how well that worked for remote attendees from the on-site point-of-view.

A nice side-effect of the daily testing requirement was that I finally got my hands on a production EU DGC test certificate, which both KDE Itinerary and Plasma Mobile’s vaccination certificate manager were able to show without problems, in more detail than some of the official apps even.

Screenshot of Vakzination showing a European digital COVID-19 test certficate.
Plasma Mobile's vaccination certificate app showing details of an EU DGC test certificate.

More events are coming, next week we’ll celebrate KDE’s 25th birthday, which will be an opportunity to also finally meet a few KDE people again who I haven’t seen in a long time. Very much looking forward to that :)

At long last, KDE software is now covered by a GitLab-based continuous integration system, replacing the old Jenkins-based system used until now. The new one is much better and runs automatically on every merge request, making it much less likely that faulty code that fails to compile or regresses unit tests will be committed. The system is still its infancy and has not yet reached its full potential, but already it is helping us to save time and improve the quality of KDE software. Big thanks to KDE’s sysadmins for rolling out this system!

Another thing: Plasma 5.23 has been named the “Plasma 25th anniversary edition“, to commemorate 25 years of KDE! At this point, KDE is older than some of its users and contributors. Such longevity in a project lead largely by volunteers is quite impressive, if you ask me!

But wait, there’s more! A lot more. We’ve got new features, big improvements to the Breeze theme, Wayland bugfixes, keyboard navigation improvements… it’s been a big week!

New Features

Elisa now lets you optionally use the “favorite/not favorite” style of ratings, where you mark songs as favorites rather than giving them a specific number of stars (me: Nate Graham, Elisa 21.12):

You can now scroll with a mouse wheel or touchpad over the Plasma calendar view to switch the month that is displayed (Tanbir Jishan, Frameworks 5.88)

Bugfixes & Performance Improvements

Okular no longer crashes when trying to display a Markdown file which includes an image that doesn’t have its alt text set (Albert Astals Cid, Okular 21.08.2)

Okular no longer crashes when opening a PDF with a malformed date value (Albert Astals Cid, Okular 21.08.3)

When using Dolphin’s filter feature in Details view, folders that lack any files that match the filter are no longer displayed (Eduardo Cruz, Dolphin 21.12)

In the Plasma wayland session, KWin no longer crashes when the computer wakes up but all screens have been marked as disabled; instead it now enabled the first connected but disabled screen so there’s at least one screen that can display things! (Xaver Hugl, Plasma 5.23)

In the Plasma Wayland session, XWayland apps no longer sometimes disappear when switching virtual desktops (Vlad Zahorodnii, Plasma 5.23)

In the Plasma Wayland session, text copied from within Plasma itself (e.g. from KRunner’s search field) now appears in the global clipboard as expected. This fixes the last of the major Wayland clipboard issues we’re aware of! (David Redondo, Plasma 5.23)

In the Plasma Wayland session, closing an app with a maximized window and then re-opening it now causes its window to be opened on the screen with the cursor on it, rather than always appearing on the left-most screen (Xaver Hugl, Plasma 5.23)

Right-clicking on desktop icons no longer shows the menu on the wrong screen of a multi-screen setup (David Redondo, Plasma 5.23)

Discover no longer sometimes shows the wrong installed version for Flatpak apps and runtimes with updates available (Aleix Pol Gonzalez, Plasma 5.23)

Pressing enter after entering a number in the spinbox to choose the thickness of a Plasma panel now makes the change take effect as you would expect (Fushan Wen, Plasma 5.23)

The Alt+O and Ctrl+Enter/Return keyboard shortcuts now work for closing the clipboard item editing window (Bharadwaj Raju, Plasma 5.23)

Right-clicking on the colors in the Color Picker widget’s expanded view now works (Bharadwaj Raju, Plasma 5.23)

In the Plasma Wayland session, the default Meta+Tab shortcut to switch between activities now always works (Andrey Butirsky, Plasma 5.23)

The screen edge highlighting effect now appears more reliably in certain situations (Andrey Butirsky, Plasma 5.23)

Task Manager tooltips that are displaying media controls no longer sometimes overlay a horizontal scrollbar on the bottom (Fushan Wen, Plasma 5.23 with Frameworks 5.88)

Dolphin and Plasma and other apps no longer crash when undoing a file copy (Ahmad Samir, Frameworks 5.87)

Copying files from FAT32-formatted volumes no longer sometimes just fails and hangs forever (Oliver Freyermuth, Frameworks 5.88)

The “B” in the “Background color” label on Gwenview’s status bar is no longer partially cut off (Julius Zint, Frameworks 5.88)

All Plasma applets should be slightly snappier and use less memory thanks to some backend code re-working that was done recently (Noah Davis, Frameworks 5.88)

Colored icons on colored backgrounds in KDE apps should now intelligently re-color themselves to never have the same color as the background (Aleix Pol Gonzalez, Frameworks 5.88)

Plasma now saves any changes you made while in Edit Mode as soon as you exit from that mode, so your changes will be preserved if Plasma later crashes (Jan Blackquill, Frameworks 5.88)

The “Trash is full” error message is now phrased better and no longer overflows in Dolphin (me: Nate Graham, Frameworks 5.88)

User Interface Improvements

Ark’s preview window no longer displays a redundant Close button at the bottom of the window (Eugene Popov, Ark 21.12)

Left-clicking on a desktop icon while multiple icons are selected now de-selects the un-clicked-on icons after opening the one that was clicked on (Bharadwaj Raju, Plasma 5.23)

In the Plasma Wayland session with on a multi-screen setup, the cursor now appears on login in the center of the screen that is itself closest to being in the center of the arrangement (Vlad Zahorodnii, Plasma 5.23)

The focus effect for buttons, text fields, checkboxes, radio buttons, comboboxes, and spinboxes has been enlarged into a “focus ring” that should be much easier to visually distinguish at a glance (Noah Davis, Plasma 5.24):

System Settings’ Formats page has been rewritten in QtQuick, which fixes many UI-related issues with the old one and allows us to begin work on a large-scale overhaul of how locales are presented and configured–which will likely include merging the Languages page into this one to finally make the process of changing the system’s language easy, obvious, and reliable (Han Young, Plasma 5.24):

System Settings’ Night Color page now supports the “Highlight Changed Settings” feature (Benjamin Port, Plasma 5.24)

When you add the Weather applet to your panel or activate the built-in one in the System Tray, its popup now prompts you to configure it, rather than leaving it you you to figure out that this is needed (Bharadwaj Raju, Plasma 5.24):

Discover’s Update page now has a lighter weight style by only showing those “pills” on the right side for items that are in progress; otherwise, the size text just appears floating on the right-side of the item (me: Nate Graham, Plasma 5.24):

Basic UI elements in Plasma now follow the same style rolled out recently for KDE apps, which also improves the visibility of the focus effect particularly for sliders and checkboxes (Noah Davis, Frameworks 5.87):

Isn’t that pretty?

By default, KTextEditor-based apps like KWrite, Kate, and KDevelop now let you enclose text in parentheses or brackets by selecting the text and typing the opening parenthesis/bracket/etc. character (Jan Blackquill, Frameworks 5.88)

System Tray applets with expandable list items are now more keyboard-friendly: you can trigger an item’s default button with the Return/Enter key, expand it with the spacebar, collapse it with the Escape key, and show its context menu (if present) using the Menu Key on your keyboard, if it has one (Bharadwaj Raju, Frameworks 5.88)

Grid items in System Settings grid view pages now visually indicate when they have keyboard focus (Arjen Hiemstra, Frameworks 5.88)

…And everything else

Keep in mind that this blog only covers the tip of the iceberg! Tons of KDE apps whose development I don’t have time to follow aren’t represented here, and I also don’t mention backend refactoring, improved test coverage, and other changes that are generally not user-facing. If you’re hungry for more, check out, where you can find blog posts by other KDE contributors detailing the work they’re doing.

How You Can Help

Have a look at to discover 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!

Finally, consider making a tax-deductible donation to the KDE e.V. foundation.

Saturday, 9 October 2021

KDE today announces the release of KDE Frameworks 5.87.0.

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

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

New in this version


  • Do not mark jobs that have been aborted as errored (bug 43820)
  • Ensure categories.xml is only fetched once in parallel
  • Do not start basejobs twice

Breeze Icons

  • Fix KTimeTracker icon sizes (bug 442993)
  • Tweaks to AnyDesk icons
  • Fix index.theme issues from !124
  • Add 22px variants of the preferences icons
  • Add AnyDesk icons
  • Add more Godot MIME icons
  • Add symlink for skanlite’s new icon name
  • Add process-working-symbolic, overhaul 22px animation

Extra CMake Modules

  • Add -Werror=init-self to the default CMAKE_CXX_FLAGS
  • Handle git remotes that aren’t called origin in _repository_name()
  • python: Bump maximum version for Python 3 module generator check
  • Avoid raising an error for submodule git trees
  • Make sphinx happier about syntax


  • Set the correct last modified time when creating an exception for a recurring event
  • icalformat_p.cpp - support ATTACH parameter FILENAME (bug 436161)
  • Add Qt5Gui as dependency in pkgconfig file
  • Read floating date time as LocalTime
  • Implement PERIOD support in RDATE (bug 271308)


  • Fix Warning: Property type “Int” is not a known QVariant type
  • Add support for static builds
  • Add compat code for KService based plugin loading
  • Introduce KCModuleProxy::isChanged method
  • Un-overload KCModuleProxy:changed signal


  • KCodecs::decodeRFC2047String(): return “UTF-8” when multiple charsets used


  • New shouldAutoSuggest property on KCompletion (bug 420966)


  • Android: Fix writing to config if path is a content:// Uri
  • kconfigini: Only open the file once to write
  • Allow KConfigXT to use KSharedConfig::openStateConfig


  • Do not emit deprecation warnings for overload which gets chosen by compiler


  • KStringHandler: add a new perlSplit() overload that takes a QStringView
  • Deprecate KPluginMetaData::extraInformation


  • Introduce UpdateLaunchEnvJob
  • Correct to make sure we use the matching ECM version


  • Make sure the object gets destroyed before the view
  • Add support for static builds
  • SimpleKCM: remove custom header and footer handling


  • Remove obsolete LGPL-2.0-only license text
  • Relicense remaining LGPL-2.0-only file

KDE GUI Addons

  • Use imported target for X11 libs
  • Relicense remaining files away from LGPL-2.0-only
  • Add missing static dependency to


  • Update Canadian holidays


  • avif: performance and quality improvements


  • Fix KDE shutdown bug


  • New job: KEMailClientLauncherJob
  • KACLEditWidget: improve the initial widget size
  • [KUrlNavigator] Add the ability to show hidden folders in the subdirectories popup
  • Add support for static builds
  • KUrlCompletion blocks autosuggestion from happening if the input is an exact directory path (bug 420966)
  • KDirOperator: provide an option to enable showing open-with item actions (bug 440748)
  • Fix permissions when copying files (bug 103331)
  • KFileItem: refresh() shouldn’t discard ACL attributes (bug 299155)
  • KPropertiesDialog: show text label with item name for readonly items too (bug 442237)
  • Disable ACL functionality in kpropertiesdialog on FreeBSD
  • KDirOperator: use show() when opening KPropertiesDialog
  • Use errors=remount-ro when mounting ext2/3/4
  • OpenUrlJob: skip HTTP schemeHandler when setEnableExternalBrowser(false)
  • KMountPoint: restore findByPath() behaviour, i.e. resolve symlinks
  • Sort service menus before inserting them in context menu
  • Deprecate config widget related methods in ThumbCreator


  • PageRow: Do not async load the global header (bug 442660)
  • NavigationTabButton: Fix hover effect staying even after touch release
  • Fix BreadcrumbControl on mobile when using layers
  • cmake: Remove intermediate target for kirigamiplugin post-build steps
  • Add NavigationToolBar component
  • Split off an AboutItem from AboutPage
  • Improve warning about QML Units implementations
  • [SwipeListItem] Fix view property
  • Fix breadcrumb header title on secondary layers in mobile mode
  • [FormLayout] Fix in-group spacing in narrow mode
  • Fix page header being shown even when it’s specified not to
  • Set activeFocusOnTab to false for ListSectionHeader
  • Support enter/return and up/down keys in Global drawer for navigation
  • ColumnView: Simplify Units property access
  • Remove unwanted “/” prefix from iconId


  • Relicense files from LGPL-2.0-only to LGPL-2.0-or-later


  • staticxml: Do not report installed packages for page != 0
  • Engine: Do not require waiting for the providers to tell our installed entries
  • Fix crash in DownloadWidget
  • Add licenses CC0 license info to non-copyrightable files
  • Add BSD-2-Clause license info to cmake files
  • Add CC0-1.0 license identifier to non-copyrightable files
  • Include a user agent on KNS requests
  • attica: use compile-time connects
  • Add support for static builds - fixes
  • Add missing find_package(Qt5Gui)
  • Add support for static builds
  • FileCopyJob: implement error handling
  • Page: Remind/notify users that everything here is 3rd-party content


  • Add support for static builds
  • Correct the version of Phonon that we use


  • Remove stray GL include


  • Remove unneeded dependencies from .kde-ci.yml
  • Mark as non-copyrightable
  • Add license information for runner C++ template
  • Mark non-copyrightable files as CC0-1.0
  • Add license information to cmake files


  • Deprecate KAutostart class
  • Deprecate KService::parentApp
  • Deprecate KService::pluginKeyword property


  • The user is not selecting as soon as we clearSelection
  • Fix missing i18n (bug 442071)


  • Handle RTL text selection the same way as Qt (bug 397922)


  • KWayland depends on libraries/plasma-wayland-protocols


  • Make lupdate happier
  • KCharSelect: Added option to show all blocks found in the data file (in the section menu)
  • KFontChooser: the widget shouldn’t become wider when toggling show fixed only


  • Add missing Q_INIT_RESOURCE(kxmlgui)
  • Replace “Libraries” by “Components” to show KAboutComponents info


  • Introduce countryCode Modem3gpp API

Plasma Framework

  • Update plasmoidheading.svg : fix the typo line 96 “correntColor”
  • Containment: Rename panel edit action to “Enter Edit Mode”
  • Revert “Change busywidget to a gear” (bug 442525)
  • ExpandableListitem: Correct expanded view height calculation (bug 442537)
  • Port internal plugin cache away from supporting multiple namespaces
  • Remove defunct python and ruby script engines


  • Select the most efficient QR encoding mode rather than always using 8bit


  • plugins/barcode: Call it a “QR code” in the UI
  • Add Barcode plugin


  • Properly get the path from a QUrl
  • MenuSeparator: fix height being wrong, rewrite whole file to be more correct
  • Button, ToolButton: improve implicit sizing, correctly set default button state
  • Use more process-working-symbolic icon for busy spinner


  • Add support for static builds
  • Support extracting cpu model on ppc64

Syntax Highlighting

  • Add basic QML API docs
  • yara - add new 4.x keywords
  • Change license to MIT
  • Removed items that are generating errors for now
  • initial work on terraform syntax highlight
  • Port AbstractHighlighter::highlightLine to QStringView

Security information

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

Friday, 8 October 2021

Let’s go for my web review for the week 2021-40. I got to admit it’s heavily loaded in Facebook related content this time… It is kind of unsurprising though with the “terrific” week they had.

Understanding How Facebook Disappeared from the Internet

Tags: tech, networking, facebook, internet

Interesting explanation of a major BGP mistake.

Facebook whistleblower Frances Haugen details company’s misleading efforts on 60 Minutes - CBS News

Tags: tech, facebook, social-media, surveillance, misinformation

Toxic architecture illustrated… It’s very brave for such a whistleblower to come forward with that much insider information.

Why you shouldn’t buy Facebook Ray-Ban smart glasses - European Digital Rights (EDRi)

Tags: tech, facebook, surveillance

I just hope they will have the same fate than the Google Glass (as in: not become a mass consumer product with a regular spectacles design)… Otherwise if they sell well, it’ll be tough to not be impacted by them. Even if you don’t own any.

Facebook banned me for life because I created the tool Unfollow Everything.

Tags: tech, facebook, social-media

It’s really a stream of bad news for that social network this week… I can’t help but wonder if a turning point is coming for them.

New study reveals iPhones aren’t as private as you think | Tom’s Guide

Tags: tech, privacy, surveillance, apple, google

The “Apple is better at privacy” argument was looking really like a fallacy to me. And indeed, it’s getting clearer that it was greatly exaggerated…

I’m sorry · Discussion #39 · dotnet-foundation/Home · GitHub

Tags: tech, dotnet, microsoft, governance, free-software

It looks like the .NET Foundation in in some turmoil at the moment. From the look of that discussion it seems that there are a few major governance issue. Also it looks like not everyone looked into the small prints when they joined.

Gentle introduction to GPUs inner workings | vkSegfault

Tags: tech, gpu, hardware, 3d

Somewhat in-depth introduction to how GPUs work internally.

My Logging Best Practices – Thomas Uhrig

Tags: tech, logging

Nice set of simple rules to improve the quality of your logs.

Understanding AWK

Tags: tech, command-line, awk

This is a good primer of an essential tool in our box.

How to Delegate Meeting Attendance - Jacob Kaplan-Moss

Tags: management, delegation

Good wrap-up with a practical example.

Bye for now!

Kate has had an LSP plugin for sometime now, which uses Clangd. It's a great plugin that brings many code navigation/validation features, akin to those available in Qt Creator and KDevelop.

So naturally since I got it to work, I've been using it. At some point I found out about the Diagnostics tab in the LSP Client tool view in Kate, which displays useful information; however I also saw that it was plagued by a spam of the following warnings:

[clang] Must specify at least one argument for '...' parameter of variadic macro
[qloggingcategory.h:121] Macro 'qCDebug' defined here

which is really annoying to say the least, as it adds needless noise.

I just ignored it and moved on; then, by accident, while searching for something in the Extra CMake Module KDE repo I found this:

    # -Wgnu-zero-variadic-macro-arguments (part of -pedantic) is triggered by every qCDebug() call and therefore results
    # in a lot of noise. This warning is only notifying us that clang is emulating the GCC behaviour
    # instead of the exact standard wording so we can safely ignore it
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-zero-variadic-macro-arguments")

this explains why those warnings are shown. Adding -Wno-gnu-zero-variadic-macro-arguments to my build flags, I use GCC by default, indeed made those warnings stop. But then GCC started complaining about an unrecognised build flag, which is correct, given that that flag is for Clang.

I started searching for a way to pass that compilation flag to Clangd without involving GCC, and I found this, which led me to this.

So, the solution is to create a .clangd file in your repo's top level directory (I created it in the parent dir to my KDE Frameworks git checkouts, this way it affects all of them as Clangd searches for that file in all the parent directories of the current source file), and put this in it:

    Add: [-Wno-gnu-zero-variadic-macro-arguments]

The End.

Feel free to tell me about any corrections in my posts, you can send me an email, or better still, use a GitHub issue.

Thursday, 7 October 2021

 It is available at the usual place

Dependency freeze is in four weeks (November 4) and Feature Freeze a week after that, make sure you start finishing your stuff!

Some of the services I host are hosted behind dynamic DNS. There are lots of services to automatically update the dns records if the IP changes, but most of them are not free or require regular confirmation of the domain.

I wanted to have a solution that is as standard as possible, so ideally without any CNAME aliases pointing to a subdomain of a DDNS provider.

Luckily, Hetzner has a free DNS server hosting with a nice API. So what I ended up doing was regularly sending requests to the Hetzner DNS API to update the IP-address To reduce the amount of requests going to hetzner, the request is only sent when the IP really changed. The IP can be fetched from an external service like Ipify or a very simple selfhosted service if you have another server that is reachable on the internet.

The result is a simple daemon that automates all of that. My implementation is written in Rust, but it’s very small and would be easy to write using other languages too. If you want to use it, you can find it on Codeberg. The config format for it is a simple toml file that goes into /etc/hetzner-ddns/config.toml The skeleton config file looks like this:

update_interval = 30

token = ""

id = ""
name = ""
zone_id = ""

Of course the empty strings need to be replaced with real data which you can get from the Hetzner API or the web interface. The API documentation contains examples on how to query the API using curl.

If you use systemd, you can use the following unit to run the service on a separate ddns user, which you need to create before.

Description=Hetzner DNS update

ExecReload=/bin/kill -USR1 $MAINPID


Btw, because I know some people were not too happy with this blog being hosted on GitHub, it is now also hosted on my own server (behind DDNS). If the uptime ends up being good enough, I’ll keep it this way.

Many thanks to Clau for working on this app and providing videos! Stay in the loop: If you want to help me make these videos: Patreon: Youtube: Paypal: My website is and if you want to contact me, my telegram handle is [at] veggero.