diff --git a/toplevel.h b/toplevel.h --- a/toplevel.h +++ b/toplevel.h @@ -737,11 +737,6 @@ return desktop() == d || /*desk == 0 ||*/ isOnAllDesktops(); } -inline bool Toplevel::isOnActivity(const QString &activity) const -{ - return activities().isEmpty() || activities().contains(activity); -} - inline bool Toplevel::isOnCurrentDesktop() const { return isOnDesktop(VirtualDesktopManager::self()->current()); diff --git a/toplevel.cpp b/toplevel.cpp --- a/toplevel.cpp +++ b/toplevel.cpp @@ -402,6 +402,27 @@ #endif } +bool Toplevel::isOnActivity(const QString &activity) const +{ + // Checking whether we are on an invalid, that is non-existing activity + if (Activities::self()) { + const auto &existingActivities = Activities::self()->all(); + const auto &clientActivities = activities(); + const bool atLeastOneValidActivity = + std::find_if( + clientActivities.cbegin(), clientActivities.cend(), + [&existingActivities] (const QString &clientActivity) { + return existingActivities.contains(clientActivity); + }) != clientActivities.cend(); + + if (!atLeastOneValidActivity) { + return true; + } + } + + return activities().isEmpty() || activities().contains(activity); +} + void Toplevel::elevate(bool elevate) { if (!effectWindow()) {