<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-us">
    <generator uri="https://gohugo.io/" version="0.152.1">Hugo</generator><title type="html"><![CDATA[Posts on Nico's blog]]></title>
    
    
    
            <link href="https://nicolasfella.de/posts/" rel="alternate" type="text/html" title="html" />
            <link href="https://nicolasfella.de/posts/atom.xml" rel="self" type="application/atom+xml" title="atom" />
    <updated>2026-01-23T21:02:43+00:00</updated>
    
    <icon>/icon.png</icon>
    <logo>/icon.png</logo>
    <author>
            <name>Nicolas Fella</name>
        </author>
    
        <id>https://nicolasfella.de/posts/</id>
    
        
        <entry>
            <title type="html"><![CDATA[Detecting Memory Leaks in KDE CI]]></title>
            <link href="https://nicolasfella.de/posts/detecting-leaks-in-kde-ci/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/a-new-online-accounts-system/?utm_source=atom_feed" rel="related" type="text/html" title="A new online accounts system?" />
                <link href="https://nicolasfella.de/posts/qt-wayland-tablet-improvements/?utm_source=atom_feed" rel="related" type="text/html" title="Qt Wayland Tablet Improvents" />
                <link href="https://nicolasfella.de/posts/akademy-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Akademy went to me" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development-2/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development (update)" />
                <link href="https://nicolasfella.de/posts/goal-sprint-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Goal Sprint 2024" />
            
                <id>https://nicolasfella.de/posts/detecting-leaks-in-kde-ci/</id>
            
            
            <published>2026-01-23T22:00:00+01:00</published>
            <updated>2026-01-23T22:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>Leaking memory is impolite. It&rsquo;s messy, it can suggest logic bugs, and thanks to AI grifters RAM is expensive.</p>
<p>Unfortunately C++ makes it rather easy to leak memory. Fortunately we have tools to find such leaks. One such tool is <a href="https://clang.llvm.org/docs/LeakSanitizer.html">Leak Sanitizer</a> (LSAN) from the Address Sanitizer (ASAN) family. It&rsquo;s using compiler-based instrumentation for the code to reports any leaks after the program terminates.</p>
<p>KDE&rsquo;s CI infrastructed has ASAN enabled for a while. However the leak sanitizer part was explicitly disabled, so no leaks were reported as part of the CI build and test run. This is because a number of projects have pre-exisiting memory leaks that would cause the C build to fail. Of course those should be fixed eventually, but in order to do that we need to know where they are. Also, for projects that currently don&rsquo;t have any leaks we want to enforce keeping it that way.</p>
<p><a href="https://invent.kde.org/sysadmin/ci-utilities/-/merge_requests/611">A few lines of Python</a> later KDE&rsquo;s CI system now allows to enable LSAN on a per-project basis. The <code>.kde-ci.yml</code> file that governs CI builds in KDE gained a new option <code>enable-lsan</code>. It is off by default for now for compatibility, but we may consider enabling it by default eventually.</p>
<p>If enabled and any memory leak in a test is detected, that test and therefore the whole CI pipeline will fail.</p>
<p>Now once we found a leak, what can we do about it? There&rsquo;s several options:</p>
<ul>
<li>Use good old delete/free(). Works, but is often rather error-prone.</li>
<li>Use QObject&rsquo;s parent mechanism. Works, but often frowned upon by C++ purists. Mostly makes sense for widget hierarchies.</li>
<li>Smart pointers like std::unique_ptr/std::shared_ptr. These are great because they allow to express the ownership on an API level and make ownership transfers explicit. Often the best choice for business logic code.</li>
</ul>
<p>LSAN is now enabled for some Frameworks CI builds, but ideally it would be enabled for all KDE projects. And of course any leaks found along the way should be fixed.</p>
<p>Happy leak-fixing!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[A new online accounts system?]]></title>
            <link href="https://nicolasfella.de/posts/a-new-online-accounts-system/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/qt-wayland-tablet-improvements/?utm_source=atom_feed" rel="related" type="text/html" title="Qt Wayland Tablet Improvents" />
                <link href="https://nicolasfella.de/posts/akademy-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Akademy went to me" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development-2/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development (update)" />
                <link href="https://nicolasfella.de/posts/goal-sprint-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Goal Sprint 2024" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development" />
            
                <id>https://nicolasfella.de/posts/a-new-online-accounts-system/</id>
            
            
            <published>2025-11-15T10:00:00+01:00</published>
            <updated>2025-11-15T10:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>For many years Plasma comes with its own system online accounts system, known as KAccounts. The idea is simple: In Systemsettings you log into a given online service once, and then several applications can use that login, instead of loggin in inside each application separately.</p>
<p>The number of services available and applications making use of them changed a bit over recent years. As of right now the following services are supported:</p>
<ul>
<li>Nextcloud: This is used by Dolphin to add a shortcut for file access via webdav to the <code>Network</code> section, as well as the Purpose framework to allow uploading files to Nextcloud.</li>
<li>Owncloud: Used for the same things as Nextcloud.</li>
<li>Google: Used by Purpose for uploading to YouTube. In theory also used by <code>kio-gdrive</code> for browsing Google Drive, but access to this is currently blocked by Google.</li>
<li>OpenDesktop: Used for reviewing store.kde.org content in Discover</li>
</ul>
<p>This isn&rsquo;t all that much. Notably absent here is KDE PIM, which could greatly benefit from integrating with the Nextcloud and Google accounts. This is something many users have asked for over time. Plus, there&rsquo;s more services that are used across applications and could benefit from a systemwide online accounts system, like Mastodon or Matrix.</p>
<p>Overall the situation with online accounts support in KDE is unsatisfactory, and it&rsquo;s not for a lack of trying. Over the last few years there have been several smaller improvements to the system. However there have been no changes to the overall architecture. At this point I am convinced that the architecture is what&rsquo;s holding us back, and we need to do something about that.</p>
<p>The current system is based on the <a href="https://accounts-sso.gitlab.io/">Accounts SSO</a> framework. It consists of several libraries and processes, split across about a dozen different repositories. This makes for a rather complex system for what is effectively reading and writing to a sqlite database and some OAuth handling. It also receives very little development activity, to the point where it was hard to get the required patches for Qt6 support in. Using an external accounts system as based for KAccounts only makes it harder to iterate on our system, while providing no meaningful interoperability with other parties.</p>
<p>The system also isn&rsquo;t designed for a sandboxed world. Apps have direct access to the accounts database and keychain, so there is no ability to restrict which apps can use which accounts. While per-application access control wasn&rsquo;t really feasible for traditional Linux packaging, with sandboxed formats like Flatpak we can and want to restrict apps to only be able to access select accounts.</p>
<p>Having pondered the problem for a while I came to the conclusion that we need a fresh start for our online accounts story, a new system that fullfils the following goals:</p>
<ul>
<li>It&rsquo;s actually used by relevant KDE and third-party software</li>
<li>Easy to hack on and extend</li>
<li>Easy to be integrated into consumer software, with minimal dependencies</li>
<li>Can be extended with third-party providers</li>
<li>Account data is stored reasonably securely, with per-application access control (for sandboxed applications at least)</li>
</ul>
<p>Based on these goals I have developed a prototype for how such a system could look like.</p>
<p>At its core there is a daemon process that manages the accounts, and exposes them via a DBus interface. Applications uses this DBus interface to list availble accounts as well as their parameters and credentials. Only accounts the app  has been granted access to are visible that way. Application authentication works in a way that&rsquo;s inspired by how xdg-desktop-portal works.</p>
<p>An application can trigger a request for accessing a new account. The dameon will then handle the whole login flow and, if successful, will return a handle to the new account. Alternatively the user can log into a given service in the systemsettings module and give access to relevant apps though that.</p>
<p>Currently the following services/apps are supported:</p>
<ul>
<li>Nextcloud: Used by Purpose and KDE PIM</li>
<li>Mastodon: Used by Tokodon</li>
<li>Google: Used by KDE PIM and Purpose</li>
</ul>
<p>You can find the code at <a href="https://invent.kde.org/nicolasfella/konlineaccounts">https://invent.kde.org/nicolasfella/konlineaccounts</a>.</p>
<p>It is still very much a prototype, which is by no means ready for production, but it shows the basic concept. If you have input on this please get in touch, for example by <a href="https://invent.kde.org/nicolasfella/konlineaccounts/-/issues">filing an issue</a>.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Qt Wayland Tablet Improvents]]></title>
            <link href="https://nicolasfella.de/posts/qt-wayland-tablet-improvements/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/akademy-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Akademy went to me" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development-2/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development (update)" />
                <link href="https://nicolasfella.de/posts/goal-sprint-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Goal Sprint 2024" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development" />
                <link href="https://nicolasfella.de/posts/slimming-down-knotifications/?utm_source=atom_feed" rel="related" type="text/html" title="Slimming down KNotifications" />
            
                <id>https://nicolasfella.de/posts/qt-wayland-tablet-improvements/</id>
            
            
            <published>2024-11-08T23:50:00+01:00</published>
            <updated>2024-11-08T23:50:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>A few weeks ago Qt 6.8 was released, delivering many fixes and improvements for our software. Some of them were contributed by yours truly, and in this post I want to highlight some of them.</p>
<p>They relate to graphics tablet/stylus input on Wayland. Before we go into the fixes let&rsquo;s have a quick overview of the flow of tablet input events on Wayland:</p>
<p>The genesis of input events is in the kernel driver for the particular tablet, which talks to the hardware (via USB, bluetooth etc). The kernel passes events to userspace via the <a href="https://en.wikipedia.org/wiki/Evdev">evdev</a> system. On the userspace side a Wayland compositor reads those events. Most compositors leverage <a href="https://freedesktop.org/wiki/Software/libinput/">libinput</a> for this, a library that transforms raw evdev events into something more usable for the compositor while applying some cleaning and configuration. The compositor then delivers events to native Wayland applications using the <a href="https://wayland.app/protocols/tablet-v2">tablet-v2</a> protocol. For legacy XWayland applications the compositor uses this protocol to send events to XWayland, which translates them into things X11 apps understand. The compositor can apply useful transformations to the input, like which area of the screen the tablet is mapped to, changing the pressure curve of the pen, or binding buttons to keyboard shortcuts.</p>
<p>The application then processes the events, potentially leveraging a UI toolkit like Qt. Qt creates QTabletEvent object for incoming Wayland events and delivers those to all UI elements. In case no UI element reacts to the event Qt will synthesize a mouse event from the tablet event and deliver that to the UI elements. That way most controls like buttons and menus don&rsquo;t need special code to handle tablet input. Only when doing very low-level input handling or when needing tablet-specific interactions (like reacting to different pressure values) application developers need to explicitly handle tablet events in their code. Most UI toolkits will work somewhat similar to this. If an application doesn&rsquo;t react to tablet input at all please file a bug against the application.</p>
<p>Qt Wayland had support for tablet input for a few years now, so what exactly needed fixing? The first thing is cursors. In Wayland the application tells the compositor which cursor to use. This can be done either by specifying a surface (i.e. an image) or a named <a href="https://wayland.app/protocols/cursor-shape-v1">cursor shape</a>. Guess which one Qt used? That&rsquo;s right: Neither. It just didn&rsquo;t specify a cursor at all. The result depends on the compositor: KWin would display a cross-hair cursor as a fallback, which is ~okay, but not the cursor the application developer asked for. On other compositors I&rsquo;ve tested there will be no cursor visible at all, which isn&rsquo;t okay at all. For Qt 6.8 I <a href="https://codereview.qt-project.org/c/qt/qtwayland/+/569779">implemented</a> the missing cursor support, so now tablets get the same cursor as mouse input (unless of course the application developer wants a different cursor for tablet input).</p>
<p>Another thing that affected mostly non-Plasma users is client-side decorated windows. On Plasma Qt applications usually use the server-side decoration provided by KWin, but e.g. on GNOME Qt is responsible for drawing and handling window decorations. For this Qt features a plugin system so different decorations with different look-and-feels can be swapped out. Unfortunately those decorations didn&rsquo;t handle tablet input at all, so it wasn&rsquo;t possible to move around or close windows using a tablet stylus. I <a href="https://codereview.qt-project.org/c/qt/qtwayland/+/575009">fixed</a> this by pretending the tablet input is mouse input to the decorations, which was a simple yet effective solution for the issue. If there is ever a need for decorations to treat tablet input different to mouse input we can revisit this.</p>
<p>Talking about moving windows, a feature most KDE apps have (even if off-by-default these days) is dragging any empty area to move the window. This wasn&rsquo;t working when using a stylus. Why? For that we need to look at how this works on a Wayland level. The <a href="https://wayland.app/protocols/xdg-shell">xdg-shell</a> protocol (the one responsible for most application windows) has a <a href="https://wayland.app/protocols/xdg-shell#xdg_toplevel:request:move">move</a> request that asks the compositor to start a move interaction for the window. As part of the request the application must pass a serial, which is a number that corresponds to the last input event the application has received. To avoid applications suddenly deciding to move in the background compositors usually only allow move requests as a result of direct user input, so this serial must match the last input event. Qt wraps this move request inside the <a href="https://doc.qt.io/qt-6/qwindow.html#startSystemMove">QWindow::startSystemMove</a> function. The problem was that Qt didn&rsquo;t keep track of the serial it received as part of tablet input, so when starting the move it would pass a wrong serial and the compositor (rightfully) refused the move. A <a href="https://codereview.qt-project.org/c/qt/qtwayland/+/568058">few extra lines</a> later the serial was tracked properly and moving windows with a stylus worked, just in time for Nate to <a href="https://invent.kde.org/plasma/breeze/-/merge_requests/468">disable</a> the feature by default.</p>
<p>The same problem also affected drag-and-drop. When starting a drag with a stylus Qt now passes the correct serial, making drag-and-drop work (at least on the Qt side, there currently is a bug on the KWin side that prevents this from working).</p>
<p>The last fix for today relates to how applications react to the tablet events. Sometimes applications process clicks differently depending on what keyboard modifiers are pressed. For example pressing Ctrl while clicking on files in Dolphin allows to select multiple files. For this to work Qt conveniently delivers the active modifiers with every input event. Alas for tablet input the modifiers got lost along the way, so it wasn&rsquo;t possible to select multiple files using a stylus. One <a href="https://codereview.qt-project.org/c/qt/qtwayland/+/533675">small fix</a> later it works as expected.</p>
<p>That&rsquo;s all the Wayland tablet related fixes for today. If you find more issues in Qt/KDE apps related to tablet input on Wayland please report them on bugs.kde.org and I&rsquo;ll look into them.</p>
<p>That&rsquo;s not all there is about Wayland tablet improvements though. Fully in the spirit of the &ldquo;We care about your input!&rdquo; Goal there are exiting things happening on the KWin/Plasma side that I&rsquo;ve been involved in. Stay tuned for more!</p>
<p>In my position of Software Platform Engineer at KDE I work on common building blocks for KDE software, like Qt and KDE Frameworks. This work is possible thanks to your generous donations. Check out our <a href="https://kde.org/fundraisers/yearend2024/">end-of-the-year fundraiser</a> if you&rsquo;d like to see more work like this.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Akademy went to me]]></title>
            <link href="https://nicolasfella.de/posts/akademy-2024/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development-2/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development (update)" />
                <link href="https://nicolasfella.de/posts/goal-sprint-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Goal Sprint 2024" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development" />
                <link href="https://nicolasfella.de/posts/slimming-down-knotifications/?utm_source=atom_feed" rel="related" type="text/html" title="Slimming down KNotifications" />
                <link href="https://nicolasfella.de/posts/plasma-sprint-2023/?utm_source=atom_feed" rel="related" type="text/html" title="Plasma Sprint 2023" />
            
                <id>https://nicolasfella.de/posts/akademy-2024/</id>
            
            
            <published>2024-09-14T17:00:00+02:00</published>
            <updated>2024-09-14T17:00:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>This year&rsquo;s Akademy was a special one for me in many ways.</p>
<p>First of all, instead of me travelling to Akademy it took place in my hometown of Würzburg, Germany. While I did have a hand in organizing it, most of the credit for it goes to Tobias and David. I had a lot of fun introducing people to my area and the concept of drinking wine on a bridge.</p>
<h2 id="qt-contributor-summit" >Qt Contributor Summit
<span>
    <a href="#qt-contributor-summit">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Right before Akademy there was the Qt Contributor Summit, also in Würzburg (what a coincidence!). It was great to meet old and new Qt faces and talk about topics that are relevant to KDE, like the upcoming migration of KDE API documentation to qdoc.</p>
<h2 id="akademy-talks" >Akademy Talks
<span>
    <a href="#akademy-talks">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>This Akademy I gave two talks: One <a href="https://conf.kde.org/event/6/contributions/201/">long one</a> where I looked back at the Qt6/KF6 transition, what went well, what didn&rsquo;t, and looked towards the future of what&rsquo;s next for our software platform. Then I also had a <a href="https://conf.kde.org/event/6/contributions/197/">lightning talk</a> where I talked about the role of maintainers in open-source projects, why KDE doesn&rsquo;t have traditional maintainers, and why that&rsquo;s a good thing.</p>
<p>Besides that there were also a lot of interesting talks from other people, too many to mention right now. Speaking as a member of the program committee we had some tough decisions to make about what to include.</p>
<h2 id="goals" >Goals
<span>
    <a href="#goals">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>During the conference we announced the new set of Goals that were recently elected. I&rsquo;m excited that my own proposal &ldquo;Streamlined Application Development Experience&rdquo; got selected and I&rsquo;m looking forward to working on it with you. Besides that I also want to see how I can help out with the other elected goals: &ldquo;We care about your input&rdquo; and &ldquo;KDE needs you 🫵&rdquo;.</p>
<h2 id="akademy-awards" >Akademy Awards
<span>
    <a href="#akademy-awards">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Another way this Akademy was special for me is that I was awarded with an Akademy award for my work on KDE Frameworks and Plasma. It feels great to get recognition for all the work I&rsquo;ve been doing for the last seven years.</p>
