Skip to content

Welcome to Planet KDE

This is a feed aggregator that collects what the contributors to the KDE community are writing on their respective blogs, in different languages

Friday, 10 May 2024

In a previous post I talked about using the QML Language Server for KDE development. Since writing that post a few things happened, so it’s time for an update.

I mentioned that when using Kate qmlls should work out of the box when opening a QML file. That’s mostly true, there is one problem though. Depending on your distribution the binary for qmlls has a different name. Sometimes it’s qmlls, sometimes qmlls6 or qmlls-qt6. You may need to adjust the LSP Server settings in Kate to match the name on your system.

In order for qmlls to find types that are defined in your application’s C++ code those must not only be declaratively registered, qmlls also needs to be told where to find the type information. Fortunately Qt 6.7 comes with a handy way to do that. By passing -DQT_QML_GENERATE_QMLLS_INI=ON to CMake you get an appropriate config file generated. This will be placed into the project’s source directory but is specific to your setup, so add that to your gitignore file (PS: You can set up a global gitignore file for your system, so you don’t need to add this to all your projects). Unfortunately the initial implementation produced wrong configurations for some modules, but this is fixed in Qt 6.7.2.

A problem I mentioned is that qmlls doesn’t find modules that are not installed into the same path as Qt. With Qt 6.8 there will be two new options. The -I parameter allows to add custom import paths to qmlls’ search paths. The -E parameter makes qmlls consider the value of the QML_IMPORT_PATH environment variable for its search paths.

In order for qmlls to work properly modules need to be created using the CMake API and use declarative type registration. Since writing the last post some KDE modules have been converted to those, but there’s still more to do.

Thanks to the QML team for those swift improvements!

Let’s go for my web review for the week 2024-19.


Heat Death of the Internet - takahē

Tags: tech, internet, web, satire, criticism

Obviously a satire, some of it feels eerily real though.

https://www.takahe.org.nz/heat-death-of-the-internet/


“AI now beats humans at basic tasks”: Really?

Tags: tech, ai, machine-learning, gpt, research, benchmarking, criticism

Nice article. It’s a good reminder that the benchmarks used to evaluate generative AI systems have many caveats.

https://aiguide.substack.com/p/ai-now-beats-humans-at-basic-tasks


Did GitHub Copilot really increase my productivity?

Tags: tech, ai, copilot, productivity

Interesting data point. This is a very specialized experience but the fact that those systems are kind of random and slow clearly play a good part in limiting the productivity you could get from them.

https://trace.yshui.dev/2024-05-copilot.html


AI Copilots Are Changing How Coding Is Taught - IEEE Spectrum

Tags: tech, ai, copilot, ethics, programming, teaching, learning

Well, maybe our profession will make a leap forward. If instead of drinking the generative AI cool aid, if we really get a whole cohort of programmers better at critical skills (ethical issues, being skeptical of their tools, testing, software design and debugging) it’ll clearly be some progress. Let’s hope we don’t fall in the obvious pitfalls.

https://spectrum.ieee.org/ai-coding


Machine Unlearning in 2024 - Ken Ziyu Liu - Stanford Computer Science

Tags: tech, ai, machine-learning, gpt, copyright, gdpr

Interesting questions and state of the art around model “unlearning”. This became important due to the opacity of data sets used to train some models. It’ll also be important in any case for managing models over time.

https://ai.stanford.edu/~kzliu/blog/unlearning


Systemd heads for a big round-number release [LWN.net]

Tags: tech, linux, systemd

Indeed the next systemd release feels feature packed. Definitely to keep an eye on.

https://lwn.net/SubscriberLink/971866/f244aee59d4d6a66/


UEFI, BIOS, and other confusing x86 PC (firmware) terms

Tags: tech, bios, uefi, hardware

Confused? Well, not surprising we mostly use those terms with very lax definitions.

https://utcc.utoronto.ca/~cks/space/blog/tech/UEFIAndBIOSAndOtherPCTerms


It’s always TCP_NODELAY. Every damn time. - Marc’s Blog

Tags: tech, tcp, networking

Getting network protocols right is definitely difficult.

https://brooker.co.za/blog/2024/05/09/nagle.html


Why Full Text Search is Hard

Tags: tech, language, search

If you wonder why information retrieval from natural language texts is a tough domain, here is a short article listing the important things to keep in mind.

https://transactional.blog/blog/2023-why-full-text-search-is-hard


All error messages are necessarily bad to some degree

Tags: tech, failure, ux

Not a reason to make no effort into having as proper error messages as possible. Still there’s some truth there that trying to have a really useful error message is a fool’s errand.

https://www.haskellforall.com/2024/05/all-error-messages-are-necessarily-bad.html?m=1


pyspread

Tags: tech, python, qt, spreadsheets, tools

Looks like a fun spreadsheet tool where you can use Python in any cell.

https://pyspread.gitlab.io/


The UX of UUIDs | Unkey

Tags: tech, uuid, encodings

Interesting set of tricks around UUIDs to make them easier to manipulate.

https://www.unkey.com/blog/uuid-ux


Build your own HTMX

Tags: tech, web, frontend, htmx

Excellent exercise in understanding how HTMX works under the hood.

https://joshi.monster/posts/build-your-own-htmx/


No, I don’t want to fill out your contact form - Adam Jones’s Blog

Tags: tech, web, email

Good exploration of the many ways contact forms fail us regularly. Also shows a few cases where you might still want to us them… in most cases you shouldn’t.

https://adamjones.me/blog/dont-use-contact-forms/


