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
}
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()
{
}
@@ -311,32 +324,24 @@ void DockRegistry::clear(bool deleteStaticAnchors)
void DockRegistry::clear(const QStringList &mainWindowsUniqueNames, bool deleteStaticAnchors)
{
QStringList affinities;
auto shouldClearDockWidget = [&affinities](const QString &affinityName) {
return affinities.isEmpty() || affinities.contains(affinityName) || affinityName.isEmpty();
};
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());
}
if (mainWindowsUniqueNames.isEmpty()) {
// Just clear everything
clear(deleteStaticAnchors);
return;
}
const QStringList affinities = QStringList() << affinitiesForMainWindowNames(mainWindowsUniqueNames)
<< QString(); // empty affinity also matches and will be closed
for (auto dw : qAsConst(m_dockWidgets)) {
if (shouldClearDockWidget(dw->affinityName())) {
if (affinities.contains(dw->affinityName())) {
dw->forceClose();
dw->lastPosition()->removePlaceholders();
}
}
for (auto mw : qAsConst(m_mainWindows)) {
if (shouldClearMainWindow(mw)) {
if (mainWindowsUniqueNames.contains(mw->uniqueName())) {
mw->multiSplitterLayout()->clear(deleteStaticAnchors);
}
}

View File

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