diff --git a/src/cantor.h b/src/cantor.h --- a/src/cantor.h +++ b/src/cantor.h @@ -106,6 +106,7 @@ KParts::ReadWritePart* findPart(QWidget* widget); private: + QMap> m_pluginsVisibilityMap; QList m_parts; KParts::ReadWritePart* m_part; QTabWidget* m_tabWidget; diff --git a/src/cantor.cpp b/src/cantor.cpp --- a/src/cantor.cpp +++ b/src/cantor.cpp @@ -318,7 +318,20 @@ void CantorShell::activateWorksheet(int index) { QObject* pluginHandler=m_part->findChild(QLatin1String("PanelPluginHandler")); - disconnect(pluginHandler,SIGNAL(pluginsChanged()), this, SLOT(updatePanel())); + if (pluginHandler) + disconnect(pluginHandler,SIGNAL(pluginsChanged()), this, SLOT(updatePanel())); + + // Save part state before change worksheet + if (m_part) + { + QMap visiblePanelNames; + foreach (QDockWidget* doc, m_panels) + { + if (doc->widget()) + visiblePanelNames[doc->objectName()] = doc->widget()->isVisible(); + } + m_pluginsVisibilityMap[m_part] = visiblePanelNames; + } m_part=findPart(m_tabWidget->widget(index)); if(m_part) @@ -378,15 +391,16 @@ if(part) { m_parts.removeAll(part); + m_pluginsVisibilityMap.remove(part); delete part; } } } bool CantorShell::reallyClose(bool checkAllParts) { if(checkAllParts && m_parts.count() > 1) { bool modified = false; - foreach( KParts::ReadWritePart* const part, m_parts) + foreach( KParts::ReadWritePart* const part, m_parts) { if(part->isModified()) { modified = true; @@ -543,6 +557,7 @@ QDockWidget* last=nullptr; QList plugins=handler->plugins(); + const QMap& visiblePanelNames = m_pluginsVisibilityMap.value(m_part); foreach(Cantor::PanelPlugin* plugin, plugins) { if(plugin==nullptr) @@ -559,6 +574,15 @@ docker->setWidget(plugin->widget()); addDockWidget ( Qt::RightDockWidgetArea, docker ); + // Set visibility for dock from saved info + if (visiblePanelNames.contains(plugin->name())) + if (visiblePanelNames[plugin->name()]) + docker->show(); + else + docker->hide(); + else + docker->show(); + if(last!=nullptr) tabifyDockWidget(last, docker); last=docker;