What You Need to Know about Modern CSS (Spring 2024 Edition) – Frontend Masters Boost

Tags: tech, web, frontend, css

Looks like a good reference about everything which can be done with the latest CSS evolutions.

https://frontendmasters.com/blog/what-you-need-to-know-about-modern-css-spring-2024-edition/


Google Testing Blog: Test Failures Should Be Actionable

Tags: tech, tests

Good advice indeed. Having asserts using appropriate matchers can go a long way understanding what went wrong.

https://testing.googleblog.com/2024/05/test-failures-should-be-actionable.html?m=1


Simplicity is An Advantage but Sadly Complexity Sells Better

Tags: tech, complexity

Definitely this. We tend to like complexity too much as a profession and field. It’s also a good reminder that the complexity of the problem and the complexity of the solution shouldn’t be conflated.

https://eugeneyan.com/writing/simplicity/


Programming mantras are proverbs - lukeplant.me.uk

Tags: tech, programming, culture, craftsmanship

Interesting take about the mantras often used in our profession. They shouldn’t be treated as laws, but as proverbs carrying a piece of contextual wisdom. It’s thus unsurprising that they tend to contradict each other. This contradiction should make us pause and think.

https://lukeplant.me.uk/blog/posts/programming-mantras-are-proverbs/


Refactor: Inline-Adjust-Extract - XP123

Tags: tech, programming, refactoring

Since there’s a clear tendency in the developers I meet to “extract at all costs”, this is a good reminder that sometimes you need to inline the code first. This very often brings better clarity in the context of use. In turns this leads to a better final extraction.

https://xp123.com/refactor-inline-adjust-extract/



Bye for now!

Friday, 10 May 2024

KDE today announces the release of KDE Frameworks 6.2.0.

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

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

New in this version

Attica
  • Modernize: don't else after return. Commit.
  • Provider: document default ctor. Commit.
  • Providermanager: remove unused function with typo. Commit.
  • Postfiledata: simplify private. Commit.
  • Modernize: use unique_ptr for privates. Commit.
  • Basejob: don't leave dangly pointers. Commit.
  • Platformdependent: v3. Commit.
Baloo
  • Don't kill the lock file, can lead to random corruption. Commit. Fixes bug #389848
Bluez Qt
  • Fixed min_bitpool and max_bitpool from capabilities where ignored. Commit.
  • Port QML module to declarative type registration. Commit.
Breeze Icons
  • Add support for media-playlist-no-shuffle icon name. Commit.
  • Add audio/ogg and audio/x-vorbis+ogg icons. Commit.
  • Add audio/vnd.wave MIME type. Commit.
  • Remove generic non-symbolic audio and video icons. Commit.
  • Add 16 and 22px symbolic versions of some Places icons that were missing. Commit. Fixes bug #486316
  • Add zoom-in-map and zoom-out-map icons along with -symbolic versions. Commit.
  • Longer description for the ICONS_LIBRARY option. Commit.
  • Add symbolic versions for more USB device style icons. Commit.
  • Fix some scale errors. Commit. Fixes bug #485479
  • Fixed input-combo-on.svg colour issue. Commit.
  • Add -symbolic symlinks for notification-* icons. Commit.
  • Use new dev.suyu_emu.suyu id, add symlink for old id. Commit.
  • Add accessories-screenshot-tool icon/symlink. Commit.
  • [webfont] enable ligatures. Commit.
  • Gitignore: add VS Code dir. Commit.
  • Add input-keyboard-color 22px, 32 px. Commit.
Extra CMake Modules
  • API dox: KDEInstallDirs6: refer to qtpaths now as source of Qt paths. Commit.
  • API dox: KDEInstallDirs6: drop outdated note about being in ALPHA state. Commit.
  • Test: Increase minimum cmake version so that it works with Qt 6.7. Commit.
  • ECMQmlModule6: group qml and resource file calls. Commit.
  • Modules/ECMAddTests.cmake - handle unset or empty QT_PLUGIN_PATH. Commit.
KArchive
  • Gitignore: add VS Code dir. Commit.
KCMUtils
  • KQuickConfigModule: Don't crash on null object. Commit.
  • SimpleKCM: Remove remnants of footerParent. Commit.
  • Use ellipsis character instead of three dots. Commit.
  • GridDelegate: Port to ComponentBehavior: Bound. Commit.
  • GridDelegate: Consolidate code paths for opening a menu. Commit.
  • GridDelegate: Don't use qualified property access as appropriate. Commit.
  • GridDelegate: Use concrete type for the popup menu. Commit.
  • GridDelegate: Use somewhat more consistent ToolTip bindings, remove timeout. Commit.
  • Components: Drop QML import versions, unify import aliases. Commit.
  • Components: Guard nullable property access. Commit.
  • Components: Explicitly specify signal handler arguments. Commit.
  • KCModuleQml: Provide a fallback in case a pushed page is not one of magical KCMUtils types. Commit.
  • Add API to make header and footer paddings optional. Commit.
  • Round all the things consistently. Commit.
  • Pluginselector: cache delegates. Commit.
KCodecs
  • Gitignore: add VS Code dir. Commit.
KColorScheme
  • Gitignore: add VS Code dir. Commit.
KConfig
  • Avoid allocations while parsing int/float lists. Commit.
  • Adapt kdesktopfiletest to QTemporaryFile behavior change. Commit.
  • Guard header with an ifndef and include moc generates sources in the cpp file. Commit.
  • Autotests: Don't use a timeout in testLocalDeletion. Commit.
  • Adjust kconfig_compiler autotests to include a version without kcfgc. Commit.
  • Add a CMake function to add a kcfg file without kcfgc. Commit.
  • Gitignore: add VS Code dir. Commit.