<p><img src="akademy_award.jpg" alt="A framed award titling: Non-Application Contribution Award September 2024 Nicolas Fella for their work on KDE Frameworks and Plasma"></p>
<h2 id="bofs" >BOFs
<span>
    <a href="#bofs">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>During the week we had lots of smaller meetings and workshops (a.k.a BOFs, world&rsquo;s most terrible acronym). I was leading two of them, one about my newly-elected goal where I was presenting my proposal in more detail, and one about the ongoing work of mine to migrate our API documentation to qdoc. Thanks to our sysadmin Ben we now have a <a href="https://api-staging.kde.org/">website</a> where the current (still very much WIP) state of the new API documentation page can be seen.</p>
<h2 id="other-things" >Other Things
<span>
    <a href="#other-things">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>What&rsquo;s great about Akademy isn&rsquo;t just talks and BOFs, it&rsquo;s meeting people you only see online all year, talking to them in person, getting your code reviewed while staring on a screen together, chatting over random visions, complaining about things, laughing and enjoying things together, and wrapping up the day with a nice beer in your hand.</p>
<p>I&rsquo;m already looking forward to next year&rsquo;s Akademy, wherever that will be. Maybe it will be your place, organizing it is a lot less scary than you&rsquo;d think ;).</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Using the QML Language Server for KDE Development (update)]]></title>
            <link href="https://nicolasfella.de/posts/qmlls-for-kde-development-2/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/goal-sprint-2024/?utm_source=atom_feed" rel="related" type="text/html" title="Goal Sprint 2024" />
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development" />
                <link href="https://nicolasfella.de/posts/slimming-down-knotifications/?utm_source=atom_feed" rel="related" type="text/html" title="Slimming down KNotifications" />
                <link href="https://nicolasfella.de/posts/plasma-sprint-2023/?utm_source=atom_feed" rel="related" type="text/html" title="Plasma Sprint 2023" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-3/?utm_source=atom_feed" rel="related" type="text/html" title="Month three as KDE Software Platform Engineer" />
            
                <id>https://nicolasfella.de/posts/qmlls-for-kde-development-2/</id>
            
            
            <published>2024-05-10T12:30:00+02:00</published>
            <updated>2024-05-10T12:30:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>In a <a href="../qmlls-for-kde-development/">previous post</a> I talked about using the QML Language Server for KDE development. Since writing that post a few things happened, so it&rsquo;s time for an update.</p>
<p>I mentioned that when using Kate qmlls should work out of the box when opening a QML file. That&rsquo;s mostly true, there is one problem though. Depending on your distribution the binary for qmlls has a different name. Sometimes it&rsquo;s <code>qmlls</code>, sometimes <code>qmlls6</code> or <code>qmlls-qt6</code>. You may need to adjust the LSP Server settings in Kate to match the name on your system.</p>
<p>In order for qmlls to find types that are defined in your application&rsquo;s C++ code those must not only be declaratively registered, qmlls also needs to be told where to find the type information. Fortunately <a href="https://doc.qt.io/qt-6/cmake-variable-qt-qml-generate-qmlls-ini.html">Qt 6.7</a> comes with a handy way to do that. By passing <code>-DQT_QML_GENERATE_QMLLS_INI=ON</code> to CMake you get an appropriate config file generated. This will be placed into the project&rsquo;s source directory but is specific to your setup, so add that to your gitignore file (PS: You can set up a global gitignore file for your system, so you don&rsquo;t need to add this to all your projects). Unfortunately the initial implementation produced <a href="https://bugreports.qt.io/browse/QTBUG-124521">wrong</a> configurations for some modules, but this is <a href="https://codereview.qt-project.org/c/qt/qtdeclarative/+/556948">fixed</a> in Qt 6.7.2.</p>
<p>A problem I mentioned is that qmlls doesn&rsquo;t find modules that are not installed into the same path as Qt. With Qt 6.8 there will be <a href="https://codereview.qt-project.org/c/qt/qtdeclarative/+/554300">two new options</a>. The <code>-I</code> parameter allows to add custom import paths to qmlls&rsquo; search paths. The <code>-E</code> parameter makes qmlls consider the value of the <code>QML_IMPORT_PATH</code> environment variable for its search paths.</p>
<p>In order for qmlls to work properly modules need to be created using the CMake API and use declarative type registration. Since writing the last post some KDE modules have been converted to those, but there&rsquo;s still more to do.</p>
<p>Thanks to the QML team for those swift improvements!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Goal Sprint 2024]]></title>
            <link href="https://nicolasfella.de/posts/goal-sprint-2024/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/qmlls-for-kde-development/?utm_source=atom_feed" rel="related" type="text/html" title="Using the QML Language Server for KDE Development" />
                <link href="https://nicolasfella.de/posts/slimming-down-knotifications/?utm_source=atom_feed" rel="related" type="text/html" title="Slimming down KNotifications" />
                <link href="https://nicolasfella.de/posts/plasma-sprint-2023/?utm_source=atom_feed" rel="related" type="text/html" title="Plasma Sprint 2023" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-3/?utm_source=atom_feed" rel="related" type="text/html" title="Month three as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-2/?utm_source=atom_feed" rel="related" type="text/html" title="Month two as KDE Software Platform Engineer" />
            
                <id>https://nicolasfella.de/posts/goal-sprint-2024/</id>
            
            
            <published>2024-05-01T14:00:00+01:00</published>
            <updated>2024-05-01T14:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>Last week, like many other people, I was in Berlin for the Mega^WGoals sprint. Natually the three goals (Sustainability, Accessibility, and Automatability; the three abilities) attracted a diverse crowd of people that brought also other topics, so it turned into a proper megasprint.</p>
<p>Being interested in all three goals made it a bit callenging to follow all relevant discussions unfortunately, but on the flip side it never got boring.</p>
<p>Most of my goal-related work was towards the automation goal. One thing I was working on is a <a href="https://invent.kde.org/sysadmin/ci-utilities/-/merge_requests/285">CI job that checks for spelling mistakes in the code</a>, so that those can be caught when doing a MR. A while ago I create a <a href="https://iskdeusingqt6.org/">website</a> that tracks which KDE projects are ported to Qt6. What started out as a joke for a talk turned out to be a useful tool for planning porting work. During the print I fixed the site to actually work correctly again and, most importantly, changed the text from &ldquo;No&rdquo; to &ldquo;Yes&rdquo; since most projects actually use Qt6 now. For a while the site also has auto-generated reports for other things, like showing which projects don&rsquo;t yet have clang-format applied to them or which projects don&rsquo;t enforce passing test in the CI. I used the latter list to enable this for the remaining projects that don&rsquo;t have failing tests right now and prepared a <a href="https://invent.kde.org/sysadmin/ci-utilities/-/merge_requests/296">change</a> to the CI system that enforces passing tests by default. In the same spirit others and I also fixed some currently failing tests. We also discussed the idea of extending the site with more checks and turning it into a proper KDE site that isn&rsquo;t hosted on my personal infrastructure.</p>
<p>Harald, Carl, and I worked on a dashboard to show the CI status for our project. This is something we haven&rsquo;t really had since switching to Gitlab CI but is very useful e.g. as part of the release checklist. We do have a working prototype, but some things remain to be ironed out. As part of this we also fixed some of the currently failing builds.</p>
<p>My main contribution to the systainability goal was debugging why Nate&rsquo;s NeoChat is using too much CPU. With a team effort we eventually pinpointed this to an invisible animation constantly repainting the window, which was then promptly fixed.</p>
<p>In terms of accessibility I was mainly involved in discussions about challenges and new developments with accessibility on Wayland. Expect to hear more on this soon.</p>
<p>In &ldquo;off-topic&rdquo; topics there were plently of discussions about visions, ideas, and challenges for our application development story. This included discussions on visions for design/UX, theming, API design, and software distribution. Being KDE&rsquo;s Software Platform Engineer it is part of my responsibilities to facilitate these kinds of discussions. Later this year I want to host a <a href="https://mail.kde.org/pipermail/kde-devel/2024-April/002643.html">sprint</a> dedicated to application design to discuss and establish our vision there. If you are interested do reach out to me.</p>
<p>All in all it was a fun few days with great people. Thanks to MBition and Aleix for hosting us, and thanks to those <a href="https://kde.org/donate">donating to KDE</a> to make these sprints possible.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Using the QML Language Server for KDE Development]]></title>
            <link href="https://nicolasfella.de/posts/qmlls-for-kde-development/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/slimming-down-knotifications/?utm_source=atom_feed" rel="related" type="text/html" title="Slimming down KNotifications" />
                <link href="https://nicolasfella.de/posts/plasma-sprint-2023/?utm_source=atom_feed" rel="related" type="text/html" title="Plasma Sprint 2023" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-3/?utm_source=atom_feed" rel="related" type="text/html" title="Month three as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-2/?utm_source=atom_feed" rel="related" type="text/html" title="Month two as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/building-plasma-against-qt6/?utm_source=atom_feed" rel="related" type="text/html" title="Building Plasma against Qt6" />
            
                <id>https://nicolasfella.de/posts/qmlls-for-kde-development/</id>
            
            
            <published>2024-03-23T14:00:00+01:00</published>
            <updated>2024-03-23T14:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>For a while Qt has been offering qmlls, a Language Server Protocol implementation for QML. This allows popular text editors like Kate (and some lesser known ones like Visual Studio Code) to work with QML code without having to write dedicated support for it.</p>
<p>Naturally many people are eager to use it to hack on KDE code. When trying to do that you probably have encountered some frustration with things not working as expected. So what&rsquo;s going on there, and how can we make it work?</p>
<p>First and foremost one must mention that qmlls is still under heavy development. There&rsquo;s a number of <a href="https://doc.qt.io/qt-6/qtquick-tool-qmlls.html#known-limitations">things missing</a> that you&rsquo;d expect from a fully featured LSP implementation. If you encounter something that looks like it should work but doesn&rsquo;t, don&rsquo;t hesitate to file a <a href="https://bugreports.qt.io/">bugreport</a>.</p>
<p>So how does one use qmlls? In Kate it should be activated out-of-the-box when opening a QML file. If that doesn&rsquo;t work you might need to tweak the LSP-Client settings. For other editor please consult their documentation on how to enable LSP support.</p>
<p>One problem you are likely to encounter when using qmlls on KDE code is that it fails to find KDE-provided QML modules like Kirigami. This happens when the modules are installed into e.g. <code>~/kde/usr</code>, which isn&rsquo;t searched by Qt. One way to get around this is to build and install your own Qt into <code>~/kde/usr</code> too, since that way the modules will be installed into the same prefix as Qt and Qt will find them. While building your own Qt is a worthwile thing to do in general it&rsquo;s not a very satisfying solution. I hope we can find a better solution for this soon. See <a href="https://bugreports.qt.io/browse/QTBUG-114969">here</a> for a related bugreport.</p>
<p>If your installation is set up in a way that qmlls can find the KDE-provided modules you might still encounter it warning on unknown modules or types. In order for qmlls to show information for a module the module needs a qmltypes file. These files provide machine-readable information about the types that the module exposes. The easiest way to make these available is porting the module to <code>ecm_add_qml_module</code> and declarative type registration. This was done for many KDE modules already, but there&rsquo;s still a number of them missing. Help on that is very welcome! Something that isn&rsquo;t obvious is that in order for the tooling to work correctly module dependencies need to be marked explicity via the <code>DEPENDENCIES</code> parameter in <code>ecm_add_qml_module</code>.</p>
<p>If all the modules and types are found correctly you will still encounter some warnings, but most of these should correspond to actual issues and non-optimal practices like using unqualified property lookups and context properties. qmlls is a great tool to guide you towards resolving those and thus modernizing and optimizing the code. There are however some classes of warnings for which we don&rsquo;t have proper solutions yet:</p>
<ul>
<li>Our translation functions, i18n and friends, are considered unqualified lookups by qmllint/qmlls. This is because they are magically injected into the engine at runtime. It&rsquo;s not clear how a solution for this could look like.</li>
<li>When writing KCMs we expose the module&rsquo;s C++ class via the <code>kcm</code> context property, which is opaque to the tools. A different approach is needed.</li>
</ul>
<p>Despite the current limitations qmlls is already a very useful tool for working on QML code, assuming the project is set up properly.</p>
<p>Happy QML hacking!</p>
<p>If you are reading this from the future there&rsquo;s an <a href="../qmlls-for-kde-development-2">update</a> available.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Slimming down KNotifications]]></title>
            <link href="https://nicolasfella.de/posts/slimming-down-knotifications/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/plasma-sprint-2023/?utm_source=atom_feed" rel="related" type="text/html" title="Plasma Sprint 2023" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-3/?utm_source=atom_feed" rel="related" type="text/html" title="Month three as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-2/?utm_source=atom_feed" rel="related" type="text/html" title="Month two as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/building-plasma-against-qt6/?utm_source=atom_feed" rel="related" type="text/html" title="Building Plasma against Qt6" />
                <link href="https://nicolasfella.de/posts/how-platform-integration-works/?utm_source=atom_feed" rel="related" type="text/html" title="How platform integration in Qt/KDE apps works" />
            
                <id>https://nicolasfella.de/posts/slimming-down-knotifications/</id>
            
            
            <published>2023-10-08T16:00:00+02:00</published>
            <updated>2023-10-08T16:00:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>KNotifications is KDE&rsquo;s framework for creating popup notifications. It supports Linux, Windows, macOS, and Android, making it, to my knowledge, the most complete cross-platform library for this available in C++. This makes it natually interesting to use for non-KDE Qt application developers.</p>
<p>However there is one aspect that makes it less attractive for third-party developers: It&rsquo;s number of dependencies. As of KNotifications 5.110 it depends on the following other KDE Frameworks:</p>
<ul>
<li>KCoreAddons</li>
<li>KConfig</li>
<li>KWindowSystem</li>
</ul>
<p>as well as some third-party like QtWidgets, X11, libdbusmenu-qt and libcanberra.</p>
<p>While none of these are a hard blocker for usage in most cases the overall impression isn&rsquo;t very appetizing. During the KF5 time we already weeded out some dependencies that don&rsquo;t make sense on some platforms, like removing the QtWidgets dependency on Android. We were however somewhat limited in our ability to do large cleanups by our strict API/ABI stability promise. For KF6 we have the opportunity do to larger cleanups.</p>
<p>One larger source of dependencies is the KStatusNotifierItem class, which is part of the KNotifications framework and is used to create system tray icons. Since its functionality is rather independent from creating popup notifications we decided to split it out into a separate, new framework. This significantly reduces the number of dependencies of KNotifications. A number of other changes further reduced the number of dependencies and cleaned up the public API a bit.</p>
<p>As a result what will become KF6 KNotifications on Linux only depends on Qt (QtGui + QtDBus, and optionally QtQml for QML support), KConfig (that would also be feasible to remove if someone is motivated enough) and libcanberra (for playing notification sounds).</p>
<p>Other KDE Frameworks received similar changes, but KNotifications is likely the one where this has the largest impact.</p>
<p>Doing this kind of work is part of my position as KDE Software Platform Engineer. To support my work please consider <a href="https://kde.org/community/donations">donating to KDE e.V.</a>.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Plasma Sprint 2023]]></title>
            <link href="https://nicolasfella.de/posts/plasma-sprint-2023/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/softwareplatform-month-3/?utm_source=atom_feed" rel="related" type="text/html" title="Month three as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-2/?utm_source=atom_feed" rel="related" type="text/html" title="Month two as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/building-plasma-against-qt6/?utm_source=atom_feed" rel="related" type="text/html" title="Building Plasma against Qt6" />
                <link href="https://nicolasfella.de/posts/how-platform-integration-works/?utm_source=atom_feed" rel="related" type="text/html" title="How platform integration in Qt/KDE apps works" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-1/?utm_source=atom_feed" rel="related" type="text/html" title="A month as KDE Software Platform Engineer" />
            
                <id>https://nicolasfella.de/posts/plasma-sprint-2023/</id>
            
            
            <published>2023-05-15T15:00:00+02:00</published>
            <updated>2023-05-15T15:00:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>As you probably have seen from other people&rsquo;s blog posts there was the 2023 Plasma Sprint last week. It was generously hosted by <a href="https://www.tuxedocomputers.com/">TUXEDO Computers</a> in their offices in Augsburg, Germany. Many thanks to TUXEDO for that!</p>
<p>Other people have already well summarized what happend there, so let&rsquo;s have a look at what I have been doing:</p>
<p>Together with Kai Uwe, Volker, and Ismael I looked at notifications. This includes internal simplifications in KNotifications, API design questions, a proposed V2 for the notification portal API, and a new UI for per-event configuration in the notification settings module.</p>
<p>Together with Marco I looked into some API design topics around the Applet class in plasma-framework, and worked on a proposed new API for applet actions.</p>
<p>Given that Wayland was a huge topic at the sprint I continued the work of mine on enabling some accessibility options on Wayland. Sticky keys is not only what happens when you spill Spezi over your laptop, it is also an accessibility feature that allows people that cannot press multiple keys simultaneously to type key combinations like Control+C/Control+V. Basic support for this on Wayland is coming with Plasma 6. Not all of the options that are present on X11 work yet though. If you are a user of sticky keys please leave your feedback on <a href="https://bugs.kde.org/show_bug.cgi?id=444335">https://bugs.kde.org/show_bug.cgi?id=444335</a> for which of these options should be prioritized.</p>
<p>Together with Natalie, KDE e.V.&rsquo;s Hardware Integration Engineer, I discussed our touchpad configuration module and how to make it more robust and maintainable. We also discussed various topics around debugging and profiling KDE software.</p>
<p>Together with Xaver I looked into how Dolphin/KIO handles multi-GPU setups (so that apps preferring discrete GPUs will use them when launched via KIO). As it turns out there&rsquo;s a few things to be improved there so we discussed approaches to do that.</p>
<p>With David I discussed some of my open changes to our global shortcuts infrastructure and continued working on improving that.</p>
<p>We also got a visit from two people from the city of Treuchtlingen, Germany. They have been using KDE software in their communal IT for over 20 years. We discussed their vision of using open source and open standards in government IT and some of their pain points with using KDE software for that.</p>
<p>Overall it was a very nice and productive week and it was great to meet so many fellow KDE hackers, some of them for the first time! Gatherings like this are only possible because of generous <a href="https://kde.org/de/community/donations/">donations</a> to KDE e.V. Please consider donating to make more such sprints possible.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Month three as KDE Software Platform Engineer]]></title>
            <link href="https://nicolasfella.de/posts/softwareplatform-month-3/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/softwareplatform-month-2/?utm_source=atom_feed" rel="related" type="text/html" title="Month two as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/building-plasma-against-qt6/?utm_source=atom_feed" rel="related" type="text/html" title="Building Plasma against Qt6" />
                <link href="https://nicolasfella.de/posts/how-platform-integration-works/?utm_source=atom_feed" rel="related" type="text/html" title="How platform integration in Qt/KDE apps works" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-1/?utm_source=atom_feed" rel="related" type="text/html" title="A month as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/generating-dependency-metadata/?utm_source=atom_feed" rel="related" type="text/html" title="Generating Dependency Data for kdesrc-build" />
            
                <id>https://nicolasfella.de/posts/softwareplatform-month-3/</id>
            
            
            <published>2023-05-01T17:20:00+02:00</published>
            <updated>2023-05-01T17:20:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>A month has passed since my <a href="https://nicolasfella.de/posts/softwareplatform-month-1/">last monthly post</a> about my work as KDE Software Platform Engineer. What have I been up to since then?</p>
