Tuesday, February 17, 2015

KRecipes Gardening Day: Saturday 21 February

It's clear the current KRecipes gardening effort is not having much traction, but before moving on to different applications, let's try a different format, the Gardening Day.

This Saturday 21 February we will meet at #kde-devel on freenode IRC from 9 UTC onwards (It'll probably go well into the UTC late-afternoon) to work on KRecipes.

There's three main topics:
* Triage and fix bugs
* Make tests pass in jenkins
* Port code away from Qt3Support/KDE3Support (without breaking stuff :D)

If we have some extra time we can try to work on some feature like using
KUnitConversion to convert between units.

You don't need to be an expert on KRecipes to help, so join us :)

Wednesday, February 11, 2015

KDE Applications 15.04 Feature Freeze is in 2 weeks

As per our Release Schedule, the freeze for KDE Applications 15.04 is in two weeks (25 February).

Get yourselves ready!

Friday, February 06, 2015

Qt 5.4 QML -> C++ QVariant issues

I usually don't blog about what I do in my day-time job in my personal blog but since this may affect some of the KDE/Qt developers I will do this time.

Qt 5.4 was released three months ago; at Canonical we're starting to move the Ubuntu PÄ¥one codebase to it now and it has an important behavior change as noted in it's changes file (that is quite hard to find by the way, it took me like 5 minutes to find, and that's knowing it existed, searching for "qt 5.4 changelog" does not return http://qt-project.org/wiki/Change-files-in-Qt-5.4.0 that is the important page) that has affected us in many places

The important behavior change is that now some QVariants will be passed to C++ as QJSValue-QVariants instead of QStringList-QVariants, QMap-QVariants, etc so if your code did things like checking the variant type now it will fail, so basically for any C++ function that receives QVariants from QML you need to add extra code to unbox the QVariant, i.e.

void MyClass::myFunction(QVariant v)
{
    // unbox the QVariant-QJSValue
    if (v.userType() == qMetaTypeId<QJSValue>()) {
        v = v.value<QJSValue>().toVariant();
    }
    // This is your old code that checks the type
    // of the QVariant is a valid one
    if (v.type() != QVariant::Map &&
        v.type() != QVariant::List &&
        v.type() != QVariant::StringList) {
        qWarning() << "Bad param" << v;
        return;
    }
    // From here your old code that does things
}