KConfigWidgets
  • KRecentFilesAction: Load mimeType and action lazily. Commit.
  • Remove forward declaration of KToggleAction. Commit.
  • Test that an invalid language gives the empty string. Commit.
  • Gitignore: add VS Code dir. Commit.
KContacts
  • Restore country detection tests on FreeBSD. Commit.
  • Disable FreeBSD tests that recently started to fail in the CI. Commit.
KCoreAddons
  • Gitignore: add VS Code dir. Commit.
KCrash
  • Gitignore: add VS Code dir. Commit.
KFileMetaData
  • API dox: use "MIME type" and "URL" spellings consistently. Commit.
  • API dox: add some minimal info to undocumented classes. Commit.
  • API dox: add empty line between @brief (ends by first period) and rest. Commit.
  • API dox: add some dummy info to namespaces for doxygen to cover them also. Commit.
  • API dox: escape space after e.g. to work-around doxygen sentence end magic. Commit.
  • UserMetadata: return errors when xattr ops fails. Commit.
  • Value is already default timeout value in QT6 framework. Commit.
  • [XmlExtractor] Add support for compressed SVGs. Commit.
  • [XmlExtractorTest] Move Test class declaration to source file. Commit.
  • [Office2007Extractor] Reuse DublinCoreExtractor, fix namespace handling. Commit.
  • [DublinCoreExtractor] Add CreationDate (dc::created) support. Commit.
  • [DublinCoreExtractor] Skip properties from empty elements, cleanup. Commit.
  • Move date parser helper out of ExtractorPlugin, clean it up. Commit.
  • [TaglibExtractor] Include vnd.audible.aaxc audio books in supported types. Commit.
  • [Test] Include vnd.audible.aax audio books in coverage tests. Commit.
  • [TaglibWriterTest] Move test class declaration to source file, cleanup. Commit.
  • [TaglibExtractor|Writer] Fix mimetypes. Commit.
KGlobalAccel
KGuiAddons
  • Recorder/kkeysequencerecorder: conform to KKeyServer changes. Commit.
  • Gitignore: add VS Code dir. Commit.
KHolidays
KI18n
  • Gitignore: add VS Code dir. Commit.
KIconThemes
  • Allow to configure if we register our icon plugin for SVGs. Commit.
  • Port QML module to declarative type registration. Commit.
  • Fix typo in BreezeIcons::initIcons loading. Commit.
  • Gitignore: add VS Code dir. Commit.
KImageformats
  • Fix build with Qt 6.7 on 32 bits. Commit.
KIO
  • [kfilefilter] Consider mime globs valid. Commit.
  • Kfileitemtest: add basic tests for dir. Commit.
  • File_unix: don't call QMimeDatabase::mimeTypeForFile for directories. Commit.
  • Widgetsaskuseractionhandler prevent crash when job had no parent widget. Commit.
  • PreviewJob: Add file extension to thumbnail temp files. Commit. Fixes bug #463989
  • KFileItem: handle the case parent url path is empty. Commit.
  • KFileItemActions: Add logic to order actions between separators. Commit. Fixes bug #466115
  • KFileItem: fix getStatusBarInfo() displaying symlink target as "http:". Commit. Fixes bug #475422
  • ScopedProcessRunner: support waitForStarted. Commit.
  • ScopedProcessRunner: fix use of undeclared identifier 'close'. Commit.
  • [ftp] Always use default timeout values. Commit.
  • [http] Set error string for ERR_DOES_NOT_EXIST. Commit.
  • Force test language to en. Commit.
  • Knewfilemenu: Add @since 6.2 to the new signals and methods. Commit.
  • Kfilefilter.h: update API docs. Commit.
  • Kencodingfiledialog dox: rewrite API dox that refer to removed functions. Commit.
  • Kfilewidget dox: replace references to setFilter() with setFilters(). Commit.
  • Fix a few warnings. Commit.
  • Add EnableRemoteFolderThumbnail option checking. Commit.
  • PreviewJob: Display preview for locally mounted remote directories. Commit.
  • Knewfilemenu: add isNewDirNameJobRunning. Commit.
  • KFilePlacesItem: Show teardown busy indicator during optical media eject. Commit.
  • KDirModelTest.testDeleteFiles: lower debug output. Commit.
  • KUrlNavigator: allow adding a badge widget after the breadcrumb. Commit.
  • Set ideal case for TwoVectors. Commit.
  • Udsentry_api_comparison_benchmark: update. Commit.
  • Kurlnavigatorbutton: prevent. Commit.
  • Add more explicit moc includes to sources for moc-covered headers. Commit.
  • Connection: don't queue tasks until OOM. Commit.
  • Http: Fix parsing DAV:getlastmodified. Commit. Fixes bug #484671
  • Kfileitem: Linux, use statx to refresh files. Commit. Fixes bug #446858