<p>As usual not everything I did ended up as committed code. A lot of my work is reviewing other people&rsquo;s code, discussing ideas, and generally being useful to the community.</p>
<p>One area I&rsquo;ve been focussing on is our infrastructure for global shortcuts. These are currently handled by the KGlobalAccel framework. This frameworks contains the runtime component that manages global shortcuts as well as an application-facing library to interact with the runtime. The runtime and interface library being in the same project has caused us some issues in the past. To address these the runtime part is now split out into a separate project and part of the Plasma group. You can read up more details on this <a href="https://mail.kde.org/pipermail/plasma-devel/2023-February/122956.html">here</a>. This change also allowed for some further changes that made launching applications from global shortcuts both simpler code-wise and more robust. I have also worked on another set of changes that will address some of the pain points that are currently present in our global shortcuts system. While doing that I also addressed some issues I found in the underlying KDE Frameworks libraries.</p>
<p>Another area I worked on is notifications. One thing I did there was reducing the API surface of the KNotification class by hiding internal API that shouldn&rsquo;t be exposed to application developers. I also proposed a revamped API for specifying notification actions. The new API is both easier to use for application developers and easier to extend with new features in the future.</p>
<p>With a small API change to KStatusNotifierItem, our class for implementing system tray icons, it is now easier for QML applications to fully make use of its capabilities. The API to set an associated window previously was only really usable for QtWidgets apps, now it can be used for QML apps too.</p>
<p>In some Plasma news: Plasma now uses the C++20 standard. This allows us to use some nifty new C++ features. One big one that comes to mind are coroutines, which have the potential to massively simplify parts of our code. Getting there required some tweaks to make our code and our dependencies fully C++20-compliant.</p>
<p>Talking about dependencies: With our move to Qt6 all of our Qt-based dependencies need to make that move too. appstream-qt, the library that powers e.g. Discover is now ready for that too. I helped integrating that into our build infrastructure. Another project with such dependencies is our online accounts system. It depends on libraries like libaccounts-qt and signond, which I&rsquo;m working on porting to Qt6.</p>
<p>Last weekend I attended the <a href="https://linuxappsummit.org/">Linux App Summit</a> in Brno, Czech Republic. It was a lovely event that allowed me to get in touch with both people from KDE and our partner organizations like GNOME and Flathub.</p>
<p>To support the work I and many other people do in KDE please consider <a href="https://kde.org/donate">donating</a> to KDE e.V. Your donations make my work as KDE Software Platform Engineer possible. Thank you for that!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Month two as KDE Software Platform Engineer]]></title>
            <link href="https://nicolasfella.de/posts/softwareplatform-month-2/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/building-plasma-against-qt6/?utm_source=atom_feed" rel="related" type="text/html" title="Building Plasma against Qt6" />
                <link href="https://nicolasfella.de/posts/how-platform-integration-works/?utm_source=atom_feed" rel="related" type="text/html" title="How platform integration in Qt/KDE apps works" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-1/?utm_source=atom_feed" rel="related" type="text/html" title="A month as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/generating-dependency-metadata/?utm_source=atom_feed" rel="related" type="text/html" title="Generating Dependency Data for kdesrc-build" />
                <link href="https://nicolasfella.de/posts/eco-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Eco Sprint 2022" />
            
                <id>https://nicolasfella.de/posts/softwareplatform-month-2/</id>
            
            
            <published>2023-04-08T16:00:00+02:00</published>
            <updated>2023-04-08T16:00:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>It&rsquo;s been a month since my <a href="https://nicolasfella.de/posts/softwareplatform-month-1/">first post</a> about my work as KDE Software Platform Engineer, so let&rsquo;s have a look at what I have been doing since then.</p>
<p>The scope of what falls under &ldquo;Software Platform&rdquo; work is arguably quite wide. I like to describe it as &ldquo;Taking care of everything needed so that people can build and enjoy awesome software&rdquo;. Of course that often means hacking on source code, but that is by no means the only thing I do. A significant part of what I do is talking to other people, discussing ideas, reviewing code, making architecture decisions, documenting things, triaging bugreports, and just generally being useful to others. A lot of this work is strategic in nature and the benefits will only show in the long term, but some short-term improvements happend this month also.</p>
<p>My main area of focus was working on polishing the Plasma 6 and Frameworks 6 stability. This means staying on top of things that happen throughout the stack as well as squashing remaining issues. As a result several more projects now have CI builds against the latest development branches of frameworks. Furthermore, I fixed several places where coexistence of Qt5/KF5-based and Qt6/KF6-based software was causing issues.</p>
<p>Qt is an vital part of our software stack, so an important part of being KDE Software Platform Engineer is being involved in its development. Last month I submitted <a href="https://codereview.qt-project.org/c/qt/qtbase/+/466738">a patch</a> to Qt, fixing a build issues affecting our code. Besides that I have also reported some bugs that were affecting KDE and participated in code review. Another important piece of our stack is our Qt5 Patch Collection that collects bugfix patches for Qt5. I contributed two <a href="https://invent.kde.org/qt/qt/qtbase/-/merge_requests/246">such</a> <a href="https://invent.kde.org/qt/qt/qtbase/-/merge_requests/246">patches</a> by backporting them from upstream.</p>
<p>In terms of documentation I have published two blog posts recently. The <a href="https://nicolasfella.de/posts/building-plasma-against-qt6/">first</a> explains how to build the development version of Plasma using kdesrc-build. While doing that I have also fixed some related issues in kdesrc-build to make sure building things is as smooth as possible. The <a href="https://nicolasfella.de/posts/how-platform-integration-works/">second</a> one is explaining some technical details about how theming and platform integration works in Qt/KDE apps. I hope this helps with some of the discussions around this topic that are coming up once in a while.</p>
<p>Besides these &ldquo;Bigger Picture&rdquo; topics I have also worked on some concrete enhancements for KDE software. With <a href="https://invent.kde.org/frameworks/kcoreaddons/-/merge_requests/320">a</a> <a href="https://invent.kde.org/plasma/xdg-desktop-portal-kde/-/merge_requests/180">series</a> <a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/2738">of</a> <a href="https://invent.kde.org/plasma/polkit-kde-agent-1/-/merge_requests/20">changes</a> various system windows no longer display an internal and technical application name like &ldquo;Portal&rdquo; or &ldquo;KDE Daemon&rdquo; in their window title. I have also <a href="https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/1455">restored the ability</a> to configure the time interval for determining whether two mouse clicks should be interpreted as a double click. This was present in the legacy mouse settings, but got lost in the transition to libinput. Another thing that got improved was the VPN support in our network settings. When importing a VPN configuration fails Plasma now <a href="https://invent.kde.org/plasma/plasma-nm/-/merge_requests/224">shows the relevant error message</a>, giving you at least some indication about what&rsquo;s wrong. Futhermore I <a href="https://invent.kde.org/plasma/plasma-nm/-/merge_requests/230">fixed a crash</a> when importing VPN configurations when the relevant NetworkManager plugin is missing.</p>
<p>Another area I was working on is our powermanagement settings. Currently they are quite complex, both in terms of UX and implementation. We are working on improving this, which involves quite a bit of technical ground work.</p>
<p>A month from now the Plasma team will meet in Augsburg, Germany for the first in-person Plasma Sprint since 2019. I have been planning and organizing this event. This will be an important opportunity to plan for an awesome Plasma future. However, such meetings are not cheap, so please consider <a href="https://kde.org/donate">donating</a> to KDE e.V. to support it.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Building Plasma against Qt6]]></title>
            <link href="https://nicolasfella.de/posts/building-plasma-against-qt6/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/how-platform-integration-works/?utm_source=atom_feed" rel="related" type="text/html" title="How platform integration in Qt/KDE apps works" />
                <link href="https://nicolasfella.de/posts/softwareplatform-month-1/?utm_source=atom_feed" rel="related" type="text/html" title="A month as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/generating-dependency-metadata/?utm_source=atom_feed" rel="related" type="text/html" title="Generating Dependency Data for kdesrc-build" />
                <link href="https://nicolasfella.de/posts/eco-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Eco Sprint 2022" />
                <link href="https://nicolasfella.de/posts/taskbar-single-app/?utm_source=atom_feed" rel="related" type="text/html" title="Task Manager Improvements in Plasma 5.24" />
            
                <id>https://nicolasfella.de/posts/building-plasma-against-qt6/</id>
            
            
            <published>2023-03-26T18:00:00+02:00</published>
            <updated>2023-03-26T18:00:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>As you probably have heard by now the lastest development versions of Plasma and KDE Frameworks require Qt6. This transition has been in the works for a few years by now, but it was only somewhat recently that we took the plunge and started relying on Qt6 exclusively for Plasma. Plasma 5.27 is the last Plasma 5 release and continues in bugfix-only mode.</p>
<p>For people who want to hack on Plasma features this raises the obvious question: How do I build Plasma 6 to hack on it?</p>
<p>Before diving into this, a word of warning: Current Plasma master is in no way &ldquo;ready for production&rdquo;. There are known-broken things and things may temporarily regress at any time. That said, the only way to get towards a stable thing is to dig in and fix things. So let&rsquo;s see how to do that.</p>
<p>For this explanation I&rsquo;m assuming you have build KDE software with <code>kdesrc-build</code> before. If not we have some extensive <a href="https://community.kde.org/Get_Involved/development">documentation</a> for that. First you need at least Qt 6.4 installed. The usually best way to get that is from your distribution. If your distribution does not have Qt6 packaged yet please complain^Wtalk to them. CMake should complain about any missing Qt6 modules/development files, but make sure you have the <code>qtpaths</code> tool installed beforehand. It should be named something like <code>qtpaths6</code> or <code>qtpaths-qt6</code>.</p>
<p>Now we need to teach <code>kdesrc-build</code> to build Plasma with the right configuration (git branches, CMake arguments etc) for building with Qt6. The easiest way to do that is by using a separate <code>kdesrc-buildrc</code> file. <code>kdesrc-build</code> comes with a <a href="https://invent.kde.org/sdk/kdesrc-build/-/blob/master/kdesrc-buildrc-kf6-sample">sample Qt6 configuration file</a> that you should use as a starting point. Replace the line <code>include ~/kde6/usr/share/kdesrc-build/kf6-qt6-build-include</code> with a path to your existing <code>kdesrc-build</code> installation. For me that would be <code>include ~/kde/src/kdesrc-build/kf6-qt6-build-include</code>. You can also apply other customizations that you usually do in your <code>kdesrc-buildrc</code>. Then save the file as e.g. <code>~/kde6/kdesrc-buildrc</code>. This configuration will download, build, and install everything under <code>~/kde6</code>. Currently it is very important to keep Qt5-based and Qt6-based builds separate since there will be conflicts between the installed files.</p>
<p>Now you can invoke kdesrc-build as usual, with one slight difference. Passing <code>--rc-file=/home/user/kde6/kdesrc-buildrc</code> will make it use the Qt6 configuration. If you omit the <code>--rc-file</code> argument it will use the old, Qt5-based configuration, so you can keep building Qt5- and Qt6-based stuff in parallel (but installed into different locations). Since <code>kdesrc-build --rc-file=/home/user/kde6/kdesrc-buildrc</code> is a bit of a mouthful you might want to configure a shell alias like <code>kdesrc-build6</code> for it.</p>
<p>Now you can do <code>kdesrc-build --rc-file=/home/user/kde6/kdesrc-buildrc workspace</code> to build Plasma. Note that it&rsquo;s expected that not all modules successfully build since not all of them are adjusted to Qt6 fully yet.</p>
<p>Once Plasma is build you want to log into the new session. To do that go to <code>~/kde6/build/plasma-workspace</code> and run <code>sudo ./login-sessions/install-sessions.sh</code> once. Then you can select the new session at login in SDDM.</p>
<p>Now for some question that might be on your mind:</p>
<p>Q: Is it stable?</p>
<p>A: No, see above.</p>
<p>Q: When will it be stable?</p>
<p>A: Time will tell. It will be several more months before we can consider a Plasma 6 release.</p>
<p>Q: I tested it and found a problem, what should I do?</p>
<p>A: Report it to bugs.kde.org, and state that you are using Plasma master. Or try fixing it yourself.</p>
<p>Q: I want to work on a Plasma feature, what should I do?</p>
<p>A: Try developing it against Plasma master. If you find yourself blocked by anything please tell us.</p>
<p>Q: Does this apply to other KDE software as well?</p>
<p>A: Yes. Note that most applications allow building against Qt5 and Qt6 from the same branch though. And some apps aren&rsquo;t ported to Qt6 at all.</p>
<p>Q: I did not understand a word of what you just said but I&rsquo;d still like to help.</p>
<p>A: One way to help is by <a href="https://kde.org/community/donations">donating</a> to KDE. Your donations help me have time to do things like working on Qt6 support or writing this blog post</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[How platform integration in Qt/KDE apps works]]></title>
            <link href="https://nicolasfella.de/posts/how-platform-integration-works/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/softwareplatform-month-1/?utm_source=atom_feed" rel="related" type="text/html" title="A month as KDE Software Platform Engineer" />
                <link href="https://nicolasfella.de/posts/generating-dependency-metadata/?utm_source=atom_feed" rel="related" type="text/html" title="Generating Dependency Data for kdesrc-build" />
                <link href="https://nicolasfella.de/posts/eco-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Eco Sprint 2022" />
                <link href="https://nicolasfella.de/posts/taskbar-single-app/?utm_source=atom_feed" rel="related" type="text/html" title="Task Manager Improvements in Plasma 5.24" />
                <link href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/?utm_source=atom_feed" rel="related" type="text/html" title="The importance of window to desktop file mapping" />
            
                <id>https://nicolasfella.de/posts/how-platform-integration-works/</id>
            
            
            <published>2023-03-09T21:00:00+01:00</published>
            <updated>2023-03-09T21:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>There has been some recent discussions about how KDE applications (or Qt apps in general) should look and feel like outside of the Plasma desktop, particularly in a GNOME environment.</p>
