11 Jun 2026

feedPlanet KDE | English

Code and logic for tournaments in the Mankala Engine

Structure of code and logic for tournaments in the Mankala Engine.

So, we want the tournaments to be able to:

The tournament is going to be part of the Multiplayer variant. For that, when a person clicks on Multiplayer game mode, they will be asked to select from the given two options of a casual 1 to 1 game or another a tournament. Then they will be asked to either create a room or join the room with the code.

Key elements to implement:

Here is an example of how the tournaments.cpp can be implemented:

class TournamentManager : public QObject {
Q_OBJECT
Q_PROPERTY(QVariantList tournaments READ getTournaments NOTIFY tournamentsChanged)
Q_PROPERTY(QVariantMap activeTournament READ getActiveTournament NOTIFY activeTournamentChanged)
public:
// --- Tournament duration ---
Q_INVOKABLE QString createTournament(
const QString& variant, // "Bohnenspiel", "Oware", "Pallanguli"
int maxPlayers, // eg. 4, 8, 16
int durationDays, // tournament duration
const QString& organizerJid // creator's XMPP JID
);
Q_INVOKABLE void joinTournament(const QString& roomCode, const QString& playerJid);
Q_INVOKABLE void startTournament(const QString& tournamentId);
// --- Match management ---
Q_INVOKABLE void reportMatchResult(const QString& matchId,
const QString& winnerJid);
Q_INVOKABLE void advanceBracket(const QString& tournamentId);
// --- Computer Opponents ---
Q_INVOKABLE void fillEmptySlots(const QString& tournamentId);
// --- Room codes ---
Q_INVOKABLE QString generateRoomCode();
Q_INVOKABLE QString resolveRoomCode(const QString& code);
signals:
void tournamentsChanged();
void activeTournamentChanged();
void matchReady(const QString& matchId, const QString& player1, const QString& player2);
void tournamentComplete(const QString& tournamentId, const QVariantList& rankings);
void playerJoined(const QString& playerJid);
};

For filling empty spaces we can use the logic as:

struct Match {
QString matchId;
QString player1Jid; // empty string = unfilled slot
QString player2Jid;
QString winnerJid;
int round; // 0 = first round, 1 = quarter-finals, etc.
int position; // position within the round
bool isAIMatch; // true if one/both players are computer
};
class TournamentBracket {
public:
void initialize(int playerCount); // builds bracket tree
void seedPlayers(const QStringList& playerJids);
void fillWithAI(); // fills empty slots
Match getNextMatch() const;
void recordResult(const QString& matchId, const QString& winnerJid);
bool isComplete() const;
QVariantList getRankings() const;
private:
std::vector<std::vector<Match>> m_rounds; // rounds[0] = first round, etc.
int m_totalRounds;
};

At the end of the elimination cycle and the tournament bracket, we can get the results and show them on our created leaderboard page with the XMPP icons, usernames, and the number of games the players won.

What more can be added?

I plan to research more on whether we can store and display these games in the player profiles and create a communication channel for the players and spectators during the ongoing game, which could be both text and voice chat using XMPP and other relevant communication protocols.

Thanks for reading. 👀

11 Jun 2026 5:02pm GMT

Introducing Qt's Figma Design System Extraction Skills for Developers

Recreating a design system manually in QML is a laborious task for a Qt developer. A typical Figma design system can include hundreds of design tokens for colors, typography, spacing, radii, shadows, and motion durations - plus dozens of UI components, each with multiple variants and states. Every value has to be transcribed precisely, and even small mismatches can quietly desynchronize the implementation from the Figma source.

Two new AI skills close the design-system-to-code gap between Figma and Qt. The Qt Figma Token Extraction skill converts your Figma design tokens directly into QML singletons. The Qt Figma Component Generation skill then turns your Figma component library into idiomatic QML controls that consume those singletons. Together they automate the full design-system handoff. The skills delegate this entire workflow to an AI agent, which connects to Figma, reads the design system, and produces clean, idiomatic QML ready to drop into a Qt project.

11 Jun 2026 4:59am GMT

KDE Ships Frameworks 6.27.0

Thursday, 11 June 2026

KDE today announces the release of KDE Frameworks 6.27.0.

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

Baloo
  • [Query] Make Query::exec() idempotent. Commit.
  • [autotests] Remove unnecessary/unused include. Commit.
  • Tighten used namespaces in implementations. Commit.
  • Term: Remove unused userData member and methods. Commit.
Bluez Qt
  • Enable LSAN in CI. Commit.
  • Add Qt6DBus to public link interface. Commit.
Breeze Icons
  • Configure_package_config_file: drop unused PATH_VARS CMAKE_INSTALL_PREFIX. Commit.
  • Replace Acrobat branding with Okular iconography. Commit. Fixes bug #487595
  • Remove im-[company logo] icons. Commit. See bug #487595
  • Remove acroread icon. Commit. See bug #487595
Extra CMake Modules
  • Set INTERFACE_LINK_LIBRARIES if the found library is a static library. Commit.
  • Fix: translation loading location issue on macOS. Commit.
  • ECMDepreactionSettings: Set QT_DEPRECATED_WARNINGS_SINCE to current version when newer warnings should not be shown. Commit.
  • Try harder to determine a good default for the Android API level. Commit.
  • Silence more warnings in python bindings. Commit.
  • Add note to ECMGenerateQmlTypes that it's basically obsolete. Commit.
  • Add KDE_INSTALL_QTMETATYPESDIR. Commit.
  • Sanitizer: add support for realtime sanitizer. Commit.
KArchive
  • Allow to set CMake modules path outside additionally. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
KAuth
  • KF6AuthCore: move Qt6::Gui to private link interface. Commit.
  • Port to KWaylandExtras::xdgActivationToken. Commit.
KBookmarks
  • KF6BookmarksWidgets: list KF6::Bookmarks in public interface, not private. Commit.