Kirigami
  • Fixed wrong navigation and dialog header button colors. Commit. Fixes bug #486163
  • Card: Remove the unnecessary "reality check" binding on footer, add test. Commit.
  • Card: Restrict actions type from arbitrary QObject to T.Action. Commit.
  • Card: Shuffle things around a bit to make them look nicer. Commit.
  • Remove linkActivated/linkHovered from Delegate types. Commit.
  • InlineMessage: Improve examples in documentation, clean up QML. Commit.
  • OverlayDrawer: Rework separator's code, animate transitions. Commit.
  • OverlayDrawer: Hide segmented separator when the drawer is collapsed. Commit.
  • OverlayDrawer: Rewrite visibility condition for segmented separator. Commit.
  • OverlayDrawer: Rewrite segmented separator positioning expression. Commit.
  • OverlayDrawer: Bind segmented separator's width to the real separator's width. Commit.
  • GlobalDrawer: Set spacing on the default header. Commit.
  • Fix null deref in OverlaySheet. Commit.
  • OverlaySheet: Port layout hacks to a simple Padding with its contentItem. Commit.
  • Tst_pagepool: Port testing code from verify(==) to compare. Commit.
  • Tst_pagepool: Fix test properly. Commit.
  • Revert "tst_pagepool: Fix test". Commit.
  • CardsGridView and CheckableListItem are not a thing anymore. Commit.
  • Actions.main is not a thing anymore. Commit.
  • Tst_pagepool: Fix test. Commit.
  • Revert "PageRow: Fix parent of Component-based pages". Commit.
  • PageRow: Fix parent of Component-based pages. Commit. Fixes bug #482753
  • MnemonicAttached: Fix logic when pressing Alt. Commit.
  • Dialog: Always use an overlay as visual parent. Commit.
  • Link Activation TitleSubtitle. Commit.
  • ContextualHelpButton: remove excess space from tooltip. Commit. Fixes bug #481817
  • Fix crash on teardown when QML engine is already unset. Commit.
  • ListSectionHeader: Deprecate label property. Commit.
  • PageRow: Remove superfluous trailing semicolon from a property alias. Commit.
  • PromptDialog: Create default contentItem dynamically on demand. Commit.
  • Padding: Remove old overridden contentItem from the visual hierarchy. Commit.
  • Gitignore: add VS Code dir. Commit.
  • Add a explicit page type check in AbstractApplictionHeader. Commit.
  • Add radius unit for rounded rectangles. Commit.
KItemModels
  • Add dependency to QML module. Commit.
  • Port to declarative type registration. Commit.
KItemViews
  • Add more explicit moc includes to sources for moc-covered headers. Commit.
KNewStuff
  • Show header warning message framelessly. Commit. Fixes bug #485464
  • DownloadItemsSheet: use alternating background colors for legibility. Commit. Fixes bug #483724
  • Document ContentWarning. Commit.
  • Page: conditionalize warning message based on riskiness. Commit.
KNotifications
  • Enforce passing tests on Windows. Commit.
KParts
  • Enforce passing tests on Windows. Commit.
KRunner
  • Action: Make bool operator explicit. Commit.
  • Fix matchInternalFinished not being emitted in case of dbus errors. Commit.
KSVG
  • Don't call update on missing marginObject. Commit.
  • Make property type fully qualified. Commit.
KTextEditor
  • Fix caret painting for inline notes at the end of line. Commit.
  • KateCompletionWidget: Mark function static. Commit.
  • KateCompletionModel: remove useless std::as_const. Commit.
  • Run more tests offscreen. Commit.
  • Fix performance with many cursors in a large line. Commit.
  • Fix test expectations. Commit.
  • Fix crashs and OOM on load with encoding failures. Commit. Fixes bug #486195. Fixes bug #486134
  • A11y: Improve tab order for "Appeareance" -> "Borders". Commit.
  • A11y: Set "Line Height Multiplier" buddy. Commit.
  • Fix broken navigation in completion widget with multiple views. Commit.
  • Fix clicking in completion. Commit.
  • Fix textInsertedRange signal for insertText behind last line. Commit. Fixes bug #483363
KTextTemplate
  • Enforce passing tests on all platforms. Commit.
KUserFeedback
KWallet
  • Fix reply type in portal implementation. Commit.
  • Kwalletportalsecrets.h: Add missing include. Commit.
  • Implement XDG Secrets Portal. Commit. Fixes bug #466197
KWidgetsAddons
  • Introduce KContextualHelpButton. Commit.
  • KMessageWidget: Fix handling of palette changes. Commit.
  • KMessageWidget: Make sure icon label is always vertically centered. Commit.
  • Gitignore: add VS Code dir. Commit.
KWindowSystem
  • Port to QNativeInterface::Private::QWaylandWindow. Commit.
  • Remove an unused explicit moc include. Commit.
  • Add more explicit moc includes to sources for moc-covered headers. Commit.
  • Introduce KXcbEvent to initialize the memory of sent XCB events. Commit.
KXMLGUI
Purpose
QQC2 Desktop Style
  • TreeViewDelegate: Fix non-observable modelIndex property getting stuck. Commit.
  • [CheckIndicator] Use control as AbstractButton. Commit.
  • Add missing dependency to private module. Commit.
  • Add QTBUG to comment. Commit.
  • Make SwitchIndicator more compiler-friendly. Commit.
  • ItemBranchIndicators: Fix uninitialized member variable m_selected. Commit.
  • StyleSingleton: Check whether object is qGuiApp. Commit.
  • [RadioButton] Use id instead of parent lookup. Commit.
  • [TabButton] Fix property type. Commit.
  • Apply Kirigami.Units.cornerRadius to default list item background too. Commit.
  • Gitignore: add VS Code dir. Commit.
  • Use consistent radius value from Kirigami.Units.radius. Commit.
