1
0
mirror of https://github.com/KDE/latte-dock.git synced 2025-03-27 14:50:21 +03:00

do not add signals during layout unloading

--When a layout unloads is setting for its
views a NULLPTR for managedLayout of its docks/panels.
In such case the signals that track the layout
changes for the view are not needed.
This commit is contained in:
Michail Vourlakos 2019-04-08 23:38:54 +03:00
parent 041ee941cd
commit 7fa83bfda8

View File

@ -1461,6 +1461,8 @@ void DockView::setManagedLayout(Layout *layout)
m_managedLayout = layout;
//! Do not add signals when layout = nullptr which is happening
//! during layout unloading for both Single and Multiple modes
if (m_managedLayout) {
//! Sometimes the activity isnt completely ready, by adding a delay
//! we try to catch up
@ -1471,58 +1473,58 @@ void DockView::setManagedLayout(Layout *layout)
emit activitiesChanged();
}
});
DockCorona *dockCorona = qobject_cast<DockCorona *>(this->corona());
if (dockCorona->layoutManager()->memoryUsage() == Dock::MultipleLayouts) {
connectionsManagedLayout[0] = connect(dockCorona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, [&]() {
if (m_managedLayout && m_visibility) {
qDebug() << "DOCK VIEW FROM LAYOUT (runningActivitiesChanged) ::: " << m_managedLayout->name()
<< " - activities: " << m_managedLayout->appliedActivities();
applyActivitiesToWindows();
emit activitiesChanged();
}
});
connectionsManagedLayout[1] = connect(m_managedLayout, &Layout::activitiesChanged, this, [&]() {
if (m_managedLayout) {
applyActivitiesToWindows();
emit activitiesChanged();
}
});
connectionsManagedLayout[2] = connect(dockCorona->layoutManager(), &LayoutManager::layoutsChanged, this, [&]() {
if (m_managedLayout) {
applyActivitiesToWindows();
emit activitiesChanged();
}
});
//!IMPORTANT!!! ::: This fixes a bug when closing an Activity all docks from all Activities are
//! disappearing! With this they reappear!!!
connectionsManagedLayout[3] = connect(this, &QWindow::visibleChanged, this, [&]() {
if (!isVisible() && m_managedLayout) {
QTimer::singleShot(100, [this]() {
if (m_managedLayout && containment() && !containment()->destroyed()) {
setVisible(true);
applyActivitiesToWindows();
emit activitiesChanged();
}
});
QTimer::singleShot(1500, [this]() {
if (m_managedLayout && containment() && !containment()->destroyed()) {
setVisible(true);
applyActivitiesToWindows();
emit activitiesChanged();
}
});
}
});
}
emit managedLayoutChanged();
}
DockCorona *dockCorona = qobject_cast<DockCorona *>(this->corona());
if (dockCorona->layoutManager()->memoryUsage() == Dock::MultipleLayouts) {
connectionsManagedLayout[0] = connect(dockCorona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, [&]() {
if (m_managedLayout && m_visibility) {
qDebug() << "DOCK VIEW FROM LAYOUT (runningActivitiesChanged) ::: " << m_managedLayout->name()
<< " - activities: " << m_managedLayout->appliedActivities();
applyActivitiesToWindows();
emit activitiesChanged();
}
});
connectionsManagedLayout[1] = connect(m_managedLayout, &Layout::activitiesChanged, this, [&]() {
if (m_managedLayout) {
applyActivitiesToWindows();
emit activitiesChanged();
}
});
connectionsManagedLayout[2] = connect(dockCorona->layoutManager(), &LayoutManager::layoutsChanged, this, [&]() {
if (m_managedLayout) {
applyActivitiesToWindows();
emit activitiesChanged();
}
});
//!IMPORTANT!!! ::: This fixes a bug when closing an Activity all docks from all Activities are
//! disappearing! With this they reappear!!!
connectionsManagedLayout[3] = connect(this, &QWindow::visibleChanged, this, [&]() {
if (!isVisible() && m_managedLayout) {
QTimer::singleShot(100, [this]() {
if (m_managedLayout && containment() && !containment()->destroyed()) {
setVisible(true);
applyActivitiesToWindows();
emit activitiesChanged();
}
});
QTimer::singleShot(1500, [this]() {
if (m_managedLayout && containment() && !containment()->destroyed()) {
setVisible(true);
applyActivitiesToWindows();
emit activitiesChanged();
}
});
}
});
}
emit managedLayoutChanged();
}
void DockView::moveToLayout(QString layoutName)