DockRegistry: Minor refactoring

- affinitiesForMainWindowNames() pulled to a separate method
- By appending QString() (empty affinity) to the affinity list it
simplifies the ifs, which reduces the lambdas to a single comparison.
- Remove the lambdas as they're used only once now and only have 1 comparison,
put the check directly in the if
This commit is contained in:
Sergio Martins
2020-03-01 12:45:17 +00:00
parent 947d638cb5
commit 2143b09206
2 changed files with 23 additions and 17 deletions

View File

@@ -51,6 +51,19 @@ DockRegistry::DockRegistry(QObject *parent)
#endif #endif
} }
QStringList DockRegistry::affinitiesForMainWindowNames(const QStringList &names) const
{
QStringList affinities;
for (auto mw : qAsConst(m_mainWindows)) {
if (names.contains(mw->uniqueName()) && !mw->affinityName().isEmpty()) {
affinities.append(mw->affinityName());
}
}
return affinities;
}
DockRegistry::~DockRegistry() DockRegistry::~DockRegistry()
{ {
} }
@@ -311,32 +324,24 @@ void DockRegistry::clear(bool deleteStaticAnchors)
void DockRegistry::clear(const QStringList &mainWindowsUniqueNames, bool deleteStaticAnchors) void DockRegistry::clear(const QStringList &mainWindowsUniqueNames, bool deleteStaticAnchors)
{ {
QStringList affinities; if (mainWindowsUniqueNames.isEmpty()) {
auto shouldClearDockWidget = [&affinities](const QString &affinityName) { // Just clear everything
return affinities.isEmpty() || affinities.contains(affinityName) || affinityName.isEmpty(); clear(deleteStaticAnchors);
}; return;
auto shouldClearMainWindow = [&mainWindowsUniqueNames](MainWindowBase *mw) {
return mainWindowsUniqueNames.isEmpty() || mainWindowsUniqueNames.contains(mw->uniqueName());
};
// first need to find the affinity names for the requested main windows
for (auto mw : qAsConst(m_mainWindows)) {
if (shouldClearMainWindow(mw)) {
if (!mw->affinityName().isEmpty())
affinities.append(mw->affinityName());
}
} }
const QStringList affinities = QStringList() << affinitiesForMainWindowNames(mainWindowsUniqueNames)
<< QString(); // empty affinity also matches and will be closed
for (auto dw : qAsConst(m_dockWidgets)) { for (auto dw : qAsConst(m_dockWidgets)) {
if (shouldClearDockWidget(dw->affinityName())) { if (affinities.contains(dw->affinityName())) {
dw->forceClose(); dw->forceClose();
dw->lastPosition()->removePlaceholders(); dw->lastPosition()->removePlaceholders();
} }
} }
for (auto mw : qAsConst(m_mainWindows)) { for (auto mw : qAsConst(m_mainWindows)) {
if (shouldClearMainWindow(mw)) { if (mainWindowsUniqueNames.contains(mw->uniqueName())) {
mw->multiSplitterLayout()->clear(deleteStaticAnchors); mw->multiSplitterLayout()->clear(deleteStaticAnchors);
} }
} }

View File

@@ -145,6 +145,7 @@ protected:
bool eventFilter(QObject *watched, QEvent *event) override; bool eventFilter(QObject *watched, QEvent *event) override;
private: private:
explicit DockRegistry(QObject *parent = nullptr); explicit DockRegistry(QObject *parent = nullptr);
QStringList affinitiesForMainWindowNames(const QStringList &names) const;
void maybeDelete(); void maybeDelete();
bool m_isProcessingAppQuitEvent = false; bool m_isProcessingAppQuitEvent = false;
DockWidgetBase::List m_dockWidgets; DockWidgetBase::List m_dockWidgets;