diff --git a/libs/models/networkmodel.cpp b/libs/models/networkmodel.cpp --- a/libs/models/networkmodel.cpp +++ b/libs/models/networkmodel.cpp @@ -278,7 +278,7 @@ } item->setVpnState(state); } - item->updateDetails(); + item->invalidateDetails(); qCDebug(PLASMA_NM) << "Item " << item->name() << ": active connection state changed to " << item->connectionState(); } } @@ -382,7 +382,7 @@ item->setSsid(QString::fromUtf8(wirelessSetting->ssid())); } - item->updateDetails(); + item->invalidateDetails(); const int index = m_list.count(); beginInsertRows(QModelIndex(), index, index); @@ -465,7 +465,7 @@ item->setSsid(network->ssid()); item->setType(NetworkManager::ConnectionSettings::Wireless); item->setSecurityType(securityType); - item->updateDetails(); + item->invalidateDetails(); const int index = m_list.count(); beginInsertRows(QModelIndex(), index, index); @@ -491,7 +491,7 @@ if (createDuplicate) { NetworkModelItem *duplicatedItem = new NetworkModelItem(originalItem); - duplicatedItem->updateDetails(); + duplicatedItem->invalidateDetails(); const int index = m_list.count(); beginInsertRows(QModelIndex(), index, index); @@ -513,7 +513,7 @@ const int row = m_list.indexOf(item); if (row >= 0) { - item->updateDetails(); + item->invalidateDetails(); QModelIndex index = createIndex(row, 0); Q_EMIT dataChanged(index, index); } @@ -560,7 +560,7 @@ beginResetModel(); for (NetworkModelItem *item : m_list.returnItems(NetworkItemsList::ActiveConnection, activePtr->path())) { item->setConnectionState(state); - item->updateDetails(); + item->invalidateDetails(); qCDebug(PLASMA_NM) << "Item " << item->name() << ": active connection changed to " << item->connectionState(); } endResetModel(); @@ -771,7 +771,7 @@ beginResetModel(); for (NetworkModelItem *item : m_list.returnItems(NetworkItemsList::Device, device->uni())) { item->setDeviceState(state); - item->updateDetails(); + item->invalidateDetails(); // qCDebug(PLASMA_NM) << "Item " << item->name() << ": device state changed to " << item->deviceState(); } endResetModel(); diff --git a/libs/models/networkmodelitem.h b/libs/models/networkmodelitem.h --- a/libs/models/networkmodelitem.h +++ b/libs/models/networkmodelitem.h @@ -111,16 +111,19 @@ bool operator==(const NetworkModelItem *item) const; public Q_SLOTS: - void updateDetails(); + void invalidateDetails(); private: + void updateDetails() const; + QString m_activeConnectionPath; QString m_connectionPath; NetworkManager::ActiveConnection::State m_connectionState; QString m_devicePath; QString m_deviceName; NetworkManager::Device::State m_deviceState; - QStringList m_details; + mutable QStringList m_details; + mutable bool m_detailsValid; bool m_duplicate; NetworkManager::WirelessSetting::NetworkMode m_mode; QString m_name; diff --git a/libs/models/networkmodelitem.cpp b/libs/models/networkmodelitem.cpp --- a/libs/models/networkmodelitem.cpp +++ b/libs/models/networkmodelitem.cpp @@ -54,6 +54,7 @@ : QObject(parent) , m_connectionState(NetworkManager::ActiveConnection::Deactivated) , m_deviceState(NetworkManager::Device::UnknownState) + , m_detailsValid(false) , m_duplicate(false) , m_mode(NetworkManager::WirelessSetting::Infrastructure) , m_securityType(NetworkManager::NoneSecurity) @@ -68,6 +69,7 @@ : QObject(parent) , m_connectionPath(item->connectionPath()) , m_connectionState(NetworkManager::ActiveConnection::Deactivated) + , m_detailsValid(false) , m_duplicate(true) , m_mode(item->mode()) , m_name(item->name()) @@ -117,6 +119,9 @@ QStringList NetworkModelItem::details() const { + if (!m_detailsValid) { + updateDetails(); + } return m_details; } @@ -418,8 +423,14 @@ return false; } -void NetworkModelItem::updateDetails() +void NetworkModelItem::invalidateDetails() +{ + m_detailsValid = false; +} + +void NetworkModelItem::updateDetails() const { + m_detailsValid = true; m_details.clear(); if (itemType() == NetworkModelItem::UnavailableConnection) {