KCMUtils
  • Add support for Union to SettingHighlighterPrivate. Commit.
  • Kcmshell: Don't leak QML engine. Commit.
  • Add smoke-test option to kcmshell. Commit.
KCodecs
  • KEmailAddress::decodeMailtoUrl: return empty string on non-mailto URL. Commit. Fixes bug #519721
  • Remove unused code. Commit.
  • KCharsets::fromEntity: bound numeric reference to QChar range and reorder bounds check. Commit. Fixes bug #519719. Fixes bug #519720
  • [Codec] Change compare method in charset lookup. Commit.
  • [Codec] Fix infinite loop in charset lookup. Commit. Fixes bug #520200
KConfig
  • Do not inherit publicly from std::map. Commit.
  • KConfigSkeleton: Fix reading value for deleted entry with system default. Commit. Fixes bug #509416
  • KConfigXT: Add addItemPathList and addItemUrlList. Commit.
  • CMake config file: check private QtDBus dependency only for static builds. Commit.
  • Drop unneeded moc include. Commit.
  • Fix build warnings with -Wnoexcept. Commit. Fixes bug #384583
  • Add autotest for KCoreConfigSkeleton::useDefaults. Commit.
  • Kconfig_compiler: Fix QML forward declarations when using a namespace. Commit. Fixes bug #510091
  • Kwindowstatesaverquick: Do not force-show windows. Commit.
  • CMake config file: remove no longer used Qt6Xml dep with (static) libs. Commit.
  • Add test for ADMIN_ACCOUNT environment variable override. Commit.
  • Fix wrong usage of qEnvironmentVariable function. Commit.
  • CMake config file: add missing Qt6Core & Qt6Gui dependency check. Commit.
  • Kconfig_compiler: Consistently accept lowercase type names. Commit.
  • Install Qt metatypes. Commit.
KConfigWidgets
  • Hide windowsvista style from KStlyeManager. Commit. See bug #507942
  • Also activate window in KConfigDialog::showDialog. Commit.
  • Add Amharic kf6_entry.desktop. Commit.
KContacts
  • CMake config file: add missing Qt6Gui dependency check. Commit.
  • Impp: Try to always return a label for an IM protocol, even if none is known. Commit.
  • Impp: Add helper getter to get only username portion of the address. Commit.
  • Fix build not including new files in resource. Commit.
  • Improtocols: Add a bunch of modern services. Commit.
KCoreAddons
  • Fix Clang-Tidy: Static member accessed through instance. Commit.
  • Fix Clang-Tidy: Method 'initTestCase' can be made static. Commit.
  • Fix Clazy: Unused QString lineFeed. Commit.
  • KAboutData: Reload applicationData when desktopFileName param is set. Commit. See bug #459986
  • Fix build warnings with -Wnoexcept. Commit.
  • Kaboutdata: Use application display name for --author. Commit.
  • Klistopenfilesjob_unix: Remove unneeded qOverload for connect. Commit.
  • Licenses Free Software Foundation has changed a bit the text of the licenses. Commit.
  • KTextToHTML: escape HTML entities in highlighted text. Commit. Fixes bug #504078
  • Use default DEFAULT_SEVERITY for logging. Commit.
  • Force locale on Windows as well for the KAboutData unit test. Commit.
  • Install Qt metatypes. Commit.
KCrash
  • Add Android Sentry integration. Commit.
KDav
  • Use Depth: 1 instead of Depth: 0 for multiget REPORT requests. Commit.
  • Fix percent-encoding of item hrefs in CalDAV/CardDAV multiget requests. Commit.
  • Add job to create DAV collection. Commit.
  • Autotests: Add davitemsfetchjobtest. Commit.
  • Test: Remove manual test server. Commit.
  • Enums: Deprecate GroupDav protocol support. Commit.
KDeclarative
  • Add location to CalendarEvents::EventData. Commit.
  • Add strict qmllint configuration. Commit.
  • Use id instead of parent. Commit.
  • Use Application instead of Qt.application. Commit.
  • Remove unused include. Commit.
  • Register QKeySequence to QML. Commit.
  • Add missing module dependency. Commit.
  • Access local property directly. Commit.
  • Fix unqualified property access. Commit.
  • Use int instead of enum as property type. Commit.
  • Port to KI18nContext QML API. Commit.
KDE Daemon
  • Use default DEFAULT_SEVERITY for logging. Commit.
KDE SU
  • Make sure to handle \\0 without overflowing read. Commit.
KGlobalAccel
  • Add KGlobalAccel::setInverseShortcutActions() to the API. Commit.
  • Format with clang-format and xmllint. Commit.
  • Add empty lines in dbus interface files. Commit.
  • Properly mark all deprecated APIs in org.kde.KGlobalAccel interface. Commit.
  • Mark org.kde.KGlobalAccel.actionList as deprecated. Commit.
  • Make KGlobalAccel::stealShortcutSystemwide() steal all matching shortcuts. Commit.
  • Support a custom bus. Commit.
KGuiAddons
KHolidays
  • Add Bolivian Holidays. Commit. Fixes bug #520179
  • .clang-tidy - fix typo StringCompareLikeFuctions. Commit.
  • Src/lunarphase.cpp - krazy excludeall typedefs. Commit.
  • CMakeLists.txt - update the flex and bison urls. Commit.
  • Src/sunevents_p.h - fix include guard name. Commit.
  • SunRiseSet: place deprecation attribute standard-type-clang-compatible. Commit.
  • Fix holidays appear twice in january. Commit. Fixes bug #498462
  • UA: Update Ukrainian holidays. Commit.
  • .gitlab-ci.yml - don't fail on clang-tidy issues. Commit.
KI18n
  • Avoid use of Qt module header includes with QtQmlIntegration. Commit.
  • Add "gnuintl" as a variant for Intl library name. Commit.
  • Convert old prg doc reference to proper link. Commit.
KIconThemes
  • KIconButton: add some unit test for the properties. Commit.
  • Widgets/kicondialog: clear custom when pressing OK. Commit. Fixes bug #520007
