Reconstructing Plasma

Desktop Workspace with Widgets Explorer
Desktop Workspace with Widgets Explorer
We are currently in the process of porting bits and pieces that make up Plasma Desktop to QtQuick2, KDE Frameworks 5 and Plasma 2. In this endeavour, we are going over all the basic components, such as Kickoff, the task manager, the pager, the system tray, battery and network management widgets, and of course the clock. We are also porting other workspace components such as the powermanagement policy daemon (powerdevil), the KDE Daemon (kded) and the splash screen.

For Plasma components, this work involves first porting C++ portions of the code to Qt5 and adjusting the build-system to build this code against Qt5 and Frameworks 5 libraries, which have been split up. C++ code has to be moved into imports, which can then be used from QML code.
Configuration dialogs in Plasma 2 are something, we have redesigned. As all other UI code, the configuration dialogs seen in Plasma are also moving to QML. In Plasma 1, the configuration is done using traditional widgets. This made it hard for developers to provide complex configuration user interfaces without having to write these portions in C++. In Qt 5.1, QtQuick Controls have arrived, and are further polished in Qt 5.2. QtQuick controls are traditional widgets, done in QML instead of hand-written C++ layouts or Qt Designer .ui files. They reuse the widget styling engine (the Oxygen style, for example), but you can write these in QML. This allows us to keep the user experience. Plasmoids in Plasma 2 now use QtQuick, and get the full possibilities along with that.

Desktop settings and Toolbox
Desktop settings and Toolbox

Over the past years, we have already moved most of the standard elements of a Plasma workspace to QML, which greatly simplifies porting. To the user, this will not feel like a rewrite, but like an update of the user experience.
In many ways, Plasma 2 will be very similar to what is known today, and that’s a good thing. Familiar interfaces that have been developed and polished over the years provide great value, we definitely want to keep the work that has gone into that, but we also want to elevate its possibilities going forward to a new level. While going over the code, we often improve things here and there, so it’s not just a “stupid port” but provides actual value to the user. From a UI point of view, we expect Plasma 2 to be an evolutionary release, which, while keeping existing workflows intact gives us greater flexibility in how the system is set up, and used. The move to Plasma 2 means that we can improve on things that have been nagging us architecturally, so we can get rid of some accumulated baggage. Then, there is of course Wayland, which we aim at fully supporting in Plasma 2.

Notifications
Notifications
In the screenshots, you can see a few of our widgets that make up the desktop, just to give you an idea of what is there right now. Some elements have just seen straight ports (the network management and battery widgets, for example), others are in the process of being reimplemented. One of the things that we will likely improve it the layout of the widgets explorer, which you can see in the first screenshot. The horizontal list does not work very well in practice (in theory it really does! ;-)), as it is harder for a human brain to scan a horizontal list, compared to a vertical one.

When looking at the screenshots, keep in mind that this is all very much work in progress, and that almost all the work has been done on the underlying architecture (KDE Frameworks 4 and the Plasma Framework), and that we are only now starting to shift towards more UI-oriented work. For that purpose, we will have a meeting on IRC later this week to hash out further strategies and take the pieces we have now to make it One. More on that, however, later.

As an exercise to the reader, what improvements and bugs and missing things can you notice? :)

Kickoff Launcher
Kickoff Launcher
Network Mangement
Network Mangement
Battery Monitor
Battery Monitor
Notification Area a.k.a System Tray
Notification Area a.k.a System Tray