diff --git a/autotests/integration/activities_test.cpp b/autotests/integration/activities_test.cpp --- a/autotests/integration/activities_test.cpp +++ b/autotests/integration/activities_test.cpp @@ -125,15 +125,19 @@ QCOMPARE(client->window(), w); QVERIFY(client->isDecorated()); + //verify the test machine doesn't have the following activities used QVERIFY(!Activities::self()->all().contains(QStringLiteral("foo"))); QVERIFY(!Activities::self()->all().contains(QStringLiteral("bar"))); + + //setting the client to an invalid activities should result in the client being on all activities + client->setOnActivity(QStringLiteral("foo"), true); + QVERIFY(client->isOnAllActivities()); + QVERIFY(!client->activities().contains(QLatin1String("foo"))); + client->setOnActivities(QStringList{QStringLiteral("foo"), QStringLiteral("bar")}); - QEXPECT_FAIL("", "D1982", Continue); QVERIFY(client->isOnAllActivities()); - QEXPECT_FAIL("", "D1982", Continue); - QVERIFY(!client->isOnActivity(QStringLiteral("foo"))); - QEXPECT_FAIL("", "D1982", Continue); - QVERIFY(!client->isOnActivity(QStringLiteral("bar"))); + QVERIFY(!client->activities().contains(QLatin1String("foo"))); + QVERIFY(!client->activities().contains(QLatin1String("bar"))); // and destroy the window again xcb_unmap_window(c.data(), w); diff --git a/client.cpp b/client.cpp --- a/client.cpp +++ b/client.cpp @@ -1240,6 +1240,16 @@ newActivitiesList = joinedActivitiesList.split(u',', QString::SkipEmptyParts); QStringList allActivities = Activities::self()->all(); + + auto it = newActivitiesList.begin(); + while (it != newActivitiesList.end()) { + if (! allActivities.contains(*it)) { + it = newActivitiesList.erase(it); + } else { + it++; + } + } + if (// If we got the request to be on all activities explicitly newActivitiesList.isEmpty() || joinedActivitiesList == Activities::nullUuid() || // If we got a list of activities that covers all activities