CINXE.COM

English - Planet KDE

<!doctype html><html lang=en itemscope itemtype=http://schema.org/WebPage><head><meta name=generator content="Hugo 0.141.0"><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=description content="Planet KDE site providing newest news from the KDE Project"><title>English - Planet KDE</title> <link href=https://planet.kde.org/index.xml rel=alternate type=application/rss+xml title="English - Planet KDE"><link href=https://planet.kde.org/atom.xml rel=alternate type=application/atom+xml title="English - Planet KDE"><meta property="og:url" content="https://planet.kde.org/"><meta property="og:site_name" content="Planet KDE"><meta property="og:title" content="Planet KDE"><meta property="og:description" content="Planet KDE site providing newest news from the KDE Project"><meta property="og:locale" content="en"><meta property="og:type" content="website"><meta property="og:image" content="https://planet.kde.org/img/planet.png"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://planet.kde.org/img/planet.png"><meta name=twitter:title content="Planet KDE"><meta name=twitter:description content="Planet KDE site providing newest news from the KDE Project"><link rel=canonical href=https://planet.kde.org/><link rel=alternate hreflang=es href=https://planet.kde.org/es/ title=Español><link rel=alternate hreflang=tr href=https://planet.kde.org/tr/ title=Türkçe><link rel=alternate hreflang=ca href=https://planet.kde.org/ca/ title=Català><link rel=alternate hreflang=fr href=https://planet.kde.org/fr/ title=Français><link rel=alternate hreflang=nl href=https://planet.kde.org/nl/ title=Nederlands><link rel=alternate hreflang=uk href=https://planet.kde.org/uk/ title=Українська><link rel=alternate hreflang=th href=https://planet.kde.org/th/ title=ภาษาไทย><link rel=alternate hreflang=it href=https://planet.kde.org/it/ title=Italiano><link rel=alternate hreflang=sv href=https://planet.kde.org/sv/ title=Svenska><link rel=alternate hreflang=eu href=https://planet.kde.org/eu/ title=Euskara><link rel=alternate hreflang=pt-pt href=https://planet.kde.org/pt-pt/ title=Português><link rel=alternate hreflang=ru href=https://planet.kde.org/ru/ title=Русский><link rel=alternate hreflang=sk href=https://planet.kde.org/sk/ title=Slovenčina><link rel=alternate hreflang=de href=https://planet.kde.org/de/ title=Deutsch><link rel=stylesheet href=https://planet.kde.org/scss/bootstrap.f4bff006f71a950c237d9a418331316d26adc1280b4e512af4cce78efb1846ec.css integrity="sha256-9L/wBvcalQwjfZpBgzExbSatwSgLTlEq9MznjvsYRuw="><link rel=preload href=https://planet.kde.org/fonts/Inter.woff2 as=font crossorigin=anonymous><link rel=preload href=https://planet.kde.org/fonts/glyph/glyph.ttf?5ea9rb as=font crossorigin=anonymous><link rel=stylesheet type=text/css href=https://cdn.kde.org/breeze-icons/icons.css><link rel=stylesheet href=https://planet.kde.org/scss/index.min.53082ffce785da39a89295b83fa4d8488d51bed2f58a6fa0eb05019b8e962206.css></head><body><header id=KGlobalHeader class="header clearfix"><a class=visually-hidden href=#main>Skip to content</a><nav class="navbar navbar-expand-lg"><a class="app-logo navbar-brand" href=https://planet.kde.org/><img src=https://planet.kde.org/img/planet.svg alt=Logo> </a><button class=navbar-toggler type=button data-bs-toggle=collapse data-bs-target=#navbarsExampleDefault aria-controls=navbarsExampleDefault aria-expanded=false aria-label="Toggle navigation"> <span class=navbar-toggler-icon></span></button><div class="collapse navbar-collapse" id=navbarsExampleDefault><ul class="navbar-nav col"><li class=nav-item><a class=nav-link href=https://invent.kde.org/websites/planet-kde-org><span>Add your own feed</span></a></li></ul><svg style="display:none"><symbol id="search-icon"><path d="M11.742 10.344a6.5 6.5.0 10-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 001.415-1.414l-3.85-3.85a1.007 1.007.0 00-.115-.1zM12 6.5a5.5 5.5.0 11-11 0 5.5 5.5.0 0111 0z"/></symbol></svg><div class=under-lg-search><form action=https://planet.kde.org/search class=form-inline><input class="form-control search-input" name=s type=text placeholder=Search data-search required title=" " oninvalid='this.setCustomValidity("Please provide a query with at least 3 characters")' oninput='this.setCustomValidity("")' minlength=3></form></div><ul class=navbar-nav><li class="nav-item dropdown lg-search"><a class="nav-link dropdown-toggle" role=button id=search-dropdown-button data-bs-toggle=dropdown aria-expanded=false><svg class="bi theme-icon"><use href="#search-icon"/></svg></a><div class=dropdown-menu aria-labelledby=search-dropdown-button><form action=https://planet.kde.org/search class="me-1 row search-form"><input class="form-control col-auto ms-auto search-input" name=s type=text placeholder=Search data-search required title=" " oninvalid='this.setCustomValidity("Please provide a query with at least 3 characters")' oninput='this.setCustomValidity("")' minlength=3> <button class="btn col-auto" type=submit><svg class="bi theme-icon"><use href="#search-icon"/></svg></button></form></div></li></ul><ul class="navbar-nav feed-buttons"><span><a href=https://planet.kde.org/index.xml class="btn btn-sm btn-warning align-self-center">RSS <i class="icon icon_rss"></i> </a><a href=https://planet.kde.org/atom.xml class="btn btn-sm btn-warning align-self-center">Atom <i class="icon icon_rss"></i> </a><a href=https://t.me/kdeplanet class="btn btn-sm btn-primary align-self-center">Telegram <i class="icon icon_document-send"></i></a></span></ul></div></nav></header><div id=main><div class="bg-light py-3 mb-3 border-bottom"><div class=container><div class="col-10 mx-auto my-auto text-center"><h2>Welcome to Planet KDE</h2><h5>This is a feed aggregator that collects what the contributors to the <a href=https://kde.org>KDE community</a> are writing on their respective blogs, in different languages</h5></div><div class="col-12 text-center mt-3"><a class=mx-2 hreflang=ca lang=ca href=https://planet.kde.org/ca/ onclick=storeLang(event)>Català </a><a class=mx-2 hreflang=de lang=de href=https://planet.kde.org/de/ onclick=storeLang(event)>Deutsch </a><a class=mx-2 hreflang=en lang=en href=https://planet.kde.org/ onclick=storeLang(event)><mark>English</mark> </a><a class=mx-2 hreflang=es lang=es href=https://planet.kde.org/es/ onclick=storeLang(event)>Español </a><a class=mx-2 hreflang=eu lang=eu href=https://planet.kde.org/eu/ onclick=storeLang(event)>Euskara </a><a class=mx-2 hreflang=fr lang=fr href=https://planet.kde.org/fr/ onclick=storeLang(event)>Français </a><a class=mx-2 hreflang=it lang=it href=https://planet.kde.org/it/ onclick=storeLang(event)>Italiano </a><a class=mx-2 hreflang=nl lang=nl href=https://planet.kde.org/nl/ onclick=storeLang(event)>Nederlands </a><a class=mx-2 hreflang=pt-pt lang=pt-pt href=https://planet.kde.org/pt-pt/ onclick=storeLang(event)>Português </a><a class=mx-2 hreflang=sk lang=sk href=https://planet.kde.org/sk/ onclick=storeLang(event)>Slovenčina </a><a class=mx-2 hreflang=sv lang=sv href=https://planet.kde.org/sv/ onclick=storeLang(event)>Svenska </a><a class=mx-2 hreflang=tr lang=tr href=https://planet.kde.org/tr/ onclick=storeLang(event)>Türkçe </a><a class=mx-2 hreflang=ru lang=ru href=https://planet.kde.org/ru/ onclick=storeLang(event)>Русский </a><a class=mx-2 hreflang=uk lang=uk href=https://planet.kde.org/uk/ onclick=storeLang(event)>Українська </a><a class=mx-2 hreflang=th lang=th href=https://planet.kde.org/th/ onclick=storeLang(event)>ภาษาไทย</a></div></div></div><div class="btn-group-vertical post-nav"><button type=button class="btn btn-default" onclick=navPosts(-1) title="Go up one post"> <i class="icon icon_go-up-skip"></i> </button> <button type=button class="btn btn-default" onclick=navPosts(1) title="Go down one post"> <i class="icon icon_go-down-skip"></i></button></div><div class="container my-4 p-0"><ul class=pagination><li class="page-item active"><a class=page-link href=https://planet.kde.org/>1</a></li><li class=page-item><a class=page-link href=https://planet.kde.org/page/2/>2</a></li><li class=page-item><a class=page-link href=https://planet.kde.org/page/3/>3</a></li><li class="page-item disabled"><span aria-hidden=true>&nbsp;&mldr;&nbsp;</span></li><li class=page-item><a class=page-link href=https://planet.kde.org/page/106/>106</a></li></ul><div class=single-post id=1><h3>Monday, 7 April 2025</h3><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://www.scarlettgatelymoore.dev/kde-snap-updates-kubuntu-updates-more-life-updates/ target=_blank rel="noopener noreferrer">KDE Snap Updates, Kubuntu Updates, More life updates!</a> <a href=https://planet.kde.org/scarlett-gately-moore-2025-04-07-kde-snap-updates-kubuntu-updates-more-life-updates/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://www.scarlettgatelymoore.dev/category/open-source-software/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/sgclark.png></a><div class="d-flex flex-column"><span><a href=https://www.scarlettgatelymoore.dev/category/open-source-software/ target=_blank rel="noopener noreferrer">Scarlett Gately Moore</a> <a href=https://webchat.kde.org/ target=_blank><span class="badge bg-secondary"><img width=12px height=12px src=https://planet.kde.org/img/matrix.svg> @sgmoore:kde.org</span> </a></span><span class=text-muted>12:13 +00:00</span></div><a href=https://www.scarlettgatelymoore.dev/category/open-source-software/feed/ target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Kubuntu, KDE, Debian, KDE Neon, Ubuntu Snap Developer Blog">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><div class=wp-block-image><figure class="aligncenter size-full is-resized"><img fetchpriority=high decoding=async width=1530 height=2040 src=https://www.scarlettgatelymoore.dev/wp-content/uploads/331261813_890048595635057_5783061028004673687_n.jpg alt="Icy morning Witch Wells Az" class=wp-image-152 style=width:451px;height:auto><figcaption class=wp-element-caption>Icy morning Witch Wells Az</figcaption></figure></div><p><strong>Life:</strong></p><p>Last week we were enjoying springtime, this week winter has made a comeback! Good news on the broken arm front, the infection is gone, so they can finally deal with the broken issue again. I will have a less invasive surgery April 25th to pull the bones back together so they can properly knit back together! If you can spare any change please consider a donation to my continued healing and recovery, or just support my work <img src=https://s.w.org/images/core/emoji/15.0.3/72x72/1f642.png alt=🙂 class=wp-smiley style=height:1em;max-height:1em></p><ul class=wp-block-list><li><a target=_blank href=https://gofund.me/561ae227 target=_blank rel="noreferrer noopener">GoFundMe</a></li><li><a target=_blank href=https://www.patreon.com/c/sgmoore target=_blank rel="noreferrer noopener">Patreon</a></li><li><a target=_blank href="https://github.com/sponsors/ScarlettGatelyMoore?o=sd&amp;sc=t" target=_blank rel="noreferrer noopener">Github</a></li><li><a target=_blank href=https://donorbox.org/open-source-survival-fund target=_blank rel="noreferrer noopener">Donorbox</a></li></ul><p><strong>Kubuntu:</strong></p><p>While testing Beta I came across some crashy apps ( Namely PIM ) due to apparmor. I have uploaded fixed profiles for kmail, akregator, akonadiconsole, konqueror, tellico</p><p><strong>KDE Snaps:</strong></p><p>Added sctp support in Qt <a target=_blank href=https://invent.kde.org/neon/snap-packaging/kde-qt6-core-sdk/-/commit/bbcb1dc39044b930ab718c8ffabfa20ccd2b0f75>https://invent.kde.org/neon/snap-packaging/kde-qt6-core-sdk/-/commit/bbcb1dc39044b930ab718c8ffabfa20ccd2b0f75</a></p><p>This will allow me to finish a pyside6 snap and fix FreeCAD build.</p><p>Changed build type to Release in the kf6-core24-sdk which will reduce the size of kf6-core24 significantly.</p><p>Fixed a few startup errors in kf5-core24 and kf6-core24 snapcraft-desktop-integration.</p><p>Soumyadeep fixed wayland icons in <a target=_blank href=https://invent.kde.org/neon/snap-packaging/kf6-core-sdk/-/merge_requests/3>https://invent.kde.org/neon/snap-packaging/kf6-core-sdk/-/merge_requests/3</a></p><p>KDE Applications 25.03.90 RC released to &#8211;candidate ( I know it says 24.12.3, version won&#8217;t be updated until 25.04.0 release )</p><p>Kasts core24 fixed in &#8211;candidate<img decoding=async width=600 height=492 class=wp-image-1866 style=width:600px src=https://www.scarlettgatelymoore.dev/wp-content/uploads/kasts.png alt srcset="https://www.scarlettgatelymoore.dev/wp-content/uploads/kasts.png 944w, https://www.scarlettgatelymoore.dev/wp-content/uploads/kasts-300x246.png 300w, https://www.scarlettgatelymoore.dev/wp-content/uploads/kasts-768x630.png 768w" sizes="(max-width: 600px) 100vw, 600px"></p><p>Kate now core24 with Breeze theme! &#8211;candidate <img decoding=async width=600 height=420 class=wp-image-1867 style=width:600px src=https://www.scarlettgatelymoore.dev/wp-content/uploads/kate-1.png alt srcset="https://www.scarlettgatelymoore.dev/wp-content/uploads/kate-1.png 1695w, https://www.scarlettgatelymoore.dev/wp-content/uploads/kate-1-300x210.png 300w, https://www.scarlettgatelymoore.dev/wp-content/uploads/kate-1-1024x716.png 1024w, https://www.scarlettgatelymoore.dev/wp-content/uploads/kate-1-768x537.png 768w, https://www.scarlettgatelymoore.dev/wp-content/uploads/kate-1-1536x1075.png 1536w" sizes="(max-width: 600px) 100vw, 600px"></p><p>Neochat: Fixed missing QML and 25.04 dependencies in &#8211;candidate <img loading=lazy decoding=async width=600 height=471 class=wp-image-1868 style=width:600px src=https://www.scarlettgatelymoore.dev/wp-content/uploads/neochat-1.png alt srcset="https://www.scarlettgatelymoore.dev/wp-content/uploads/neochat-1.png 1124w, https://www.scarlettgatelymoore.dev/wp-content/uploads/neochat-1-300x235.png 300w, https://www.scarlettgatelymoore.dev/wp-content/uploads/neochat-1-1024x804.png 1024w, https://www.scarlettgatelymoore.dev/wp-content/uploads/neochat-1-768x603.png 768w" sizes="auto, (max-width: 600px) 100vw, 600px"></p><p>Kdenlive now with Galxnimate animations! &#8211;candidate</p><p>Digikam 8.6.0 now with scanner support in &#8211;stable</p><p>Kstars 3.7.6 released to &#8211;stable for realz, removed store rejected plugs.</p><p>Thanks for stopping by!</p></div></div></div></div></div><div class=single-post id=2><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://www.qt.io/blog/navigation-in-the-qt-framework-docs target=_blank rel="noopener noreferrer">Navigation in Qt 6.9 documentation</a> <a href=https://planet.kde.org/qt-dev-loop-2025-04-07-navigation-in-qt-6-9-documentation/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://www.qt.io/blog/tag/loop/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/qt_logo.png></a><div class="d-flex flex-column"><span><a href=https://www.qt.io/blog/tag/loop/ target=_blank rel="noopener noreferrer">Qt Dev Loop</a> </span><span class=text-muted>07:21 +00:00</span></div><a href=https://www.qt.io/blog/tag/loop/rss.xml target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Explore the Qt Blog for the latest insights on e.g. Qt Creator, your go-to source for cross-platform development tips and updates.">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><div class=hs-featured-image-wrapper><a target=_blank href=https://www.qt.io/blog/navigation-in-the-qt-framework-docs title class=hs-featured-image-link><img src=https://www.qt.io/hubfs/_Website_Blog/Qt_8M0A6557_overlay.jpg alt="Navigation in Qt 6.9 documentation" class=hs-featured-image style="width:auto!important;max-width:50%;float:left;margin:0 15px 15px 0"></a></div><p><span>In this blog post, I would like to talk about the improvements in documentation navigation you can see in the </span><a target=_blank href=https://doc.qt.io/qt-6/index.html><span>Qt Framework's documentation</span></a><span> for the Qt 6.9 release.</span><span>&nbsp;</span></p><img src="https://track.hubspot.com/__ptq.gif?a=149513&amp;k=14&amp;r=https%3A%2F%2Fwww.qt.io%2Fblog%2Fnavigation-in-the-qt-framework-docs&amp;bu=https%253A%252F%252Fwww.qt.io%252Fblog&amp;bvt=rss" alt width=1 height=1 style=min-height:1px!important;width:1px!important;border-width:0!important;margin-top:0!important;margin-bottom:0!important;margin-right:0!important;margin-left:0!important;padding-top:0!important;padding-bottom:0!important;padding-right:0!important;padding-left:0!important></div></div></div></div></div><div class=single-post id=3><h3>Sunday, 6 April 2025</h3><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://pointieststick.com/2025/04/06/tools-that-just-work-until-they-dont/ target=_blank rel="noopener noreferrer">Tools that Just Work™ …until they don’t</a> <a href=https://planet.kde.org/nate-graham-2025-04-06-tools-that-just-worktm-until-they-dont/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://pointieststick.com target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/ngraham.png></a><div class="d-flex flex-column"><span><a href=https://pointieststick.com target=_blank rel="noopener noreferrer">Nate Graham</a> <span class="badge bg-dark"><img src=https://planet.kde.org/img/irc.svg> ngraham</span> </span><span class=text-muted>14:41 +00:00</span></div><a href=https://pointieststick.com/feed/ target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Below is a brief look at recent changes in the KDE projects I work on and follow!">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p>As a former Apple guy, it pains me a bit to say this, but I&#8217;m coming to believe that <strong>the whole &#8220;It Just Works&#8221; thing is a temporary illusion.</strong></p><p>Oh, it can be achieved! But the real trick lies in keeping it. This came to mind while I was watching <a target=_blank href="https://www.youtube.com/watch?v=gCXL7N9NNq8">a video about one of Bambu Labs&#8217; very impressive-looking Apple-style &#8220;It Just Works&#8221; 3D printers</a>, and felt myself drawing a parallel between the world of 3D printing and our more familiar KDE world.</p><p>As I <a target=_blank href=https://pointieststick.com/2025/03/10/personal-and-professional-updates-announcing-techpaladin-software/>mentioned recently</a>, my first real introduction to the world of free software was 15 years ago with 3D printers, back when the field was dominated by <a target=_blank href=https://en.wikipedia.org/wiki/RepRap>RepRap</a> hackers designing open hardware and software. And last year, I bought a new printer for the first time in over a decade. After drooling over a bunch of very cool <a target=_blank href=https://www.vorondesign.com/>Vorons</a>, I eventually settled on a <a target=_blank href=https://blog.prusa3d.com/announcing-original-prusa-mk4_76585/>Prusa Mk4</a> instead of a different Bambu printer that looked very impressive at the time: printing faster, having an enclosed chamber and smoother wireless functionality, being cheaper, and looking prettier.</p><p>But the Prusa felt like KDE: simple by default, but powerful when needed. Big friendly community. Built by a company led by one of the early RepRap hardware hackers. Buying it was investing in the people helping to keep their part of the industry open, rather than private. No spyware, no lock-in, no phone app or internet connection needed. Can&#8217;t be bricked if the company goes out of business. Open, hackable, humane, trustworthy.</p><p>I&#8217;m making this sound like the decision was some sort of ideological compromise, but the Prusa Mk4 is also <em>excellent</em>. It&#8217;s as good or better in many ways, almost as much in others, and its UX still pretty polished. Maybe it&#8217;s not <em>Apple</em> polished, but it&#8217;s very easy to use and produces great prints. I did have to invest a bit more time and money into the Prusa upfront, but now I have a tool I can truly rely on, not because it&#8217;s got a seamless auto-updating cloud-based AI-enabled UI, but because it <em>doesn&#8217;t</em>.</p><p>And since then, both companies went in exactly in the directions I expected: Prusa released a new version of their printer that&#8217;s cheaper and better, plus a <a target=_blank href=https://www.prusa3d.com/product/original-prusa-mk4-to-mk4s-upgrade-kit-7/>$100 kit for existing owners</a> so they don&#8217;t have to buy a whole new thing… while Bambu released a firmware upgrade <a target=_blank href=https://wiki.rossmanngroup.com/wiki/Bambu_Lab_Authorization_Control_System>that lets them control how your Bambu printer can be used</a>.</p><p>It Just Works… until it doesn&#8217;t.</p><p>I&#8217;m glad I went with the Prusa, the same way we&#8217;re all glad we went with KDE over Apple or Microsoft. In KDE we know this well, so it&#8217;s up to us to spread the message to everyone else: <strong>resist the lure of &#8220;easier now, screwed later.&#8221;</strong> This is where the big commercial offerings start to fail: anything proprietary and closed source that Just Works may simply stop working at any time. You&#8217;ll invest in it, and it&#8217;ll work out great for a while, but then start to worsen, break, or exploit you.</p><p>Even as we invest in making our software easier to use, we need to level the playing field by advertising our advantages in ownership, privacy, personalization, and freedom. Our software is trustworthy because it can&#8217;t be taken away by us or anyone else; you&#8217;ll be able to use it over the long term, developing skills and efficiencies over time. Investing in KDE is investing in yourself, rather than someone else&#8217;s bottom line.</p></div></div></div></div></div><div class=single-post id=4><h3>Saturday, 5 April 2025</h3><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://www.volkerkrause.eu/2025/04/05/osm-fossgis-conference-2025.html target=_blank rel="noopener noreferrer">FOSSGIS Conference 2025</a> <a href=https://planet.kde.org/volker-krause-2025-04-05-fossgis-conference-2025/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://www.volkerkrause.eu/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/vkrause.jpg></a><div class="d-flex flex-column"><span><a href=https://www.volkerkrause.eu/ target=_blank rel="noopener noreferrer">Volker Krause</a> <a href=https://webchat.kde.org/ target=_blank><span class="badge bg-secondary"><img width=12px height=12px src=https://planet.kde.org/img/matrix.svg> @vkrause:kde.org</span> </a></span><span class=text-muted>07:45 +00:00</span></div><a href=https://www.volkerkrause.eu/feed.xml target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Thoughts on KDE, Qt, Free Software and software engineering.">Atom <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p>Last week I attended this year’s <a target=_blank href=https://fossgis-konferenz.de/2025/>FOSSGIS Konferenz</a> in Münster, Germany, focusing on public transport and indoor navigation topics.</p><figure><img src=https://www.volkerkrause.eu/assets/posts/203/fossgis-konferenz-2025-group-photo.jpg alt="Group photo of the FOSSGIS 2025 conference attendees." loading=lazy><figcaption>Photo by FOSSGIS e.V./Sergey Mukhametov, CC-BY-SA</figcaption></figure><h3 id=indoor-navigation>Indoor Navigation</h3><p>We use <a target=_blank href=https://commits.kde.org/kosmindoormap>indoor map rendering</a> and <a href=//www.volkerkrause.eu/2024/03/02/osm-hackweekend-karlsruhe-february-2024.html>indoor routing</a> in <a target=_blank href=https://apps.kde.org/itinerary>KDE Itinerary</a> for e.g. train stations. There were a number of interesting talks and discussions in that area:</p><ul><li>A 2.5D visualization of buildings and especially of the vertical connectivity (stairs, elevators, etc) between floors, by a team from TU Dresden, with a <a target=_blank href=https://github.com/Accessible-InfoPoint/2.5D-Indoor-Maps>free implementation available</a>. Compared to our current 2D view this makes it easier to understand how to move between floors, but it brings new challenges as well (<a target=_blank href=https://pretalx.com/fossgis2025/talk/RMMA9H/>video</a>).</li><li>Indoor localization and routing including an AR demo by the German Federal Agency for Cartography and Geodesy (BKG). The routing is done via Unity, which uses the same library underneath that we use as well. Localization is using a mix of sensors available in normal smart phones, which is particularly interesting for us. Unfortunately like most similar systems the implementation isn’t published (<a target=_blank href=https://pretalx.com/fossgis2025/talk/CFANYR/>talk</a>).</li><li>Work on <a target=_blank href=https://community.openstreetmap.org/t/proposed-import-of-the-indoor-data-offered-for-osm-by-the-technical-university-of-munich-tum/127003>importing building geometries for 400+ buildings of TU München</a>, using <a target=_blank href=https://en.wikipedia.org/wiki/Industry_Foundation_Classes>IFC</a> <a target=_blank href=https://en.wikipedia.org/wiki/Building_information_modeling>BIM</a> data. That’s the best way to get high-quality building geometries into <a target=_blank href=https://openstreetmap.org>OSM</a> I think, but while there has been previous work on building an import toolchain for this, getting the actual BIM data has been elusive due to various concerns by building owners.</li><li>Modelling and tagging of infrastructure in and around train stations in OSM (<a target=_blank href=https://wiki.openstreetmap.org/wiki/FOSSGIS_2025/OSM-Samstag/Ergebnisse#Gute_Praxis_-_Bahnhof_aus_Sicht_der_Nutzenden>session notes</a>).</li></ul><p>And of course there was also the yearly offline FOSSGIS edition of the OSM indoor meetup for connecting everyone working on that subject (<a target=_blank href=https://wiki.openstreetmap.org/wiki/Indoor_OSM_user_meeting_at_FOSSGIS_Konferenz_2025>translated session notes</a>).</p><h3 id=open-transport>Open Transport</h3><p>The other big topic for me was public transport routing, which we do in <a target=_blank href=https://transitous.org>Transitous</a>, for use in Itinerary and many other apps.</p><p>There were several talks and poster sessions in that area:</p><ul><li>Katharina presented her work on an <a target=_blank href=https://pretalx.com/fossgis2025/talk/YJTBAB/>explorative long distance journey planning UI</a> (English version from FOSDEM <a target=_blank href=https://fosdem.org/2025/schedule/event/fosdem-2025-6205-explorative-routing/>here</a>). I’d really like to see Transitous become a platform to build such innovative UIs on top, so you can focus on that rather than redoing the entire data handling and routing.</li><li>My own <a target=_blank href=https://pretalx.com/fossgis2025/talk/TJVVDZ/>talk introducing Transitous</a>.</li><li>Felix spoke about the <a target=_blank href=https://pretalx.com/fossgis2025/talk/HGUKFM/>routing capabilities of MOTIS</a>, the routing engine Transitou is built upon.</li><li>René showed work on <a target=_blank href=https://pretalx.com/fossgis2025/talk/AH98HQ/>developing and standardizing data formats for describing public transport vehicles</a> in great detail. That’s badly needed for considering accessibility during routing, the current modelling in <a target=_blank href=https://gtfs.org>GTFS</a> (basically “wheelchair=yes|no”) is way to simplistic for that.</li><li>A talk about <a target=_blank href=https://pretalx.com/fossgis2025/talk/UKULHF/>DB Regio’s vehicle position processing</a>. Especially deriving delay estimates from position data is highly relevant for Transitous, but unfortunately neither their data nor their code seems to be openly available.</li></ul><p>There also has been a lot of hallway track discussion on this:</p><ul><li>Together with several <a target=_blank href=https://motis-project.de/>MOTIS</a> users and contributors we reviewed and updated the <a target=_blank href=https://github.com/motis-project/motis/issues/635>MOTIS feature wish list</a>.</li><li>There are ideas for collaborating on a public transport optimized geocoder, between <a target=_blank href=https://nominatim.openstreetmap.org/ui/search.html>Nominatim</a>, Transitous and other people needing this. Currently this is usually based on OSM data, but additionally using schedule data would allow things like considering the number of lines or trips at a stop for ranking. “Meta-stations” were another subject, ie. if you select “Paris” as the destination any of its major railway stations and airports would be expected destination, rather than just the first stop inside the city boundary.</li><li>GTFS data quality was a prevalent topic, including during the offline FOSSGIS edition of the <a target=_blank href=https://github.com/transportkollektiv/meetup/wiki>Open Transport Meetup</a>, and now also with the German Federal Agency for Cartography and Geodesy (BKG) joining everyone else in exploring the wonders of this. More eyes (and more pressure) can only help here.</li><li>Possible datasets for elevation models usable for routing, for Transitous something particularly interesting for first/last mile bike routing.</li><li>Plans for a Transitous sprint/hack weekend are getting a bit more concrete, with two promising options in June/July.</li><li>Ideas for improving Transitous’ outreach activities and social media presence/PR.</li></ul><p>Also, if you are interested or involved in FOSS or Open Data topics around mobility/transit keep October 17/18 free, there’s an exciting announcement coming up shortly.</p><h3 id=osm>OSM</h3><p>The FOSSGIS conference is of course much larger than just those two topics, and while those kept me occupied most of the time I managed to pick up a few more things as well:</p><ul><li>Pirmin’s talk on <a target=_blank href=https://pretalx.com/fossgis2025/talk/HEWMUB/>showing realtime data layers</a> with MapLibre should come in handy for getting live updates onto the <a target=_blank href=https://alerts.kde.org/alert/map>map view</a> for monitoring our <a target=_blank href=https://invent.kde.org/webapps/foss-public-alert-server>emergency and weather alert aggregation server</a>. This talk also featured a Transitous live demo, something I didn’t dare doing myself.</li><li>Frederik’s <a target=_blank href=https://pretalx.com/fossgis2025/talk/FCQVSQ/>work on PostPass</a> could turn out to be a vastly more efficient way to extract region or timezone boundary polygons than our current approach that takes hours and needs a full local OSM planet file.</li></ul><p>And as always when hanging out with people from different communities there’s experiences to share on things like mentorship and funding programs as well as nowadays sadly also on defense measures to protect our infrastructure from overly aggressive AI crawler bots.</p></div></div></div></div></div><div class=single-post id=5><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://blogs.kde.org/2025/04/05/this-week-in-plasma-polish-and-stability/ target=_blank rel="noopener noreferrer">This Week in Plasma: polish and stability</a> <a href=https://planet.kde.org/nate-graham-2025-04-05-this-week-in-plasma-polish-and-stability/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://blogs.kde.org/authors/nategraham/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/ngraham.png></a><div class="d-flex flex-column"><span><a href=https://blogs.kde.org/authors/nategraham/ target=_blank rel="noopener noreferrer">Nate Graham</a> <span class="badge bg-dark"><img src=https://planet.kde.org/img/irc.svg> ngraham</span> </span><span class=text-muted>02:00 +00:00</span></div><a href=https://blogs.kde.org/authors/nategraham/index.xml target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Recent content in Nate Graham on KDE Blogs">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p>Welcome to a new issue of "This Week in Plasma"! Every week we cover the highlights of what's happening in the world of KDE Plasma and its associated apps like Discover, System Monitor, and more.</p><p>This was a week of smaller improvements: lots of stability enhancements user interface upgrades. All good preparation for Plasma 6.4, which will be released in <a target=_blank href=https://community.kde.org/Schedules/Plasma_6#Future_releases>a little over two months</a>!</p><h2 id=notable-ui-improvements>Notable UI Improvements</h2><h3 id=plasma-640>Plasma 6.4.0</h3><p>Sticky Notes widgets that live in a panel can now have their pop-up pinned open, just like most other panel pop-ups. (Christoph Wolk, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=501984">link</a>)</p><figure><img class=img-fluid alt="Sticky note widget in panel with popup pinned open" src=https://blogs.kde.org/2025/04/05/this-week-in-plasma-polish-and-stability/sticky-note-pinned-open.png style=max-width:100%;height:auto></figure><p>Notifications no longer switch to scientific notation when showing extremely large numbers; now they always show normal numbers. (Nate Graham, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=422166">link</a>)</p><p>Did a round of UI polish on the crash reporting wizard to improve its layout, appearance, and text clarity. (Thomas Duckworth, <a target=_blank href=https://invent.kde.org/plasma/drkonqi/-/merge_requests/317>link</a>)</p><p>If you change the cursor blink rate (currently a hidden setting, but we may expose it in the GUI), this preference will now be synced to GTK-based apps too. (Kai Uwe Broulik, <a target=_blank href=https://invent.kde.org/plasma/kde-gtk-config/-/merge_requests/129>link</a>)</p><p>KWin's Zoom effect and Plasma's desktop mouse wheel actions are now much easier to trigger and end by scrolling with a touchpad or a mouse with a high resolution scroll wheel. (Xaver Hugl, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=476047">link 1</a> and <a target=_blank href=https://invent.kde.org/plasma/kwin/-/merge_requests/7430>link 2</a>)</p><p>Persistent notifications can now be sent to the notification history in case you don't want to look at them anymore, but keep them around for later, e.g. for timers. (Kai Uwe Broulik, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5359>link</a>)</p><figure><img class=img-fluid alt="System tray with notification from KClock showing buttons to reset, pause, or extend the timer, or open the app" src=https://blogs.kde.org/2025/04/05/this-week-in-plasma-polish-and-stability/system-tray-with-timer-notification.png style=max-width:100%;height:auto></figure><p>Improved the visuals of the portal-based account details request dialog. (Joshua Goins, <a target=_blank href=https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/362>link</a>)</p><figure><img class=img-fluid alt="Dialog requesting access to user account data" src=https://blogs.kde.org/2025/04/05/this-week-in-plasma-polish-and-stability/portal-account-access-dialog.png style=max-width:100%;height:auto></figure><p>Sound themes can now be applied with a double-click, same as other items on System Settings' grid-based theme chooser pages. (Kai Uwe Broulik, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5371>link</a>)</p><h3 id=frameworks-614>Frameworks 6.14</h3><p>Telegram's System Tray icons are once again Breeze-themed when using the Breeze Icon theme and Telegram version 5.12.4 or later; we had to create some symlinks to react to Telegram changing the icon names they use. (Rocket Aaron and Nate Graham, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=502049">link</a>)</p><h2 id=notable-bug-fixes>Notable Bug Fixes</h2><h3 id=plasma-634>Plasma 6.3.4</h3><p>Fixed a variety of small layout bugs in notifications: now URLs and long words wrap properly; the orange line on critical notifications no longer squares off the normally-rounded bottom-left corner; and internal paddings and spacings have been restored to exactly what they were in Plasma 6.2 and earlier, undoing some small layout changes unintentionally introduced with the big code refactor in Plasma 6.3. (Nate Graham, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=502162">link 1</a>, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5354>link 2</a>, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5360>link 3</a>, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5356>link 4</a>, and <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5369>link 5</a>)</p><figure><img class=img-fluid alt="Stack of Plasma notifications showing improved sizing, spacings, and margins" src=https://blogs.kde.org/2025/04/05/this-week-in-plasma-polish-and-stability/stack-of-notifications.png style=max-width:100%;height:auto></figure><p>The "Always open with this app" option in portal-based app chooser dialogs now actually works. (Nicolas Fella, <a target=_blank href=https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/334>link</a>)</p><h3 id=plasma-635>Plasma 6.3.5</h3><p>Fixed a somewhat common Plasma crash related to power-cycling screens in multi-screen setups. (Marco Martin, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=494616">link</a>)</p><p>Fixed a bunch of bugs related to notifications not moving to new positions when they should under various circumstances. (Marco Martin, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5372>link</a>)</p><p>When using multiple screens, reverting a change to one of the screen's settings no longer makes the UI inappropriately show the settings of the other screen. (Oliver Beard, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=490586">link</a>)</p><h3 id=plasma-640-1>Plasma 6.4.0</h3><p>Fixed a case where KWin could crash with misbehaving 3rd-party scripts. (David Redondo, <a target=_blank href=https://invent.kde.org/plasma/kwin/-/merge_requests/7442>link</a>)</p><p>Fixed auto-update in Discover again, as part of a larger package of work to make the notifier tray widget behave more reliably and predictably. (Aleix Pol, <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=500115">link</a>)</p><p>Switching pages in Plasma widgets' configuration dialogs no longer inappropriately prompts you to save or discard your changes when there were no changes! (Christoph Wolk, <a target=_blank href=https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2907>link</a>)</p><h3 id=frameworks-613>Frameworks 6.13</h3><p>Fixed a bug in Kirigami that resulted in Plasma widgets' config dialogs and "Get New [thing]" dialogs sometimes missing their header text or buttons. (Marco Martin, <a target=_blank href=https://invent.kde.org/frameworks/kirigami/-/merge_requests/1746>Link</a>)</p><h3 id=other-bug-information-of-note>Other bug information of note:</h3><ul><li>1 very high priority Plasma bug (up from 0 last week). <a target=_blank href="https://bugs.kde.org/buglist.cgi?bug_severity=critical&amp;bug_severity=grave&amp;bug_severity=major&amp;bug_severity=crash&amp;bug_severity=normal&amp;bug_severity=minor&amp;bug_status=UNCONFIRMED&amp;bug_status=CONFIRMED&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;known_name=VHI-priority%20Plasma%20bugs&amp;list_id=2888339&amp;priority=VHI&amp;product=Bluedevil&amp;product=Breeze&amp;product=Discover&amp;product=drkonqi&amp;product=frameworks-kirigami&amp;product=frameworks-plasma&amp;product=frameworks-qqc2-desktop-style&amp;product=kactivitymanagerd&amp;product=kde-gtk-config&amp;product=kdeplasma-addons&amp;product=khelpcenter&amp;product=kinfocenter&amp;product=klipper&amp;product=kmenuedit&amp;product=krunner&amp;product=KScreen&amp;product=kscreenlocker&amp;product=ksmserver&amp;product=ksysguard&amp;product=KSystemLog&amp;product=kwin&amp;product=Plasma%20SDK&amp;product=Plasma%20Vault&amp;product=Plasma%20Workspace%20Wallpapers&amp;product=plasma-integration&amp;product=plasma-nm&amp;product=plasma-pa&amp;product=plasma-simplemenu&amp;product=plasmashell&amp;product=policykit-kde-agent-1&amp;product=Powerdevil&amp;product=print-manager&amp;product=printer-applet&amp;product=pulseaudio-qt&amp;product=systemsettings&amp;product=Touchpad-KCM&amp;product=user-manager&amp;product=xdg-desktop-portal-kde&amp;query_based_on=VHI-priority%20Plasma%20bugs&amp;query_format=advanced">Current list of bugs</a></li><li>18 15-minute Plasma bugs (same as last week). <a target=_blank href="https://bugs.kde.org/buglist.cgi?bug_severity=critical&amp;bug_severity=grave&amp;bug_severity=major&amp;bug_severity=crash&amp;bug_severity=normal&amp;bug_severity=minor&amp;bug_status=UNCONFIRMED&amp;bug_status=CONFIRMED&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;known_name=VHI-priority%20Plasma%20bugs&amp;list_id=2888340&amp;priority=HI&amp;product=Bluedevil&amp;product=Breeze&amp;product=Discover&amp;product=drkonqi&amp;product=frameworks-plasma&amp;product=kactivitymanagerd&amp;product=kde-gtk-config&amp;product=kdeplasma-addons&amp;product=khelpcenter&amp;product=kinfocenter&amp;product=klipper&amp;product=kmenuedit&amp;product=krunner&amp;product=KScreen&amp;product=kscreenlocker&amp;product=ksmserver&amp;product=ksysguard&amp;product=KSystemLog&amp;product=kwayland-integration&amp;product=kwin&amp;product=Plasma%20SDK&amp;product=Plasma%20Vault&amp;product=Plasma%20Workspace%20Wallpapers&amp;product=plasma-disks&amp;product=plasma-integration&amp;product=plasma-nm&amp;product=plasma-pa&amp;product=plasma-simplemenu&amp;product=plasma-systemmonitor&amp;product=plasmashell&amp;product=policykit-kde-agent-1&amp;product=Powerdevil&amp;product=print-manager&amp;product=printer-applet&amp;product=pulseaudio-qt&amp;product=systemsettings&amp;product=xdg-desktop-portal-kde&amp;query_based_on=VHI-priority%20Plasma%20bugs&amp;query_format=advanced">Current list of bugs</a></li></ul><h2 id=notable-in-performance--technical>Notable in Performance & Technical</h2><h3 id=plasma-640-2>Plasma 6.4.0</h3><p>System Monitor and its widgets are now capable of getting statistics from Intel GPUs. (David Redondo, <a target=_blank href=https://invent.kde.org/plasma/ksystemstats/-/merge_requests/98>link</a>)</p><p>Improved KWin's startup speed a little bit by not having it pointlessly compute font metrics for something that didn't really need to adjust with the font size anyway. (Aleix Pol Gonzalez, <a target=_blank href=https://invent.kde.org/plasma/kwin/-/merge_requests/7441>link</a>)</p><p>Refactored the portal-based dialogs in a way that eliminates an entire class of crashes, both actual and potential. (David Redondo, <a target=_blank href=https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/373>link</a>)</p><p>Made Plasma practically silent in its log output. This project is almost finished! (Christoph Wolk, <a target=_blank href=https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/2906>link 1</a>, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5344>link 2</a>, <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/5338>link 3</a>, <a target=_blank href=https://invent.kde.org/plasma/kdeplasma-addons/-/merge_requests/734>link 4</a>, <a target=_blank href=https://invent.kde.org/plasma/libplasma/-/merge_requests/1295>link 5</a>, <a target=_blank href=https://invent.kde.org/plasma/kdeplasma-addons/-/merge_requests/725>link 6</a>, and <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=501461">link 7</a>)</p><h2 id=how-you-can-help>How You Can Help</h2><p>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.</p><p>You can help KDE by becoming an active community member and <a target=_blank href=https://community.kde.org/Get_Involved>getting involved</a> somehow. Each contributor makes a huge difference in KDE — you are not a number or a cog in a machine!</p><p>You don’t have to be a programmer, either. Many other opportunities exist:</p><ul><li><a target=_blank href=https://community.kde.org/Guidelines_and_HOWTOs/Bug_triaging>Triage and confirm bug reports, maybe even identify their root cause</a></li><li><a target=_blank href=https://community.kde.org/Get_Involved/design>Contribute designs for wallpapers, icons, and app interfaces</a></li><li><a target=_blank href=https://community.kde.org/KDE.org>Design and maintain websites</a></li><li><a target=_blank href=https://community.kde.org/Get_Involved/translation>Translate user interface text items into your own language</a></li><li><a target=_blank href=https://community.kde.org/Get_Involved/promotion>Promote KDE in your local community</a></li><li><a target=_blank href=https://community.kde.org/Get_Involved>…And a ton more things!</a></li></ul><p>You can also help us by <a target=_blank href=https://kde.org/donate>making a donation!</a> Any monetary contribution — however small — will help us cover operational costs, salaries, travel expenses for contributors, and in general just keep KDE bringing Free Software to the world.</p><p>To get a new Plasma feature or a bugfix mentioned here, feel free to push a commit to <a target=_blank href="https://invent.kde.org/websites/blogs-kde-org/-/merge_requests?scope=all&amp;state=opened&amp;search=this+week+in+plasma">the relevant merge request on invent.kde.org</a>.</p></div></div></div></div></div><div class=single-post id=6><h3>Friday, 4 April 2025</h3><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://ervin.ipsquad.net/blog/2025/04/04/web-review-week-2025-14/ target=_blank rel="noopener noreferrer">Web Review, Week 2025-14</a> <a href=https://planet.kde.org/kevin-ottens-2025-04-04-web-review-week-2025-14/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://ervin.ipsquad.net/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/default.svg></a><div class="d-flex flex-column"><span><a href=https://ervin.ipsquad.net/ target=_blank rel="noopener noreferrer">Kevin Ottens</a> <span class="badge bg-dark"><img src=https://planet.kde.org/img/irc.svg> ervin</span> </span><span class=text-muted>10:28 +00:00</span></div><a href=https://ervin.ipsquad.net/atom.xml target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Recent content on ervin">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p>Let&rsquo;s go for my web review for the week 2025-14.</p><hr><h4 id=how-crawlers-impact-the-operations-of-the-wikimedia-projects>How crawlers impact the operations of the Wikimedia projects</h4><p><em>Tags: tech, ai, machine-learning, gpt, criticism, knowledge</em></p><p>Unsurprisingly, Wikimedia is also badly impacted by the LLM crawlers&mldr; That puts access to curated knowledge at risk if the trend continues.</p><p><a target=_blank href=https://diff.wikimedia.org/2025/04/01/how-crawlers-impact-the-operations-of-the-wikimedia-projects/>https://diff.wikimedia.org/2025/04/01/how-crawlers-impact-the-operations-of-the-wikimedia-projects/</a></p><p><br></p><h4 id=beyond-public-access-in-llm-pre-training-data-non-public-book-content-in-openai-s-models-social-science-research-council-ssrc>Beyond Public Access in LLM Pre-Training Data: Non-public book content in OpenAI’s Models – Social Science Research Council (SSRC)</h4><p><em>Tags: tech, ai, machine-learning, gpt, copyright, ethics</em></p><p>We just can&rsquo;t leave the topic of how the big model makers are building their training corpus unaddressed. This is both an ethics and economics problem. The creators of the content used to train such large models should be compensated in a way.</p><p>Between this, the crawlers they use and the ecological footprint of the data centers, there are so many negative externalities to those systems that law makers should have cease the topic a while ago. The paradox is that if nothing is done about it, the reckless behavior of the model makers will end up hurting them as well.</p><p><a target=_blank href=https://www.ssrc.org/publications/beyond-public-access-in-llm-pre-training-data-non-public-book-content-in-openais-models/>https://www.ssrc.org/publications/beyond-public-access-in-llm-pre-training-data-non-public-book-content-in-openais-models/</a></p><p><br></p><h4 id=ai-ambivalence>AI ambivalence</h4><p><em>Tags: tech, ai, machine-learning, gpt, copilot, criticism</em></p><p>I somehow recognise myself in this piece. Not completely though, I disagree with some of the points&mldr; but we share some baggage so I recognize another fellow.</p><p><a target=_blank href=https://nolanlawson.com/2025/04/02/ai-ambivalence/>https://nolanlawson.com/2025/04/02/ai-ambivalence/</a></p><p><br></p><h4 id=why-i-stopped-using-ai-code-editors>Why I stopped using AI code editors</h4><p><em>Tags: tech, ai, machine-learning, gpt, copilot, learning, knowledge</em></p><p>Even if you use LLMs, make sure you don&rsquo;t depend on them in your workflows. Friction can indeed have value. Also if you&rsquo;re a junior you should probably seldom use them, build your skill and knowledge first&mldr; otherwise you&rsquo;ll forever be a beginner and that will bite you hard.</p><p><a target=_blank href=https://lucianonooijen.com/blog/why-i-stopped-using-ai-code-editors/>https://lucianonooijen.com/blog/why-i-stopped-using-ai-code-editors/</a></p><p><br></p><h4 id=pixelfed-leaks-private-posts-from-other-fediverse-instances-fiona-fokus>Pixelfed leaks private posts from other Fediverse instances - fiona fokus</h4><p><em>Tags: tech, social-media, fediverse</em></p><p>Clearly the security practice around Pixelfed bears questioning. I&rsquo;m also a bit surprise at the lack of protection of private messages in the ActivityPub protocol (even though it&rsquo;s a hard admittedly a hard problem).</p><p><a target=_blank href=https://fokus.cool/2025/03/25/pixelfed-vulnerability.html>https://fokus.cool/2025/03/25/pixelfed-vulnerability.html</a></p><p><br></p><h4 id=how-to-report-a-security-issue-in-an-open-source-project-jacob-kaplan-moss>How to report a security issue in an open source project - Jacob Kaplan-Moss</h4><p><em>Tags: tech, foss, security</em></p><p>This is considered standard practice at this point. The article does a good job explaining it and the reasoning behind it.</p><p><a target=_blank href=https://jacobian.org/2025/mar/27/reporting-security-issues-in-oss/>https://jacobian.org/2025/mar/27/reporting-security-issues-in-oss/</a></p><p><br></p><h4 id=the-surprise-of-multiple-dependency-graphs-acm-queue>The Surprise of Multiple Dependency Graphs - ACM Queue</h4><p><em>Tags: tech, dependencies, supply-chain</em></p><p>Dependency resolution is harder than people generally expect. This is a difficult problem and is very sensitive to the context.</p><p><a target=_blank href="https://queue.acm.org/detail.cfm?ref=rss&amp;id=3723000">https://queue.acm.org/detail.cfm?ref=rss&amp;id=3723000</a></p><p><br></p><h4 id=a-retrospective-on-the-source-code-control-system>A Retrospective on the Source Code Control System</h4><p><em>Tags: tech, version-control, history</em></p><p>This paper is a look back at SCCS. This is nice to see how much progress was made in version control systems since then, it&rsquo;s also interesting to see how the design choices changed.</p><p><a target=_blank href="https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;arnumber=10821013">https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&amp;arnumber=10821013</a></p><p><br></p><h4 id=git-revise>git-revise</h4><p><em>Tags: tech, version-control, git, tools</em></p><p>Looks like a nice alternative to git rebase to manage patchsets. Definitely interesting if you&rsquo;re using something like Gerrit. With other forges&mldr; It&rsquo;ll depend how your reviews are handled I think.</p><p><a target=_blank href=https://mystor.github.io/git-revise.html>https://mystor.github.io/git-revise.html</a></p><p><br></p><h4 id=gerrit-gitbutler-and-jujutsu-projects-collaborating-on-change-id-commit-footer>Gerrit, GitButler, and Jujutsu projects collaborating on change-id commit footer</h4><p><em>Tags: tech, version-control, git, codereview</em></p><p>Could be interesting if it gets standardized. Maybe other forges than Gerrit will start leveraging the concept, this would improve the review experience greatly on those.</p><p><a target=_blank href=https://lore.kernel.org/git/CAESOdVAspxUJKGAA58i0tvks4ZOfoGf1Aa5gPr0FXzdcywqUUw@mail.gmail.com/T/#u>https://lore.kernel.org/git/CAESOdVAspxUJKGAA58i0tvks4ZOfoGf1Aa5gPr0FXzdcywqUUw@mail.gmail.com/T/#u</a></p><p><br></p><h4 id=empowering-webassembly-with-thin-kernel-interfaces>Empowering WebAssembly with Thin Kernel Interfaces</h4><p><em>Tags: tech, webassembly, virtualization, portability, research</em></p><p>This is interesting research. It shows nice prospects for WebAssembly future as a virtualization and portability technology. I don&rsquo;t think we&rsquo;ll see all of the claims in the discussion section realized though.</p><p><a target=_blank href=https://dl.acm.org/doi/pdf/10.1145/3689031.3717470>https://dl.acm.org/doi/pdf/10.<sup>1145</sup>&frasl;<sub>3689031</sub>.3717470</a></p><p><br></p><h4 id=a-study-of-undefined-behavior-across-foreign-function-boundaries-in-rust-libraries>A Study of Undefined Behavior Across Foreign Function Boundaries in Rust Libraries</h4><p><em>Tags: tech, rust, safety</em></p><p>Rust itself might bring interesting properties in term of safety. As soon as it needs to interact with other languages though the chances of undefined behavior increase drastically. This definitely pushes towards using more dynamic analysis tools to catch those.</p><p><a target=_blank href=https://arxiv.org/abs/2404.11671>https://arxiv.org/abs/2404.11671</a></p><p><br></p><h4 id=introducing-stringleton>Introducing Stringleton</h4><p><em>Tags: tech, rust, memory, safety</em></p><p>Nice feature, but more interesting in its explanation is the topic of static initializers in Rust. They&rsquo;re clearly not a settled area in the language, that&rsquo;s in part because of how low level static analyzers are.</p><p><a target=_blank href=https://simonask.github.io/introducing-stringleton/>https://simonask.github.io/introducing-stringleton/</a></p><p><br></p><h4 id=a-pattern-for-obtaining-a-single-value-while-holding-a-lock>A pattern for obtaining a single value while holding a lock</h4><p><em>Tags: tech, multithreading, c++</em></p><p>This is indeed a nice pattern to obtain a value, brings neat advantages.</p><p><a target=_blank href="https://devblogs.microsoft.com/oldnewthing/20250127-00/?p=110809">https://devblogs.microsoft.com/oldnewthing/20250127-00/?p=110809</a></p><p><br></p><h4 id=deadlock-free-mutexes-and-directed-acyclic-graphs>Deadlock-free Mutexes and Directed Acyclic Graphs</h4><p><em>Tags: tech, multithreading, rust</em></p><p>Interesting trick to check at runtime that you always acquire mutexes in the same order.</p><p><a target=_blank href=https://bertptrs.nl/2022/06/23/deadlock-free-mutexes-and-directed-acyclic-graphs.html>https://bertptrs.nl/2022/06/23/deadlock-free-mutexes-and-directed-acyclic-graphs.html</a></p><p><br></p><h4 id=anime-js-javascript-animation-engine>Anime.js | JavaScript Animation Engine</h4><p><em>Tags: tech, web, frontend, animation</em></p><p>Interesting JS library for animation on the Web. It&rsquo;s nice that it seems really small.</p><p><a target=_blank href=https://animejs.com/>https://animejs.com/</a></p><p><br></p><h4 id=learn-css-layout-the-pedantic-way>Learn CSS Layout The Pedantic Way</h4><p><em>Tags: tech, web, frontend, css</em></p><p>Looks like a nice resource to deep dive into CSS layouts and really understand their behaviours.</p><p><a target=_blank href=https://book.mixu.net/css/>https://book.mixu.net/css/</a></p><p><br></p><h4 id=css-system-colors>CSS System colors</h4><p><em>Tags: tech, web, frontend, css, colors</em></p><p>Nice way to have a web frontend which respects the system color choices of the user.</p><p><a target=_blank href=https://anto.pt/articles/css-system-colors>https://anto.pt/articles/css-system-colors</a></p><p><br></p><h4 id=minimal-css-only-blurry-image-placeholders>Minimal CSS-only blurry image placeholders</h4><p><em>Tags: tech, web, frontend, colors</em></p><p>This is a very smart way to create pure CSS placeholders.</p><p><a target=_blank href=https://leanrada.com/notes/css-only-lqip/>https://leanrada.com/notes/css-only-lqip/</a></p><p><br></p><h4 id=the-fifth-kind-of-optimisation>The Fifth Kind of Optimisation</h4><p><em>Tags: tech, multithreading, optimization, rust</em></p><p>A good look back at parallelisation and multithreading as a mean to optimise. This is definitely a hard problem, and indeed got a bit easier with recent languages like Rust.</p><p><a target=_blank href=https://tratt.net/laurie/blog/2025/the_fifth_kind_of_optimisation.html>https://tratt.net/laurie/blog/2025/the_fifth_kind_of_optimisation.html</a></p><p><br></p><h4 id=ports-and-fat-adapters>Ports and fat adapters</h4><p><em>Tags: tech, architecture, complexity</em></p><p>A good reminder of why you often don&rsquo;t want to follow an architecture pattern to the letter. They should be considered like guidelines and depending on your technical context you should properly balance the costs. Here is an example with the Ports and Adapters pattern in the context of an ASP.NET application.</p><p><a target=_blank href=https://blog.ploeh.dk/2025/04/01/ports-and-fat-adapters/>https://blog.ploeh.dk/2025/04/01/ports-and-fat-adapters/</a></p><p><br></p><h4 id=thoughts-on-ecs-voxagon-blog>Thoughts on ECS | Voxagon Blog</h4><p><em>Tags: tech, architecture, simulation, game</em></p><p>Nice post about pros and cons of ECS architectures.</p><p><a target=_blank href=https://blog.voxagon.se/2025/03/28/thoughts-on-ecs.html>https://blog.voxagon.se/2025/03/28/thoughts-on-ecs.html</a></p><p><br></p><h4 id=the-manager-i-hated-and-the-lesson-he-taught-me>The manager I hated and the lesson he taught me</h4><p><em>Tags: tech, programming, engineering, leadership</em></p><p>For sure the aforementioned manager need to fix his communication style. That being said the core advice was indeed good.</p><p><a target=_blank href=https://www.blog4ems.com/p/the-manager-i-hated>https://www.blog4ems.com/p/the-manager-i-hated</a></p><p><br></p><hr><p>Bye for now!</p></div></div></div></div></div><div class=single-post id=7><h3>Thursday, 3 April 2025</h3><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://akademy.kde.org/news/2025-04-03_akademy-2025-call-for-proposals/ target=_blank rel="noopener noreferrer">Akademy 2025 Call for Proposals is Now Open</a> <a href=https://planet.kde.org/akademy-2025-04-03-akademy-2025-call-for-proposals-is-now-open/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://akademy.kde.org/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/akademy_logo.png></a><div class="d-flex flex-column"><span><a href=https://akademy.kde.org/ target=_blank rel="noopener noreferrer">Akademy</a> </span><span class=text-muted>10:04 +00:00</span></div><a href=https://akademy.kde.org/index.xml target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Akademy Akademy News">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p><a target=_blank href=https://akademy.kde.org/2025/>Akademy 2025</a> will be a hybrid event held simultaneously in Berlin, Germany, and online. The <strong><a target=_blank href=https://akademy.kde.org/2025/cfp/>Call for Participation</a></strong> is open! Send us your talk ideas and abstracts.</p><h3 id=why-talk-at-akademy2025>Why talk at #Akademy2025</h3><p>Akademy attracts artists, designers, developers, translators, users, writers, companies, public institutions and many other KDE friends and contributors. We celebrate the achievements and help determine the direction for the next year. We all meet together to discuss and plan the future of the Community and the technology we build. You will meet people who are receptive to your ideas and can help you with their skills and experience. You will get an opportunity to present your application, share ideas and best practices, or gain new contributors. These sessions offer the opportunity to gain support and make your plans for your project become a reality.</p><h3 id=how-to-get-started>How to get started</h3><p>Do not worry about details or slides right now. Just think of an idea and submit some basic details about your talk. You can edit your abstract after the initial submission. All topics relevant to the KDE Community are welcome. Here are a few ideas to get you started on your proposal:</p><ul><li>How KDE can empower building robust communities in changing political climates</li><li>Work towards <a target=_blank href=https://kde.org/goals/ title=https://kde.org/goals/><em>KDE's goals</em></a>: Streamlined Application Development Experience, We care about your Input, and KDE Needs You</li><li>Giving people more digital freedom, sovereignty, and autonomy with KDE software</li><li>Guides on how to participate for new users, intermediates and experts,</li><li>New developments/plans for KDE Frameworks, Plasma, Applications and other projects</li><li>Anything else that might interest the audience.</li></ul><p>To get an idea of talks that were accepted, check out the program from previous years: <a target=_blank href=https://conf.kde.org/event/6/contributions/><em>2024</em></a>, <a target=_blank href=https://conf.kde.org/event/5/contributions/ title=https://conf.kde.org/event/5/contributions/><em>2023</em></a>, <a target=_blank href=https://conf.kde.org/event/4/timetable/ title=https://conf.kde.org/event/4/timetable/><em>2022</em></a>, <a target=_blank href=https://conf.kde.org/event/1/timetable/#20210619 title=https://conf.kde.org/event/1/timetable/#20210619><em>2021</em></a> and <a target=_blank href=https://conf.kde.org/en/akademy2020/public/events title=https://conf.kde.org/en/akademy2020/public/events><em>2020</em></a>.</p><p>For more details and information, visit our <a target=_blank href=https://akademy.kde.org/2025/cfp/>Call for Participation</a>.</p></div></div></div></div></div><div class=single-post id=8><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://www.kdab.com/modelview-drag-and-drop-in-qt-part-3/ target=_blank rel="noopener noreferrer">Model/View Drag and Drop in Qt - Part 3</a> <a href=https://planet.kde.org/kdab-on-qt-2025-04-03-model-view-drag-and-drop-in-qt-part-3/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://www.kdab.com/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/kdab.png></a><div class="d-flex flex-column"><span><a href=https://www.kdab.com/ target=_blank rel="noopener noreferrer">KDAB on Qt</a> </span><span class=text-muted>08:43 +00:00</span></div><a href="https://www.kdab.com/rss.xml?tags=blog&amp;tags=qt" target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Discover the depth of KDAB expertise in software. From Qt framework to C++ and Rust, from Operating Systems to GUI frameworks. From troubleshooting to complete project development. Get the software expertise you require to succeed.">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><h1>Model/View Drag and Drop in Qt - Part 3</h1><div class=rich-text><p data-block-key=1z9vu>In this third blog post of the Model/View Drag and Drop series (<a target=_blank href=https://www.kdab.com/modelview-drag-and-drop-part-1/ rel="noopener noreferrer" target=_blank>part 1</a> and <a target=_blank href=https://www.kdab.com/modelview-drag-and-drop-in-qt-part-2/ rel="noopener noreferrer" target=_blank>part 2</a>), the idea is to implement dropping onto items, rather than in between items. QListWidget and QTableWidget have out of the box support for replacing the value of existing items when doing that, but there aren't many use cases for that. What is much more common is to associate a custom semantic to such a drop. For instance, the examples detailed below show email folders and their contents, and dropping an email onto another folder will move (or copy) the email into that folder.</p></div><div class=image-variable-size-block><div class="image-variable-positioning-block right-margin-auto left-margin-auto width-100"><div class=image-variable-size-image><img id=Blog_Drag&amp;Drop_Qt_part3-treeview-step1 src=https://eu-central-1.linodeobjects.com/wagtail-production/images/Blog_DragDrop_Qt_part3-treeview-step1.original.png class=Blog_Drag&amp;Drop_Qt_part3-treeview-step1 alt=Blog_Drag&amp;Drop_Qt_part3-treeview-step1></div><div class="image-variable-size-caption text-center"><div class=rich-text><p data-block-key=44fbh>Step 1</p></div></div></div></div><div class=rich-text><p data-block-key=chbha>Initial state, the email is in the inbox</p></div><div class=image-variable-size-block><div class="image-variable-positioning-block right-margin-auto left-margin-auto width-100"><div class=image-variable-size-image><img id=Blog_Drag&amp;Drop_Qt_part3-treeview-step2 src=https://eu-central-1.linodeobjects.com/wagtail-production/images/Blog_DragDrop_Qt_part3-treeview-step2.original.png class=Blog_Drag&amp;Drop_Qt_part3-treeview-step2 alt=Blog_Drag&amp;Drop_Qt_part3-treeview-step2></div><div class="image-variable-size-caption text-center"><div class=rich-text><p data-block-key=44fbh>Step 2</p></div></div></div></div><div class=rich-text><p data-block-key=chbha>Dragging the email onto the Customers folder</p></div><div class=image-variable-size-block><div class="image-variable-positioning-block right-margin-auto left-margin-auto width-100"><div class=image-variable-size-image><img id=Blog_Drag&amp;Drop_Qt_part3-treeview-step3 src=https://eu-central-1.linodeobjects.com/wagtail-production/images/Blog_DragDrop_Qt_part3-treeview-step3.original.png class=Blog_Drag&amp;Drop_Qt_part3-treeview-step3 alt=Blog_Drag&amp;Drop_Qt_part3-treeview-step3></div><div class="image-variable-size-caption text-center"><div class=rich-text><p data-block-key=44fbh>Step 3</p></div></div></div></div><div class=rich-text><p data-block-key=chbha>Dropping the email</p></div><div class=image-variable-size-block><div class="image-variable-positioning-block right-margin-auto left-margin-auto width-100"><div class=image-variable-size-image><img id=Blog_Drag&amp;Drop_Qt_part3-treeview-step4 src=https://eu-central-1.linodeobjects.com/wagtail-production/images/Blog_DragDrop_Qt_part3-treeview-step4.original.png class=Blog_Drag&amp;Drop_Qt_part3-treeview-step4 alt=Blog_Drag&amp;Drop_Qt_part3-treeview-step4></div><div class="image-variable-size-caption text-center"><div class=rich-text><p data-block-key=44fbh>Step 4</p></div></div></div></div><div class=rich-text><p data-block-key=chbha>The email is now in the customers folder</p><h2 data-block-key=cnh1g>With Model/View separation</h2><p data-block-key=a95g8>Example code can be found <a target=_blank href=https://github.com/KDABLabs/blogs-qt/blob/main/ItemViews-DragAndDrop/part3-dropping-onto-items/model-view/drop-onto-items-with-model-view.cpp rel="noopener noreferrer" target=_blank>here</a> for flat models and <a target=_blank href=https://github.com/KDABLabs/blogs-qt/blob/main/ItemViews-DragAndDrop/part3-dropping-onto-items/treemodel/drop-onto-items-with-treemodel.cpp rel="noopener noreferrer" target=_blank>here</a> for tree models.</p><h3 data-block-key=dn1sf>Setting up the view on the drag side</h3><p data-block-key=baki1>☑ Call <code>view->setDragDropMode(QAbstractItemView::DragOnly)</code><br>unless of course the same view should also support drops. In our example, only emails can be dragged, and only folders allow drops, so the drag and drop sides are distinct.</p><p data-block-key=6qoh6>☑ Call <code>view->setDragDropOverwriteMode(...)</code><br><code>true</code> if moving should clear cells, <code>false</code> if moving should remove rows.<br>Note that the default is <code>true</code> for <code>QTableView</code> and <code>false</code> for <code>QListView</code> and <code>QTreeView</code>. In our example, we want to remove emails that have been moved elsewhere, so <code>false</code> is correct.</p><p data-block-key=53bqd>☑ Call <code>view->setDefaultDropAction(Qt::MoveAction)</code> so that the drag defaults to a move and not a copy, adjust as needed</p><h3 data-block-key=1314s>Setting up the model on the drag side</h3><p data-block-key=f1jgr>To implement dragging items out of a model, you need to implement the following -- this is very similar to the section of the same name in the previous blog post, obviously:</p></div><div class=formatted-code><pre><code class="language-cpp line-numbers">class EmailsModel : public QAbstractTableModel &#123; ~~~ Qt::ItemFlags flags(const QModelIndex &amp;index) const override &#123; if (!index.isValid()) return &#123;}; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; } // the default is &quot;copy only&quot;, change it Qt::DropActions supportedDragActions() const override &#123; return Qt::MoveAction | Qt::CopyAction; } QMimeData *mimeData(const QModelIndexList &amp;indexes) const override; bool removeRows(int position, int rows, const QModelIndex &amp;parent) override;</code></pre></div><div class=rich-text><p data-block-key=chbha>☑ Reimplement <code>flags()</code> to add <code>Qt::ItemIsDragEnabled</code> in the case of a valid index</p><p data-block-key=btaih>☑ Reimplement <code>supportedDragActions()</code> to return <code>Qt::MoveAction | Qt::CopyAction</code> or whichever you want to support (the default is CopyAction only).</p><p data-block-key=4k7os>☑ Reimplement <code>mimeData()</code> to serialize the complete data for the dragged items. If the views are always in the same process, you can get away with serializing only node pointers (if you have that) and application PID (to refuse dropping onto another process). See the previous part of this blog series for more details.</p><p data-block-key=7p1a9>☑ Reimplement <code>removeRows()</code>, it will be called after a successful drop with <code>MoveAction</code>. An example implementation looks like this:</p></div><div class=formatted-code><pre><code class="language-cpp line-numbers">bool EmailsModel::removeRows(int position, int rows, const QModelIndex &amp;parent) &#123; beginRemoveRows(parent, position, position + rows - 1); for (int row = 0; row &lt; rows; ++row) &#123; m_emailFolder-&gt;emails.removeAt(position); } endRemoveRows(); return true; }</code></pre></div><div class=rich-text><h3 data-block-key=chbha>Setting up the view on the drop side</h3><p data-block-key=170pv>☑ Call <code>view->setDragDropMode(QAbstractItemView::DropOnly)</code> unless of course it supports dragging too. In our example, we can drop onto email folders but we cannot reorganize the folders, so <code>DropOnly</code> is correct.</p><h3 data-block-key=2e83f>Setting up the model on the drop side</h3><p data-block-key=dui9h>To implement dropping items into a model's existing items, you need to do the following:</p></div><div class=formatted-code><pre><code class="language-cpp line-numbers">class FoldersModel : public QAbstractTableModel &#123; ~~~ Qt::ItemFlags flags(const QModelIndex &amp;index) const override &#123; CHECK_flags(index); if (!index.isValid()) return &#123;}; // do not allow dropping between items if (index.column() &gt; 0) return Qt::ItemIsEnabled | Qt::ItemIsSelectable; // don&#x27;t drop on other columns return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled; } // the default is &quot;copy only&quot;, change it Qt::DropActions supportedDropActions() const override &#123; return Qt::MoveAction | Qt::CopyAction; } QStringList mimeTypes() const override &#123; return &#123;QString::fromLatin1(s_emailsMimeType)}; } bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &amp;parent) override; };</code></pre></div><div class=rich-text><p data-block-key=chbha>☑ Reimplement <code>flags()</code><br>For a valid index (and only in that case), add <code>Qt::ItemIsDropEnabled</code>. As you can see, you can also restrict drops to column 0, which can be more sensible when using <code>QTreeView</code> (the user should drop onto the folder name, not onto the folder size).</p><p data-block-key=ep99i>☑ Reimplement <code>supportedDropActions()</code> to return <code>Qt::MoveAction | Qt::CopyAction</code> or whichever you want to support (the default is CopyAction only).</p><p data-block-key=dnh6m>☑ Reimplement <code>mimeTypes()</code> - the list should include the MIME type used by the drag model.</p><p data-block-key=2g8a>☑ Reimplement <code>dropMimeData()</code><br>to deserialize the data and handle the drop.<br>This could mean calling <code>setData()</code> to replace item contents, or anything else that should happen on a drop: in the email example, this is where we copy or move the email into the destination folder. Once you're done, return true, so that the drag side then deletes the dragged rows by calling <code>removeRows()</code> on its model.</p></div><div class=formatted-code><pre><code class="language-cpp line-numbers">bool FoldersModel::dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &amp;parent) &#123; ~~~ // safety checks, see full example code EmailFolder *destFolder = folderForIndex(parent); const QByteArray encodedData = mimeData-&gt;data(s_emailsMimeType); QDataStream stream(encodedData); ~~~ // code to detect and reject dropping onto the folder currently holding those emails while (!stream.atEnd()) &#123; QString email; stream &gt;&gt; email; destFolder-&gt;emails.append(email); } emit dataChanged(parent, parent); // update count return true; // let the view handle deletion on the source side by calling removeRows there }</code></pre></div><div class=rich-text><h2 data-block-key=chbha>Using item widgets</h2><p data-block-key=f13cl>Example code:</p><ul><li data-block-key=6i1ck><a target=_blank href=https://github.com/KDABLabs/blogs-qt/blob/main/ItemViews-DragAndDrop/part3-dropping-onto-items/qlistwidget/drop-onto-qlistwidgetitems.cpp rel="noopener noreferrer" target=_blank>QListWidget</a></li><li data-block-key=902bi><a target=_blank href=https://github.com/KDABLabs/blogs-qt/blob/main/ItemViews-DragAndDrop/part3-dropping-onto-items/qtablewidget/drop-onto-qtablewidgetitems.cpp rel="noopener noreferrer" target=_blank>QTableWidget</a></li><li data-block-key=3rqfn><a target=_blank href=https://github.com/KDABLabs/blogs-qt/blob/main/ItemViews-DragAndDrop/part3-dropping-onto-items/qtreewidget/drop-onto-qtreewidgetitems.cpp rel="noopener noreferrer" target=_blank>QTreeWidget</a></li></ul><h3 data-block-key=8n2p6>On the "drag" side</h3><p data-block-key=18t03>☑ Call <code>widget->setDragDropMode(QAbstractItemView::DragOnly)</code> or <code>DragDrop</code> if it should support both</p><p data-block-key=ca2ba>☑ Call <code>widget->setDefaultDropAction(Qt::MoveAction)</code> so that the drag defaults to a move and not a copy, adjust as needed</p><p data-block-key=evi3q>☑ Reimplement <code>Widget::mimeData()</code> to serialize the complete data for the dragged items. If the views are always in the same process, you can get away with serializing only item pointers and application PID (to refuse dropping onto another process). In our email folders example we also serialize the pointer to the source folder (where the emails come from) so that we can detect dropping onto the same folder (which should do nothing).</p><p data-block-key=9ggql>To serialize pointers in QDataStream, cast them to quintptr, see the <a target=_blank href=https://github.com/KDABLabs/blogs-qt/blob/main/ItemViews-DragAndDrop/part3-dropping-onto-items/qlistwidget/drop-onto-qlistwidgetitems.cpp#L58 rel="noopener noreferrer" target=_blank>example code</a> for details.</p><h3 data-block-key=dgspb>On the "drop" side</h3><p data-block-key=csd0h>☑ Call <code>widget->setDragDropMode(QAbstractItemView::DropOnly)</code> or <code>DragDrop</code> if it should support both</p><p data-block-key=8bf8n>☑ Call <code>widget->setDragDropOverwriteMode(true)</code> for a minor improvement: no forbidden cursor when moving the drag between folders. Instead Qt only computes drop positions which are onto items, as we want here.</p><p data-block-key=ahkov>☑ Reimplement <code>Widget::mimeTypes()</code> and return the same name as the one used on the drag side's <code>mimeData</code></p><p data-block-key=2e3uc>☑ Reimplement <code>Widget::dropMimeData()</code> (note that the signature is different between <code>QListWidget</code>, <code>QTableWidget</code> and <code>QTreeWidget</code>) This is where you deserialize the data and handle the drop. In the email example, this is where we copy or move the email into the destination folder.</p><p data-block-key=dklo6>Make sure to do all of the following:</p><ul><li data-block-key=f8g44>any necessary behind the scenes work (in our case, moving the actual email)</li><li data-block-key=9afgt>updating the UI (creating or deleting items as needed)</li></ul><p data-block-key=8m0jd>This is a case where proper model/view separation is actually much simpler.</p><h2 data-block-key=aj3ep>Improvements to Qt</h2><p data-block-key=ffn49>While writing and testing these code examples, I improved the following things in Qt, in addition to those listed in the previous blog posts:</p><ul><li data-block-key=7nmug><a target=_blank href=https://bugreports.qt.io/browse/QTBUG-2553 rel="noopener noreferrer" target=_blank>QTBUG-2553</a> QTreeView with setAutoExpandDelay() collapses items while dragging over it, fixed in Qt 6.8.1</li></ul><h2 data-block-key=1o60p>Conclusion</h2><p data-block-key=al71j>I hope you enjoyed this blog post series and learned a few things.</p></div><p>The post <a target=_blank href=https://www.kdab.com/modelview-drag-and-drop-in-qt-part-3/>Model/View Drag and Drop in Qt - Part 3</a> appeared first on <a target=_blank href=https://www.kdab.com>KDAB</a>.</p></div></div></div></div></div><div class=single-post id=9><h3>Wednesday, 2 April 2025</h3><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://pointieststick.com/2025/04/02/if-your-notifications-look-kind-of-stupid-in-plasma-6-3-4-its-my-fault/ target=_blank rel="noopener noreferrer">If your notifications look kind of stupid in Plasma 6.3.4, it’s my fault</a> <a href=https://planet.kde.org/nate-graham-2025-04-02-if-your-notifications-look-kind-of-stupid-in-plasma-6-3-4-its-my-fault/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=https://pointieststick.com target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/ngraham.png></a><div class="d-flex flex-column"><span><a href=https://pointieststick.com target=_blank rel="noopener noreferrer">Nate Graham</a> <span class="badge bg-dark"><img src=https://planet.kde.org/img/irc.svg> ngraham</span> </span><span class=text-muted>21:51 +00:00</span></div><a href=https://pointieststick.com/feed/ target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Below is a brief look at recent changes in the KDE projects I work on and follow!">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p>This is for everyone upgrading to Plasma 6.3.4, which was released yesterday. I suspect that some of you will notice something slightly <em>wrong</em> with notifications; the top padding is off, causing text to look not vertically centered most of the time.</p><p>This is my fault. The recent bug-fixes I made to notification spacings and paddings were backported to Plasma 6.3.4, but ended up missing a part that positions the text labels nicely when there&#8217;s body text or an icon, and didn&#8217;t notice this until after 6.3.5 was released. <a target=_blank href=https://invent.kde.org/plasma/plasma-workspace/-/commit/47d502353720004fa2d0e7b0065994b75b3e0ded>The fix</a> was just merged and backported for Plasma 6.3.5, so unless your distro backports the fix (I&#8217;ve already emailed the appropriate mailing list about this) you&#8217;ll have to live with slightly ugly label positioning until then. Sorry folks! My bad.</p><p>Once you have the fix — either because your distro backports it or because you&#8217;ve waited until Plasma 6.3.5 — notification text positioning should look better again:</p><div class=wp-block-image><figure class="aligncenter size-full is-resized"><img data-attachment-id=22905 data-permalink=https://pointieststick.com/2025/04/02/if-your-notifications-look-kind-of-stupid-in-plasma-6-3-4-its-my-fault/stack-of-notifications-with-better-text-positioning/ data-orig-file=https://pointieststick.com/wp-content/uploads/2025/04/stack-of-notifications-with-better-text-positioning.png data-orig-size=894,1497 data-comments-opened=1 data-image-meta='{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}' data-image-title="Stack of notifications with better text positioning" data-image-description data-image-caption data-medium-file="https://pointieststick.com/wp-content/uploads/2025/04/stack-of-notifications-with-better-text-positioning.png?w=179" data-large-file="https://pointieststick.com/wp-content/uploads/2025/04/stack-of-notifications-with-better-text-positioning.png?w=612" src=https://pointieststick.com/wp-content/uploads/2025/04/stack-of-notifications-with-better-text-positioning.png alt class=wp-image-22905 style=width:414px;height:auto></figure></div></div></div></div></div></div><div class=single-post id=10><div class="row m-0 justify-content-center"><div class="col-12 p-0"><div class="card mb-3 card-sm-border-0 p-0"><div class="row m-0 border-bottom"><div class="col card-header pl-1 pl-md-3 border-0"><h3 class="mt-0 h5"><a href=https://blogs.kde.org/2025/04/02/konsole-layout-automation-part-2/ target=_blank rel="noopener noreferrer">Konsole Layout Automation (part 2)</a> <a href=https://planet.kde.org/tracey-clark-2025-04-02-konsole-layout-automation-part-2/ class=post-anchor>🔗</a></h3><div class="d-flex flex-fill align-items-center"><a href=http://blogs.kde.org/authors/traceyc/ target=_blank rel="noopener noreferrer"><img height=51px class="my-auto me-2" src=https://planet.kde.org/hackergotchi/default.svg></a><div class="d-flex flex-column"><span><a href=http://blogs.kde.org/authors/traceyc/ target=_blank rel="noopener noreferrer">Tracey Clark</a> </span><span class=text-muted>00:00 +00:00</span></div><a href=http://blogs.kde.org/authors/traceyc/index.xml target=_blank rel="noopener noreferrer" class="ms-auto post-feed" title="Recent content in Traceyc on KDE Blogs">RSS <i class="icon icon_rss"></i></a></div></div></div><div class="card-body markdown"><p>In <a target=_blank href=https://blogs.kde.org/2024/06/11/konsole-layout-automation-part-1/>Konsole Layout Automation (part 1)</a>, I wrote about how to automate opening Konsole with different tabs that ran different commands. In this post, I'll talk about doing this for layouts.</p><h2 id=inspiration>Inspiration</h2><p>In the past, I needed to open two connections to the same host over <code>ssh</code> , and change to two different directories. I opened Konsole with a layout that had two panes. Then, Quick Commands allowed me to run a command in each pane to <code>ssh</code> and change to the right directory. This post will outline how to achieve that and more!</p><h2 id=goal-launch-a-konsole-window-with-one-tab-that-has-multiple-panes-which-run-commands>Goal: Launch a Konsole window with one tab that has multiple panes which run commands</h2><blockquote><p>💡 <strong>Note</strong> For more detailed instructions on using Konsole, please see the output of <code>konsole --help</code> and take a look at the Command-line Options section of the <a target=_blank href=https://docs.kde.org/stable5/en/konsole/konsole/index.html>Konsole Handbook</a></p></blockquote><p>A layout can save and load a set of panes. Unfortuately, it can't do anything else. We can, however, use profiles and the Quick Commands plugin to make the panes more useful.</p><p><strong>Use case:</strong> See the output of different commands in the same window. For instance, you could be running <code>htop</code> in one pane and open your favorite editor in another.</p><p>Here's an overview of the steps:</p><ul><li>Set up a layout</li><li>Use QuickCommands to run things in the panes</li></ul><h2 id=set-up-a-layout>Set up a layout</h2><p>Unfortunately, the <a target=_blank href=https://docs.kde.org/stable5/en/konsole/konsole/command-line-options.html>online documentation for Konsole command line options</a> doesn't say much about how to create a layout, or the format of its JSON file. It only mentions the command line flag <code>--layout</code>. <em>Also make a note of <code>-e</code> which allows you to execute a command.</em></p><p>Fortunately, creating the layout is pretty easy. Note that a layout is limited to one tab. It will only save the window splits, nothing else. No profiles, directories, etc.</p><ol><li>Set up a tab in Konsole with the splits you want it to have</li><li>Use <code>View -> Save Tab Layout</code> to save it to a .json file. (I personally recommend keeping these in a specific directory so they're easy to find later, and for scripting. I use <code>~/konsole-layouts</code>).</li><li>You can then use <code>konsole --layout ~/layout-name.json</code> to load konsole with a tab that has the splits you saved.</li></ol><h2 id=use-quick-commands-to-do-useful-things-in-your-layout>Use Quick Commands to do useful things in your layout</h2><p>As mentioned above, you can only save splits. you can't associate a profile, or run a command directly like you can with the tilix or kitty terminals. This has <a target=_blank href="https://bugs.kde.org/show_bug.cgi?id=455143">been requested</a>. In the meantime, an easy thing you <em>can</em> do is load a layout and then load a profile manually in each pane. This is where Quick Commands come in. These are under Plugins - Quick Commands. (If you don't see this, contact your distro / the place you installed Konsole from).</p><p>You can use Quick Commands to run a command in each pane. You can also launch a profile (with different colors etc) that runs a command (<a target=_blank href=https://blogs.kde.org/2024/06/11/konsole-layout-automation-part-1/>part 1</a> showed how these might be used). Note, however, that running <code>konsole</code> itself from here will launch a new Konsole window.</p><p>End each command with <code>|| return</code> so that you get to a prompt if the command fails.</p><p>Examples</p><pre tabindex=0><code>htop || return </code></pre><p>So, after you've launched Konsole with your layout as described above, you can do this: Go to <code>Plugins -> Show Quick Commands</code> Add commands you'd like to run in this session. Now, focus the pane and run a command.</p><p>Using these steps, I can run <code>htop</code> in one pane and <code>nvtop</code> in the other.</p><p>After you've gotten familiar with tabs and layouts, you can make a decently powerful Konsole session. Combine these with a shell function, and you can invoke that session very easily.</p><h2 id=this-is-still-too-manual>This is still too manual!</h2><p>You're right. This post is about automating Konsole and having to click on things is not exactly that. You can use dbus commands in a script to load your tab layout and then run commands in each pane without using Quick Commands.</p><p>As we saw in the <a target=_blank href=https://blogs.kde.org/2024/06/11/konsole-layout-automation-part-1/>last post</a>, you can use profiles to customize color schemes and launch commands. We can call those from a script in a layout. The demo scripts used below use <code>dbus</code>, take a look at <a target=_blank href=https://docs.kde.org/stable5/en/konsole/konsole/scripting.html>the docs on scripting Konsole</a> for details.</p><p>I'm using the layout file <code>~/konsole_layouts/monitoring.json</code> for this example. This layout file represents two panes with one <em>vertical</em> split (horizontal orientation describes the panes being horizontally placed):</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-json data-lang=json><span class=line><span class=cl><span class=p>&#123;</span> </span></span><span class=line><span class=cl> <span class=nt>&#34;Orientation&#34;</span><span class=p>:</span> <span class=s2>&#34;Horizontal&#34;</span><span class=p>,</span> </span></span><span class=line><span class=cl> <span class=nt>&#34;Widgets&#34;</span><span class=p>:</span> <span class=p>[</span> </span></span><span class=line><span class=cl> <span class=p>&#123;</span> </span></span><span class=line><span class=cl> <span class=nt>&#34;SessionRestoreId&#34;</span><span class=p>:</span> <span class=mi>0</span> </span></span><span class=line><span class=cl> <span class=p>},</span> </span></span><span class=line><span class=cl> <span class=p>&#123;</span> </span></span><span class=line><span class=cl> <span class=nt>&#34;SessionRestoreId&#34;</span><span class=p>:</span> <span class=mi>0</span> </span></span><span class=line><span class=cl> <span class=p>}</span> </span></span><span class=line><span class=cl> <span class=p>]</span> </span></span><span class=line><span class=cl><span class=p>}</span> </span></span></code></pre></div><p>Here's an example of a simple script using that layout, which will launch <code>fastfetch</code> in one pane and <code>btm</code> in the other:</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-bash data-lang=bash><span class=line><span class=cl><span class=cp>#!/usr/bin/env bash </span></span></span><span class=line><span class=cl><span class=cp></span> </span></span><span class=line><span class=cl><span class=c1># Define the commands to run</span> </span></span><span class=line><span class=cl><span class=nv>cmd1</span><span class=o>=</span><span class=s2>&#34;fastfetch&#34;</span> </span></span><span class=line><span class=cl><span class=nv>cmd2</span><span class=o>=</span><span class=s2>&#34;btm&#34;</span> </span></span><span class=line><span class=cl> </span></span><span class=line><span class=cl><span class=c1># Opens a konsole tab with a saved layout</span> </span></span><span class=line><span class=cl><span class=c1># Change the path to point to the layout file on your system</span> </span></span><span class=line><span class=cl><span class=c1># KPID is used for renaming tabs</span> </span></span><span class=line><span class=cl> </span></span><span class=line><span class=cl>konsole --hold --layout <span class=nv>$HOME</span>/konsole_layouts/monitoring.json <span class=p>&amp;</span> <span class=nv>KPID</span><span class=o>=</span><span class=nv>$!</span> </span></span><span class=line><span class=cl> </span></span><span class=line><span class=cl><span class=c1># Short sleep to let the tab creation complete</span> </span></span><span class=line><span class=cl>sleep 0.5 </span></span><span class=line><span class=cl> </span></span><span class=line><span class=cl><span class=c1># Runs commands in Konsole panes</span> </span></span><span class=line><span class=cl><span class=nv>service</span><span class=o>=</span><span class=s2>&#34;</span><span class=k>$(</span>qdbus <span class=p>|</span> grep -B1 konsole <span class=p>|</span> grep -v -- -- <span class=p>|</span> sort -t<span class=s2>&#34;.&#34;</span> -k2 -n <span class=p>|</span> tail -n 1<span class=k>)</span><span class=s2>&#34;</span> </span></span><span class=line><span class=cl> </span></span><span class=line><span class=cl>qdbus <span class=nv>$service</span> /Sessions/1 org.kde.konsole.Session.runCommand <span class=s2>&#34;</span><span class=si>$&#123;</span><span class=nv>cmd1</span><span class=si>}</span><span class=s2>&#34;</span> </span></span><span class=line><span class=cl>qdbus <span class=nv>$service</span> /Sessions/2 org.kde.konsole.Session.runCommand <span class=s2>&#34;</span><span class=si>$&#123;</span><span class=nv>cmd2</span><span class=si>}</span><span class=s2>&#34;</span> </span></span><span class=line><span class=cl> </span></span><span class=line><span class=cl><span class=c1># Renames the tabs - optional</span> </span></span><span class=line><span class=cl>qdbus org.kde.konsole-<span class=nv>$KPID</span> /Sessions/1 setTitle <span class=m>1</span> <span class=s1>&#39;System Info&#39;</span> </span></span><span class=line><span class=cl>qdbus org.kde.konsole-<span class=nv>$KPID</span> /Sessions/2 setTitle <span class=m>1</span> <span class=s1>&#39;System Monitor&#39;</span> </span></span></code></pre></div><p>What it does:</p><ul><li>Loads a layout with 2 panes, horizontally arranged</li><li>Runs <code>clear</code> and then <code>fastfetch</code> in the left pane; runs <code>btm</code> in the right pane</li></ul><h2 id=wrap-up>Wrap-up</h2><p>That's how you can accomplish opening a number of panes in <code>konsole</code> which run different commands. Using this kind of shortcut at the start of every work / programming session saved a little time every day which adds up over time. The marketing peeps would call it "maximizing efficiencies" or something. I hope some folks find this useful, and come up with many creative ways of making <code>konsole</code> work harder for them.</p><h2 id=known-issues-and-tips>Known issues and tips</h2><ul><li>Running <code>konsole</code> from a Quick Command will open a new window, even if you want to just open a new tab.</li><li>You may see this warning when using runCommand in your scripts. You can ignore it. I wasn't able to find documentation on what the concern is, exactly.</li></ul><pre tabindex=0><code>The D-Bus methods sendText/runCommand were just used. There are security concerns about allowing these methods to be public. If desired, these methods can be changed to internal use only by re-compiling Konsole. This warning will only show once for this Konsole instance. </code></pre><h2 id=credits-to-inspirational-sources>Credits to inspirational sources</h2><ul><li>Thanks to the <a target=_blank href=https://github.com/Gsarod/Cool-Konsole-setup>Cool-Konsole-setup</a> repo, where I found an example script for using commands in a layout via <code>qdbus</code>. Note: The scripts in that repo did not work as-is.</li><li><a target=_blank href=https://askubuntu.com/a/1491500>This answer on Ask Ubuntu</a> for improvements on the example scripts.</li></ul></div></div></div></div></div><ul class=pagination><li class="page-item active"><a class=page-link href=https://planet.kde.org/>1</a></li><li class=page-item><a class=page-link href=https://planet.kde.org/page/2/>2</a></li><li class=page-item><a class=page-link href=https://planet.kde.org/page/3/>3</a></li><li class="page-item disabled"><span aria-hidden=true>&nbsp;&mldr;&nbsp;</span></li><li class=page-item><a class=page-link href=https://planet.kde.org/page/106/>106</a></li></ul></div></div><footer id=kFooter class=footer><section id=kFooterIncome class=container><div id=kDonateForm><div class=center><h2 class="h5 mt-2 mb-3">Donate to KDE <a href=https://kde.org/community/donations/index.php#money target=_blank>Why Donate?</a></h2><form action=https://www.paypal.com/en_US/cgi-bin/webscr method=post onsubmit='return amount.value>=2||window.confirm(`Your donation is smaller than 2€. This means that most of your donation will end up in processing fees. Do you want to continue?`)'><input type=hidden name=no_note value=0> <input type=hidden name=lc value=GB> <input type=hidden name=item_name value="Development and communication of KDE software"> <input type=hidden name=cbt value="Return to kde.org"> <input type=hidden name=return value=https://kde.org/community/donations/thanks_paypal.php> <input type=hidden name=notify_url value=https://kde.org/community/donations/notify.php> <input type=hidden name=business value=kde-ev-paypal@kde.org> <input type=hidden name=cmd value=_donations> <input type=hidden name=currency_code value=EUR> <input type=hidden name=custom value=//kde.org/index/donation_box> <label class=visually-hidden for=donateAmountField>Amount</label><input type=text name=amount value=20.00 id=donateAmountField data-kpxc-id=donateAmountField> € <button type=submit id=donateSubmit>Donate via PayPal</button></form><span class=h6><a class="mt-3 d-inline-block" href=https://kde.org/community/donations target=_blank>Other ways to donate</a></span></div></div><div id=kMetaStore><div class=center><h2 class="h5 mb-3 mt-2">Visit the KDE MetaStore</h2><p class=h6>Show your love for KDE! Purchase books, mugs, apparel, and more to support KDE.</p><a href=https://kde.org/stuff/metastore class=button>Browse</a></div></div></section><section id=kLinks class="container pb-4"><div class=row><nav class=col-sm><h3>Products</h3><a href=https://kde.org/plasma-desktop hreflang>Plasma</a> <a href=https://apps.kde.org hreflang>KDE Applications</a> <a href=https://develop.kde.org/products/frameworks/>KDE Frameworks</a> <a href=https://plasma-mobile.org hreflang>Plasma Mobile</a> <a href=https://neon.kde.org/>KDE neon</a></nav><nav class=col-sm><h3>Develop</h3><a href=https://api.kde.org/>API Documentation</a> <a href=https://doc.qt.io/ rel=noopener target=_blank>Qt Documentation</a> <a href=https://kde.org/goals>KDE Goals</a> <a href=https://invent.kde.org/>Source code</a></nav><nav class=col-sm><h3>News & Press</h3><a href=https://kde.org/announcements/ hreflang>Announcements</a> <a href=https://blogs.kde.org/>KDE Blogs</a> <a href=https://planet.kde.org/>Planet KDE</a> <a href=https://kde.org/contact/>Press Contacts</a> <a href=https://kde.org/stuff>Miscellaneous Stuff</a> <a href=https://kde.org/thanks>Thanks</a></nav><nav class=col-sm><h3>Resources</h3><a href=https://community.kde.org/Main_Page>Community Wiki</a> <a href=https://kde.org/support/>Help</a> <a href=https://kde.org/download/>Download KDE Software</a> <a href=https://kde.org/code-of-conduct/>Code of Conduct</a> <a href=https://kde.org/privacypolicy>Privacy Policy</a> <a href=https://kde.org/privacypolicy-apps>Applications Privacy Policy</a></nav><nav class=col-sm><h3>Destinations</h3><a href=https://store.kde.org/>KDE Store</a> <a href=https://ev.kde.org/>KDE e.V.</a> <a href=https://kde.org/community/whatiskde/kdefreeqtfoundation>KDE Free Qt Foundation</a> <a href=https://timeline.kde.org hreflang>KDE Timeline</a> <a href=https://manifesto.kde.org hreflang>KDE Manifesto</a> <a href=https://kde.org/support/international/>International Websites</a></nav></div></section><div id=kSocial class=container><a href=https://go.kde.org/matrix/#/#kde:kde.org aria-label="Share on Matrix"><svg class="social/matrix-icon" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="4" ry="4" style="paint-order:markers stroke fill"/><path transform="matrix(.046154 0 0 .046154 4 4)" d="m0 .21667e-5v520h49.385v-11.891H13.711v-496.22h35.674v-11.891H0zm470.62.0v11.891h35.674v496.22H470.62v11.891h49.385v-520H470.62zm-246.92 164.19c-12.2.0-23.1 2.6134-32.5 7.9134-9.4 5.2-17.506 12.574-24.206 22.174h-.67708v-25.094h-47.988v185.61h50.866v-107.57c0-9.1 1.2932-16.532 3.8932-22.132s5.8215-9.9069 9.5215-12.907 7.6104-4.9938 11.51-6.0938 7.0792-1.6081 9.4792-1.6081c8.2.0 14.293 1.4048 18.493 4.1048s7.2137 6.418 9.0137 10.918c1.8 4.6 2.8892 9.4958 3.0892 14.896.3 5.4.42318 10.792.42318 16.292v104.02h50.908v-103.3c0-5.7.46954-11.412 1.2695-17.012.8-5.7 2.4935-10.707 4.9935-15.107 2.5-4.5 6.0102-7.991 10.41-10.791 4.4-2.7 10.193-4.1048 17.393-4.1048 7.1.0 12.812 1.197 17.012 3.597s7.3215 5.5908 9.5215 9.6908c2.1 4 3.3932 8.8034 3.8932 14.303s.67708 11.404.67708 17.604v105.12h50.908v-124.12c0-12-1.6935-22.18-4.9935-30.68-3.4-8.5-8.0072-15.309-14.007-20.609s-13.097-9.1104-21.497-11.51-17.495-3.597-27.295-3.597c-12.9.0-24.116 3.1099-33.516 9.3099s-16.886 13.397-22.386 21.497c-5.1-11.4-12.39-19.494-22.09-23.994s-20.419-6.8132-32.119-6.8132z" fill="#fff"/></svg> </a><a href=https://floss.social/@kde aria-label="Share on Mastodon"><svg class="social/mastodon-icon" width="32" height="32" viewBox="0 0 32 32" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient3" x1="16" x2="16" y1="32" gradientUnits="userSpaceOnUse"><stop stop-color="#563acc" offset="0"/><stop stop-color="#6364ff" offset="1"/></linearGradient></defs><rect width="32" height="32" rx="4" ry="4" fill="url(#linearGradient3)" style="paint-order:markers stroke fill"/><path d="m15.785 4c-3.9462.0-4.7928.24201-5.2423.30854-2.5901.38288-4.9556 2.2088-5.5295 4.8181-.27603 1.285-.30524 2.7096-.25396 4.0164.0731 1.874.08732 3.745.25752 5.6114.11766 1.2398.32281 2.4698.61412 3.6806.54551 2.2362 2.7537 4.0968 4.9171 4.856 2.3163.79176 4.8077.92334 7.1944.37975.26257-.06109.52185-.1317.77789-.21242.58041-.18434 1.2596-.39084 1.7593-.75297.0069-.0051.01267-.01145.01662-.01899.004-.0076.0062-.01579.0065-.02433v-1.8091c-122e-6-.008-.0018-.01541-.0053-.02255-.0036-.0071-.0086-.01347-.01483-.01839-.0063-.0049-.01358-.0084-.02136-.01009-.0078-.0017-.01599-.0018-.02374.0-1.5292.3652-3.0963.54818-4.6685.5453-2.7057.0-3.4336-1.2835-3.642-1.818-.16748-.46196-.27373-.94404-.31626-1.4336-456e-6-.0082 82e-5-.0162.0042-.02374.0033-.0075.0085-.01438.01483-.01958.0064-.0052.0139-.0089.02196-.01068.008-.0018.01634-.0015.02433 608e-6 1.5037.36274 3.0457.54572 4.5926.5453.37203.0.74288 303e-6 1.1149-.0095 1.5558-.04363 3.1954-.12359 4.7261-.42247.03819-.0077.07646-.01392.10918-.02374 2.4144-.46363 4.7122-1.9189 4.9456-5.6037.0087-.14506.03026-1.5198.03026-1.6703.0011-.5116.16502-3.6288-.02374-5.5443-.34695-2.5787-2.5947-4.6112-5.2589-5.005-.4495-.06654-2.1522-.30854-6.0973-.30854zm-3.2913 3.9268c1.2994.0 2.2813.49953 2.9359 1.4976l.63133 1.0603.63311-1.0603c.6546-.9981 1.6363-1.4976 2.9336-1.4976 1.1216.0 2.0259.39513 2.7176 1.1642.66769.77013 1.0011 1.8096 1.0004 3.1193v6.4065h-2.539v-6.2172c0-1.309-.54531-1.9771-1.6549-1.9771-1.2198.0-1.8305.78981-1.8305 2.3497v3.4035h-2.5235v-3.4035c0-1.5599-.61194-2.3497-1.8317-2.3497-1.103.0-1.6543.66809-1.6543 1.9771v6.2172h-2.5378v-6.4065c0-1.309.33432-2.3484 1.0028-3.1193.6895-.76904 1.5944-1.1642 2.717-1.1642z" fill="#fff" stroke-width=".3038"/></svg> </a><a href=https://bsky.app/profile/kde.org aria-label="Share on Bluesky"><svg class="social/bluesky-icon" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="4" ry="4" fill="#1185fe" style="paint-order:markers stroke fill"/><path d="m9.2023 6.8566c2.7516 2.0657 5.711 6.2542 6.7977 8.5018 1.0867-2.2476 4.0462-6.4361 6.7977-8.5018C24.7831 5.3661 28 4.2128 28 7.8826c0 .73293-.42021 6.1569-.66668 7.0375-.85669 3.0614-3.9784 3.8422-6.7553 3.3696 4.8539.8261 6.0886 3.5624 3.422 6.2988-5.0645 5.1968-7.2791-1.3039-7.8466-2.9696-.10403-.30536-.1527-.44822-.15342-.32674-72e-5-.12148-.0494.0214-.15342.32674-.56747 1.6657-2.7821 8.1665-7.8466 2.9696-2.6667-2.7363-1.4319-5.4727 3.422-6.2988-2.7769.47261-5.8986-.30824-6.7553-3.3696C4.42021 14.03945 4 8.6155 4 7.8826c0-3.6698 3.2169-2.5165 5.2023-1.026z" fill="#fff" stroke-width=".042254"/></svg> </a><a href=https://www.facebook.com/kde/ aria-label><svg class="social/facebook-icon" width="32" height="32" viewBox="0 0 32 32"><g><rect width="32" height="32" rx="4" ry="4" fill="#0866ff" style="paint-order:markers stroke fill"/><path d="m22.729 20.07.96407-5.2499h-5.6116v-1.8567c0-2.7744 1.0884-3.8414 3.9054-3.8414.87501.0 1.5793.0213 1.9848.06398v-4.7591c-.76829-.21344-2.6463-.42689-3.7347-.42689-5.7408.0-8.3871 2.7104-8.3871 8.5579v2.2622h-3.5426v5.2499h3.5426v11.93l6.2316-3e-6v-11.93z" fill="#fff"/></g></svg> </a><a href=https://www.linkedin.com/company/29561/ aria-label="Share on LinkedIn"><svg class="social/linkedin-icon" width="32" height="32" viewBox="0 0 32 32"><g><rect width="32" height="32" rx="4" ry="4" fill="#2867b2" style="paint-order:markers stroke fill"/><path d="m6.9275 4.0671C5.3107 4.0671 4 5.3778 4 6.9946s1.3107 2.9275 2.9275 2.9275S9.855 8.6114 9.855 6.9946 8.5443 4.0671 6.9275 4.0671zm15.473 7.5726c-.62686-.0231-1.2393.0015-1.6025.08233-1.3205.29379-2.518 1.0873-3.2019 2.1224l-.24396.36975-.01715-1.1035-.01676-1.1031h-4.8059v15.925h4.9901l.02058-4.6683c.02005-4.5567.02391-4.6798.15514-5.1463.2742-.97488.6539-1.4907 1.3482-1.8312.7382-.36205 1.8769-.40207 2.5989-.09148.42096.18109.88969.69391 1.0677 1.1676.32318.85996.3265.90876.35602 5.9015l.02745 4.6683h4.9241l-781e-6-4.8559c-39e-5-2.6806-.02832-5.1772-.06251-5.5736-.28747-3.3334-1.4423-5.0326-3.848-5.6602-.42044-.10968-1.0618-.18045-1.6886-.20355zm-17.945.36784v15.925h4.9962v-15.925z" fill="#fff" stroke-linejoin="round" stroke-width=".64462" style="paint-order:markers stroke fill"/></g></svg> </a><a href=https://www.reddit.com/r/kde/ aria-label="Share on Reddit"><svg class="social/reddit-icon" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="4" ry="4" fill="#ff4500" style="paint-order:markers stroke fill"/><path class="cls-1" d="m19.051 8.5775c.26003 1.1022 1.2498 1.9233 2.4316 1.9233 1.3798.0 2.4984-1.1186 2.4984-2.4984S22.8624 5.504 21.4826 5.504c-1.2064.0-2.2126.85505-2.4469 1.9924-2.0205.21669-3.5982 1.9303-3.5982 4.007v.01288c-2.1974.09253-4.2038.71801-5.7968 1.7054-.59151-.45798-1.3341-.73089-2.14-.73089-1.9338.0-3.501 1.5672-3.501 3.501.0 1.4032.8246 2.612 2.0158 3.1707.11596 4.0644 4.5447 7.3335 9.9924 7.3335s9.8823-3.2726 9.9924-7.3406c1.1818-.56222 1.9994-1.7675 1.9994-3.1625.0-1.9338-1.5672-3.501-3.501-3.501-.80234.0-1.5414.27057-2.1318.72504-1.607-.99444-3.6357-1.6199-5.8553-1.7031v-.0094c0-1.4876 1.1057-2.7221 2.5394-2.9247zm-9.5508 9.6363c.05857-1.2697.9019-2.2442 1.8823-2.2442.98038.0 1.73 1.0296 1.6714 2.2993-.05856 1.2697-.79063 1.7312-1.7722 1.7312s-1.8401-.51654-1.7816-1.7862zm11.134-2.2442c.98155.0 1.8249.97452 1.8823 2.2442C22.57507 19.4835 21.71533 20 20.7349 20c-.98038.0-1.7136-.46032-1.7722-1.7312-.05857-1.2697.6899-2.2993 1.6714-2.2993zm-1.1666 5.1818c.1839.01874.30102.20966.22958.38067-.60322 1.4419-2.0275 2.4551-3.6896 2.4551s-3.0852-1.0132-3.6896-2.4551c-.07145-.17101.04568-.36193.22958-.38067 1.0776-.10893 2.243-.16867 3.46-.16867s2.3813.05974 3.46.16867z" fill="#fff" stroke-width="0"/></svg> </a><a href=https://lemmy.kde.social/ aria-label="Share on Lemmy"><svg class="social/lemmy-icon" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="4" ry="4" fill="#00a846" style="paint-order:markers stroke fill"/><path d="m6.9596 8.222c-.11217.002-.22327.009-.33304.022-.87819.10114-1.6692.56831-2.1541 1.3848-.47516.8-.59207 1.6809-.3499 2.4971s.82879 1.5578 1.6973 2.1453a.36394.36394.0 00.016.0102c.74509.44927 1.4871.75185 2.2818.90825-.0194.32812-.02.66476.001 1.01.0634 1.0427.43337 2.0017.99201 2.85l-2.0035.81787a.41589.41589.0 00-.2279.54226.41589.41589.0 00.54225.22785l2.2025-.89911c.40824.48671.87651.92792 1.3799 1.3148.0193.0148.0394.0282.0588.0428l-1.2903 1.7085a.41589.41589.0 00.0813.58256.41589.41589.0 00.58252-.0813l1.3111-1.7361c.71919.4552 1.4815.80998 2.2348 1.0449.38634.71079 1.1429 1.1637 2.0179 1.1637.88349.0 1.6408-.48733 2.0238-1.1844.74558-.2393 1.4988-.59516 2.2104-1.0487l1.3296 1.7605a.41589.41589.0 00.58251.0813.41589.41589.0 00.0813-.58256l-1.3094-1.7338c.009-.007.0178-.0126.0264-.0192.49739-.38074.96185-.81348 1.3693-1.2904l2.1467.87631a.41589.41589.0 00.54221-.22785.41589.41589.0 00-.22785-.54226l-1.9396-.79183c.57642-.85341.96487-1.8194 1.0456-2.8703.0267-.34745.0308-.68716.0154-1.0189.78945-.15714 1.5271-.45849 2.2678-.9051a.36394.36394.0 00.016-.0102c.86849-.58749 1.4551-1.3291 1.6973-2.1453.24217-.81624.12526-1.6971-.34989-2.4971-.48492-.81644-1.2759-1.2836-2.1541-1.3848-.10977-.0126-.22086-.02-.33304-.022-.78519-.0142-1.623.22937-2.4286.6944-.59274.34218-1.1265.8665-1.5447 1.4383-1.1697-.6696-2.6914-1.047-4.5616-1.0779-.16772-.003-.33824-.003-.51154 5e-5-2.085.034-3.7537.42958-5.0142 1.1444a.36391.36391.0 00-.009-.0155c-.42343-.59171-.97243-1.1369-1.5829-1.4893-.80556-.46503-1.6434-.70856-2.4286-.6944zm.0128.72801c.62611-.0101 1.3412.18643 2.0519.59668.4848.27987.97436.75559 1.3448 1.2697-.17523.12866-.34138.26431-.49671.40808-.92163.853-1.4701 1.9613-1.6759 3.2376-.67872-.14042-1.3116-.39941-1.9754-.79853-.75538-.51279-1.2162-1.1227-1.4007-1.7447-.18511-.62394-.10719-1.2701.2779-1.9184.37427-.63015.92731-.95463 1.6116-1.0334.0855-.01.17318-.0155.26262-.017zm18.055.0c.0894.001.17709.007.26262.017.68429.0788 1.2373.40329 1.6116 1.0334.38509.64837.46302 1.2945.27791 1.9184-.18455.62203-.64537 1.2319-1.4008 1.7447-.65633.39462-1.2826.65191-1.9527.79335-.19333-1.2997-.74317-2.4372-1.6734-3.3069-.14856-.13889-.30687-.27019-.47367-.39472.3645-.48996.8314-.94003 1.2965-1.2085.71066-.41025 1.4258-.60676 2.0519-.59668zm-8.5343 1.0545c2.3902.0392 4.0843.669 5.1626 1.6771 1.1502 1.0753 1.6428 2.6016 1.4994 4.4681-.13115 1.708-1.2212 3.2282-2.6529 4.3241-.69023.52834-1.4582.95163-2.218 1.2495.004-.0516.007-.10352.007-.15591.003-1.1964-.93058-2.2129-2.2911-2.2129-1.3606.0-2.3213 1.0152-2.291 2.2212.001.058.006.11491.011.17134-.77875-.29818-1.5675-.7287-2.2725-1.2706-1.424-1.0946-2.4984-2.6118-2.6023-4.3209-.11295-1.8568.37814-3.3385 1.5216-4.3968 1.1434-1.0583 2.9852-1.7107 5.6392-1.754.16556-.003.32797-.003.48732-1e-4zm-4.1296 6.8277c-.60532.0-1.096.49152-1.096 1.0978.0.6063.49071 1.0978 1.096 1.0978s1.096-.49152 1.096-1.0978c0-.60629-.49072-1.0978-1.096-1.0978zm7.2826.0101c-.59979.0-1.086.48701-1.086 1.0878.0.60076.48619 1.0878 1.086 1.0878.5998.0 1.086-.487 1.086-1.0878.0-.60075-.48624-1.0878-1.086-1.0878zm-3.6463 3.24c1.0238.0 1.5653.63842 1.5633 1.4834-.002.7849-.67217 1.4851-1.5633 1.4851-.91678.0-1.5399-.5633-1.5634-1.4934-.021-.83475.53964-1.4751 1.5634-1.4751z" fill="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width=".025993"/></svg> </a><a href=https://www.youtube.com/@KdeOrg aria-label="Share on YouTube"><svg class="social/youtube-icon" width="32" height="32" viewBox="0 0 32 32"><g><rect width="32" height="32" rx="4" ry="4" fill="red" style="paint-order:markers stroke fill"/><path d="m13.6 19.6v-7.2001l6.2352 3.6zm13.899-9.3768c-.27618-1.0324-1.0893-1.8458-2.1219-2.1217-1.8716-.50159-9.3768-.50159-9.3768-.50159s-7.5049.0-9.3766.50159c-1.0326.27598-1.8458 1.0893-2.1217 2.1217-.50159 1.8716-.50159 5.7767-.50159 5.7767s0 3.9051.50159 5.7767c.27598 1.0324 1.0891 1.8458 2.1217 2.1217 1.8716.50159 9.3766.50159 9.3766.50159s7.5051.0 9.3768-.50159c1.0326-.27598 1.8458-1.0893 2.1219-2.1217.5014-1.8716.5014-5.7767.5014-5.7767s0-3.9051-.5014-5.7767" fill="#fff"/></g></svg> </a><a href=https://tube.kockatoo.org/a/kde_community/video-channels aria-label="Share on PeerTube"><svg class="social/peertube-icon" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="4" ry="4" fill="#f2680c" style="paint-order:markers stroke fill"/><path class="cls-3" d="m7.975 3.98v12l9.0003-6.0002zm9.0003 6.0002v12l9.0003-6.0002zm0 12L7.975 15.98v12z" fill="#fff" stroke-width="1.125"/></svg> </a><a href=https://vk.com/kde_ru aria-label="Share on VK"><svg class="social/vk-icon" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="4" ry="4" fill="#07f" style="paint-order:markers stroke fill"/><path d="m17.22 23.487C9.1121 23.487 4.192 17.8617 4 8.514h4.1064c.12801 6.8666 3.2521 9.7807 5.6469 10.375V8.514h3.9368v5.9245c2.3099-.25602 4.7264-2.9514 5.5404-5.9245h3.8706c-.61996 3.6577-3.2506 6.3531-5.1118 7.465 1.8611.89896 4.8558 3.252 6.0107 7.508h-4.256c-.89895-2.8451-3.1024-5.0486-6.0539-5.3477v5.3477z" fill="#fff" stroke-width=".017558"/></svg> </a><a href=https://www.instagram.com/kdecommunity/ aria-label="Share on Instagram"><svg class="social/instagram-icon" width="32" height="32" viewBox="0 0 32 32" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient2" x1="-8" x2="40" y1="40" y2="-8" gradientUnits="userSpaceOnUse"><stop stop-color="#f50000" offset="0"/><stop stop-color="#b900b4" offset="1"/></linearGradient></defs><rect width="32" height="32" rx="4" ry="4" fill="url(#linearGradient2)" style="paint-order:markers stroke fill"/><path class="cls-1" d="m11.03 4.0839c-1.2768.0602-2.1487.264-2.911.56352-.78889.30744-1.4575.72001-2.1228 1.3877-.66529.66768-1.075 1.3368-1.3803 2.1269-.29544.76392-.4956 1.6366-.552 2.9141s-.0689 1.6882-.0626 4.9469c.006 3.2588.0206 3.6672.0826 4.9474.061 1.2766.264 2.1483.56353 2.9108.30792.78888.72 1.4573 1.3879 2.1228.66793.66552 1.3366 1.0742 2.1286 1.38.76321.29496 1.6361.49609 2.9134.55201 1.2773.0559 1.6884.0689 4.9462.0626 3.2578-.006 3.668-.0206 4.9479-.0814 1.2799-.0607 2.1471-.26521 2.9098-.56329.78889-.30864 1.4578-.72001 2.1228-1.3882.66505-.66817 1.0745-1.3378 1.3795-2.1283.29568-.76321.49656-1.6361.552-2.9124.0559-1.2809.0691-1.6899.0629-4.9481-.006-3.2583-.0209-3.6668-.0816-4.9464-.0607-1.2797-.264-2.1487-.56328-2.9117-.30841-.78889-.72001-1.4568-1.3877-2.1228-.66769-.666-1.3378-1.0752-2.1281-1.3795-.76369-.29544-1.6361-.4968-2.9134-.552s-1.6884-.0694-4.9474-.0631c-3.259.006-3.667.0202-4.9469.0826m.14016 21.693c-1.17-.0509-1.8053-.24528-2.2287-.408-.56065-.216-.96001-.47712-1.3819-.89497-.42192-.41784-.68112-.81865-.9-1.3781-.16441-.42337-.36241-1.0579-.41713-2.2279-.0595-1.2646-.072-1.6443-.079-4.848-.007-3.2038.005-3.583.0607-4.848.0499-1.169.24552-1.8051.40801-2.2282.216-.56136.47616-.96001.89496-1.3817.41881-.42168.81841-.68137 1.3783-.90025.42288-.16512 1.0574-.36144 2.227-.41712 1.2655-.06 1.6447-.072 4.848-.079s3.5835.005 4.8495.0607c1.169.0509 1.8053.24456 2.2279.408.56089.216.96001.47545 1.3817.89497.42168.41952.6816.81769.90048 1.3788.16537.42169.36169 1.056.41689 2.2263.0602 1.2655.0739 1.645.0797 4.848.006 3.2031-.006 3.5835-.061 4.848-.0511 1.17-.24504 1.8055-.40801 2.2294-.216.5604-.4764.96001-.89544 1.3814-.41905.42145-.81817.68113-1.3783.90001-.4224.16488-1.0577.36168-2.2263.41736-1.2655.0595-1.6447.072-4.8492.079s-3.5825-.006-4.848-.0607m9.7825-16.191a1.44 1.44.0 101.4371-1.4424 1.44 1.44.0 00-1.4371 1.4424m-11.115 6.4256c.007 3.4032 2.7706 6.1558 6.1731 6.1493 3.4025-.006 6.157-2.7701 6.1505-6.1733-.006-3.4032-2.7711-6.1565-6.1741-6.1498-3.403.007-6.1561 2.7711-6.1496 6.1738m2.1615-.004a4.0001 4.0001.0 114.008 3.9922 3.9996 3.9996.0 01-4.008-3.9922" fill="#fff" stroke-width=".024"/></svg></a></div><div id=kLegal class=container><p class="d-block d-xl-flex flex-wrap mb-0 py-3 h6"><small lang=en class=maintenance>Maintained by <a href=mailto:kde-www@kde.org>KDE Webmasters</a> (public mailing list). </small><small class=trademark>KDE<sup>®</sup> and <a href=https://kde.org/media/images/trademark_kde_gear_black_logo.png>the K Desktop Environment<sup>®</sup> logo</a> are registered trademarks of <a href=https://ev.kde.org/ title="Homepage of the KDE non-profit Organization">KDE e.V.</a> | <a href=https://kde.org/community/whatiskde/impressum>Legal</a></small></p></div></footer><script src=https://planet.kde.org/js/bundle.min.bca53a944c237ec93e0c253f7ba8f3c621ebe73956690608db5c835c725c0e82.js integrity="sha256-vKU6lEwjfsk+DCU/e6jzxiHr5zlWaQYI21yDXHJcDoI=" crossorigin=anonymous defer></script><script src=https://planet.kde.org/js/responsive-video.min.8038ab0852fa39cdb10272ccd38a76fa4af8dc8c3d04962cc947963f532c40aa.js defer></script><script src=https://planet.kde.org/js/index.min.9510b5a5b45f16a972f228c5c049375f32272866a2236bb0ac847f9478e37f5a.js defer></script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10