ShellCorona is responsible for the memory management of views

Views shouldn't decide to delete themselves.
ShellCorona is responsible for managing them, it should be the one
managing them in all cases.

bring panelContainmentDestroyed and desktopContainmentDestroyed in line

REVIEW: 127225
wilder-5.14
David Edmundson 10 years ago committed by David Edmundson
parent 109f6cfca5
commit d0440dd820
  1. 1
      shell/panelview.cpp
  2. 7
      shell/shellcorona.cpp
  3. 2
      shell/shellcorona.h

@ -1029,7 +1029,6 @@ void PanelView::containmentChanged()
}
views.sync();
}
deleteLater();
}
}, Qt::QueuedConnection);
}

@ -1031,15 +1031,16 @@ void ShellCorona::createWaitingPanels()
panel->show();
cont->reactToScreenChange();
connect(cont, SIGNAL(destroyed(QObject*)), this, SLOT(containmentDeleted(QObject*)));
connect(cont, &QObject::destroyed, this, &ShellCorona::panelContainmentDestroyed);
}
m_waitingPanels = stillWaitingPanels;
emit availableScreenRectChanged();
}
void ShellCorona::containmentDeleted(QObject *cont)
void ShellCorona::panelContainmentDestroyed(QObject *cont)
{
m_panelViews.remove(static_cast<Plasma::Containment*>(cont));
auto view = m_panelViews.take(static_cast<Plasma::Containment*>(cont));
view->deleteLater();
emit availableScreenRectChanged();
}

@ -180,7 +180,6 @@ private Q_SLOTS:
void checkAddPanelAction(const QStringList &sycocaChanges = QStringList());
void addPanel();
void addPanel(QAction *action);
void containmentDeleted(QObject* cont);
void populateAddPanelsMenu();
void outputEnabledChanged();
@ -190,6 +189,7 @@ private Q_SLOTS:
void activityOpened();
void activityClosed();
void activityRemoved();
void panelContainmentDestroyed(QObject* cont);
void desktopContainmentDestroyed(QObject*);
void showOpenGLNotCompatibleWarning();
void alternativesVisibilityChanged(bool visible);

Loading…
Cancel
Save