Solid
  • Remove too aggressive assert. Commit. Fixes bug #464149
  • [StorageAccess] Fix storageAccessFromPath returning unmounted filesystems. Commit.
  • [SolidHwTest] Extend FakeHW description with encrypted volume, add tests. Commit.
  • [SolidHwTest] Test Device::storageAccessFromPath. Commit.
  • [DeviceManager] Remove exists() check from storageAccessFromPath. Commit.
  • Udisks: Return empty string for "root" clearTextPath. Commit. Fixes bug #485507
  • [SolidHwTest] Remove unnecessary slotPropertyChanged helper, fix bug. Commit.
  • [SolidHwTest] Remove setenv wrapper, unnecessary qt_windows.h include. Commit.
  • [SolidHwTest] Move test class declaration to source file. Commit.
  • Udisks2: Add support CanCheck/Check/CanRepair/Repair. Commit.
Sonnet
  • Add dependency to QML module. Commit.
  • Gitignore: add VS Code dir. Commit.
Syntax Highlighting
  • Support single-quoted strings in MapCSS. Commit.
  • Add Syntax Highlighting for Vue Template Files. Commit.
  • Add syntax highlighting support for CashScript. Commit.

Thursday, 9 May 2024

Kirigami Addons 1.2 is out with some accessibility fixes and one new component: FloatingToolBar.

Accessibility

During the accessibility sprint, there was an effort to ensure the date and time pickers were actually accessible. Aside from improving the screen reader support, this also allow to write Selenium integration tests which uses these components in Itinerary. Thanks Volker, David Redundo and others for working on this!

FloatingToolBar

Mathis and I worked on a new addition to Kirigami Addons adding to the existing FloatingButton and DoubleFloatingButton components. This component is perfect to add tool to editing and drawing areas and can either contain a simple RowLayout/ColumnLayout containing ToolButtons or a Kirigami.ActionToolBar.

import org.kde.kirigamiaddons.components
import org.kde.kirigami as Kirigami

FloatingToolBar {
 contentItem: Kirigami.ActionToolBar {
 actions: [
 Kirigami.Action {
 ...
 }
 ]
 }
}

 

Dialogs

With the style used by FormCardDialog and MessageDialog merged in Kirigami and soon in qqc2-desktop-style too, I did some changes to the FormCardDialog and MessageDialog to use the same padding as Kirigami.Dialog.

MessageDialog now works better on mobile with the layout adapting itself to the dialog size.

messagedialog with a mobile layout
messagedialog with a mobile layout

Aditionally similar to KMessageBox, MessageDialog has an optional “don’t show again” option which can be enabled by setting the dontShowAgainName property similar to the KMessageBox api.

I also prepared these two components to work as standalone windows which is likely to come with this Qt 6.8 change request.

Dialog in Qt 6.8
Dialog in Qt 6.8

CategorizedSettings

Jonah fixed a bug where it would be impossible to escape the settings on mobile.

Documentation

I added more screenshot to the API documentation and updated the TableView example app to use a ‘frameless’ style.

 

Qt 6.7 support

This release also brings support for Qt 6.7 on Android as this release introduced an API and ABI change to the Android code. Thanks Joshua for tackling this issue.

The new Ubuntu LTS was released in April, congratulations to all involved with that. I know Scarlett worked hard to get Kubuntu back into shape so do if that a try if you want a stable Plasma 5 desktop.

In the KDE neon project we don’t like to sit still for long so we are now building all our KDE packages on Ubuntu Noble, versioned 24.04. This always takes longer than it feels like it should, mostly because it’s a moving target to keep everything compiled as more KDE software gets released, so no promises on when it’ll be ready but we’ll try to be fast because the old Ubuntu base of jammy (22.04) is showing its age with projects like Krita no longer able to compile there.

So far the main issues are all the changes needed for 64-bit time_t to fix the y2k38 problem, we know you wouldn’t want your clocks to zero out in 2038.

Introduction

Another year, another successful Season Of KDE for 12 contributors!

This article has been co-written with the input from all contributors.

Translation Projects

KDE counts on a very active translation community and translates software into over 50 different languages. In SOK 2024, we had 2 projects that focused on translating multiple apps into Hindi. Asish Kumar and Akash Kumar joined the KDE Hindi community to translate multiple apps into Hindi. They both worked together on translating Merkuro, then Akash focused on Tellico while Asish worked on KDE Connect and Cantor.

Tellico in Hindi
Cantor in Hindi

Kdenlive

Kdenlive brings you all you need to edit and put together your own movies. We had 2 projects for KDE's full-featured video editor:

  • Ajay Chauhan implemented multi-format rendering for Kdenlive by adding a filter to adjust the aspect ratio of video clips in the main track, allowing users to select the desired aspect ratio during export, and integrating it into the final rendering profile. Ajay also added code to apply filters to clips, calculate crop parameters, and handle video cropping to the desired ratio; and implemented the GUI component ComboBox that selects the aspect ratio and ensures that the selected ratio is passed to the RenderRequest object. Additionally, various issues were fixed during development, such as temporary file handling issue, preventing crashes, and refactoring code.

    Kdenlive aspect ratio combobox

  • aisuneko icecat created a prototype keyframe curve editor GUI for Kdenlive. Based on recent progress in introducing advanced keyframe types and capabilities into the editor, the widget allows the user to intuitively view and control the current animation curve of keyframable effect parameters. As of now, the widget supports basic interactions such as dragging and double clicking, and integrates well with other existing Kdenlive components. This is still a work-in-progress feature, as more work needs to be done beyond SoK to have it further enhanced before it can be released to end users.

    Keyframe curve editor

KDE Eco / Accessibility

