make the uiloaded tests pass

work in case of every order the various applets and containments emit uiready
REVIEW:119284
This commit is contained in:
Marco Martin 2014-07-15 10:16:10 +02:00
parent eb172f0d34
commit 188d131d77
8 changed files with 53 additions and 17 deletions

View File

@ -28,7 +28,9 @@ Plasma::Applet *SimpleLoader::internalLoadApplet(const QString &name, uint apple
const QVariantList &args)
{
if (name == "simpleapplet") {
return new SimpleApplet();
return new SimpleApplet(0, QString(), appletId);
} else if (name == "simplecontainment") {
return new SimpleContainment(0, QString(), appletId);
} else {
return 0;
}
@ -66,6 +68,22 @@ SimpleApplet::SimpleApplet(QObject *parent , const QString &serviceId, uint appl
}
SimpleContainment::SimpleContainment(QObject *parent , const QString &serviceId, uint appletId)
: Plasma::Containment(parent, serviceId, appletId)
{
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
//updateConstraints(Plasma::Types::UiReadyConstraint);
m_timer.setSingleShot(true);
m_timer.setInterval(qrand() % ((500 + 1) - 100) + 100);
m_timer.start();
connect(&m_timer, &QTimer::timeout, [=]() {
updateConstraints(Plasma::Types::UiReadyConstraint);
});
}
static void runKBuildSycoca()
{
@ -117,13 +135,10 @@ void CoronaTest::restore()
void CoronaTest::startupCompletion()
{
QEXPECT_FAIL("", "Uiready behavior broken in master.", Continue);
QVERIFY(!m_corona->isStartupCompleted());
QEXPECT_FAIL("", "Uiready behavior broken in master.", Continue);
QVERIFY(!m_corona->containments().first()->isUiReady());
QSignalSpy spy(m_corona, SIGNAL(startupCompleted()));
QEXPECT_FAIL("", "Uiready behavior broken in master.", Continue);
QVERIFY(spy.wait(1000));
QVERIFY(m_corona->isStartupCompleted());

View File

@ -55,6 +55,16 @@ private:
QTimer m_timer;
};
class SimpleContainment : public Plasma::Containment
{
Q_OBJECT
public:
explicit SimpleContainment(QObject *parent = 0, const QString &serviceId = QString(), uint appletId = 0);
private:
QTimer m_timer;
};
class CoronaTest : public QObject
{
Q_OBJECT

View File

@ -4,7 +4,7 @@ formfactor=0
immutability=1
lastScreen=0
location=0
plugin=simpleapplet
plugin=simplecontainment
[Containments][1][Applets][2]
immutability=1

View File

@ -281,6 +281,12 @@ void Containment::restoreContents(KConfigGroup &group)
d->createApplet(plugin, QVariantList(), appId);
}
for (Applet *applet : Containment::applets()) {
if (!applet->pluginInfo().isValid()) {
applet->updateConstraints(Plasma::Types::UiReadyConstraint);
}
}
}
Plasma::Types::ContainmentType Containment::containmentType() const
@ -536,7 +542,7 @@ QHash<QString, ContainmentActions *> &Containment::containmentActions()
bool Containment::isUiReady() const
{
return d->uiReady && Applet::d->started;
return d->uiReady && d->appletsUiReady && Applet::d->started;
}
void Containment::setActivity(const QString &activityId)

View File

@ -540,8 +540,9 @@ QList<Plasma::Containment *> CoronaPrivate::importLayout(const KConfigGroup &con
if (!containment->isUiReady() && containment->lastScreen() < q->numScreens()) {
++containmentsStarting;
QObject::connect(containment, &Plasma::Containment::uiReadyChanged, [=](bool ready) {
if (!ready)
if (!ready) {
return;
}
--containmentsStarting;
if (containmentsStarting <= 0) {

View File

@ -357,8 +357,9 @@ void AppletPrivate::scheduleConstraintsUpdate(Plasma::Types::Constraints c)
if (c & Plasma::Types::StartupCompletedConstraint) {
started = true;
if (q->isContainment())
if (q->isContainment()) {
qobject_cast<Containment*>(q)->d->setStarted();
}
}
pendingConstraints |= c;

View File

@ -47,7 +47,8 @@ ContainmentPrivate::ContainmentPrivate(Containment *c):
location(Types::Floating),
lastScreen(-1), // never had a screen
type(Plasma::Types::NoContainmentType),
uiReady(false)
uiReady(false),
appletsUiReady(false)
{
//if the parent is an applet (i.e we are the systray)
//we want to follow screen changed signals from the parent's containment
@ -210,7 +211,6 @@ Applet *ContainmentPrivate::createApplet(const QString &name, const QVariantList
qWarning() << "Applet" << name << "could not be loaded.";
applet = new Applet(0, QString(), id);
applet->setLaunchErrorMessage(i18n("Could not find requested component: %1", name));
applet->updateConstraints(Plasma::Types::UiReadyConstraint);
}
q->addApplet(applet);
@ -235,28 +235,30 @@ void ContainmentPrivate::setStarted()
if (!q->Applet::d->started) {
q->Applet::d->started = true;
if (uiReady)
if (uiReady) {
emit q->uiReadyChanged(true);
}
}
}
void ContainmentPrivate::setUiReady()
{
//if we are the containment and there is still some uncomplete applet, we're still incomplete
if (!uiReady && loadingApplets.isEmpty()) {
if (!uiReady) {
uiReady = true;
if (q->Applet::d->started)
if (q->Applet::d->started && appletsUiReady && loadingApplets.isEmpty()) {
emit q->uiReadyChanged(true);
}
}
}
void ContainmentPrivate::appletLoaded(Applet* applet)
{
loadingApplets.remove(q);
loadingApplets.remove(applet);
if (loadingApplets.isEmpty() && !uiReady) {
uiReady = true;
if (q->Applet::d->started) {
if (loadingApplets.isEmpty() && !appletsUiReady) {
appletsUiReady = true;
if (q->Applet::d->started && uiReady) {
emit q->uiReadyChanged(true);
}
}

View File

@ -91,6 +91,7 @@ public:
QString activityId;
Types::ContainmentType type;
bool uiReady : 1;
bool appletsUiReady : 1;
static const char defaultWallpaper[];
};