try to link containments to layouts

pull/2/head
Michail Vourlakos 7 years ago
parent b9f2e52ff6
commit f81433be8b

@ -111,7 +111,7 @@ DockCorona::~DockCorona()
m_docksScreenSyncTimer.stop();
cleanConfig();
//qDebug() << "corona config file:" << config()->name();
qDebug() << "Latte Corona - unload: containments ...";
while (!containments().isEmpty()) {
//deleting a containment will remove it from the list due to QObject::destroyed connect in Corona
@ -178,15 +178,17 @@ void DockCorona::unload()
//this form doesn't crash, while qDeleteAll(containments()) does
delete containments().first();
}
// m_layoutManager->currentLayout()->unloadDockViews();
}
void DockCorona::loadLatteLayout(QString layoutPath)
{
if (!layoutPath.isEmpty()) {
if (containments().size() > 0) {
qDebug() << "There are still containments present :::: " << containments().size();
}
if (!layoutPath.isEmpty() && containments().size() == 0) {
qDebug() << "corona is unloading the interface...";
unload();
// unload();
qDebug() << "loading layout:" << layoutPath;
loadLayout(layoutPath);

@ -114,6 +114,8 @@ DockView::DockView(Plasma::Corona *corona, QScreen *targetScreen, bool dockWindo
//containment()->actions()->removeAction(addWidgetsAction);
connect(this->containment(), SIGNAL(statusChanged(Plasma::Types::ItemStatus)), SLOT(statusChanged(Plasma::Types::ItemStatus)));
}, Qt::DirectConnection);
auto *dockCorona = qobject_cast<DockCorona *>(this->corona());
if (dockCorona) {

@ -54,16 +54,30 @@ Layout::~Layout()
//saveConfig();
m_layoutGroup.sync();
}
}
qDeleteAll(m_dockViews);
qDeleteAll(m_waitingDockViews);
m_dockViews.clear();
m_waitingDockViews.clear();
void Layout::unloadContainments()
{
if (!m_corona) {
return;
}
qDebug() << "Layout - " + name() + " unload: containments ... size: " << m_containments.size();
while (!m_containments.isEmpty()) {
Plasma::Containment *containment = m_containments.at(0);
m_containments.removeFirst();
delete containment;
}
}
void Layout::unloadDockViews()
{
qDebug() << "unload: dockViews ...";
if (!m_corona) {
return;
}
qDebug() << "Layout - " + name() + " unload: dockViews ... size: " << m_dockViews.size();
qDeleteAll(m_dockViews);
qDeleteAll(m_waitingDockViews);
@ -83,6 +97,15 @@ void Layout::init()
void Layout::initToCorona(DockCorona *corona)
{
m_corona = corona;
foreach (auto containment, m_corona->containments()) {
// QString layout = containment->config().readEntry("layout", QString());
addContainment(containment);
}
qDebug() << "Layout ::::: " << name() << " added contaiments ::: " << m_containments.size();
connect(m_corona, &Plasma::Corona::containmentAdded, this, &Layout::addContainment);
}
int Layout::version() const
@ -288,6 +311,16 @@ void Layout::saveConfig()
//! Containments Actions
void Layout::addContainment(Plasma::Containment *containment)
{
if (m_containments.contains(containment)) {
return;
}
m_containments.append(containment);
connect(containment, &QObject::destroyed, this, &Layout::containmentDestroyed);
}
QHash<const Plasma::Containment *, DockView *> *Layout::dockViews()
{
return &m_dockViews;
@ -317,26 +350,36 @@ void Layout::destroyedChanged(bool destroyed)
emit m_corona->availableScreenRegionChanged();
}
void Layout::dockContainmentDestroyed(QObject *cont)
void Layout::containmentDestroyed(QObject *cont)
{
if (!m_corona) {
return;
}
qDebug() << "dock containment destroyed!!!!";
auto view = m_dockViews.take(static_cast<Plasma::Containment *>(cont));
Plasma::Containment *containment = static_cast<Plasma::Containment *>(cont);
if (!view) {
view = m_waitingDockViews.take(static_cast<Plasma::Containment *>(cont));
}
if (containment) {
int containmentIndex = m_containments.indexOf(containment);
if (view) {
view->deleteLater();
}
if (containmentIndex >= 0) {
m_containments.removeAt(containmentIndex);
}
emit m_corona->docksCountChanged();
emit m_corona->availableScreenRectChanged();
emit m_corona->availableScreenRegionChanged();
qDebug() << "Layout " << name() << " :: containment destroyed!!!!";
auto view = m_dockViews.take(containment);
if (!view) {
view = m_waitingDockViews.take(containment);
}
if (view) {
view->deleteLater();
emit m_corona->docksCountChanged();
emit m_corona->availableScreenRectChanged();
emit m_corona->availableScreenRegionChanged();
}
}
}
void Layout::addDock(Plasma::Containment *containment, bool forceLoading, int expDockScreen)
@ -421,7 +464,7 @@ void Layout::addDock(Plasma::Containment *containment, bool forceLoading, int ex
dockView->setOnPrimary(true);
}
connect(containment, &QObject::destroyed, this, &Layout::dockContainmentDestroyed);
// connect(containment, &QObject::destroyed, this, &Layout::containmentDestroyed);
connect(containment, &Plasma::Applet::destroyedChanged, this, &Layout::destroyedChanged);
connect(containment, &Plasma::Applet::locationChanged, m_corona, &DockCorona::dockLocationChanged);
connect(containment, &Plasma::Containment::appletAlternativesRequested

@ -48,6 +48,7 @@ public:
~Layout() override;
void initToCorona(DockCorona *corona);
void unloadContainments();
void unloadDockViews();
bool showInMenu() const;
@ -93,8 +94,9 @@ private slots:
void loadConfig();
void saveConfig();
void addContainment(Plasma::Containment *containment);
void destroyedChanged(bool destroyed);
void dockContainmentDestroyed(QObject *cont);
void containmentDestroyed(QObject *cont);
private:
void init();
@ -117,6 +119,8 @@ private:
DockCorona *m_corona{nullptr};
KConfigGroup m_layoutGroup;
QList<Plasma::Containment *> m_containments;
QHash<const Plasma::Containment *, DockView *> m_dockViews;
QHash<const Plasma::Containment *, DockView *> m_waitingDockViews;
};

@ -313,6 +313,8 @@ bool LayoutManager::switchToLayout(QString layoutName)
qDebug() << layoutName << " - " << lPath;
if (m_currentLayout) {
m_currentLayout->unloadContainments();
m_currentLayout->unloadDockViews();
m_currentLayout->deleteLater();
}

@ -199,7 +199,7 @@ int main(int argc, char **argv)
std::signal(SIGINT, signal_handler);
KCrash::setDrKonqiEnabled(true);
KCrash::setFlags(KCrash::AutoRestart | KCrash::AlwaysDirectly);
//KCrash::setFlags(KCrash::AutoRestart | KCrash::AlwaysDirectly);
Latte::DockCorona corona(defaultLayoutOnStartup, layoutNameOnStartup);
KDBusService service(KDBusService::Unique);

Loading…
Cancel
Save