There are 5 new projects that made measuring the energy consumption of software easier and more integrated in the development pipeline. This helps make KDE software more efficient and environmentally friendly, as well as more accessible at the same time:

  • Sarthak Negi focused on testing, bug-fixing and integrating measurement workflows on KEcoLab. After setting up the testing environments, Sarthak worked on creating a CI test and refactoring code for efficiency and the code has been merged in the main repository.

    Updated workflow for KEcoLab

  • Pradyot Ranjan worked on improving and updating the setup guide for selenium, a tool to automatize testing. The result can be found on this wiki page.

    Working with Kdenlive to make Selenium videos

  • Amartya Chakraborty added support for KdeEcoTest on the Windows platforms. To do this, Amartya replicated test-scripts for Okular test using KdeEcoTest which previously used xdotool. Now this test-script can be executed on any platform. The conditional installation of packages based on the platform using pipenv has been implemented.

  • Athul Raj Kollareth worked on bringing support for KdeEcoTest on Wayland systems. The initial work consisted of [adding an abstraction layer](https://invent.kde.org/echarruau/feep-win-32-kdotool-integration/-/ merge_requests/1) so that KdeEcoTest could be run on different platforms including Windows. To build support for Wayland, we had to first restrict our scope and finally decided to move with only supporting the KWin compositor as it had built in functionalities for automating window related manipulations on the GUI. To automate input devices, the Linux kernel's evdev module was used which allowed us to monitor input devices and also emulate them using uinput. With these changes integrated into KdeEcoTest, we were able to run tests on Wayland, X11 and Windows thanks to Amartya's implementation. ![KEcoTest running on Wayland](KdeEcoTest_running under wayland.png)

  • Aakarsh MJ worked on integrating KEcolab into Okular's pipeline. This will allow the Okular team to measure energy consumption for each release. This paves the way for the creation of a template which will be further helpful for other projects as well. A merge request is in progress to integrate it into Okular.

    Local test of Okular pipeline integrating KEcolab

Cantor / LabPlot

Cantor is an application that lets you use your favorite mathematical programming language from within a friendly worksheet interface, while Labplot is KDE's user-friendly data visualization and analysis software. Both applications are closely intertwined, and have had three projects completed during SOK:

  • Dhairya Majmudar worked on extending the embedded documentation for supported Computer Algebra Systems Project. Dhairya created the common styles for several mathematical system documents, enhancing the users' experience allowing them to use them simultaneously; and Python scripts have been written to link the stylesheets to the HTML files. These Python scripts are further extended to convert HTML files in Qt Help files that can be uploaded to the KDE Store. The in-progress merge request can be found at: https://invent.kde.org/education/cantor/-/merge_requests/74.

  • Israel Galadima contributed to the "LabPlot: Download/Import of datasets from kaggle.com" project. Since kaggle.com seems to be the central place nowadays for finding datasets in the data science community, we wanted LabPlot's users to be able to access the datasets on kaggle.com directly from within LabPlot. Thus, Israel worked on a new dialog in LabPlot that allows users to search for and import datasets directly from kaggle.com into LabPlot spreadsheets, using the official kaggle cli tool to facilitate the communication between LabPlot and kaggle.com. Multiple merge requests have been merged, the last one is still in review.

  • Raphael Wirth introduced the support for data stored in the MCAP format to LabPlot. Throughout the project, Raphael extended the backend of LabPlot to allow the loading of JSON-encoded MCAP files into its internal data structure as well as the export back to the MCAP file format. Additionally, the user interface has been adapted to accommodate these advancements. This required the extension of the existing import dialog and the introduction of a new export dialog tailored specifically for saving MCAP files.

We would like to congratulate all participants and look forward to their future journey with KDE!

KDE has a symbiotic relationship with many linux distros, since while we develop our software we also use particular versions of linux, I personally use archlinux as my distro of choice for many years being the only distro that I manage to bare for more than six months ( and I believe I am using it for more than 15 years already so that counts).

The "recipe" for packaging KDE software for arch is big, because we are big, and packaging large amounts of software is no easy feat, so me and Antonio Rojas started to update the build scripts to be less manual and less error prone. All the versions of Plasma 6 that have been packaged for arch are using this scripts in one way or another (or manually when we broke everything :)

This work is being done in a separate branch to not break the current workflow, but things are looking good and we hope to merge this in master soon, so that deploying newer versions of KDE software for arch will be a single command, meaning more time for the developers and less time creating packages.

Wednesday, 8 May 2024

KDE e.V., the non-profit organisation supporting the KDE community, is looking for a web designer who is skilled with Hugo to implement a new environmental sustainability campaign for the KDE Eco website. Please see the job ad for more details about this employment opportunity.

We are looking forward to your application.

KGraphViewer 2.5.0 has been just released! The main focus of this release is the port to Qt6 and KDE Frameworks 6 as well as general code modernisation, but of course some bugs have been squashed too. The full changelog can be found below.

About KGraphViewer:

KGraphViewer is a Graphviz DOT graph file viewer, aimed to replace the other outdated Graphviz tools. Graphs are commonly used in scientific domains and particularly in computer science.

You can learn more at https://apps.kde.org/kgraphviewer/

URL: https://download.kde.org/stable/kgraphviewer/2.5.0/
SHA256: 872bee63fb4df6f7fb2b4eaf02ff825cba3ca953ac02509a287fe5cd0f1e2b69
Signed by: D81C 0CB3 8EB7 25EF 6691 C385 BB46 3350 D6EF 31EF Heiko Becker heiko.becker@kde.org
https://invent.kde.org/sysadmin/release-keyring/-/raw/master/keys/heikobecker@key1.asc

Full changelog:

  • appstream: Add upcoming 2.5.0 release
  • Brush up menu & action terms a bit
  • Add icons to more actions & submenus
  • Update homepage URL in README
  • Remove some outdated/unused files
  • Avoid double look-ups in maps, use iterator returned from find method
  • Add widget parent to QMenu instances
  • DotGraphView: create popup menu only on demand
  • Share also zoom actions between DotGraphView & KGraphViewerPart
  • Use enum QColor constructor instead of string based one
  • Use KStandardAction convenience creation methods, parent all to collecitions
  • Drop file_open_recent from ui.rc files, given KStandardAction toolbar magic
  • Use more member-function-pointer-based Qt signal/slot connects
  • Port away from auto-casting from ascii strings
  • Fix missing closing tags in D-Bus API xml files
  • Use QList directly instead of Qt6-times alias QVector
  • Make manual build & install fully optional
  • Update links to graphviz website
  • Fix handling file cmdl arguments with relative path
  • Fix bad defaults for fonts, also for colors, shapes & style
  • KGraphViewerPart CMake config file: drop KGraphViewerPart_INCLUDE_DIRS
  • Bump version & SO version for first Qt6-based release
  • Drop support for Qt5/KF5
  • Clean up includes & forward declares
  • Do not use Qt modules includes
  • Deploy custom pixmaps as Qt resource
  • Printing page settings: remove custom broken window icon
  • Printing page settings: replace "lock ratio" button with checkbox
  • KGraphViewer KPart metadata: use normal app display name as name
  • Drop libkgraphviewer appstream file, no other libraries provide some
  • Set target properties right after declaring the target
  • Remove unused version header includes
  • Drop code for no longer supported KF versions
  • Fix another wrong min Qt version variable name usage
  • Use ECMDeprecationSettings
  • Port away from deprecated QMouseEvent::globalPos()
  • KGraphEditor: fix bad port to QMessageBox::question
  • Use Q_EMIT instead of emit
  • Switch to ECM required-default KDE_COMPILERSETTINGS_LEVEL
  • Remove unneeded ; after Q_DECLARE_PRIVATE() & Q_DECLARE_PUBLIC()
  • Use more nullptr
  • Fix wrong min Qt version variable name usage
  • Add Qt6/KF6 build support
  • Remove unneeded QApp::setOrganizationDomain, dupl. KAboutData::setApp...Data
  • appdate: use desktop-application type, add developer & launchable tags
  • Update homepage to apps.kde.org
  • Port away from deprecated QDesktopWidget
  • Port away from deprecated QPrinter::setOrientation()
  • Port away from deprecated QPrinter::numCopies()
  • Port away from deprecated operator+(Qt::Modifier, Qt::Key)
  • Port away from deprecated QWheelEvent::delta()/orientation()
  • Port away from deprecated signal QButtonGroup::buttonClicked(int)
  • Port away from deprecated I18N_NOOP2
  • Port away from deprecated KXmlGui RESTORE() macro
  • Bump min required Qt/KF to 5.15.2/5.100.0
  • Port away from deprecated QLayout::setMargin()
  • Add missing includes for Qt6 build
  • Remove unused include
  • Drop usage of outdated no-effect QGraphicsView::DontClipPainter
  • Port away from deprecated QStyle::PM_DefaultLayoutSpacing
  • change QFontMetrics.width with horizontalAdvance
  • replace QRegExp by QRegularExpression
  • Use for instead of foreach
  • Replace deprecated endl with Qt variant
  • remove -qt5 suffix
  • change path in gitlab-ci
  • snapcraft: initial import snapcraft files.
  • kgrapheditor: deploy ui.rc file as Qt resource
  • Remove Designer's "." normaloff file data from icon properties in .ui files
  • Add explicit moc includes to sources for moc-covered headers
  • doc: use a non-deprecated entity for Frameworks
  • Add releases
  • Add Open Age Content Rating
  • Remove warning about unknown DOT fonts
  • Remove custom action to configure shortcuts
  • Init graph members
  • Remove unused graphviz/gvc.h includes
  • Add KI18n and KDocTools macro to install translations
  • Port away from deprecated KMessageBox Yes/No API
  • Remove arcconfig
  • Add interface library for part include dir
  • Handle Qt6 change around enterEvent
  • Add missing include
  • Remove unused include
  • Port away from deprecated KPluginLoader
  • Port away from deprecated endl
  • Adapt build system to Qt6
  • Remove pointless/broken icons
  • Enable highdpi pixmaps
  • Add git blame ignore file
  • Add GitLab CI
  • Use ecm_qt_install_logging_categories to generate kdebugsettings file
  • Drop code variants for no longer supported Qt/KF versions
  • Use more target-centric cmake code
  • Update .gitignore
  • Use non-deprecated KDEInstallDirs variables
  • Port away from deprecated KSelectAction::triggered(QString)
  • Documentation updates - Update date and fix version numbers - Fix tagging and sync option's text
  • Port away from deprecated QMatrix
  • KAboutData::setupCommandLine() already adds help & version options
  • kgraphviewer_part.desktop: remove unused key Categories
  • Use .in suffix for header file that is passed to configure_file()
  • Port away from deprecated signal QProcess::error
  • Use default window flags for QInputDialog::getText
  • Port away from deprecated KEditToolBar::newToolbarConfig
  • Port to new KPluginMetaData-based KParts API
  • Deploy ui.rc files as Qt resources
  • Remove broken argument SERVICE_TYPES kpart.desktop from desktop2json call
  • Handle Graphviz capitalization changes
  • Capitalize Graphviz consistently
  • cmake: Simplify and improve FindGraphviz.cmake
  • Add KDE ClangFormat on CMake and run the target
  • Fix link: ui.html -> menus.html
  • Draw empty arrowheads closed
  • add genericname for use on kde.org/applications
  • Set StartupWMClass in desktop file
  • Use more https in links (and update outdated ones)

Massif Visualizer 0.8.0 has been just released! The main focus of this release is the port to Qt6 and KDE Frameworks 6 as well as general code modernisation, but of course some bugs have been squashed too. The full changelog can be found below.

About Massif Visualizer:

Massif Visualizer is a tool that - who'd guess that - visualizes massif data. You run your application in Valgrind with --tool=massif and then open the generated file in the visualizer. Gzip or Bzip2 compressed massif files can also be opened transparently.

You can learn more at https://apps.kde.org/massif-visualizer/

URL: https://download.kde.org/stable/massif-visualizer/0.8.0/src/
SHA256: 5fad3f0e0d9fbb6bc8cfb744cb4e2c99f231d57ee0dd66dd594d36c2cc588a80
Signed by: D81C 0CB3 8EB7 25EF 6691 C385 BB46 3350 D6EF 31EF Heiko Becker heiko.becker@kde.org
https://invent.kde.org/sysadmin/release-keyring/-/raw/master/keys/heikobecker@key1.asc

Full changelog:

  • appdata: Add upcoming 0.8.0 release
  • Unbreak KDE CI config: require "@stable-kf6" branch of kgraphviewer
  • KDE CI: require tests to pass (for platforms where they currently do)
  • KDE CI config: require "@same" branch of kgraphviewer
  • appstream: use new id without hyphen
  • Port away from QScopedPointer
  • ParseWorker: fix switched error title & text for empty data file
  • Overhaul action & title texts to follow KDE HIG, add more UI marker contexts
  • Config dialog: align "Shorten Templates" checkbox with form fields
  • Config dialog: avoid full-width comboboxes, use system style
  • Update outdated Kate editor setting replace-trailing-space-save
  • Use more function-pointer-based Qt signal/slot connections
  • Remove some unused includes
  • Use KStandardAction (member-)function-pointer-based overloads
  • Use ECM-requirement-derived default KDE_COMPILERSETTINGS_LEVEL
  • Drop any margins around document & tool views
  • Use QList directly instead of Qt6-times alias QVector
  • Switch from target_link_libraries' legacy LINK_PRIVATE to PRIVATE
  • Use more target-centric cmake code
  • CMake: remove unneeded explicit addition of current dirs to include dirs
  • Fix build with older cmake: -D not expected with COMPILE_DEFINITIONS
  • Update homepage to apps.kde.org
  • Use commits.kde.org/kgraphviewer as source location for KGraphViewerPart
  • Set version to 0.8.0
  • Use CMake's project(VERSION)
  • Drop support for Qt5/KF5
  • Support Qt6/KF6 builds
  • Rely on CMake's autorcc (enabled by KDECMakeSettings) to add Qt resources
  • Use ECMDeprecationSettings
  • Use KF6-proof KConfigGroup::group() overload
  • Port away from deprecated KPluginFactory::create() overload
  • Port away from deprecated KPluginLoader::factory()
  • Port away from deprecated KFilterDev
  • Port away from deprecated QPrinter::pageRect()
  • Port away from deprecated QDesktopWidget
  • Port away from deprecated QString::split overload
  • Port away from deprecated QPixmap::grabWidget
  • Port away from deprecated QTreeView::sortByColumn overload
  • Port away from ModelTest copy to QAbstractItemModelTester
  • Adapt iterator type to match actual type returned from QHash method
  • Add explicit QRegExp includes
  • Port away from deprecated QAlgorithmsPrivate::qReverse
  • Port away from deprecated qSort
  • Bump min required CMake/Qt/ECM/KF to 3.16/5.15.2/5.100/5.100
  • appstream: use https for screenshot links
  • appstream: use desktop-application type, add developer & launchable tags
  • Appdata: Add developer name
  • [CI/CD] Add flatpak job
  • [CI] Don't depend on kgraphviewer on Windows
  • Port to new CI template syntax
  • snapcraft: initial import snapcraft files.
  • Deploy ui.rc files as Qt resource
  • Move Flatpak CI to GitLab
  • Add explicit moc includes to sources for moc-covered headers
  • Use non-deprecated KDEInstallDirs variables
  • Install translations
  • Port away from deprecated KMessageBox::sorry
  • Remove arcconfig
  • Remove unused include
  • Use imported target for KGraphViewerPart
  • debug
  • Add Gitlab CI
  • Remove unused XmlPatterns
  • Add some missing linkages
  • Use KDE_INSTALL_MIMEDIR instead of custom XDG_MIME_INSTALL_DIR
  • appdata.xml: Minor fixes for submission to Flathub
  • Fix minor issues found by EBN
  • fix xml
  • update screenshot
  • Set StartupWMClass in desktop file
  • ui.rc files: use <gui> instead of deprecated <kpartgui>
  • Do not duplicate work done by KAboutData::setupCommandLine()
  • Use nullptr
  • Use override
  • Fix window icon for non-desktopfile WM to own icon "massif-visualizer"
  • Properly support BUILD_TESTING
  • Remove explicit enable_testing(), duplicated from KDECMakeSettings
  • Bump min cmake version to 3.0
  • Remove explicit use of ECM_KDE_MODULE_DIR, is part of ECM_MODULE_PATH
  • Fix minor EBN issues