KImageformats
  • Updated documentation on memory usage. Commit.
  • JXR: add a memory allocation barrier in jxrlib. Commit.
  • EXR: reject files with dimensions exceeding 300kx300k pixels. Commit.
  • OSS Fuzz: set image allocation limit to 2000 MiB. Commit.
  • Improve size limits for AVIF, HEIF, and RAW plugins. Commit.
  • IFF: fix byte swapping in 16-bit DEEP images. Commit.
  • Add Farbfeld read only support. Commit.
  • DDS: fix mime type. Commit.
  • IFF: DEEP image support. Commit.
  • ImageAlloc: add image initialization support. Commit.
  • Fix uninitialized value. Commit.
  • HEIF: image transformation support. Commit.
  • Update CI image. Commit.
KIO
  • KUrlNavigator: Use QStyle for navbar focus indication instead of custom painting. Commit.
  • Knewfilemenu: refactor mimeType and icon. Commit.
  • Knewfilemenu: delete EntryInfo and merge it into Entry. Commit.
  • Knewfilemenu: add QDebug overload for KNewFileMenuSingleton::Entry. Commit.
  • Knewfilemenu: reorder variables and prune redundancies. Commit.
  • KDirModel: fix assert when typing file.png/a by mistake. Commit.
  • Kmountpoint: Iterate mountpoint backwards to handle systemd-automount. Commit. Fixes bug #518012
  • Kioworker/file: avoid huge stack buf in file copy read/write fallback. Commit.
  • Openurljob: respect "open in application" preference for binaries. Commit. Fixes bug #519773
  • KUrlNavigator: Fix double background interference when in editable mode. Commit. Fixes bug #506177. Fixes bug #520249. See bug #518285
  • KDirModel: Use mostLocalUrl for old url. Commit. Fixes bug #509461
  • KIO::CacheControl enum: place deprecation attribute standard-type-compatible. Commit.
  • Kprocessrunner: For apps running in terminal, use terminal emulator's appId. Commit. Fixes bug #459986
  • Fix build warnings with -Wnoexcept. Commit.
  • KFilePlaceEditDialog: deprecate for external usage. Commit.
  • API docs: list kservice as dep, so KService types get links. Commit.
  • KIO::OpenWith: work around need for include of KService in public header. Commit.
  • KUrlNavigatorPlacesSelector: set accessible name. Commit.
  • Kurlauthorized.h: drop unneeded include. Commit.
  • Trash: Don't assert in parseURL. Commit.
  • Davjob: Make it possible to use QXmlStreamWriter output. Commit.
  • Davjob: Add MKCOL job. Commit.
  • Dropjob: Sanitize input URLs. Commit. Fixes bug #518481
  • Kfileitem: Assert that URL scheme is not empty. Commit. See bug #518481
  • DropJobTest: Create cache dir when needed. Commit.
  • KDirModel: Remove setting node preview on itemChanged. Commit. Fixes bug #517607
  • Don't show an error when the user cancels the device mounting password dialog. Commit. Fixes bug #400420
  • Knewfilemenu: centralize new file parsing. Commit.
  • Don't try showing error message if it's empty. Commit.
  • Configure_package_config_file: drop unused PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR. Commit.
  • Http worker: call redirection also for redirectToTrailingSlash. Commit. Fixes bug #517682
  • Kurlnavigator: Don't show context menu targeting hidden buttons when path is compressed. Commit. Fixes bug #505197
  • Global: map KJob::NoError to ERR_NONE. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
  • Upgrade logging from info to warning where appropriate. Commit.
  • Widgets: adapt dimensions of KOpenWithDialog on rotated monitors. Commit.
  • Kdiroperator, kfilewidget: Use zoomsteps when using scrollwheel. Commit. Fixes bug #494704
  • Searchproviders: improve osm. Commit.
  • Searchproviders: added osm. Commit.
  • Searchproviders: added keyword app to flathub. Commit.
  • Searchproviders: added "Flathub". Commit.
  • Searchproviders: add "wikipedia" keyword. Commit.
  • Searchproviders: localize query for german wikipedia. Commit.
  • Searchproviders: added "ZDF Mediathek". Commit.
  • Searchproviders: added "ARD Mediathek". Commit.
  • Core/copyjob: Prompt to replace MS-DOS reserved chars for MTP. Commit. Fixes bug #489288
Kirigami
  • Remove polyfill imports for SafeArea API. Commit.
  • Don't apply safe area margin to page bottom when there's a footer. Commit.
  • Only apply safe area margins when we have a parent. Commit.
  • Fix top margin in Page overlayItem. Commit.
  • Heading: set the color to Platform.Theme.textColor for heading. Commit.
  • Explicitly layout the window content item vertically as well. Commit.
  • Fix toolbar size with non-zero SafeArea margins. Commit.
  • Controls/Badge: avoid binding loop. Commit.
  • Fix access to ScenePosition attached property in DrawerHandle. Commit.
  • GlobalDrawer: top-align topContent. Commit. Fixes bug #520337
  • Add basic tests for some components. Commit.
  • Don't handle back key twice. Commit.
  • FormLayout: Fix FormData namespace alias. Commit. Fixes bug #520076
  • Revert "Disable qmllint for some modules". Commit.
  • Form: Guard root.Forms.FormAlignmentGroup.group. Commit.
  • GlobalDrawer: Use implicitWidth, set preferredHeight in item. Commit. Fixes bug #517091
  • Remove unused import. Commit.
  • Clean up internal imports. Commit.
  • Controls: Remove defunct onCompleted block in AbstractApplicationWindow. Commit.
  • Controls: Don't break width/height bindings in AbstractApplicationWindow. Commit.
  • Remove duplicate ecm_qt_install_logging_categories. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
  • Action: Notify fromQActinChanged when the QAction changed. Commit.
  • Form: Introduce FormAlignmentGroup. Commit.
  • Install Qt metatypes. Commit.
  • ToolbarLayout: don't crash when moreButton is not valid. Commit.
  • Fixs subtitle padding calculation in forms flat mode. Commit.