<p>During this discussion I noticed two major disconnects between the involved parties. One of them is <em>technical</em> in nature, where (understandably) not everyone involved has deep knowledge about how Qt and KDE apps work. The other one is <em>cultural</em> in nature, where there&rsquo;s opposing views about who gets to decide how an application should look and feel like on a given platform.</p>
<p>I can&rsquo;t do much about the cultural issue, but I can help the conversation by giving some much needed overview of how any of this works on a technical level. Everyone being on the same page technically could help foster a more productive conversation about this complex topic.</p>
<p>First of all it&rsquo;s important to note that Qt to its core is an abstraction across various plaforms (most important here are Linux, Windows, and macOS, but also to some degree Android and iOS). Whenever possible Qt tries to use the platform&rsquo;s native facilities to do anything, whether that&rsquo;s rendering, file dialogs, widget styles etc. This becomes somewhat messy when you consider that &ldquo;Linux&rdquo; isn&rsquo;t exactly a single, well-defined &ldquo;platform&rdquo;. Qt does usually have non-native fallbacks for things like file dialogs and widget styles, but they aren&rsquo;t necessarily something you want a user to have to see. It&rsquo;s also important to mention that Qt has two somewhat competing ways of defining UIs, the traditional QtWidgets, and the more recent QtQuick/QML.</p>
<p>There are several somewhat independent pieces involved in how a Qt application looks and feels. Jan Grulich already talked about some of them in the <a href="https://jgrulich.cz/2023/03/08/explained-qgnomeplatform-and-adwaita-qt/">context of GNOME and QGnomePlatform</a>, but there are also things specific to KDE applications that aren&rsquo;t mentioned.</p>
<p>The first piece is the &ldquo;Qt Platform Theme (QPT)&rdquo;. Despite the name it doesn&rsquo;t have much to do with the visual style. It is responsible for applying settings from the platforms. This for example includes font settings, the double click interval, or whether a file should be openend on single or double click. It also defines how standard dialogs look like, most importantly the file picker dialog, but also dialogs like a color picker. Third, it defines the color palette (QPalette) the application is using. More on that later. Qt itself ships platform themes for non-Linux platforms as well as somewhat generic Linux platform themes for GNOME and Plasma. Notable out-of-tree plugin exist, like <a href="https://invent.kde.org/plasma/plasma-integration">plasma-integration</a> which you are using right now if you are on Plasma, the aforementioned <a href="https://github.com/FedoraQt/QGnomePlatform">QGnomePlatform</a> targeted towards GNOME (and to some degree similar environments), and <a href="https://sourceforge.net/projects/qt5ct/">qt5ct</a>, which isn&rsquo;t aligned to a specific environment and provides generic control over platformtheme things.</p>
<p>The second, and perhaps most well-known, knob is the widgets style (also called QStyle). It controls the majority of the appearance of a QtWidgets application. Well-known examples include Breeze (the current Plasma default), Oxygen (the KDE4-default), <a href="https://github.com/FedoraQt/adwaita-qt">adwaita-qt</a>, as well as built-in styles for Windows/macOS. Qt also comes with a built-in Fusion style. QStyles are implemented using C++ plugins. Whenever the app needs to render some piece of UI, e.g. a button, it defers that to the style plugin. Some style, like e.g. Windows then use platform native APIs to render widgets, others like Breeze draw the widgets from scratch. Application developers can also include custom styles for complete control over the appearance.</p>
<p>The third important concept is QPalette. A QPalette is a set of colors used to draw UI elements. The palette is defined by the platform theme(!). For example Plasma uses this to apply the color scheme set in System Settings. QGnomePlatform uses it to apply Adwaita-like colors. The selected QStyle may (or may not!) use this palette when drawing controls. The application developer can also manually query colors from the palette for drawing custom widgets while still respecting the platform&rsquo;s wanted colors. A platform theme may only offer a single palette this way, or include light and dark variants, or allow the user to configure arbitrary color sets (like we do on Plasma). It is also possible for application developers to override the system-provided palette, for example to offer an in-app dark mode switch.</p>
<p>For applications using QML there is another relevant component: The Qt Quick Controls 2 Style. For reasons I&rsquo;m not going to go into QtQuick Controls don&rsquo;t use QStyle for their styling. Instead they come with their own stying system, which is itself based on QML. In Qt5 QML apps only have a very basic and broken default theme that should never be used. In Qt6 they use Fusion by default.</p>
<p>These are the relevant knobs every Qt app has. Some app developers choose to use them to control the appearance of their apps themselves, but many others leave it to the environment to apply a suitable look and feel. Furthermore, there are some relevant KDE-additions to this that are important to understand.</p>
<p>One such addition is KColorScheme. You can think of KColorScheme as a superset of QPalette, i.e. it provides additonal color roles and thus finer-grained control over colors. When changing the Colors setting in Plasma&rsquo;s System Settings you are picking a color scheme. This gets applied to QPalette via the plasma-integration QPT, but can also be queried directly by the application developer for custom painting. Contrary to QPalette a KColorScheme is not porgrammatically filled based on plaform values (that happens only on Plasma), but it is a static, textual list of colors. Here we have the first problem for running KDE applications under e.g. GNOME. When running a KDE app on GNOME QGnomePlatform will apply Adwaita colors using QPalette. However, this does not affect colors the application directly pulls from KColorScheme, which unless explicitly configured has a default that resembles Breeze. This means we get mixtures of two different color sets, giving unpleasant results. This is especially noticeable when using a dark system theme combined with the light default colors from KColorScheme.</p>
<p>How do we solve this? Well, I&rsquo;ve been banging my head against that problem for a while. Short of removing the concept of KColorScheme entirely I see two realistic options, not necessarily mutually exclusive. QGnomePlatform could create a KColorScheme definition with Adwaita-like colors and apply that to the application. If exuted correctly it would likely give very good results, but obviously only on platforms that use QGnomePlatform. The other option would be to programmatically derive a KColorScheme definition from a QPalette, which is likely much harder because KColorScheme is a superset of QPalette, but it would be a generic solution for all platforms.</p>
<p>The second noteworthy thing for KDE applications affects QML apps in particular. I&rsquo;ve mentioned that QML has a separate theming system compared to QtWidgets. Because maintaining two style definitions for different systems is no joy KDE maintains a &ldquo;hack&rdquo; around this. <a href="https://invent.kde.org/frameworks/qqc2-desktop-style/">qqc2-desktop-style</a> implements a Qt Quick Controls style that fetches style information from a QStyle, which means all the existing QStyles out there keep working for QML apps. It works amazingly well, until it doesn&rsquo;t. One of the shortcomings of this approach is that qqc2-desktop-style internally heavily relies on KColorScheme, which makes the aforementioned mismatch between QPalette and KColorScheme much more prominent. Possible solutions are the same as mentioned before.</p>
<p>I hope this gives some much needed overview over technology and terminology of involved components and helps with a productive way forward with addressing the problems we have. You are welcome to <a href="https://invent.kde.org/teams/vdg/issues/-/issues/26">join this discussion</a>. There&rsquo;s some other relevant things to talk about, like icon loading, theming, and rendering, but that&rsquo;s for another day.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[A month as KDE Software Platform Engineer]]></title>
            <link href="https://nicolasfella.de/posts/softwareplatform-month-1/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/generating-dependency-metadata/?utm_source=atom_feed" rel="related" type="text/html" title="Generating Dependency Data for kdesrc-build" />
                <link href="https://nicolasfella.de/posts/eco-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Eco Sprint 2022" />
                <link href="https://nicolasfella.de/posts/taskbar-single-app/?utm_source=atom_feed" rel="related" type="text/html" title="Task Manager Improvements in Plasma 5.24" />
                <link href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/?utm_source=atom_feed" rel="related" type="text/html" title="The importance of window to desktop file mapping" />
                <link href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/?utm_source=atom_feed" rel="related" type="text/html" title="Fixing Wayland taskbar icons" />
            
                <id>https://nicolasfella.de/posts/softwareplatform-month-1/</id>
            
            
            <published>2023-03-06T13:00:00+01:00</published>
            <updated>2023-03-06T13:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>Precisely one month ago I joined KDE e.V., the non-profit organization behind KDE, as Software Platform Engineer. This is part of three positions in KDE&rsquo;s <a href="https://www.youtube.com/watch?v=MzpoTuHuciE">&ldquo;Make a living&rdquo; initiative</a>.</p>
<p>The exact scope of this position is a bit vague. I like to describe it as &ldquo;Taking care of everything needed so that people can build and enjoy awesome software&rdquo;. A large part of that is taking care of foundational libraries such as Qt and KDE Frameworks, but it can be really anything that helps people do awesome things. This is pretty much what I&rsquo;ve been doing as a volunteer for the last couple of years anyway.</p>
<p>So what have I been up to this past month? A lot, but also not a lot that&rsquo;s worth mentioning individually right now. As you probably know we are heading full steam towards using Qt6 for all our products. This is something that started almost four years ago (and I&rsquo;ve been involved from the start) and is growing ever more closely to being finished. Last week we switched Plasma master to use Qt6 exclusively, completing an important milestone for the whole transition. This involved a ton of small to medium-sized changes and fixes across the stack.</p>
<p>Instead of listing all the changes I have done as part of that let&rsquo;s focus on the outcome instead: I&rsquo;m typing this post running on a full Plasma session running against Qt6. There are still some rough edges, but overall it&rsquo;s quite usable already. Definitely enough to get involved and hack on it. I&rsquo;d show you a screenshot, but that would be pretty boring, it looks exactly the same as before!</p>
<p>So what does the future hold? The transition towards Qt6/KF6 is going to stay my focus for a while, but once that settles down I&rsquo;m going to focus on other areas of our software platform eventually. If you have ideas for what it would make sense for me to focus on please get in touch.</p>
<p>This position is enabled and financed by KDE e.V.. To allow me to keep this position in the long term (and perhaps even hire additional people) please consider <a href="https://kde.org/de/community/donations/">donating to KDE e.V.</a></p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Generating Dependency Data for kdesrc-build]]></title>
            <link href="https://nicolasfella.de/posts/generating-dependency-metadata/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/eco-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Eco Sprint 2022" />
                <link href="https://nicolasfella.de/posts/taskbar-single-app/?utm_source=atom_feed" rel="related" type="text/html" title="Task Manager Improvements in Plasma 5.24" />
                <link href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/?utm_source=atom_feed" rel="related" type="text/html" title="The importance of window to desktop file mapping" />
                <link href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/?utm_source=atom_feed" rel="related" type="text/html" title="Fixing Wayland taskbar icons" />
                <link href="https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="FOSDEM &amp; Plasma Mobile Sprint" />
            
                <id>https://nicolasfella.de/posts/generating-dependency-metadata/</id>
            
            
            <published>2022-12-09T13:00:00+01:00</published>
            <updated>2022-12-09T13:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>As you may know KDE consists of many different subprojects, where some projects depend on other projects. Most KDE projects depend on some KDE Frameworks, but other dependencies are also possible, e.g. plasma-desktop depends on plasma-workspace. To be able to automate building projects (for the CI system or tools like kdesrc-build) you need a machine-readable source of dependency information.</p>
<p>For a long time this information has been available in a set of files in <a href="https://invent.kde.org/sysadmin/repo-metadata/-/tree/master/dependencies">repo-metadata</a>. To declare for example plasma-desktop&rsquo;s dependency on plasma-workspace one would write the line</p>
<pre tabindex="0"><code>kde/workspace/plasma-desktop: kde/workspace/plasma-workspace
</code></pre><p>to the relevant file.</p>
<p>Since most projects depend on a lot of KDE Frameworks, and specifying each of the frameworks manually is somewhat cumbersome, a virtual <code>frameworks/kf5umbrella</code> project that depends on all frameworks was introduced. By default all projects depend on this helper project. This metadata was used both by the Jenkins-based build.kde.org CI and kdesrc-build.</p>
<p>The approach worked well enough, but had some drawbacks. First of all most projects don&rsquo;t actually depend on <em>all</em> frameworks, so kdesrc-build would build projects that you don&rsquo;t actually need, which is wasteful. Second, the format had no way for platform-specific adjustments, like defining that X depends on Y on Linux but not Windows. This was especially problematic for our Android builds, where it would try to build projects that don&rsquo;t actually support Android or weren&rsquo;t needed but increasing the size of the final APK. This problem was solved by moving our Android builds to use Craft, which maintains its own dependency metadata.</p>
<p>Because of these shortcomings when we replaced our Jenkins-based CI with Gitlab CI sysadmins came up with a new way of defining dependencies for each project. Instead of a single, global file with all information each project now has a <code>.kde-ci.yml</code> file in its repository that defines the dependencies. There is no equivalent of the kf5umbrella any more, which forces projects to explicitly list all of their frameworks dependencies. The new format also allows to define platform-specific dependency information. For example Neochat&rsquo;s <code>.kde-ci.yml</code> looks like this:</p>
<pre tabindex="0"><code>Dependencies:
- &#39;on&#39;: [&#39;@all&#39;]
  &#39;require&#39;:
    &#39;frameworks/extra-cmake-modules&#39;: &#39;@stable&#39;
    &#39;frameworks/kcoreaddons&#39;: &#39;@stable&#39;
    &#39;frameworks/kirigami&#39;: &#39;@stable&#39;
    &#39;frameworks/ki18n&#39;: &#39;@stable&#39;
    &#39;frameworks/kconfig&#39;: &#39;@stable&#39;
    &#39;frameworks/syntax-highlighting&#39;: &#39;@stable&#39;
    &#39;frameworks/kitemmodels&#39;: &#39;@stable&#39;
    &#39;frameworks/knotifications&#39;: &#39;@stable&#39;
    &#39;libraries/kquickimageeditor&#39;: &#39;@stable&#39;
    &#39;frameworks/sonnet&#39;: &#39;@stable&#39;
    &#39;libraries/kirigami-addons&#39;: &#39;@latest&#39;
    &#39;third-party/libquotient&#39;: &#39;@latest&#39;
    &#39;third-party/qtkeychain&#39;: &#39;@latest&#39;
    &#39;third-party/cmark&#39;: &#39;@latest&#39;

- &#39;on&#39;: [&#39;Windows&#39;, &#39;Linux&#39;, &#39;FreeBSD&#39;]
  &#39;require&#39;:
    &#39;frameworks/qqc2-desktop-style&#39;: &#39;@stable&#39;
    &#39;frameworks/kio&#39;: &#39;@stable&#39;
    &#39;frameworks/kwindowsystem&#39;: &#39;@stable&#39;
    &#39;frameworks/kconfigwidgets&#39;: &#39;@stable&#39;

- &#39;on&#39;: [&#39;Linux&#39;, &#39;FreeBSD&#39;]
  &#39;require&#39;:
    &#39;frameworks/kdbusaddons&#39;: &#39;@stable&#39;
</code></pre><p>However, kdesrc-build still uses the old dependency infomation. As it is natural for two instances of the same information, they eventually got out of sync and the metadata used by kdesrc-build got more and more incorrect. Something had to be done. Due to its architecture it isn&rsquo;t really feasible for kdesrc-build to directly read the <code>.kde-ci.yml</code> files since that would require cloning the repos to read the data. Instead we opted to generate the old-style dependency data from the <code>.kde-ci.yml</code> files. In an attempt to learn Rust I wrote a <a href="https://invent.kde.org/nicolasfella/dependency-generator">tool</a> that does this and <a href="https://invent.kde.org/sysadmin/repo-metadata/-/commit/35a8337c4aa0803f9fd511c31c9a691e59e2841e">committed</a> the initial result. In the spirit of the recently announced <a href="https://community.kde.org/Goals/Automate_and_systematize_internal_processes">Automation Goal</a> this ought to be automated fully, but that&rsquo;s for another day.</p>
<p>Any missing information in the generated data should be fixed by adding it to the relevant <code>.kde-ci.yml</code> file. If you find any other issues with the generated data please let me know.</p>
<p>To support more KDE-wide building-block initiatives like this KDE is <a href="https://ev.kde.org/resources/callforproposals-platform2022/">hiring a Software Platform Engineer</a>. Hiring people is enabled through your donations to KDE. Check out our <a href="https://dot.kde.org/2022/12/02/kdes-end-year-fundraiser-live">End of Year Fundraiser</a> that will enable more of this work to happen.</p>
<p>Happy kdesrc-building!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Eco Sprint 2022]]></title>
            <link href="https://nicolasfella.de/posts/eco-sprint/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/taskbar-single-app/?utm_source=atom_feed" rel="related" type="text/html" title="Task Manager Improvements in Plasma 5.24" />
                <link href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/?utm_source=atom_feed" rel="related" type="text/html" title="The importance of window to desktop file mapping" />
                <link href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/?utm_source=atom_feed" rel="related" type="text/html" title="Fixing Wayland taskbar icons" />
                <link href="https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="FOSDEM &amp; Plasma Mobile Sprint" />
                <link href="https://nicolasfella.de/posts/kde-frameworks-6-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Frameworks 6 sprint" />
            
                <id>https://nicolasfella.de/posts/eco-sprint/</id>
            
            
            <published>2022-05-30T16:00:00+02:00</published>
            <updated>2022-05-30T16:00:00+02:00</updated>
            
            
            <content type="html"><![CDATA[<p>Last weekend, on May 21st, some people (including me) met in Berlin for what I believe is the first in-person KDE sprint since you-know-what happened (there was LAS, but that&rsquo;s not technically a KDE sprint). We met in <a href="https://www.kdab.com/">KDAB</a>&rsquo;s office, which was incidentally also the location of the last in-person sprint before unamed things happened.</p>
<p><img src="group.webp" alt="A group photo of nine people">
Photo by Joseph P. De Veaugh-Geiss.</p>
<p>During the sprint we set up a measurement lab for the KDE Eco initiative. Our goal is to make it as easy as possible for application developers to measure the energy consumption of their applications. To do this a stable and reliable measurement system that is available over a long timespan is needed. KDAB kindly offered to host such a system in their office.</p>
<p>The measurement lab currently consists of two severl-years-old mid-range desktop computers. The first part of the sprint was a discussion about what software environment the PCs should run. There are various considerations for this. The &ldquo;Blauer Engel&rdquo; measurement critera recommend using Ubuntu 20.04 for the measurements. Staying close to these recommendations makes sense. However, we want to be able to easily test new versions of KDE software, which often requires newer system libraries than Ubuntu 20.04 provides. We discussed using Flatpak as a declarative and reproducible way to provision specific versions of KDE software and their dependencies independent from the operating system. In the end we settled for using KUbuntu 22.04 on one and with KDE Neon.</p>
<p>After wiring up the machines and installing the chosen operating systems I set the machines up for remote access using SSH and remote desktop (VNC). Other people set up the power measurement infrastructure and how to access its data. There are some finishing touches to be done, including access control, before we can make the lab available to the KDE community. Once that is done we will share how to get access and make use of the lab.</p>
<p>During the day people also worked on other topics like alternative power measurement devices and data visualization. Check the <a href="https://eco.kde.org/blog/2022-05-30-sprint-lab-setup/">official sprint blog post</a> and <a href="https://volkerkrause.eu/2022/05/28/kde-eco-sprint-may-2022.html">Volker&rsquo;s blog post</a> for more details.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Task Manager Improvements in Plasma 5.24]]></title>
            <link href="https://nicolasfella.de/posts/taskbar-single-app/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/?utm_source=atom_feed" rel="related" type="text/html" title="The importance of window to desktop file mapping" />
                <link href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/?utm_source=atom_feed" rel="related" type="text/html" title="Fixing Wayland taskbar icons" />
                <link href="https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="FOSDEM &amp; Plasma Mobile Sprint" />
                <link href="https://nicolasfella.de/posts/kde-frameworks-6-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Frameworks 6 sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-and-android/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect and Android" />
            
                <id>https://nicolasfella.de/posts/taskbar-single-app/</id>
            
            
            <published>2022-02-18T01:00:00+01:00</published>
            <updated>2022-02-18T01:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>In my <a href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/">last post</a> I talked about why knowing the desktop file for a window is important for the task manager. I promised to talk about some cool stuff we did there in Plasma 5.24, so here we are.</p>
