diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp --- a/shell/shellcorona.cpp +++ b/shell/shellcorona.cpp @@ -1906,7 +1906,8 @@ { Plasma::Containment *cont = nullptr; for (Plasma::Containment *c : m_desktopContainments.value(activity)) { - if (c->screen() == screenNum) { + //using lastScreen() instead of screen() catches also containments of activities that aren't the current one, so not assigned to a screen right now + if (c->lastScreen() == screenNum) { cont = c; if (containment == cont) { return; @@ -1918,8 +1919,6 @@ Q_ASSERT(!m_desktopContainments.value(activity).values().contains(containment)); if (cont) { - disconnect(cont, SIGNAL(destroyed(QObject*)), - this, SLOT(desktopContainmentDestroyed(QObject*))); cont->destroy(); } m_desktopContainments[activity].insert(containment); @@ -1934,7 +1933,8 @@ // members of Containment are not accessible anymore, // so keep ugly bookeeping by hand auto containment = static_cast(obj); - for (auto a : m_desktopContainments) { + //explicitly specify the range by reference, as we need to remove stuff from the sets + for (QSet &a : m_desktopContainments) { QMutableSetIterator it(a); while (it.hasNext()) { it.next();