KMime
  • New in this release
KNewStuff
  • EngineBase::addProvider(provider): fix consumer-side hiding virtual method. Commit.
KNotifications
  • Android: Improve icon handling. Commit.
  • Android: Confirm reception of inline replies. Commit.
  • Android: Set Intent package names rather than invalid component names. Commit.
  • Android: Fix invalid iterator access. Commit.
  • Don't update notifications before they have actually been sent. Commit.
  • Android: Don't defer NotifyByAndroid::notify execution. Commit.
  • Configure_package_config_file: drop unused PATH_VARS KDE_INSTALL_DBUSINTERFACEDIR. Commit.
KQuickCharts
  • Use default DEFAULT_SEVERITY for logging. Commit.
KRunner
  • Extract and install Qt metatypes. Commit.
  • RunnerManager: move spurious member into pimpl class. Commit.
  • ResultsModel: Directly call toInt from QVariant to avoid implicit conversion. Commit.
  • RunnerManager: Avoid weird use of mutable iterator in favor of simple for loop. Commit.
  • RunnerContext: Use QHash for unique IDs since order is not relevant. Commit.
  • Use std::min/max instead of QT macros. Commit.
KSVG
  • Svg: clear stylesheetOverride on imageSetChanged. Commit. Fixes bug #503671
  • Svg: make eventFilter public again. Commit.
  • CMake config file: remove duplicated targets include. Commit.
  • Drop accidental duplicate QML registration. Commit.
  • Remove unused ECM module. Commit.
  • Add basic test for SvgItem. Commit.
KTextEditor
  • Use expanded document mode tabs in config pages. Commit.
  • Revert "CI: Comment out Qt 6.12 for now since tests are failing". Commit.
  • ScriptTester: Due to the change in Qt 6.12, getMessage() should return an empty string instead of undefined when there is no message. Commit.
  • Add public API for visible/real line number conversion. Commit.
  • Calculate which line numbers need repainting correctly. Commit.
  • Allow disabling "use first line of doc as file name" for untitled docs. Commit. Fixes bug #519242
  • Use default DEFAULT_SEVERITY for logging. Commit.
KTextWidgets
  • KPluralHandlingSpinBox: place deprecation attribute standard type compatible. Commit.
KUnitConversion
  • Mark US pints as common, rather than Imperial ones. Commit.
KUserFeedback
  • Configure_package_config_file: drop unused PATH_VARS KDE_INSTALL_INCLUDEDIR. Commit.
KWidgetsAddons
  • Use version-controllable deprecation warning macros instead of hardcoding. Commit.
  • Update kcharselect-data to Unicode 17.0. Commit.
  • Force locale on Windows as well for unit test. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
KWindowSystem
  • KKeyServer: place deprecation attribute standard-type-clang-compatible. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
  • Kwaylandextras: refine activation token documentation a bit. Commit.
KXMLGUI
  • Kxmlguiwindow: Special case KToolBarPopupAction for CommandBar. Commit.
  • Kmainwindow commandbar: include root ActionGroup actions. Commit.
  • Avoid setting session management window properties without session management. Commit. Fixes bug #519786
  • Add file suffix for shortcuts. Commit.
Modem Manager Qt
  • Use default DEFAULT_SEVERITY for logging. Commit.
Network Manager Qt
  • Fix bridgeport hairpin-mode setting key. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
Oxygen Icons
  • New in this release
Purpose
  • CMake config file: add missing Qt6Gui & Qt6Widgets dependency check. Commit.
  • Change Pastebin to Pastebin.com. Commit.
  • Adapt to KOnlineAccounts interface change. Commit.
  • Add missing find_dependency for Qt6QmlIntegration. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
  • Adapt to KOnlineAccounts API change. Commit.
  • Replace var with const. Commit.
  • Remove unused import. Commit.
  • Convert org.kde.purpose.private.widgets to proper QML module. Commit.
  • Fix unqualified property lookup. Commit.
  • Rename JobView::state to jobState. Commit.
  • Use KI18nContext. Commit.
  • Use fully qualified typename in property. Commit.
  • Fix deprecation warnings from ECM. Commit.
  • Remove CMake warning about arc runtime dependency. Commit.
QQC2 Desktop Style
  • README.md kdesrc-build -> kde-builder. Commit.
  • Remove group separators from SpinBox by default like QSpinBox. Commit.
Solid
  • Use globally-configured storage size units for labeling disks. Commit. Fixes bug #518493
  • Allow to set CMake modules path outside additionally. Commit.
  • Kdeconnect: Always remove device before emitting deviceRemoved. Commit.
  • Use default DEFAULT_SEVERITY for logging. Commit.
Sonnet
  • CMake config file: fix missing Qt6Widgets check with SONNET_USE_WIDGETS:ON. Commit.
  • Allow to set CMake modules path outside additionally. Commit.
  • Remove unused ECM module. Commit.
Syndication
  • CMake config file: add missing Qt6Core dependency check. Commit.
Syntax Highlighting
  • Add missing license texts. Commit.
  • YAML: fix quoted no-string in list. Commit. Fixes bug #500809
  • Add syntax highlighting for Slint files. Commit.
  • Minor fixes on gemtext syntax and reference. Commit.
  • Add BNF and ABNF syntax highlighting. Commit. Fixes bug #518109
  • Breeze Dark theme: less vibrant color for BracketMatching to make dsFunction color visible. Commit. Fixes bug #519805
  • Theme_contrast_checker.py: use Okl as default color space. Commit.
  • Theme_contrast_checker.py: add --neighbor-color and --neighbor-distance to filter colors that are close to a specific color. Commit.
  • Theme_contrast_checker.py: add --bg-color to view colors of a theme with a specific background color. Commit.
  • Fish: update to latest version and fix various bugs. Commit. Fixes bug #519060
  • LaTeX: fix optional parameter with minted shortcuts. Commit. Fixes bug #514536
  • J: update to latest version from github. Commit. Fixes bug #518108
  • Raku: bump highlighting definition version. Commit.
  • Raku: Allow - inside \c[], fill out allowed backslashes inside char classes. Commit.
  • Raku: Fix breakage of double backslash before ending single quote. Commit.
  • Raku: Allow signatures on token/rule/regex declarations. Commit.