<p>While hacking on the task manager code I noticed that we show a &ldquo;Open new instance&rdquo; action in the context menu of every task manager entry, even for those where it doesn&rsquo;t make sense. A lot of apps are inherently single-window or single-instace, i.e. launching the app a second time will not open a second window but rather focus the existing one. Also, not all windows actually belong to a user-facing or user-launchable application. For example the network integration might ask you for the WiFi password, but you can&rsquo;t open a new window for that from the task manager. Another kind of app where this actions doesn&rsquo;t make sense is helper applications like the wizard for connecting to a new bluetooth device.</p>
<p>After some initial refactoring the <a href="https://invent.kde.org/plasma/plasma-workspace/-/commit/c58e5433436393e2b437ccb34f375b5aacb6419c">first thing</a> I did was hide the action for apps that have <code>NoDisplay=true</code> in their desktop file. These usually correspond to the aforementioned background services and helper apps. With that in the situation was improved for a great deal of windows. However, the case of single-window application was still unsolved. After reading some older, related discussion, I found that our friends at GNOME had solved this problem for them already. Their equivalent part of the code, amongst other heuristics, reads the <code>X-GNOME-SingleWindow</code> key from the application&rsquo;s desktop file. So I did the obvious thing and <a href="https://invent.kde.org/plasma/plasma-workspace/-/commit/ebd2acd98ecdb9d115b01bd01f532390376152f7">added reading</a> <code>X-GNOME-SingleWindow</code> to Plasma&rsquo;s task manager code. We also added that key to a bunch of relevant KDE apps. While this was a pragmatic and working solution, relying on a <code>X-GNOME-</code> key for what we want to be cross-desktop behavior is not ideal. It&rsquo;s time for <a href="https://xkcd.com/927/">standardization</a>!</p>
<p>Nate Graham (you may have heard of him) <a href="https://gitlab.freedesktop.org/xdg/xdg-specs/-/merge_requests/53">proposed</a> to add the existing key minus the <code>X-GNOME-</code> prefix to the desktop entry spec. After a bit of discussion about names and semantics people settled on <code>SingleMainWindow</code> as the new name. Implementations for <a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/1334">Plasma</a> and <a href="https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2084">GNOME</a> soon followed. What&rsquo;s missing is adding it for all the apps out there. Besides KDE apps I already did that for <a href="https://github.com/qbittorrent/qBittorrent/pull/15996">qBittorrent</a>, <a href="https://github.com/nextcloud/desktop/pull/4194">Nextcloud</a>, and <a href="https://github.com/Yubico/yubioath-desktop/pull/782">Yubico Authenticator</a>. This is an excellent way to contribute to your favorite open source app!</p>
<p>But wait, there is more. Some apps define their own &ldquo;Open new window&rdquo; action in their desktop file. To avoid having two redundant actions Plasma now <a href="https://invent.kde.org/plasma/plasma-workspace/-/commit/a97fe79d7f1020cf282324c5998d5cc4527309ad">hides its own action</a> when there is already a semantically similar one.</p>
<p>Happy task managing!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[The importance of window to desktop file mapping]]></title>
            <link href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/?utm_source=atom_feed" rel="related" type="text/html" title="Fixing Wayland taskbar icons" />
                <link href="https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="FOSDEM &amp; Plasma Mobile Sprint" />
                <link href="https://nicolasfella.de/posts/kde-frameworks-6-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Frameworks 6 sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-and-android/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect and Android" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile App 1 - Basic Controls" />
            
                <id>https://nicolasfella.de/posts/importance-of-desktop-file-mapping/</id>
            
            
            <published>2022-01-11T01:00:00+01:00</published>
            <updated>2022-01-11T01:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>In my <a href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/">last post</a> I talked about what application developers can do to fix their applications not showing up correctly in Plasma&rsquo;s task manager. I motivated this by the fact that we need this on Wayland to display the app&rsquo;s icon. However icons are not the only reason why correctly mapping windows to desktop files is important. It brings substantial benefits even on X11:</p>
<ul>
<li>Application titles: In addition to showing the window title Plasma&rsquo;s task manager also shows the application name (the Name key in the desktop file). If the desktop file can&rsquo;t be determined it falls back to the executable name, which isn&rsquo;t particularly nice.</li>
<li>Jumplist actions: Desktop files allow apps to specify <a href="https://specifications.freedesktop.org/desktop-entry-spec/latest/ar01s11.html">additional application actions</a>. For example Firefox allows you to open a new window or a new private browsing window by right-clicking on the entry in the task manager.</li>
<li>Media player controls: Plasma&rsquo;s task manager allows to control application&rsquo;s media playback. You can e.g. pause a music player by right-clicking on its task manager entry. For this to work the window has to be matched to the <a href="https://specifications.freedesktop.org/mpris-spec/latest/">MPRIS</a> player instance, which happens based on the desktop file name.</li>
<li>Recent files: Plasma&rsquo;s task manager shows you recently used files for an application in the context menu for an application and allows to open that file in the app. This also relies on the desktop file mapping.</li>
</ul>
<p>Now that we established why it is important to map a window to a desktop file, how is it done?</p>
<p>On Wayland the xdg-shell protocol, which is responsible for application windows, has builtin support for passing a desktop file name in form of <a href="https://wayland.app/protocols/xdg-shell#xdg_toplevel:request:set_app_id">set_app_id</a>.</p>
<p>On X11, it&rsquo;s more complicated.</p>
<p>For Qt applications the plasma-integration Qt Platform Theme sets a KDE-specific <a href="https://invent.kde.org/plasma/plasma-integration/-/blob/master/src/platformtheme/x11integration.cpp#L135">window property</a> that contains the desktop file name. The task manager reads this property and handles it accordingly.</p>
<p>GTK apps have a very similar window property, named <code>_GTK_APPLICATION_ID</code>. However, until now Plasma did not use this information at all! Beginning with Plasma 5.25 the task manager will take <code>_GTK_APPLICATION_ID</code> <a href="https://invent.kde.org/plasma/plasma-workspace/-/merge_requests/1317">into account</a>, which fixes matching Gedit and other apps.</p>
<p>When neither <code>_KDE_NET_WM_DESKTOP_FILE</code> nor <code>_GTK_APPLICATION_ID</code> are set the task manager will use a <del>wild guessing game</del> <a href="https://invent.kde.org/plasma/plasma-workspace/-/blob/master/libtaskmanager/tasktools.cpp#L159">heuristic</a> to try and match the window to a desktop file. It takes into account things like the X11 window class, executable name, and Name and Exec from the desktop file. Sometimes this works well, sometimes it doesn&rsquo;t.</p>
<p>These are just some examples why this mapping is so important. In a future post I will talk about an improvement to Plasma&rsquo;s task manager in Plasma 5.24  that also requires this mapping to work.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Fixing Wayland taskbar icons]]></title>
            <link href="https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="FOSDEM &amp; Plasma Mobile Sprint" />
                <link href="https://nicolasfella.de/posts/kde-frameworks-6-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Frameworks 6 sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-and-android/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect and Android" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile App 1 - Basic Controls" />
                <link href="https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Google Summer of Code with KDE Connect" />
            
                <id>https://nicolasfella.de/posts/fixing-wayland-taskbar-icons/</id>
            
            
            <published>2021-12-26T02:00:00+01:00</published>
            <updated>2021-12-26T02:00:00+01:00</updated>
            
            
            <content type="html"><![CDATA[<p>A common papercut in a Wayland session is entries in the task manager showing a generic Wayland icon instead of the proper application icon. Here&rsquo;s a KWallet window having a generic icon in the task manager (on the right):</p>
<p><img src="kwallet-before.png" alt="Task manager with generic Wayland icon on the right"></p>
<p>This is due to the shell not being able to properly map a window to an application. This breaks more things than just icons, but those are often the first thing that is noticed. Fortunately this is usually very easy to fix, particularly for Qt/KDE apps. I fixed a couple of those over the holidays and now I am writing down what needs to be done so you know what to do the next time you encounter such a case.</p>
<p>Window to application mapping is based on the desktop entry name. That is the filename of the application&rsquo;s .desktop file in <code>/usr/share/applications/</code> (without the .desktop extension). For KWallet that would be <code>org.kde.kwalletd5</code>. Make sure your application actually has such a .desktop file installed to <code>/usr/share/applications/</code>. Most graphical apps have one, otherwise you wouldn&rsquo;t be able to lauch it from the application launcher. However things that are not traditional applications, like services (e.g. KWallet) or helper applications (e.g. the Gwenview importer) don&rsquo;t always have one yet. To avoid those showing up in the application laucher include <code>NoDisplay=true</code> in the .desktop file.</p>
<p>Now all we need to do is make sure that the window correctly reports the name of the .desktop file to the compositor. For Qt applications that boils down to making sure that <a href="https://doc.qt.io/qt-5/qguiapplication.html#desktopFileName-prop">QGuiApplication::desktopFileName()</a> is correct. This can be as easy as calling <code>QGuiApplication::setDesktopFileName(&quot;org.kde.kwalletd5&quot;)</code>. For applications using <a href="https://api.kde.org/frameworks/kcoreaddons/html/classKAboutData.html">KAboutData</a> it can even be easier. If you have a <code>KAboutData data(&quot;kwalletd5&quot;, ...)</code> then <code>QGuiApplication::desktopFileName()</code> will automatically be set to <code>org.kde.kwalletd5</code>. The underlying heuristic can go wrong at times, in which case you need to override it using <code>QGuiApplication::setDesktopFileName()</code>. With those two things fixed KWallet shows a proper taskbar icon now:</p>
<p><img src="kwallet-after.png" alt="Task manager with proper icon on the right"></p>
<p>See my <a href="https://nicolasfella.de/posts/importance-of-desktop-file-mapping/">next post</a> for more detail on why mapping windows to desktop files is important.</p>
<p>Happy fixing!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[FOSDEM & Plasma Mobile Sprint]]></title>
            <link href="https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-frameworks-6-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Frameworks 6 sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-and-android/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect and Android" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile App 1 - Basic Controls" />
                <link href="https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Google Summer of Code with KDE Connect" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-application/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile application" />
            
                <id>https://nicolasfella.de/posts/fosdem-plasma-mobile-sprint/</id>
            
            
            <published>2020-02-16T23:42:13+00:00</published>
            <updated>2020-02-16T23:42:13+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Last week I decided to take KDE Itinerary for a test tour. Between the train rides there was also time for some KDE stuff.</p>
<h2 id="fosdem" >FOSDEM
<span>
    <a href="#fosdem">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>After writing an exam on Friday afternoon I took a train to Frankfurt. I did so not to enjoy the beautiful scenery of the area around Frankfurt central station at night but to be able to catch an early train towards Bruxelles for my first time at FOSDEM.</p>
<p>It has been a great experience to meet so many people interested in what KDE does at the KDE booth. It also was awesome to meet all the folks that are working hard on making Linux on the phone become a thing.</p>
<p><img src="https://www.pine64.org/wp-content/uploads/2020/02/dinnerfosdem20.jpg" alt="People in a restaurant looking at the camera"></p>
<p>Pine64, Manjaro, UBports and KDE having dinner together</p>
<h2 id="plasma-mobile-sprint" >Plasma Mobile Sprint
<span>
    <a href="#plasma-mobile-sprint">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>FOSDEM went by in no time and so I found myself on a train to Berlin on Monday. My ride managed to defeat KDE Itinerary&rsquo;s cancellation notification handling, but Volker managed to fight back.</p>
<p>In Berlin we met for a week-long Plasma Mobile sprint, hosted by KDAB in their offices. This gave us the opportunity to plan, discuss and hack all the things in a much more focused and productive manner than normally.</p>
<p>A particular pleasure was meeting Marius and Dalton from UBports/Ubuntu Touch and discussing how our projects can benefit each other. Most of our interactions was me nagging them to upgrade their Qt to allow KDE apps to run on Ubuntu Touch, but there was also fruitful discussion on sharing content between apps and a common push notification service (codenamed &lsquo;Phushan&rsquo;).</p>
<p>In addition to the discussion I also managed to get a few things done:</p>
<ul>
<li>We managed to build KTrip using Ubuntu Touch&rsquo;s clickable build system (only for amd64, since crosscompiling Qt is a little more involved. If you find it easy please consider applying at KDAB).</li>
<li>I started revamping the dated code of the dialer UI.</li>
<li>Together with the Kaidan team I fixed an issue in KNotifications that was affecting them.</li>
<li>Kaidan (XMPP client), Qrca (barcode scanner), Kookbook (recipe manager), Keysmith (OTP client) and Ruqola (Rocket.Chat client) are now available for Android in our <a href="https://community.kde.org/Android/FDroid">nightly F-Droid repository</a>.</li>
</ul>
<p>On Saturday KDE joined UBports in their regular Q&amp;A where we reported about the whole week and answered questions from the crowd. <a href="https://www.youtube.com/watch?v=cbfFQnFXvak">Check it out!</a></p>
<p>I left Berlin a bit earlier than planned due to an approaching storm, which was fine given how action-packed the whole week was.</p>
<p>Looking forward to doing it again!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Frameworks 6 sprint]]></title>
            <link href="https://nicolasfella.de/posts/kde-frameworks-6-sprint/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-and-android/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect and Android" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile App 1 - Basic Controls" />
                <link href="https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Google Summer of Code with KDE Connect" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-application/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile application" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff 0x3" />
            
                <id>https://nicolasfella.de/posts/kde-frameworks-6-sprint/</id>
            
            
            <published>2019-11-29T20:08:50+00:00</published>
            <updated>2019-11-29T20:08:50+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Last week I took a train to Berlin for the KDE Frameworks 6 kickoff sprint. A lot has been said about it by my fellow attendees already, so I won&rsquo;t go into detail much.</p>
<p>Work on Qt 6 has begun and with Qt 6 a version 6 of the KDE Frameworks is due. This will gives us the opportunity to clean up and redesign some of our API.</p>
<p>Main goal for the sprint was to discuss the major design principles for KF6. I personally focussed on two aspects. First, we want to better separate logic from the user interface to allow different UI implementations for desktop and mobile uses. Futhermore, we want to reduce the amount of dependencies our libraries have. While we are doing fine for a lot of frameworks some have very ugly dependency structures. Probably our worst offender here is KIO, the framework that powers Dolphin and many more KDE applications.</p>
<p>This is the current dependency tree of KIO:</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/11/kio4-2.png" alt=""></p>
<p>With some changes we discussed applied it could look like this:</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/11/kio3.png" alt=""></p>
<p>Please note that all of this is highly tentative and might not always work out the way we imagine. While we can do some of these changes in the Frameworks 5 lifetime already most of it needs breaking API, so it will only be available in KF6.</p>
<p>This work will hopefully make KDE Frameworks more appealing for users outside of KDE. If you are developing Qt-based software and would like to know more about how KDE Frameworks can help you please contact us at #kde-devel on freenode or <a href="mailto:kde-frameworks-devel@kde.org">kde-frameworks-devel@kde.org</a></p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect and Android]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-and-android/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Google Summer of Code with KDE Connect" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile App 1 - Basic Controls" />
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-application/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile application" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff 0x3" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on IRC and Matrix.org" />
            
                <id>https://nicolasfella.de/posts/kde-connect-and-android/</id>
            
            
            <published>2019-04-01T10:00:50+00:00</published>
            <updated>2019-04-01T10:00:50+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>As most of you know KDE Connect has recently been removed from Google Play due to a policy violation with regard to our SMS and telephony features. While the public outcry helped to get it back in with all features remaining this is just yet another example of how new Android policies make it harder for us to maintain the level of quality and features you expect from KDE Connect. Android Oreo forced us to drop support for older Android versions and imposed restrictions on background services which force us to have an annoying persistent notification. It is to be expected that Google will further restrict background services which will impose more problems for us. With each new Android versions new restrictions and problems arise which we have to work around, if possible. For example, the upcoming Android Q imposes restrictions on accessing the phone&rsquo;s clipboard. It is unclear whether the clipboard sync in it&rsquo;s current form is feasible on Android Q. Those are just examples of the problems with the direction Android is moving towards.</p>
<p>With Plasma Mobile KDE has been working on an alternative mobile platform for a while now. We now consider Plasma Mobile stable and suitable for everyone to use. Therefore we decided to stop developing KDE Connect for Android and focus on the Plasma Mobile experience. We have removed the app from Google Play and F-Droid as well as removed the public repositories. We are also in contact with Google about removing the active installations from devices.</p>
<p>We hope that this steps contributes to a better mobile experience in the long term beginning today, April 1st 2019.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                             
                                <category scheme="https://nicolasfella.de/tags/kde-connect" term="kde-connect" label="KDE Connect" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Creating a Plasma Mobile App 1 - Basic Controls]]></title>
            <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-application/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile application" />
                <link href="https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Google Summer of Code with KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff 0x3" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on IRC and Matrix.org" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-ii/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New Stuff II" />
            
                <id>https://nicolasfella.de/posts/creating-a-plasma-mobile-app-1-basic-controls/</id>
            
            
            <published>2019-02-28T20:32:15+00:00</published>
            <updated>2019-02-28T20:32:15+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>My last post shows how to create a stub Python/Kirigami app that doesn&rsquo;t do anything. Time to change that! In this post we&rsquo;re filling the screen with some controls.</p>
<h2 id="kirigami-pages" >Kirigami Pages
<span>
    <a href="#kirigami-pages">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Kirigami apps are typically organized in Pages. Those are the different &lsquo;Screens&rsquo; of an app. If you come from the Android world you can think of them as the view part of activities. In our case we want to have an initial page that offers to enter a stop or a destination and opens a new page that shows a list of possible routes. Clicking on one of the list items opens a new page with a detailed view about the connections.</p>
<p>Pages are organized in a pagestack where pages can be pushed and popped. On a phone only the topmost page is shown, whereas on a larger screen (desktop or tablet) multiple pages can be shown next to each other.</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-3.png" alt=""></p>
<p>A single page on the phone</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-4.png" alt=""></p>
<p>Two pages next to each other on the desktop</p>
<p>So let&rsquo;s create some pages! I&rsquo;m going put each page in its own .qml file and let the name end with Page. Our first version of StartPage.qml looks like this:</p>
<pre tabindex="0"><code>import QtQuick 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.4
import org.kde.kirigami 2.0 as Kirigami

