Since my last blog post there has been lots of progress on the KWin on 5 effort. First of all a big thank you to everybody who has picked up some of the tasks on the trello board. Thanks to that the compile output is starting to look better and better – the number of deprecated warnings is starting to go down and by that also some areas are closer to be working again.

Talking of working again: the important changes are merged into Qt with the result that KWin from framework-scratch branch starts again. One should still be careful and not replace the KWin 4 – the most important steps are outlined in the wiki.

Lately my work focused on porting from QtQuick 1 to QtQuick 2. This is a change which needs to happen as all our user interfaces are using Plasma Components which do not exist for QtQuick 1 anymore in the frameworks 5 world. Of course we also want to make use of the new goodies of QtQuick 2 🙂

This required not only to adjust our QML files, but also to change the C++ side from QtDeclarative to QtQuick. I was a little bit afraid of these changes as our window thumbnail rendering used quite some hacks around the underlying QGraphicsScene to make it work. My fear was that this won’t be possible with QtQuick 2 anymore.

To my surprise I was even able to remove a large part of our hacks because QtQuick 2 exposes information which we need and which isn’t exposed in the old world. Other parts are still hacky and I fear that we even have some regressions concerning clipping.

Our QtScript and QML bindings shared a lot of code as both are based on QScriptEngine. With QtQuick 2 it’s no longer based on the QScriptEngine and by that our implementations start to diverge. As far as my testing showed we can no longer inject properties on the JavaScript global object in the QtQuick bindings which means that our API slightly breaks and cannot be identical to the QtScript API any more.

While this is of course a disadvantage it also brings advantages as I am forced to implement proper QML replacements. For example interaction with a screen edge can now be done in a nice QML syntax:

ScreenEdgeItem { edge: ScreenEdgeItem.LeftEdge onActivated: doSomething() }

Right now all usages of QtQuick in KWin core and KWin effects have been ported to QtQuick 2. Still remaining is Aurorae – this needs some more work as the window decoration API needs adjustments anyway given that right now rendering of decorations in non-compositing is broken.