Threadweaver
  • Remove duplicate headers. Commit.

11 Jun 2026 12:00am GMT

10 Jun 2026

feedPlanet KDE | English

Week 2 : Refactor and Review

This is a weekly update from my Google Summer of Code 2026 project with KDE, improving effect widgets in Kdenlive.

Week 2 was about getting feedback and doing it right.

After opening the draft MR for the Curves Widget, my mentor Jean-Baptiste reviewed the approach and suggested a cleaner architecture. The original implementation packed all 4 channel parameters into a single compound parameter. JB's feedback: each channel should be its own separate av_curve parameter in the effect XML, and AssetParameterView should share one CurveParamWidget across all of them; similar to how m_mainKeyframeWidget works for keyframe parameters.

This was a significant refactor but the result is much cleaner:

All four tabs (All, R, G, B) are working correctly. Per-channel state is preserved when switching tabs. Project save and restore works. The MR is now updated with the refactored approach and waiting for JB's review.

The All tab applies a curve to all channels simultaneously:

Curves widget — All tab

Switching to the R tab adjusts only the red channel independently:

Curves widget — R tab with red tint

Week 3 is already underway; the MR is pushed and waiting for JB's review. More updates next Sunday.

10 Jun 2026 7:55pm GMT

08 Jun 2026

feedPlanet KDE | English

RIT Unny open source font

E.P. Unny is a notable Indian political cartoonist, who worked/works with famed Shankar's Weekly and new papers such as The Hindu and Indian Express.

Since 2020, all his cartoons (also 2025, 2026 so far) are published - every week - open-access by Sayahna Foundation.

Unny was using a font based on his handwriting style for the cartoons, designed by K.H. Hussain of Rachana. Recently, a new font designed by Varshini KVSS & 'Kandam Collective' is developed by Rachana Institute of Typography to use in the cartoons, and it is released as open source - see the specimen and download links.

The character set of the font is Latin only. There are plenty of alternate glyphs (for upper case and lower cases of i, j, l, g, etc. - for instance check the double 'l' in 'Intelligence' on the specimen above). Such characters are rendered alternately to give a feel of the randomness that handwriting evokes.

The source (and issue tracking) are available at RIT fonts repository.

08 Jun 2026 11:14am GMT

07 Jun 2026

feedPlanet KDE | English

digiKam 9.1.0 is released

digiKam 9.1.0 Preview Canvas Displaying an HEIF Photo Taken With Apple 15 Pro

Dear digiKam fans and users,

After three months of active development, bug triage, and feature integration, the digiKam team is proud to announce the stable release of digiKam 9.1.0. This version builds on the foundation of 9.0.0, introducing new features, performance improvements, and a significant number of bug fixes to enhance stability, usability, and workflow efficiency. This release focuses on database migration, preview enhancements, advanced search, and usability improvements across the board.

07 Jun 2026 12:00am GMT

06 Jun 2026

feedPlanet KDE | English

Size Maters

So… more Oxygen icons 🙂

This weekend I been filling some of the more obvious holes in the icon set and recently these 2 landed.

The first one is for KeepSecret, the application that is replacing the old KWallet.

Security icons are funny. There are only so many ways to draw "keep your stuff safe" before you end up with another lock icon. Or a key. Or a lock pretending not to be a lock.

I ended up going with a small vault door. Which is basically also a lock pretending not to be a lock but at least it looks kinda cool, and more important I think it looks as smart as our users are...

The other one is for generic package managers.

And apparently software still arrives in wooden crates. 😀

I dont know who started this visual convention but after all these years I kinda stopped questioning it. Software packages are boxes. Everybody understands boxes. Lets move on, and debate the real important things such as the relevance of the save icon as a flopy device 😉

One thing that I love about icon design is how different the process becomes depending on size.

At large sizes you can spend hours messing around with materials, reflections, shadows and tiny details.

At small sizes all that disappears and suddenly you are fighting for every pixel. trying to keep the meanigfull details and creating a source svg monster in Oxygen repo 😀

I think icon design is really just the art of deciding what can be removed before the whole thing falls apart.

Talking about things that may or may not fall apart…

I've also been spending some time exploring styling in QML and thinking about possible future directions for O².

Nothing concrete yet.

Mostly experiments.

Some ideas are sensible.

Some ideas are absolutely not sensible. On propose 😀

The main goal is realy to show range of things I would ike to see available on Union.

Those are usually the interesting ones.

Right now I'm more interested in exploring the range of possibilities than deciding what a final result should look like. There are some surprisingly fun things hidden in there.

If all goes well we will soonish publish a video with KDAB showing some of these experiments and crazy ideas.

Or at least the ones that dont completely explode before then 😉

So stay tuned.

And as always, thanks for using Oxygen.

This old project still finding new excuses to keep going.

06 Jun 2026 9:40pm GMT

Kdenlive 26.04.2 released

The second maintenance release of the 26.04 series is out with the usual batch of bug fixes and improvements for workflow and stability. This update comes with fixes to rendering, timeline editing, project file handling, and Windows, MacOS, AppImage and Flatpak packaging.

One noteworthy bug closed in this version is a fix on Windows to finally allow exporting your videos to a network drive, closing a 4-year-old bug.

Head to our download section to get the latest binaries, or check the updates from your package manager. Please note that for Linux only AppImage and Flatpak are supported by the Kdenlive team.

For the full changelog continue reading on kdenlive.org.

06 Jun 2026 12:45pm GMT

This Week in Plasma: Fixing all the things

Welcome to a new issue of This Week in Plasma!