Kirigami.Page
{
    title: &#34;Start journey&#34;
}
</code></pre><p>It produces an empty page with a title. Before we can actually see it we need to add it to the pageStack. Replace the Label {} declaration in main.qml with</p>
<pre tabindex="0"><code>pageStack.initialPage: Qt.resolvedUrl(&#34;StartPage.qml&#34;)
</code></pre><p>pageStack.initialPage is, well, setting the initial Page of the Page stack. Qt.resolveUrl is converting the relative URL of the QML file into an absolute one. Starting the app gives us an empty page</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-5.png" alt=""></p>
<p>Time to fill it with some content.</p>
<h2 id="basic-controls" >Basic controls
<span>
    <a href="#basic-controls">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>On the start page we need need a way to enter start and destination of our journey as well as the date and time of our travel. For start and destination we are using simple TextFields from QtQuick Controls 2. Note that the older version 1 of QtQuick Controls is still around for the foreseable future, but we want to avoid using that. We&rsquo;re extending StartPage.qml with our controls</p>
<pre tabindex="0"><code>ColumnLayout {
    width: parent.width

    Label {
        text: &#34;From:&#34;
    }
    TextField {
        Layout.fillWidth: true
        placeholderText: &#34;Würzburg...&#34;
    }
    Label {
        text: &#34;To:&#34;
    }
    TextField {
        Layout.fillWidth: true
        placeholderText: &#34;Berlin...&#34;
    }
}
</code></pre><p>A ColumnLayout is a component that positions its children vertically. We set it to be as wide as its parent, the page. The TextFields shall span the whole width as well. Instead of using the same &lsquo;width: parent.width&rsquo; we are using &lsquo;Layout.fillWidth: true&rsquo;. This property is only available to children of a Layout. The difference to the first way is that all the width that is not already occupied by other elements in the layout is filled.</p>
<p>Next we need some way to enter a departure date and time. Unfortunately I&rsquo;m not aware of any ready-to-use date and time pickers in QtQuick and Kirigami, so I&rsquo;ll leave this open for a future post. For the time being two simple placeholder buttons shall be enough. Let&rsquo;s add them to our ColumnLayout</p>
<pre tabindex="0"><code>RowLayout {
    width: parent.width
    Button {
        text: &#34;Pick date&#34;
        Layout.fillWidth: true
    }
    Button {
        text: &#34;Pick time&#34;
        Layout.fillWidth: true
    }
}
</code></pre><p>Now our app looks like this. Both buttons have the &ldquo;Layout.fillWidth&rdquo; property set to true, resulting in each one getting 50% of the space.</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-6.png" alt=""></p>
<p>The buttons look a bit weird, don&rsquo;t they? That&rsquo;s because they are using the built-in QtQuick Controls style. If you are using Plasma you are probably used to the org.kde.desktop style which emulates the active Qt Widgets style. We can force our app to use the org.kde.desktop style by running &lsquo;QT_QUICK_CONTROLS_STYLE=&ldquo;org.kde.desktop&rdquo; ./main.py&rsquo;</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-7.png" alt=""></p>
<p>Looks closer to what we have on the desktop, doesn&rsquo;t it? Qt also offers a &lsquo;material&rsquo; style that follows Android&rsquo;s material guidelines</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-8.png" alt=""></p>
<p>Next we need a way to press &ldquo;Search&rdquo;. We could solve that with yet another button, but Kirigami offers another way. Pages in Kirigami can have Actions associated with them. The presentation differes from the phone to the desktop. On the phone actions are displayed on the bottom where they are easily reachable while on the desktop they are displayed in form of a toolbar at the top of the page. Let&rsquo;s add an action to our page</p>
<pre tabindex="0"><code>Kirigami.Page
{
    id: root

    title: &#34;Start journey&#34;

    actions.main: Kirigami.Action {
        icon.name: &#34;search&#34;
        text: &#34;Search&#34;
        onTriggered: pageStack.push(Qt.resolvedUrl(&#34;ConnectionsPage.qml&#34;))
    }

    ColumnLayout { 
</code></pre><p>On the phone we get this</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-9.png" alt=""></p>
<p>while on the desktop we get that</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image-10.png" alt=""></p>
<p>You can force the mobile view on the desktop by setting the QT_QUICK_CONTROLS_MOBILE variable to 1.</p>
<p>Triggering the action pushes ConnectionsPage.qml on the pageStack. Of cource we need to create that one now:</p>
<pre tabindex="0"><code>import QtQuick 2.2
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.4
import org.kde.kirigami 2.4 as Kirigami

Kirigami.Page
{
    title: &#34;Connections&#34;
} 
</code></pre><p>Right now it&rsquo;s just an empty page, we&rsquo;re going to fill it with life in the next post.</p>
<p>You can find the full source code for all posts on <a href="https://invent.kde.org/nicolasfella/kstraba">Git</a>.</p>
<p>Happy hacking!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                             
                                <category scheme="https://nicolasfella.de/tags/kirigami" term="kirigami" label="Kirigami" />
                             
                                <category scheme="https://nicolasfella.de/tags/plasma-mobile" term="plasma-mobile" label="plasma mobile" />
                             
                                <category scheme="https://nicolasfella.de/tags/python" term="python" label="Python" />
                             
                                <category scheme="https://nicolasfella.de/tags/qml" term="qml" label="QML" />
                             
                                <category scheme="https://nicolasfella.de/tags/qt" term="qt" label="Qt" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Google Summer of Code with KDE Connect]]></title>
            <link href="https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-application/?utm_source=atom_feed" rel="related" type="text/html" title="Creating a Plasma Mobile application" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff 0x3" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on IRC and Matrix.org" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-ii/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New Stuff II" />
                <link href="https://nicolasfella.de/posts/the-purpose-of-things/?utm_source=atom_feed" rel="related" type="text/html" title="The Purpose of things" />
            
                <id>https://nicolasfella.de/posts/google-summer-of-code-with-kde-connect/</id>
            
            
            <published>2019-02-28T17:59:04+00:00</published>
            <updated>2019-02-28T17:59:04+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>KDE is happy to announce that we will be part of <a href="https://dot.kde.org/2019/02/27/google-summer-code-2019">Google Summer of Code 2019</a>. GSoC is a program where students recieve stipends to work on free software for 3 months. Getting paid for open source work, that&rsquo;s the dream, right?</p>
<p>KDE Connect is participating with 3 interesting projects that also involve other areas of KDE</p>
<h3 id="1-improving-kde-connect-on-windows" >1. Improving KDE Connect on Windows
<span>
    <a href="#1-improving-kde-connect-on-windows">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h3><p>KDE Connect builds and runs on Windows, but there are a lot of things that can be improved. This mostly involves the functionality that makes use of notifications. A large part of this task is about improving KNotifications on Windows.</p>
<h3 id="2-an-sms-app-for-plasma-mobile" >2. An SMS app for Plasma Mobile
<span>
    <a href="#2-an-sms-app-for-plasma-mobile">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h3><p>Plasma Mobile does not have a functional SMS app yet. We believe that the best way to create one is to reuse the SMS UI we&rsquo;ve been developing for KDE Connect. We verified that the Plasma Mobile SMS stack is functional on the Nexus 5 (I have no information about other devices). The UI is already running on a phone, what&rsquo;s missing is a backend that talks to ofono</p>
<h3 id="3-barcode-scanning-infrastructure" >3. Barcode scanning infrastructure
<span>
    <a href="#3-barcode-scanning-infrastructure">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h3><p>Scanning a barcode is one of those tasks that comes up in various different apps but the developers don&rsquo;t want to implement it themselves. For those kind of tasks we have the <a href="https://api.kde.org/frameworks/purpose/html/">Purpose framework</a> in KDE. It allows the developer to specify a desired action and let the user choose from available services to fulfil them. E.g. the Share feature in Dolphin is implemented via Purpose. This task is about adding a new action type to Purpose that allows to scan a barcode. Possible implementations could use the local camera or the camera of a device connected via KDE Connect.</p>
<p>If you are interested in doing one of those tasks and have some basic understanding of C++ please contact us on #kdeconnect on Freenode or on <a href="https://t.me/joinchat/BRUUN0bwMhNfn8FIejA-nw">Telegram</a>.</p>
<p>The deadline for student applications is April 9th and composing a good application takes some time, so please contact us rather soon.</p>
<p>Please note that we require students to have done some minor work (e.g bug fixes) before starting GSoC. Don&rsquo;t worry if you don&rsquo;t have done anything yet, there is still time for it ;)</p>
<p>Happy hacking!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/google-summer-of-code" term="google-summer-of-code" label="Google Summer of Code" />
                             
                                <category scheme="https://nicolasfella.de/tags/gsoc" term="gsoc" label="gsoc" />
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                             
                                <category scheme="https://nicolasfella.de/tags/kde-connect" term="kde-connect" label="KDE Connect" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Creating a Plasma Mobile application]]></title>
            <link href="https://nicolasfella.de/posts/creating-a-plasma-mobile-application/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff 0x3" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on IRC and Matrix.org" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-ii/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New Stuff II" />
                <link href="https://nicolasfella.de/posts/the-purpose-of-things/?utm_source=atom_feed" rel="related" type="text/html" title="The Purpose of things" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on Plasma Mobile" />
            
                <id>https://nicolasfella.de/posts/creating-a-plasma-mobile-application/</id>
            
            
            <published>2019-02-20T21:16:15+00:00</published>
            <updated>2019-02-20T21:16:15+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>From February 4th until February 9th I attended a Plasma Mobile sprint in Berlin, Germany. I met a lot of people that share the vision of an open, privacy-friendly mobile platform. However, we all agree that such a platform can only succeed if there are enough people sharing that vision creating suitable apps for it. There already is a nice amount of <a href="https://mglapps.frama.io/">mobile-friendly Linux apps</a>, many of them created by the KDE Community, but of course we need more :)</p>
<p>One app that is essential for my use case is an app that allows me to check departures and routes for public transport. Since I&rsquo;m not aware of any existing one I decided to do my own and share my road here. The purpose of this is to be educating for both me and you and to inspire you to create your own mobile-friendly Linux apps.</p>
<p>Like the other KDE mobile apps I&rsquo;m going to use QML/QtQuick and <a href="https://www.kde.org/products/kirigami/">Kirigami</a>. QML is the declarative UI language from the Qt project. Unlike the older QWidgets it is designed with (embedded) touch systems in mind and thus is ideal for mobile apps. Kirigami is a set of QtQuick components designed for creating convergent mobile/desktop apps.</p>
<p>Unlike other KDE projects I&rsquo;m not going to use C++ for the business logic. Instead I&rsquo;m going to use Python, which is now <a href="https://www.qt.io/qt-for-python">officially supported by Qt</a>. Since my Python skills are fairly basic this will be a fun challenge for me. Therefore take everything I write with a grain of salt and feel free to point out anything that is wrong or can be improved.</p>
<p>This won&rsquo;t be a 100% complete reference for developing for Plasma Mobile, but I&rsquo;ll try to cover as many different aspects as fit into the concept of this app. I&rsquo;ll also try to focus on one aspect/feature/goal per post. Also most of this will not be specific to Plasma Mobile but will work on any desktop or mobile Linux.</p>
<p>So lets get started :)</p>
<h2 id="part-0-basic-application" >Part 0: Basic application
<span>
    <a href="#part-0-basic-application">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Before getting started we need to install a few things. First of all we need Python (obviously) and Qt for Python. Qt for Python was formerly known as PySide2. You can install it via &lsquo;pip install pyside2&rsquo;. Next there is Kirigami. On Ubuntu you can install it via &lsquo;sudo apt install qml-module-org-kde-kirigami2&rsquo;.</p>
<p>After that we can start coding. The following main.py file is creating an app and loading the UI from a .qml file. The exact details are not too important at this point.</p>
<pre tabindex="0"><code>#!/usr/bin/env python3

from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine

if __name__ == &#34;__main__&#34;:
    app = QGuiApplication()
    engine = QQmlApplicationEngine()

    context = engine.rootContext()
    engine.load(&#34;qml/main.qml&#34;)

    if len(engine.rootObjects()) == 0:
        quit()
    app.exec_() 
</code></pre><p>Next we need to define our UI in a QML file. To keep things organized we are going to put our QML files in a qml/ subfolder. Our first main.qml is rather simple</p>
<pre tabindex="0"><code>import QtQuick 2.2
import QtQuick.Controls 2.4
import org.kde.kirigami 2.0 as Kirigami

Kirigami.ApplicationWindow
{
    width: 480
    height: 720

    Label {
        text: &#34;Hello world!&#34;
        anchors.centerIn: parent
    }
}
</code></pre><p>width and height are a bit arbitrary since the window will always be maximized on the phone, but this way we get a somewhat realistic window on the desktop. Executing the python file should result in something like this</p>
<p><img src="https://nicolasfella.files.wordpress.com/2019/02/image.png" alt=""></p>
<p>In the next post we are going to fill this window with more life using QtQuick and Kirigami components. Stay tuned :)</p>
<p>The source code will be available at <a href="https://invent.kde.org/nicolasfella/kstraba">https://invent.kde.org/nicolasfella/kstraba</a></p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/app" term="app" label="App" />
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                             
                                <category scheme="https://nicolasfella.de/tags/kirigami" term="kirigami" label="Kirigami" />
                             
                                <category scheme="https://nicolasfella.de/tags/mobile" term="mobile" label="Mobile" />
                             
                                <category scheme="https://nicolasfella.de/tags/plasma" term="plasma" label="Plasma" />
                             
                                <category scheme="https://nicolasfella.de/tags/pyside" term="pyside" label="PySide" />
                             
                                <category scheme="https://nicolasfella.de/tags/python" term="python" label="Python" />
                             
                                <category scheme="https://nicolasfella.de/tags/qml" term="qml" label="QML" />
                             
                                <category scheme="https://nicolasfella.de/tags/qt" term="qt" label="Qt" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect - New stuff 0x3]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on IRC and Matrix.org" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-ii/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New Stuff II" />
                <link href="https://nicolasfella.de/posts/the-purpose-of-things/?utm_source=atom_feed" rel="related" type="text/html" title="The Purpose of things" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on Plasma Mobile" />
                <link href="https://nicolasfella.de/posts/kde-connect-junior-jobs/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Junior Jobs" />
            
                <id>https://nicolasfella.de/posts/kde-connect-new-stuff-0x3/</id>
            
            
            <published>2018-11-04T22:14:13+00:00</published>
            <updated>2018-11-04T22:14:13+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Today we released version 1.10 of the KDE Connect Android app. Therefore it&rsquo;s time again to share what we&rsquo;ve been working on.</p>
<h2 id="targeting-android-oreo" >Targeting Android Oreo
<span>
    <a href="#targeting-android-oreo">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>As of this month app updates uploaded to Google Play need to <a href="https://developer.android.com/distribute/best-practices/develop/target-sdk">target Android 8</a>. This has several implications. Targeting Oreo comes with an updated Support Library, which forces us to drop support for Android 4.0 and below. According to our Google Play data this will affect approximately 400 users. We are very sorry about that, but these users won&rsquo;t receive further updates. Furthermore, Android Oreo introduced some restrictions in regard to apps running in the background. In the future in order to be able to run in the background KDE Connect needs to show a persistent notification. The good news is that you can hide the notification. The (slightly) bad news is that we cannot do it by default. To hide the notification you need to long-press it and switch it off. Other notifications from KDE Connect are unaffected by this.</p>
<h2 id="110-changes" >1.10 Changes
<span>
    <a href="#110-changes">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>These are the main changes of version 1.10. Not mentioned are countless small improvements and under-the-hood changes. Mouse input now works with the same speed independent from the phones pixel density. The media controller now allows stopping playback. Run command supports triggering commands using kdeconnect:// URLs. Useful for integration with NFC tags and 3rd-party apps. The notification filter allows quickly (de-)selecting all apps. Several settings scatterd across the UI have been bundled into a single settings screen. A lot of work has gone into how we handle SMS on the Android side in preparation for something huge. Stay tuned ;)</p>
<h2 id="other-changes" >Other changes
<span>
    <a href="#other-changes">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>The desktop side has improved as well since my last post. The windows build of KDE Connect gained support for keyboard input. The plasmoid gained a couple of additions. In my last update I mentioned that it is possible to run commands from there. It is now also possible to lauch the command setup from there. Furthermore it is now possible to select files to share them from there. The Linux Mobile App gained many visual improvements and features. It now supports sharing files and controlling the system volume. If you are using <a href="https://volkerkrause.eu/2018/08/19/kde-itinerary-introduction.html">Itinerary</a> you can send booking information from the PC directly to the phone via KDE Connect. It is now possible to send files directly from Pantheon Files (and other Elementary apps) and Thunar via KDE Connect. Again, there are countless other improvements that I did not explicitly mention. A big thanks to all people who contributed to this!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect on IRC and Matrix.org]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-ii/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New Stuff II" />
                <link href="https://nicolasfella.de/posts/the-purpose-of-things/?utm_source=atom_feed" rel="related" type="text/html" title="The Purpose of things" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on Plasma Mobile" />
                <link href="https://nicolasfella.de/posts/kde-connect-junior-jobs/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Junior Jobs" />
                <link href="https://nicolasfella.de/posts/volume-control-in-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Volume Control in KDE Connect" />
            
                <id>https://nicolasfella.de/posts/kde-connect-on-irc-and-matrix-org/</id>
            
            
            <published>2018-09-07T15:38:12+00:00</published>
            <updated>2018-09-07T15:38:12+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Since a few months KDE Connect has a <a href="https://t.me/joinchat/BRUUN0bwMhNfn8FIejA-nw">Telegram group</a> to discuss development. Since the over 100 people joined. I did not expect such an interest in it. Few people asked to have this group bridged to an IRC channel since they prefer IRC over Telegram. I&rsquo;m happy to announce that we finally made this happen. Let&rsquo;s celebrate the birth of #kdeconnect on Freenode. You can also access it from matrix.org (#freenode_#kdeconnect:matrix.org). The rest is up to you! If you are interested in contributing to KDE Connect go and share your ideas with us and ask any question you have!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect - New Stuff II]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-ii/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/the-purpose-of-things/?utm_source=atom_feed" rel="related" type="text/html" title="The Purpose of things" />
                <link href="https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on Plasma Mobile" />
                <link href="https://nicolasfella.de/posts/kde-connect-junior-jobs/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Junior Jobs" />
                <link href="https://nicolasfella.de/posts/volume-control-in-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Volume Control in KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - Tips, Tricks and Misconceptions" />
            
                <id>https://nicolasfella.de/posts/kde-connect-new-stuff-ii/</id>
            
            
            <published>2018-07-31T14:30:46+00:00</published>
            <updated>2018-07-31T14:30:46+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>It&rsquo;s time for another feature update for KDE Connect! You can now run commands on connected devices from the Plasmoid.</p>
