JAN
31
2017

Plasma 5.10: Spring-loading in Folder View; performance work

I was sorely remiss not to blog more during the Plasma 5.9 dev cycle. While 5.9 packs a fair amount of nice new features (e.g. here's the widget gallery in Application Dashboard at some point during development), there was not a peep of them on this blog. Let me do better and start early this time! (With 5.9 out today ...)

Folder View: Spring-loading

Spring-loading in Folder View
Spring-loading functionality in Plasma 5.10's Folder View (click for YouTube)

Folder View in Plasma 5.10 will allow you to navigate folders by hovering above them during drag and drop. This is supported in all three modes (desktop layout, desktop widget, panel widget), and pretty damn convenient. It's a well-known feature from Dolphin, of course, and now also supported in Plasma's other major file browsing interface.

Folder View packs a lot of functionality - at some point I should write a tips & tricks blog on some of the lesser known features and how they can improve your workflow.

Performance work in Folder View ... and elsewhere!

But that's not all! I've also been busy performance-auditing the Folder View codebase lately, and was able to extract many savings. Expect massively faster performance scrolling big folders in big Folder View widgets, lower latencies when navigating folders, and greatly improved Plasma startup time when using Folder View widgets on the desktop. In the case of big folder + big widget, a 5.10 Folder View will also use quite a bit less memory.

I've done similar analysis of other applets, e.g. the Task Manager and the Pager, and done both smaller improvements or looked into more fundamental Qt-level issues that need addressing to speed up our UIs further.

Others on the Plasma team have been up to similar work, with many performance improvements - from small to quite large - on their way into our libraries. They improve startup time as well as various latencies when putting bits of UI on the screen.

While it's still very early in the 5.10 cycle, and it won't be shy on features by the end, performance optimization is already emerging as a major theme for that upcoming release. That's likely a sign of Plasma 5's continuing maturation - we're now starting to get around to thoroughly tuning the things we've built and rely on.

JAN
30
2017

Simple Menu launcher on KDE Store

Example screenshot for Simple Menu v1.0
Simple Menu v1.0

Quite a while ago already I wrote a launcher menu widget named Simple Menu. It's using the same backend I wrote for our bundled launchers, and it's a little bit like Application Dashboard scaled down into a small floating window, plus nifty horizontal pagination. It's also really simple and fast.

While some distributions packaged it (e.g. Netrunner Linux), it's never been released properly and released - until now! Starting today, you can find Simple Menu on the KDE Store and install it via Add Widgets... -> Get new widgets in your Plasma.

Please note that Simple Menu requires Plasma v5.9 (to be released tomorrow). Actual v5.9, not the v5.9 Beta - it relies on fixes made after the Beta release.

DEC
23
2016

Fedora and KDE/spin's treatment - Discussion

I think it's important that the Fedora KDE / Spins Community speak out about how Fedora treats KDE and other spins. Given Fedora is about to have FESCo election, now is the perfect time to get community feedback on what candidates think.

For those who know me, they know I enjoy and support Fedora/Red Hat and have for awhile. However, they also know I strongly dislike how Fedora treats KDE as a 2nd class citizen. Why do I say that? It's well known the history of Fedora/Red Hat has been GNOMEcentric from the very beginning.

NOV
16
2016

Ethics in engineering

Powerful: The Code I'm Still Ashamed Of

Things like this are a big reason why I work in open source.

NOV
2
2016

San Francisco Bay Area KDE birthday party

Since several KDE folks were in town for the Google Summer of Code Mentor Summit they decided to come visit us as kind of an impromptu KDE 20th birthday party, and to meet KDE's newest/youngest disciple. She might still be a bit young to write code, but we'll see how long it'll take to change that. One of the reasons neither me nor blauzahl have been very active in KDE lately...

OCT
12
2016

Resurrecting Yakuake

No use in beating around the bush: Yakuake is currently not in great shape. While the codebase made the jump to KDE Frameworks 5 quite early, it took a long time to get releases out, and the latest still suffers from some annoying, if minor, regressions and bugs. The same is also true for outside code Yakuake heavily relies on - namely Konsole, which unfortunately broke some APIs used by Yakuake, including the one used to invoke the "Manage Profiles" dialog. Meh.

Alongside this there's a more fundamental problem, which is that Yakuake's basic UI code has not aged well. There's some nice things to say about Yakuake's theming system, including a stable file format with unbroken backwards compatibility for more than a decade. But that also hints at the fact that it was designed for systems of that era, and for example can't handle scaling to hi-dpi displays at all.

Fortunately I've been able to secure some honest-to-goodness time over the next couple of months address these problems and thoroughly refurbish the Yakuake codebase, dragging it kicking and screaming into the present day. Here's the cliff notes of the todo:

  • New UI/theming system. This is the big one. The new themes will make extensive use of Qt Quick, adopting some familiar patterns from Plasma theming, and using the KPackage framework for packaging and distribution. This will get us scaling support, allow for more flexible UI arrangements (finally single-bar themes that aren't a gross hack, for one), window shadows, and more. Support for legacy themes will be retained via an internal compatibility theme; they will show up in the config dialog as per usual.
  • Fix Konsole breakage. Konsole's embeddable terminal component has been making Yakuake's life harder with bitrot and broken APIs. I'll go in and fix it.
  • Bugfixes. I'll look into addressing the highest-priority bugs that have been reported against the Frameworks 5 version, including the infamous terminal split focus issue.
  • Wayland. Yakuake mostly works on Wayland, but there's some X11-specific code that yet needs to be cleaned up.

Unfortunately out-of-scope for now will be the often-desired support for session restore; this will need a seperate campaign. But the above will ensure that Yakuake stays with us long enough to enable one.

Watch out for a Yakuake 4.0 deserving of the version bump some time later this year. :)

SEP
27
2016

KDE neon Korean Developer Edition (... and future CJK Edition?)

While not being advertised on the KDE neon main page just yet (and it won't be for a while), we've recently begun doing regular builds of a special Korean Edition of neon's Developer Edition tracking the stable branch of KDE's code repositories. The Korean Edition pre-selects the Korean language and locale at boot, packs all the Korean translations we have and comes with a Korean input method pre-setup.

Hangeul metal type from the Joseon era
Joseon-era Hangeul metal type

Why a Korean Edition?

Among many other locations around the planet, the local community in Korea is planning to put on a KDE 20th Anniversary birthday party in Seoul on October 14th. The KDE neon Korean Developer Edition was directly created on request for this event, to be made available to attendees.

That said - this is actually something we've been wanting to do for a while, and it's not just about Korean.

None of the bits that make up the new image are new per-se; KDE has supported Korean for a long time, both with foundational localization engineering and regular maintenance activity. And as of the Plasma 5.6 release, our Input Method Panel is finally bundled with the core desktop code and gets automatically added to the panel on first logon in a locale that typically requires an input method.

Yet it's pretty hard to keep all of this working well, as it requires tight integration and testing across an entire stack, with some parts of the whole living upstream or downstream of KDE.org. For example: After we attempted to make the Plasma panel smarter by making it auto-add the Input Method Panel depending on locale, we couldn't actually be sure it was working as desired by our users, as it takes time for distros to get around to tuning their dependency profiles and for feedback from their users to loop back up to us. It's a very long cycle, with too many opportunities to lose focus or domain knowledge to turnover along the way.

This is where KDE neon comes in: As a fully-integrated product, we can now prove out and demo the intended distro experience there. We can make sure thing stay in working order, even before additional work hits our other distro partners.

Right now, we're kicking things off with Korean Edition, but based on time, interest and testers (please get in touch!), we'd like to build it out into a full CJK Edition, with translations and input support for our Chinese and Japanese users pre-installed as well (as another precursor to this, the decision to switch to Noto Sans CJK as Plasma's default typeface last year was very much made with the global audience in mind as well).

Ok, but where do I get it?

Here! Do keep in mind it's alpha. ☺

SEP
11
2016

Plasma 5.8: Per-screen Pagers

The other day I wrote about the Pager improvements awaiting in Plasma 5.8. In the comments user btin re-raised the issue of limiting the Pager's display to the screen it's currently on, instead of being all-exclusive.

At the time I wasn't sure we could still sneak this in before feature freeze, but thanks to the screen-awareness of the new backend (which, to recap, is shared with the Task Manager and already needs to determine what screen a given window resides on), it turned out to be easy enough to do!

The default remains the screen-spanning behavior for now, but in the Pager's "Display" settings you can now tick a new "Only the current screen" checkbox. If enabled, Pagers in panels on different screens will now nicely be limited to showing their respective screen's windows on each desktop.

SEP
6
2016

Plasma 5.8: More efficient Pager and Activity Pager widgets

On the heels of the Plasma 5.7's new Task Manager backend, the upcoming Plasma 5.8 LTS release will sport substantially rewritten Pager and Activity Pager widgets, aimed at improving efficiency and conserving resources in a typical Plasma Desktop setup.

Plasma Pager widget
Enemy located

Two birds with one stone

Both the Task Manager and Pager widgets report on the windowing system. (If you didn't know: The Pager is the little game-like minimap to the left of the Task Manager, showing the windows on each virtual desktop.) To do so they need to know about the windows that exist and various things about them, such as their location (screen, desktop) and state (active, minimized). Up until now, the two would collect all of that data independently, sharing no code, and doing much of the same processing in response to changes. Plasma 5.8's Pager now shares a backend with the Task Manager (no matter how many instances of each applet you have), consolidating all the window information processing in the Plasma shell process in just one spot. This saves a whole bunch of CPU and memory, along with being less code to maintain!

Doing less is doing fast

The old Pager backend would toss out everything it knew about the current state of the windowing system every time any window changed in any way, causing everything the widget was showing to be torn apart and recreated from scratch - even when most of it didn't need to be touched at all. That's of course terribly inefficient, and the Task Manager's backend is fortunately much smarter. No more needless busywork.

Dropping weight

The way the Pager is actually drawn was cleaned up along the way, now using less CPU and memory, especially with the bare-bones default settings. Dragging a window on the Pager is now also much more efficient internally.

(Re-)joining forces

All of the above also applies to the Activity Pager widget - which used to be a lightly modified copy of the Pager's code, and now instead shares all of its code with its sibling. The two pagers remain separate entries in the Widget Explorer, but all further maintenance and development can now happen on a unified codebase.

JUN
16
2016

Icon theme deployment on Windows, Mac OS and mobile platforms

During the Randa meeting I implemented some magic in KIconThemes to generalize a design initially made by Christoph Cullmann for Kate.

On platforms other than Linux/BSD, icon themes are not available as part of the system, and installing 6235 files takes forever. The deployment strategy for applications on those operations systems is now the following:

Pages