This week the team continued polishing Plasma 6.7 for its release later in the month. As such, this week saw mostly bug fixing.

Notable UI improvements

Plasma 6.7

Hovering over a partially-visible item in the Kickoff Application Launcher widget no longer unexpectedly automatically scrolls the view to show the entire item. (Christoph Wolk, KDE Bugzilla #426015)

Spectacle's feature to automatically copy the screenshot to the clipboard is now temporarily turned off while extracting text via OCR, so that the extracted text makes it onto the clipboard instead. (Tobias Fella, KDE Bugzilla #520758)

When launching an app from a terminal window, the animated launch feedback effect now ends after the app launches, as expected. (Nicolas Fella, Vlad Zahorodnii, and Akseli Lahtinen, KDE Bugzilla #459986)

Plasma 6.8

Notifications about connected devices having low battery power are now shown in full-screen apps so you won't miss them, just like notifications for the internal battery being low. (Jan Bidler, plasma-workspace MR #6623)

The Peek at Desktop and Window Aperture effects now respect the system-wide animation speed setting. (Sudip Datta, KDE Bugzilla #490531)

Frameworks 6.27

KRunner now assumes you mean US pints rather than Imperial pints when you convert to or from them, since pints are still official in the USA. (Nate Graham, kunitconversion MR #86)

After After
Before Before

Disk sizes displayed in various places now fully respect your preference regarding storage units. (Tobias Fella, KDE Bugzilla #518493)

Notable bug fixes

Plasma 6.6.6

Fixed a case where Plasma could crash while refreshing the list of nearby wireless networks. (David Edmundson, KDE Bugzilla #519739)

Fixed an issue that reset custom tiling layouts on portrait-rotated monitors after restarting the system. (Hynek Schlindenbuch, KDE Bugzilla #514355)

Searching for an app in the Kicker Application Menu widget and launching one that isn't the first item in the search results list no longer launches it twice. (Christoph Wolk, KDE Bugzilla #521001)

Plasma 6.7

Fixed a regression in VNC-based screen sharing that prevented the Ctrl and Alt modifier from being sent to the machine being controlled. (David Edmundson, KDE Bugzilla #519690)

Fixed an issue that could make Plasma freeze if you quickly switch months in the Digital Clock widget by dragging on the calendar view multiple times in quick succession. (Sander Wolswijk, KDE Bugzilla #511028)

Made the Task Manager Widget's "Move to Desktop" feature work on grouped tasks. (Hynek Schlindenbuch, KDE Bugzilla #520777)

Fixed two issues with the Grouping widget: not re-appearing instantly after undoing deleting it, and a phantom header remaining visible after removing the last app from it. (Tobias Fella, KDE Bugzilla #517044 and KDE Bugzilla #517043)

Fixed a variety of issues with icons or list items not properly reversing themselves when using a right-to-left language like Arabic or Hebrew. (Tobias Fella and Akseli Lahtinen, KDE Bugzilla #518932, KDE Bugzilla #518909, KDE Bugzilla #518935, KDE Bugzilla #518835, and KDE Bugzilla #518837)

Made System Settings raise and focus its window as expected when launched using a higher-than-default level of focus stealing prevention. (Kai Uwe Broulik, systemsettings MR #408)

Frameworks 6.27

Switching between light and dark Global Themes no longer sometimes results in various UI elements in Plasma only changing their colors halfway. (Marco Martin, KDE Bugzilla #503671)

Fixed an issue saving and retrieving config data in cases where a setting has been given a system-wide default value by the OS vendor that differs from KDE's own default value. (Nicolas Fella, KDE Bugzilla #509416)

Fixed various related issues with network shares auto-mounted using systemd, including the trash not working properly, and appearing strangely in GUI apps. (Oliver Schramm, KDE Bugzilla #518012)

Fixed an issue that made it impossible to rename files on the desktop via the "Suggest new name" feature in the overwrite dialog. (Akseli Lahtinen, KDE Bugzilla #509461)

How you can help

KDE has become important in the world, and your time and contributions have helped us get there. As we grow, we need your support to keep KDE sustainable.

Would you like to help put together this weekly report? Introduce yourself in the Matrix room and join the team!

Beyond that, you can help KDE by directly getting involved in any other projects. Donating time is actually more impactful than donating money. Each contributor makes a huge difference in KDE - you are not a number or a cog in a machine! You don't have to be a programmer, either; many other opportunities exist.

You can also help out by making a donation! This helps cover operational costs, salaries, travel expenses for contributors, and in general just keeps KDE bringing Free Software to the world.

To get a new Plasma feature or a bug fix mentioned here

Push a commit to the relevant merge request on invent.kde.org.

06 Jun 2026 12:00am GMT

05 Jun 2026

feedPlanet KDE | English

Web Review, Week 2026-23

Let's go for my web review for the week 2026-23.


"But it happened."

Tags: tech, google, attention-economy, business

Good point, the booing on Eric Schimidt's commencement speech is likely not just about him talking about AI at some point. You see, the man has very heavy baggage… He's one of the architects of the current dystopia but won't acknowledge it.

https://www.youtube.com/watch?v=tlQ7EoJDTQY


AI didn't break the web. The dotcons did - AI just turned up the volume

Tags: tech, copyright, commons, web, ai, machine-learning, gpt, enclosure

Indeed the trend wasn't new. It's "just" the icing on the cake from the enclosure point of view.

https://hamishcampbell.com/ai-didnt-break-the-web-the-dotcons-did-ai-just-turned-up-the-volume/


Unlawful by design: Exposing the human rights costs of generative AI

Tags: tech, ai, machine-learning, gpt, ethics, law

When Amnesty International feels like it has to publish a 44 pages briefing pointing out what's wrong with your approach and business… it'd be nice to pay attention.

https://www.amnesty.org/en/documents/pol40/0996/2026/en/


About rsync slopocalypse

Tags: tech, ai, machine-learning, copilot, quality

Indeed, if the rsync maintainer can't handle a coding assistant properly… who can?

https://teh.entar.net/@spacehobo/116659545246426837


When Other Games Chased Polygons, Blade Runner Chased Atmosphere

Tags: tech, game, graphics, 2d, 3d

There was an era of hybrid techniques in video games before it mostly went full real-time 3D. It gave interesting results, here is an example.

https://gardinerbryant.com/when-other-games-chased-polygons/


Avoid using "<![CDATA[ ... ]]>" in RSS

Tags: tech, blog, rss

Good point indeed, need to review my own feed next time I get the chance.

https://waspdev.com/articles/2026-05-11/avoid-using-cdata-in-rss


You Don't Love systemd Timers Enough

Tags: tech, linux, systemd, time

Good primer on systemd timers. Indeed it's really one of the nice systemd features.

https://blog.tjll.net/you-dont-love-systemd-timers-enough/


5 PostgreSQL locking behaviors that trip people up

Tags: tech, postgresql, databases, distributed

Mind those traps when dealing with such a database. There are locks you don't necessarily expect.

https://dev.to/shinyakato_/5-postgresql-locking-behaviors-that-trip-people-up-4k7n


You probably don't need Yocto, and that's fine

Tags: tech, linux, embedded, yocto, debian

Indeed, teams reach out to Yocto by default a bit too much. It's good to have an idea on when you really needed and when you can go for simpler options.

https://sigma-star.at/blog/2026/05/you-probably-dont-need-yocto-and-thats-fine/


Nine Ways to Do Inheritance in Rust, a Language Without Inheritance

Tags: tech, rust, type-systems, object-oriented

Some of the examples lean on macro trickery. Still this gives a good example of the flexibility you get with the trait system.

https://medium.com/@carlmkadie/nine-ways-to-do-inheritance-in-rust-a-language-without-inheritance-14825bf1e215


The C++ Standard Library Has Been Walking Itself Back for Fifteen Years, and the Receipts Are Public

Tags: tech, c++, standard, culture

Cold and harsh look at how the C++ standard library evolves. There's indeed a problem in the fact that nothing gets removed ever.

https://hftuniversity.com/post/the-c-standard-library-has-been-walking-itself-back-for-fifteen-years-and-the-receipts-are-public


You Must Fix Your Asserts

Tags: tech, reliability, failure, debugging

Good point, disabling asserts in production is not the best default position to have.

https://kristoff.it/blog/fix-your-asserts/


What (almost) Everyone Gets Wrong About TDD & BDD

Tags: tech, tdd, atdd, history

Good summary of how the terms evolved. They are more tied to each other than most people think.

https://antonymarcano.substack.com/p/what-almost-everyone-gets-wrong-about-c05


normalize patience

Tags: tech, culture, patience, time, productivity, attention-economy

Things which matter take time. The calls to productivity and technology pushing us toward faster response on everything is killing what makes our humanity.

https://rnotte.art/normalize-patience/



Bye for now!

05 Jun 2026 4:39pm GMT

04 Jun 2026

feedPlanet KDE | English

Week 2 — Porting KeepSecret to the Kirigami ActionCollection API

This week, I completed the port of KeepSecret's actions to the new org.kde.kirigami.actioncollection API from kirigami-app-components, a recently introduced library developed by Marco Martin (notmart).

Before working on this task, actions were defined separately throughout the UI. With ActionCollection, I could define each action once in a central place and then reuse it wherever it was needed. This makes the code easier to maintain and also integrates KeepSecret with KDE's standard shortcut system, allowing users to configure shortcuts through the usual KDE interface.

The main change was creating a dedicated Actions.qml file with AC.ActionCollectionManager as the root element. Inside it, actions are now centrally defined across three collections - one for the wallet list, one for wallet contents, and one for item details. These include actions such as New Wallet, New Entry, Search, Lock, Unlock, Copy Password, Save, Revert, and Delete.

During review, additional actions were added, dependencies were simplified, and Flatpak build issues were addressed. Since kirigami-app-components is still very new, some CI and packaging adjustments were needed before everything built correctly.

The merge request !29 has now been reviewed, approved, and merged into KeepSecret.

Next up is the Import/Export feature - I'll be studying KeepSecret's wallet data structures and designing the file format this week.

04 Jun 2026 7:54pm GMT

Community Bonding + Week 1 Status Update | GSoC '26

Hello Reader!

In case you don't know me (quite likely 😆), I am Ojas Maheshwari (@the_epicman:matrix.org) and I am currently working in the Google Summer of Code program for the KDE community on a project about Font Subsetting in Poppler under my mentor Albert Astals Cid.

Community Bonding

If I am being honest, I had already bonded with the Poppler community before GSoC started 😅

I had a lot of conversations with Albert, Sune, lbaudin and ats, and they already helped me a lot with my technical problems with my contributions prior to GSoC :D

However, I also managed to bond with other fellow GSoC contributors this summer so it's a win in my book :D

Week 1

I learnt a lot about how PDF files work this week.

Technical terms like Indirect Objects, Default Appearance, Appearance Streams which used to sound confusing to me before finally clicked.

I got more comfortable with traversing and using PDF data structures such as Objects, Arrays, Dicts, Streams etc.

The Happy News is that I got the Font Subsetting to work for FreeText Annotations.

I have raised a Draft MR which should be ready-to-review by end of this week and my plan is to get it fully correct and merged first and then move on to doing the same thing for forms.

A picture of my IDE containing my work
Code screenshot to make the blog look cooler

How it works

If you are interested to know what my current approach is:

std::map<Ref, Ref> FontSubsetter::getSubsetFonts(const std::map<std::shared_ptr<const GfxFont>, std::string> &fontMappings) const

Thanks for reading

Although this blog might look small, it took me more than 1.5 hours to write this because I kept writing and deleting things. I am hoping I get better at writing blogs in the future.

But anyways, thanks for reading!
And have a great day !
Byee 😃!

04 Jun 2026 5:39pm GMT

Lessons Learnt from Our BI Journey: From Open Source to SDV Products Development

Luis Cañas Díaz and I shared lessons from our BI journey at the Eclipse Foundation SDV webinar - from open source to automotive. Methodology, real use cases, and hard-won lessons on data, metrics, and insights.

04 Jun 2026 5:15pm GMT

How long does it take for an Item to become visible?

How long does it take for an Item to become visible?

Frames skipped counter in application_QML_Blog_Javier

Frames skipped counter in application

How long does it take for an Item that you've just loaded to become visible? Answering this question allows for a way to detect what some users would perceive as "frame drops". I write that in quotes because Qt Quick only draws frames when needed, meaning it doesn't drop frames; but it can show them later than one would expect. That is what we would like to identify: When components are drawn late, and by how many milliseconds or frames are they late?

I've come up with a simple solution - code below the article - on how to measure this. Items being measured must inherit a class based of QQuickItem that has a connection on QQuickItem::visibleChanged. Its visible property should be false by default. When visible becomes true, a slot will start measuring elapsed time and create a direct connection to QQuickWindow::afterFrameEnd. Once the scene graph has submitted a frame, the slot will take the measurement and disconnect the connection that triggered it to prevent further frames from triggering this event.

That alone isn't enough, however. If there were other elements on the scene being animated (say from the render thread via an Animator), those would trigger a frame swap before our item would have had a chance to be drawn, causing our measurement to be taken prematurely.
We need a way of knowing when the frame that draws our component is the one that got swapped into view. Enter QQuickItem::ensurePolished. Calling this function ensures that QQuickItem::updatePolish will be called when the scene graph is ready to render our item. We override QQuickItem::updatePolish and use it to set a flag that'll tell us that the next frame to come be displayed will correspond to the component we're measuring. Lastly, we read this flag during the next call to QQuickWindow::afterFrameEnd, effectively using it to trigger the elapsed time measurement only when our item is swapped onto the screen.

There is a variable amount of time between the last user interaction and the moment a frame can be rendered; because of that, a measurement in milliseconds is only accurate to the average time that it takes for one frame to be rendered immediately after the previous frame. That turns out to be 1 second divided by the display's refresh rate. We can use Qscreen::refreshRate, which gives us this value in hertz. For a 60hz display, a frame's time (T) would be 1000 ms / 60 hz ≃ 16 ms. Any time measured that is between zero and T (16 ms) would mean an instant frame swap. If we divide the measured time by T, and apply a floor function to the result, we get the number of frames dropped while making the component visible, which is a more consistent measurement than the number of milliseconds passed. For a well optimized program the output would be zero, one, or a positive integer very close to that. For more information about the rendering process, you can read scene graph and rendering from Qt's documentation.

Make C++ items visible during their instantiation, or they won't show up on screen. This QQuickItem subclass is different from its parent in that the Item is not visible by default. We set visible to false from the C++ constructor because the order in which initial properties are evaluated and assigned in QML differs depending on the approach used to instantiate the Item and assign its initial properties. You may set the initial visible property of an item in QML to false, then make it true during its instantiation as a delegate somewhere, only for the QML Engine to optimally evaluate its initial value solely to true, causing the visibleChanged signal to never be emitted because there was, effectively, no change to the visible property. Setting the visibility to false from the constructor in C++ is a simple way to guarantee that visibleChanged will be triggered upon any initialization of the visible property in QML.

The code for the QQuickItem subclass described in this article is documented below. Hope you find it useful. Reach out to us if you need help profiling software, would like to receive our training courses, or need help developing tools such as this.

Best regards, Javier

Code

#include <QQuickItem>
#include <QQuickWindow>
class TimedItem : public QQuickItem
{
Q_OBJECT
QML_ELEMENT
Q_PROPERTY(qint64 timeToDisplay READ timeToDisplay NOTIFY timeToDisplayChanged FINAL)
public:
TimedItem(QQuickItem* parent = nullptr) : QQuickItem(parent),
  m_elapsedTimer(new QElapsedTimer())
{
setVisible(false);
// When made visible, measure time to display
QObject::connect(this, &QQuickItem::visibleChanged, this, &TimedItem::startMeasuringTimeToDisplay, Qt::DirectConnection);
};
qint64 timeToDisplay() {
return m_timeToDisplay;
};
signals:
void timeToDisplayChanged();
private:
void startMeasuringTimeToDisplay()
{
if (isVisible())
{
// Reset
m_frameReady = false;
// Attempt to take measurement after frame swaps
QObject::connect(window(), &QQuickWindow::afterFrameEnd, this, &TimedItem::measure,
static_cast<Qt::ConnectionType>(Qt::DirectConnection | Qt::UniqueConnection));
// Force polish, ensuring elapsed measurement is taken on the right frame
ensurePolished();
// Take initial measurement
m_elapsedTimer->start();
}
}
void updatePolish()
{
// The frame for this component will be rendered after this
m_frameReady = true;
}
void measure()
{
// This will be called for every frame until the right frame has been rendered
if (m_frameReady)
{
// Measure elapsed time
m_timeToDisplay = m_elapsedTimer->elapsed();
// Prevent measuring further frame
QObject::disconnect(window(), &QQuickWindow::afterFrameEnd, this, &TimedItem::measure);
// Propagate measured time
emit timeToDisplayChanged();
}
}
private:
qint64 m_timeToDisplay = 0;
QElapsedTimer *m_elapsedTimer;
bool m_frameReady = false;
};

The post How long does it take for an Item to become visible? appeared first on KDAB.

04 Jun 2026 2:18pm GMT

Qt Creator 20 RC released

We are happy to announce the release of Qt Creator 20 RC!

04 Jun 2026 9:41am GMT

KDE Gear 26.04.2

Over 180 individual programs plus dozens of programmer libraries and feature plugins are released simultaneously as part of KDE Gear.

Today they all get new bugfix source releases with updated translations, including:

Distro and app store packagers should update their application packages.

04 Jun 2026 12:00am GMT