<p><img src="https://phabricator.kde.org/file/data/efceohbdflljsqmcxbki/PHID-FILE-2g5rpbjbnhrztkzxgoer/rc.png" alt=""></p>
<p>The Dolphin context menu entry for sending files to a connected device has been dropped in favour of a <a href="https://nicolasfella.wordpress.com/2018/07/08/the-purpose-of-things/">Purpose plugin</a>, which groups nicely with other Share features and supports more apps such as Okular and Spectacle. Albert Vaka added a presentation mode to Android which allows you to control slideshows from your phone. Aleix Pol added the same to the Kirigami app. <img src="https://phabricator.kde.org/file/data/622tjt2v7wqsshovusmq/PHID-FILE-uun2yarn44osg6yaam7t/Screenshot_20180731-120640.jpg" alt="">   As I&rsquo;ve mentioned before it is quite hard to find the settings where you can define your commands for the Run Command feature.  The command list on Android now has a button that opens the appropriate settings on the desktop. Ivan Čukić added a few useful command suggestions to the menu. Friedrich Kossebau added support for a &ldquo;Find my PC&rdquo; plugin. You might wonder now how often he loses his PC, but it also helps finding other devices that run the C++ version of KDE Connect, such as Plasma Mobile and SailfishOS devices. I added support for triggering it on the Android side. Following a request on Reddit I added a dedicated Stop button to the media controller. Chansol Yang made sure that the pointer speed when controlling the mouse from the phone is the same across Android devices with various DPIs. Philip Cohn-Cort added the much requested dark theme option to Android. <img src="https://nicolasfella.files.wordpress.com/2018/07/screenshot_20180731-154621.jpg?w=576" alt="Screenshot_20180731-154621"> You can now use special URLs to trigger commands on connected devices. The urls have the form kdeconnect://runcommand/<!-- raw HTML omitted -->/<!-- raw HTML omitted -->. As those are quite complex I added a helper for it. You can copy an URL to the clipboard by long-pressing a command in the command list. You can write those URLs into a NFC tag to trigger the command when your phone reads the tag or use it to integrate with services such as Tasker. The <a href="https://nicolasfella.wordpress.com/2018/04/30/volume-control-in-kde-connect/">system volume patches</a> have been merged. To make use of it you will need the latest KDE Connect from master for Desktop and Android and pulseaudio-qt installed. You can get pulseaudio-qt from <a href="https://cgit.kde.org/pulseaudio-qt.git">git</a>. We will to an initial 0.1 release soon and hope that distros will ship it soon. Besides these features we also fixed some bugs and polished the UI a little. Bluetooth support is progressing slowly. Matthijs Tijnk and Qt 5.11 fixed some issues. However, it is still not ready for the public. We also improved our device support: Aleix and I improved the Kirigami <a href="https://nicolasfella.wordpress.com/2018/06/07/kde-connect-on-plasma-mobile/">app.</a> We improved the basic pairing workflow and  you can now run commands and control media sessions. Bart Ribbers fixed an issue that was blocking KDE Connect from building it for postmarketOS. I hope to see KDE Connect there as well! Adam Pigg made a huge step towards bringing KDE Connect to Sailfish OS. We like to see KDE Connect on as many platforms as possible, and we need your help for it! Our <a href="https://phabricator.kde.org/project/board/159/">workboard</a> contains lots of ideas for new people to get started. You can ask for any assistance in our <a href="https://t.me/joinchat/AOS6gA37orb2dZCLhqbZjg">Telegram group</a>. Thanks to all contributors!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[The Purpose of things]]></title>
            <link href="https://nicolasfella.de/posts/the-purpose-of-things/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect on Plasma Mobile" />
                <link href="https://nicolasfella.de/posts/kde-connect-junior-jobs/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Junior Jobs" />
                <link href="https://nicolasfella.de/posts/volume-control-in-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Volume Control in KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - Tips, Tricks and Misconceptions" />
                <link href="https://nicolasfella.de/posts/building-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Building KDE Connect" />
            
                <id>https://nicolasfella.de/posts/the-purpose-of-things/</id>
            
            
            <published>2018-07-08T21:28:10+00:00</published>
            <updated>2018-07-08T21:28:10+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Hi, For once this is not a post about KDE Connect (at least not directly). Besides KDE Connect I also work on several other KDE projects, one of them being the awesome <a href="https://api.kde.org/frameworks/purpose/html/index.html">Purpose</a> framework created by Aleix Pol. After Nate highlighted my latest work on Purpose (the new share menu in Dolphin) in his <a href="https://wp.me/p9uUIp-on">blog post</a> I received quite some feedback. I&rsquo;m glad that many people like the idea, but I also received some criticism/suggestions for improvements. This is always welcome as long as it is fair and objective. This was true for most comments, but unfortunately not all of them. I won&rsquo;t even bother to reply to unfair and personal attacks for a useful feature, but rather like to respond to appropriate criticism and inform you about my future plans for Purpose. First of all, for those who don&rsquo;t know what Purpose is, it is an extensible framework to fulfill the developer&rsquo;s purpose while providing an abstraction. Right now the only use-case is exporting/sharing a file, but more could be added in the future. It is used by Dolphin, Spectacle, Okular and other KDE applications and can export files to Email, Telepathy, KDE Connect, Nextcloud, Telegram (I did that one myself), Twitter, Imgur and many more. For the share menu in Dolphin&rsquo;s I received some critisism/suggestions for improvements:</p>
<ul>
<li><strong>Send via Bluetooth and send via KDE Connect are still separate in Dolphin&rsquo;s context menu and should be in the &lsquo;Share&rsquo; sub-menu as well.</strong> I 100% agree on that. In fact send via KDE Connect is already in the &lsquo;Share&rsquo; sub-menu and I&rsquo;ve uploaded a <a href="https://phabricator.kde.org/D13967">patch</a> to remove the old entry. As for Send via Bluetooth: Someone would need to turn Bluedevils FileItemActionPlugin into a Purpose plugin. I&rsquo;ll probably do it myself as soon as I find the time for it.</li>
<li><strong>Dolphin&rsquo;s context menu will be even more cluttered with this.</strong> It actually achieves the opposite. By combining actions like Send via Bluetooth and Send via KDE Connect into a sub-menu the top-level menu will be less cluttered.</li>
<li><strong>I&rsquo;m not going to use it, so I don&rsquo;t want to have it.</strong> You can disable it in Dolphin&rsquo;s settings.</li>
<li><strong>I&rsquo;m never going to use option XY, but it&rsquo;s still there.</strong> Fair point. Some options are loaded conditionally, so e.g. the Telegram option is only present if Telegram is actually installed. For others this is not the case. I&rsquo;m planning to make a config module to en-/disable options.</li>
<li><strong>I don&rsquo;t want to share my files by accident.</strong> Virtually all of the options require more than one click to do something, so it needs a weird accident to actually do something unwanted.</li>
</ul>
<p>I&rsquo;d love to see more applications/services adopting Purpose. So if you are a developer interested in integrating your application with Purpose please get in touch with me and we will figure out a solution. I&rsquo;m especially looking at you, fellow KDE developers ;) Happy sharing :)</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect on Plasma Mobile]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-junior-jobs/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Junior Jobs" />
                <link href="https://nicolasfella.de/posts/volume-control-in-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Volume Control in KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - Tips, Tricks and Misconceptions" />
                <link href="https://nicolasfella.de/posts/building-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Building KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-i/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff I" />
            
                <id>https://nicolasfella.de/posts/kde-connect-on-plasma-mobile/</id>
            
            
            <published>2018-06-07T17:59:00+00:00</published>
            <updated>2018-06-07T17:59:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>The digital world has changed over the last 10 years. The usage of mobile devices skyrocketed whereas the desktop market is stagnating. The trend is also going towards smaller and convertible devices. The mobile market is controlled by two major corporations. One of them is religiously cutting down your personal freedom and aiming towards a walled garden proprietary ecosystem, the other one is disrespecting your privacy enormously. With Plasma Mobile the KDE community is envisioning a mobile experience that is giving you maximal freedom while ensuring your privacy. It seems like a bold venture, but we have to at least try, right? Plasma Mobile would not be a true KDE project without the same degree of integration with the desktop as we already have with Android devices. Therefore we aim to make Plasma Mobile a first-class citizen of KDE Connect.</p>
<h2 id="how-far-are-we" >How far are we?
<span>
    <a href="#how-far-are-we">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Thanks to Aleix Pol there is a suitable UI for KDE Connect on Plasma Mobile already in our git tree. I was able to run it on Plasma Mobile. It has some rough edges, but is basically functional. <img src="https://nicolasfella.files.wordpress.com/2018/06/img_20180607_192146.jpg?w=576" alt="IMG_20180607_192146"> Some features that work so far:</p>
<ul>
<li>Control media players</li>
<li>Remote mouse input</li>
<li>Lock the remote device</li>
<li>Find the remote device</li>
<li>Receive files</li>
<li>Receive remote commands</li>
</ul>
<p><img src="https://nicolasfella.files.wordpress.com/2018/06/img_20180607_192849.jpg?w=576" alt="IMG_20180607_192849"></p>
<h2 id="why-do-i-care-about-plasma-mobile-at-all" >Why do I care about Plasma Mobile at all?
<span>
    <a href="#why-do-i-care-about-plasma-mobile-at-all">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Chances are high that you won&rsquo;t be dropping your Android phone for Plasma Mobile anytime soon. But even then you will be profiting from our efforts. To achieve feature parity with Android we will need to port some of the Android features to C++/Qt. This will benefit all your connected devices that run the C++ version of KDE Connect, e.g. other desktop devices, Sailfish OS phones or phones/tablets running another version of Linux (e.g. Ubuntu Touch). The new UI also provides room to integrate some controls that are only available on Plasma right now. This will improve the KDE Connect experience for non-Plasma desktop users.</p>
<h2 id="sounds-great-what-can-i-do" >Sounds great, what can I do?
<span>
    <a href="#sounds-great-what-can-i-do">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>You want to help? Awesome! I created a <a href="https://phabricator.kde.org/T8968">meta-task</a> on Phabricator to track the current progress. It contains all the things that should be done as sub-tasks. Some of them are ideal beginner tasks. Just pick one you like and don&rsquo;t be shy to ask for help. You don&rsquo;t even need to have a phone running Plasma mobile to do it, you can develop it on your desktop machine and thanks to the awesome Kirigami Framework it will run on Plasma Mobile automagically. What are you waiting for?</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect Junior Jobs]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-junior-jobs/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/volume-control-in-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Volume Control in KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - Tips, Tricks and Misconceptions" />
                <link href="https://nicolasfella.de/posts/building-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Building KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-i/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff I" />
                <link href="https://nicolasfella.de/posts/kde-connect-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Sprint" />
            
                <id>https://nicolasfella.de/posts/kde-connect-junior-jobs/</id>
            
            
            <published>2018-05-13T11:16:59+00:00</published>
            <updated>2018-05-13T11:16:59+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>One of KDE&rsquo;s Community goals for the next years is <a href="https://phabricator.kde.org/T7116">streamlined onboarding of new contributors.</a> It&rsquo;s very important that new people regularly join the community for various reasons. First of all, there will always be something to do and the more contributors the merrier! But there are also people becoming very inactive or leaving the community and these people need to be replaced. Furthermore new people bring in new and fresh ideas. It&rsquo;s important to have people from diverse backgrounds in the community. Lack of community diversity manifests in several issues:</p>
<ul>
<li>Lack of language diversity results in poor translations for non-widespoken languages and other internationalization issues</li>
<li>Having only English/German/Spanish/French speaking contributors leads to incomplete support for things like right-to-left layouts and CJK characters/input methods</li>
<li>Contributors with powerful hardware and good internet connection tend to ignore the need for performance- and bandwidth-efficient solutions</li>
<li>An example from KDE Connect: Most of us are from Europe where its common to use messengers like Whatsapp whereas in the USA it&rsquo;s far more common to write SMS. Therefore we didn&rsquo;t really had in mind that it&rsquo;s important to have good SMS integration in KDE Connect until we actually had some people from the US at our sprint</li>
<li>People tend to not be aware of different setups other people might have, e.g. having an Android phone without Google Play Services is rare in Europe but common in China</li>
</ul>
<p>To address these issues I am aiming to ease contribution for everyone. I believe that KDE Connect is a great project to get started in KDE development. After all, it&rsquo;s the project I got started with myself. The codebase is small and IMHO quite sane. The modular architecture allows you to quickly get cool results without risking to break stuff. To help you pick a task for your first contribution I started marking tasks as junior jobs on the <a href="https://phabricator.kde.org/project/board/159/">KDE Connect workboard.</a> I want to provide structured information for each task that helps you diving into it. I hope that other KDE projects will follow our lead.</p>
<h3 id="now-i-need-your-help" >Now I need <strong>your</strong> help!
<span>
    <a href="#now-i-need-your-help">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h3><p>Which information would you like to see in the task description? What can we, the established developers do to make your first contribution easier? What were the problems you encountered in your first contribution? What are the lessons you learned during your first contributions that you want to share with others? If you already have a <a href="https://identity.kde.org/">KDE Identity</a> account please leave your feedback on the <a href="https://phabricator.kde.org/T7116">Streamlined onboarding of new contributors</a> or the <a href="https://phabricator.kde.org/T8686">Junior Jobs</a> task. If you don&rsquo;t please leave your feedback here in the comments and I will forward it to the appropriate places. Your help will improve the overall community and thus the quality of our software in the long term!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Volume Control in KDE Connect]]></title>
            <link href="https://nicolasfella.de/posts/volume-control-in-kde-connect/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - Tips, Tricks and Misconceptions" />
                <link href="https://nicolasfella.de/posts/building-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Building KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-i/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff I" />
                <link href="https://nicolasfella.de/posts/kde-connect-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-state-of-the-union/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - State of the union" />
            
                <id>https://nicolasfella.de/posts/volume-control-in-kde-connect/</id>
            
            
            <published>2018-04-30T16:47:31+00:00</published>
            <updated>2018-04-30T16:47:31+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Definitely one of the best use cases of KDE Connect is this: Watching a movie while laying in bed or on the couch and controlling your unreachable computer from your phone without needing to stand up. Thanks to our new media control notification you can pause and skip without even unlocking your phone. But what if the movie is too silent? If your media player is implementing the MPRIS2 specifications you are already lucky and can control your players volume from KDE Connect. Plasma Browser Integration even adds that for Browsers. But what if your player doesn&rsquo;t support it (looking at you, Spotify)? Or you want to control your system volume? Then you are out of luck. Until soon. We are adding a plugin to KDE Connect that enables you to control your system volume from the phone. How cool is that? Another neat little trick is tapping on the volume icon to (un)mute the system. <img src="https://nicolasfella.files.wordpress.com/2018/04/screenshot_20180424-000806.jpg?w=576" alt="Screenshot_20180424-000806"></p>
<h2 id="implementation" >Implementation
<span>
    <a href="#implementation">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>The idea for this has been around for a while, but it was not until fall 2017 that I actually started implementing it. The implementation relies on PulseAudio. We are aware that not everyone is using it, so we don&rsquo;t require it and hope that packagers do not make KDE Connect depend on PulseAudio. The first implementation was using the command line tool pactl to set the volume. Assuming you only have one sink it was working pretty well, except there was no easy way to ask for the current volume, so our volume slider would be wrong pretty often. I got around this by parsing the output of pactl in a horrible, horrible line of bash, but it was clear that this was not stable enough to actually go into prod. Also it was still not working with multiple sinks. The logical step was to make use of the libpulse. For some reasons there are a great deal of people that like the C programming language, but I don&rsquo;t. Especially not the library style that comes with it. What I really didn&rsquo;t like was the idea of mixing low-level libpulse C code with high-level Qt code. Luckily, the Plasma guys thought the same. The Plasma Volume Applet contains code that was acting as a bridge between the two worlds. So I &ldquo;borrowed&rsquo; that code (isn&rsquo;t free software amazing?) and after some intense head-against-the-table banging (turns out both KDE Connect and Plasma PA both have a class &lsquo;Device&rsquo; with the same include guard) it was working like a breeze, now even with multiple sinks.</p>
<h2 id="birth-of-a-framework" >Birth of a Framework
<span>
    <a href="#birth-of-a-framework">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>It was working really good, but the thought of having 20 files of duplicate code in two KDE projects wasn&rsquo;t particularly appealing. We decided it would be best to extract the common code into a library that both projects can use. To make this possible the code needed quite some polish. The original author probably didn&rsquo;t have in mind that it might become a library someday. After some work we now believe that the API can be declared stable and it can be released on KDE Extragear. We aim to make it an official KDE Framework once the code has matured enough. Extracting and releasing it as a library makes it easier for us to maintain it, but it also means that you can use it in your project! Furthermore, since it covers more use cases than just volume control it&rsquo;s also possible to integrate more PulseAudio related features into KDE Connect easily. We are looking forward to your suggestions!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect - Tips, Tricks and Misconceptions]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/building-kde-connect/?utm_source=atom_feed" rel="related" type="text/html" title="Building KDE Connect" />
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-i/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff I" />
                <link href="https://nicolasfella.de/posts/kde-connect-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-state-of-the-union/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - State of the union" />
            
                <id>https://nicolasfella.de/posts/kde-connect-tips-tricks-and-misconceptions/</id>
            
            
            <published>2018-04-04T05:00:42+00:00</published>
            <updated>2018-04-04T05:00:42+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Since my first blog post we got an huge amount of feedback and it&rsquo;s amazing to see that you are as excited about KDE Connect as we are. This way I want to say &ldquo;Thank you&rdquo; for all your kind words and tell you that this kind of positive feedback is what keeps us going. I would also like to share some tips and tricks about KDE Connect that you might not know yet, but first I would like to clear up a common misconception.</p>
<h2 id="kde-connect-is-not-tied-to-plasma" >KDE Connect is not tied to Plasma
<span>
    <a href="#kde-connect-is-not-tied-to-plasma">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Many times people claim that KDE Connect is tied to Plasma. KDE Connect can be used with any desktop environment or even no desktop environment at all. A small portion of the UI is only available in Plasma, but most functionality is available on all platforms. However, most KDE Connect developers use Plasma, so issues in other DEs don&rsquo;t come to our attention in our daily usage. If you find something that can improve the non-Plasma UX, please let us know by <a href="http://bugs.kde.org">filing a bug</a>. If you are using Gnome you might be interested in <a href="https://github.com/andyholmes/gnome-shell-extension-gsconnect">GSConnect</a>, a GNOME Shell extension that uses KDE Connects Android app. If you are using another GTK-based desktop you might want to install <a href="https://github.com/Bajoja/indicator-kdeconnect">indicator-kdeconnect</a>. The misconception that KDE Connect is tied to Plasma likely comes from the fact that on some distros such as Debian the KDE Connect package depends on Plasma. This should **not **be the case and is highly discouraged by us. Please file a bug against your distros package if that is the case.</p>
<h2 id="add-devices-by-ip" >Add devices by IP
<span>
    <a href="#add-devices-by-ip">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>KDE Connect tries to discover devices in your network automatically. However, for various networking reasons this does not work in all cases. If your devices are not automatically discovered, but you are able to ping one device from another there is a good chance you can pair them by adding the device IP manually. Open up KDE Connect in your phone, go to &lsquo;pair new device&rsquo;, tap the three dots in the top-right corner and tap &lsquo;Add devices by IP&rsquo;. <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180331-0306087939472913876397211.png?w=576" alt="screenshot_20180331-0306087939472913876397211.png"> You can both specify IP addresses and hostnames.</p>
<h2 id="filter-notifications" >Filter notifications
<span>
    <a href="#filter-notifications">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Many messaging apps like Telegram got a desktop or web client. In this case you would get double notifications for each message, one from the phone over KDE Connect and one from the desktop client. In this case you want to take your phone, go to the &lsquo;Plugin Settings&rsquo; and select &lsquo;Notification sync&rsquo;. You will get a list of all your installed apps and can select from which you want to receive notifications.</p>
<h2 id="runcommand-plugin" >Runcommand Plugin
<span>
    <a href="#runcommand-plugin">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>We receive a lot of feature request and are thankful for that. The bad news is, we cannot implement all of them. Some use cases are just too special. The good news is, we implemented a plugin that can serve a infinite number of use cases. You can specify commands on your desktop and can run them from your phone anytime. For example you can create a Shutdown command to power off your computer without leaving your bed. You can even create bash or Python scripts (or anything that is executable from bash) to do anything you can imagine. The best news is, it is already there. This has been around for quite a while, but most people didn&rsquo;t know about it because it&rsquo;s very hidden. We&rsquo;re trying to make it more discoverable in an upcoming release. Right now you need to go to the system settings, select the Runcommand Plugin preferences and enter your commands. We&rsquo;re aiming towards a better UX for this, but even right now, the possibilities are endless. <img src="https://nicolasfella.files.wordpress.com/2018/05/runcommand.png" alt="runcommand"></p>
<h2 id="rename-devices" >Rename devices
<span>
    <a href="#rename-devices">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Sometimes you may want to rename one of your devices, e.g. when you have two from the same manufacturer and they show up with the same name. On the desktop side, go to the KDE Connect settings and in the top-left you will find a edit button. It&rsquo;s the little pencil icon in the above screenshot. On Android it&rsquo;s a little bit more hidden. Open up the left drawer and tap your devices name (in my case &ldquo;The phone&rdquo;) to edit it. <img src="https://nicolasfella.files.wordpress.com/2018/05/screenshot_20180401-204210-1.png?w=576" alt="Screenshot_20180401-204210 (1)"></p>
<h2 id="notifications-on-the-phone" >Notifications on the phone
<span>
    <a href="#notifications-on-the-phone">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>One of the most loved features about KDE Connect is receiving your phones notifications on the desktop. But did you know that you can also do it the other way around? All you need to do is go to the settings on the phone and on the desktop, activate the &ldquo;Receive notifications&rdquo; plugin on Android and the &ldquo;Send notifications&rdquo; plugin on the desktop and enjoy your desktops notifications on the phone.</p>
<h2 id="keep-screen-unlocked" >Keep screen unlocked
<span>
    <a href="#keep-screen-unlocked">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Another plugin that&rsquo;s been around for a while but deactivated by default is the screensaver inhibitor. When you choose to activate it in the settings your screen won&rsquo;t power off as long as your phone is connected.</p>
<h2 id="pair-desktop-to-desktop" >Pair Desktop to Desktop
<span>
    <a href="#pair-desktop-to-desktop">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>You can not only pair a phone with your desktop device, you can also pair a desktop with another desktop. It isn&rsquo;t as powerful as connecting a phone with a desktop, but you can still do useful things like sharing files and links. We are looking to extending the capabilities. The same also works for two android devices.   I hope I could provide you some useful knowledge that makes you enjoy KDE Connect even more. As usual, if you want to support our development please consider <a href="https://www.kde.org/community/donations/">donating to KDE</a>.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[Building KDE Connect]]></title>
            <link href="https://nicolasfella.de/posts/building-kde-connect/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-i/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - New stuff I" />
                <link href="https://nicolasfella.de/posts/kde-connect-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-state-of-the-union/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - State of the union" />
            
                <id>https://nicolasfella.de/posts/building-kde-connect/</id>
            
            
            <published>2018-03-30T10:54:49+00:00</published>
            <updated>2018-03-30T10:54:49+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>After I shared the link to the KDE Connect Development Telegram group almost 20 people joined within 24 hours. I certainly did not expect such a interest in KDE Connect. When I joined the project about a year ago the hardest part for me was setting up a proper development workflow, meaning configuring, building, installing and debugging the application and interacting with git and Phabricator. To ease your start in KDE Connect development I would like to give you the guide I wish I had back then. I will show you how to fetch the project, build, run and debug it using KDevelop. It&rsquo;s an IDE by the KDE Community designed with KDE projects in mind. In theory you can use any IDE you like, if you figure out how to configure it properly. You probably will find KDevelop in your distros repository. Install and run it. Go to Project -&gt; Fetch Project&hellip; <img src="https://nicolasfella.files.wordpress.com/2018/03/kdevelop_1.png" alt="kdevelop_1"> Search for KDE Connect client for KDE and click Get After the project is fetched you click Next -&gt; Next -&gt; Finished <img src="https://nicolasfella.files.wordpress.com/2018/03/kdevelop_2.png" alt="kdevelop_2"> The install prefix determines where KDE Connect will be installed. Choose /usr if you want to override your distros package. In this case you might want to uninstall it. Hit OK. If you are getting cmake errors you are missing some development packages. The name of those depend on your distro. For example, the development package for KIO on Ubuntu is called libkf5kio-dev. Google should help you find all required packages for your distro. On Debian/Ubuntu you can use &ldquo;apt-get build-dep kdeconnect&rdquo; to install the build dependencies. On openSUSE you can install the dependencies using &ldquo;sudo zypper si -d kdeconnect-kde&rdquo;. After you installed all required packages hit Build in the top-left corner. Make sure there is no other instance of KDE Connect running by running &ldquo;killall kdeconnectd&rdquo; After it build successfully hit Debug. You will be prompted with a window to configure the launch. You will need to do this only once. Hit Add -&gt; Project Executables -&gt; KDE Connect -&gt; daemon/kdeconnectd . If this does not work you might need to adjust the path to the kdeconnectd binary. Hit OK and you should have a running KDE Connect built from source! Now, if you do any changes to KDE Connect you just need to hit Build and Debug again to apply it.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect - New stuff I]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-new-stuff-i/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-sprint/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect Sprint" />
                <link href="https://nicolasfella.de/posts/kde-connect-state-of-the-union/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - State of the union" />
            
                <id>https://nicolasfella.de/posts/kde-connect-new-stuff-i/</id>
            
            
            <published>2018-03-29T21:40:25+00:00</published>
            <updated>2018-03-29T21:40:25+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>As I said a couple of days ago we got a lot to announce for KDE Connect. This is the first of many posts where I show you what we were up to. It may not be as exciting as you hoped for because the really big features are not-quite-ready, so hang on :) First we squashed some bugs, including a pretty nasty crash in the NotificationsPlugin. In my <a href="https://nicolasfella.wordpress.com/2018/03/20/kde-connect-state-of-the-union/">first post</a> about KDE Connect I told you about the album cover art on Android. Thanks to Matthijs it now also works when the cover art is a local file, for example when you are using VLC. It already worked when the cover art was a remote URL, for example with Spotify. The cover art is now also shown in the media control notification and added to the Android media session. When you send an image to you phone the notification now contains a preview of the image. The notification now also has a share button which allows you to quickly do something with the just received file. <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180329-232350.png?w=576" alt="Screenshot_20180329-232350"> If you use Nautilus as a file manager you will be pleased to hear that KDE Connect now includes a Nautilus extension that allows you to quickly share files across your devices. As I mentioned before, the exciting features are yet to come. Now is a perfect time to join our development team! The codebase is stable and allows you to quickly implement new features. If you got a basic understanding of programming you can quickly get a grasp on the technologies we are using (Java/Android and C++/Qt). If you are interested please join our <a href="https://t.me/joinchat/AOS6gA37orb2dZCLhqbZjg">Telegram group.</a> Please note that this is a development group and not a general support group. Stay tuned!</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect Sprint]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-sprint/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
                <link href="https://nicolasfella.de/posts/kde-connect-state-of-the-union/?utm_source=atom_feed" rel="related" type="text/html" title="KDE Connect - State of the union" />
            
                <id>https://nicolasfella.de/posts/kde-connect-sprint/</id>
            
            
            <published>2018-03-26T17:10:00+00:00</published>
            <updated>2018-03-26T17:10:00+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Last weekend the core KDE Connect development team met for a sprint at the amazing Verse office in Barcelona. It was an amazing opportunity to get to know each other (most of us have never met before) and discuss the future of KDE Connect in an amazing and productive atmosphere. <img src="https://nicolasfella.files.wordpress.com/2018/03/photo_2018-03-26_18-59-41-e1522083680138.jpg" alt="photo_2018-03-26_18-59-41.jpg"> We squashed some bugs, implemented new features and laid the foundation for other ones. Some weeks ago we asked people on Reddit which features they liked to see in KDE Connect. We discussed them extensively and are pleased to say that some of the most requested ones are already in progress. We will announce more in the next couple of weeks. Stay tuned! This sprint was only possible because KDE e.V. provides travel support for us. If you want us and other KDE Projects to be able to meet in person more often please consider <a href="https://www.kde.org/community/donations/">donating</a> to KDE e.V.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
        
        <entry>
            <title type="html"><![CDATA[KDE Connect - State of the union]]></title>
            <link href="https://nicolasfella.de/posts/kde-connect-state-of-the-union/?utm_source=atom_feed" rel="alternate" type="text/html" />
            
            
                <id>https://nicolasfella.de/posts/kde-connect-state-of-the-union/</id>
            
            
            <published>2018-03-20T01:23:16+00:00</published>
            <updated>2018-03-20T01:23:16+00:00</updated>
            
            
            <content type="html"><![CDATA[<p>Hey there! We haven&rsquo;t blogged about KDE Connect in a long time, but that doesn&rsquo;t mean that we&rsquo;ve been lazy. Some new people have joined the project and together we have implemented some exciting features. Our last post was about version 1.0, but recently we released version 1.8 of the Android app and 1.2.1 of the desktop component some time ago, which we did not blog about yet. Until now! We got some fancy new features in place:</p>
<h2 id="remote-keyboard-plugin" >Remote Keyboard plugin
<span>
    <a href="#remote-keyboard-plugin">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>I think most of us can agree that typing long texts on the phone sucks compared to typing on a proper keyboard. Before, you could type your text on the desktop and copy &amp; paste it to your phone using our clipboard sync. Now we got an even fancier method: our new Remote Keyboard plugin. Before using it you need to enable the KDE Connect Remote Keyboard in your phones settings. <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180316-205817-e1521508309567.png?w=257" alt="Screenshot_20180316-205817"> Whenever you are confronted with a text input field you can switch to the KDE Connect Remote Keyboard. Then you open up the Plasmoid, click the input field and start typing. <img src="https://nicolasfella.files.wordpress.com/2018/03/remotekeyboard.png" alt="remotekeyboard.png"> Big thanks to Holger Kaelberer for implementing this!  </p>
<h2 id="reply-to-whatsapp-and-others" >Reply to Whatsapp and others
<span>
    <a href="#reply-to-whatsapp-and-others">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Previously you only could reply to SMS, but not other IM apps like Whatsapp. We are pleased to announce that we were able to enable replying for several other messaging apps that support Androids quick reply, including Whatsapp. Please note that it is not within our control which apps are supported and which not. Big thanks to Julian Wolff for implementing this!  </p>
<h2 id="notification-icons" >Notification icons
<span>
    <a href="#notification-icons">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>On Android, most notifications have some kind of icon, like a contact picture for messaging apps or album art for media player notifications. KDE Connect now forwards those and displays them on the desktop and inside the Plasmoid. <img src="https://nicolasfella.files.wordpress.com/2018/03/notification.png" alt="notification.png">  </p>
<h2 id="runtime-permissions" >Runtime permissions
<span>
    <a href="#runtime-permissions">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Android Marshmallow introduced a new permission system, giving the users fine-grained control about their apps. To support this new system each plugin got a set of required and optional permissions assigned. If a required permission has not been granted the respective plugin won&rsquo;t be loaded. If an optional permission has not been granted the plugin will be loaded with reduced features. <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180316-210321.png?w=576" alt="Screenshot_20180316-210321">  </p>
<h2 id="direct-share" >Direct share
<span>
    <a href="#direct-share">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Android Marshmallow also introduced Direct Share. Using this we enabled you to send files or urls to your desktop without opening KDE Connect. <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180316-213838__01-1.png?w=576" alt="Screenshot_20180316-213838__01 (1)">  </p>
<h2 id="plasmoid-redesign" >Plasmoid redesign
<span>
    <a href="#plasmoid-redesign">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Our Plasmoid got some love Before: <img src="https://i.imgur.com/INRv85c.png" alt=""> After: <img src="https://i.imgur.com/TaCtwCu.png" alt="">  </p>
<h2 id="choose-ringtone-for-find-my-phone" >Choose ringtone for Find-my-Phone
<span>
    <a href="#choose-ringtone-for-find-my-phone">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>A small but requested feature is selecting a ringtone for Find-my-Phone.  </p>
<h2 id="blacklist-numbers" >Blacklist numbers
<span>
    <a href="#blacklist-numbers">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>You are now able to blacklist numbers so that calls and SMS are not forwarded to the desktop. This is especially useful when you are using two-factor-authentification with your phone so it won&rsquo;t get leaked to the desktop. Those features were implemented by me.  </p>
<h2 id="media-controller-overhaul" >Media controller overhaul
<span>
    <a href="#media-controller-overhaul">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Matthijs Tijink has been working really hard on improving the media controller plugin. It now displays the album cover art and a media control notification as well as other polish. Make sure to check out <a href="https://matthijstijink.nl/static/blog_entry_1.html">his blog</a>. Before: <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180316-203437.png?w=576" alt="Screenshot_20180316-203437"> After: <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180316-201401.png?w=576" alt="Screenshot_20180316-201401"> Notification: <img src="https://nicolasfella.files.wordpress.com/2018/03/screenshot_20180316-204859.png?w=576" alt="Screenshot_20180316-204859">  </p>
<h2 id="url-handler" >URL handler
<span>
    <a href="#url-handler">
        <svg viewBox="0 0 28 23" height="100%" width="19" xmlns="http://www.w3.org/2000/svg"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" fill="none" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2"/></svg>
    </a>
</span>
</h2><p>Aleix Pol has implemented an URL handler that enables you to trigger phone calls for example by clicking a tel:// url in your browser.   Additionally we have fixed loads of bugs, crashes and papercuts and made many under-the-hood improvements. There is also a lot going on in related KDE software. Friedrich Kossebau is working on bringing MPRIS support to Gwenview and Okular, enabling controlling slideshows and presentations from KDE Connect. Furthermore we fixed some issues in the MPRIS implementation of Plasma Browser Integration and <a href="https://community.kde.org/Elisa">Elisa</a> (the next-gen KDE music player). Speaking of <a href="https://github.com/KDE/plasma-browser-integration">Plasma Browser Integration</a>: In case you haven&rsquo;t, make sure to check out this awesome project which integrates neatly with KDE Connect, enabling you for example to control Youtube videos or Netflix from your phone or to send browser tabs to your phone. Thanks Kai Uwe Broulik for this awesome project! But this is not the end. We got some more features in the pipeline and this week the core developers are meeting for a sprint to discuss the future of KDE Connect. Some weeks ago we asked people on Reddit which features they like to see and got a ton of valuable feedback. We&rsquo;ll discuss it and let you know which of them are feasible. If you are as excited about KDE Connect as we are we would love to see you <a href="https://community.kde.org/Get_Involved">join our development team.</a> Make sure to subscribe to and ask for help at <a href="https://mail.kde.org/mailman/listinfo/kdeconnect">our mailing list</a>. If you can&rsquo;t contribute in a technical way but still want to support us consider <a href="https://www.kde.org/community/donations">donating to KDE</a>. Your donations enable us to meet in person and work more closely on KDE Connect and other KDE Software.</p>
]]></content>
            
                 
                    
                 
                    
                 
                    
                         
                        
                            
                             
                                <category scheme="https://nicolasfella.de/tags/kde" term="kde" label="KDE" />
                            
                        
                    
                
            
        </entry>
    
</feed>
