diff options
author | Ville Voutilainen <ville.voutilainen@qt.io> | 2017-08-03 19:13:52 +0300 |
---|---|---|
committer | Ville Voutilainen <ville.voutilainen@qt.io> | 2017-08-04 10:21:09 +0000 |
commit | 1671759a9ef01b1e6533d4caf72cfd1ac3c9223e (patch) | |
tree | 3ffdf098e05b9a47769c429985b1393401177e4e /src/networksettings/qnetworksettingsservicemodel.cpp | |
parent | 132c80442f8820e3b82ab21f649c810bddd38d3f (diff) |
Introduce a placeholder for removed wired networks
Disable entering the wired network settings when none have been
seen. When a wired network is cable-disconnected, leave a placeholder
for it. When a new wired network is cable-connected, replace the placeholder
with that.
Task-number: QTBUG-60979
Change-Id: I8eeb20d25d765c7bb104ad2e698e4d0686c8dc2d
Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
Diffstat (limited to 'src/networksettings/qnetworksettingsservicemodel.cpp')
-rw-r--r-- | src/networksettings/qnetworksettingsservicemodel.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/networksettings/qnetworksettingsservicemodel.cpp b/src/networksettings/qnetworksettingsservicemodel.cpp index ce8ea86..f7a8a26 100644 --- a/src/networksettings/qnetworksettingsservicemodel.cpp +++ b/src/networksettings/qnetworksettingsservicemodel.cpp @@ -75,11 +75,31 @@ QVariant QNetworkSettingsServiceModel::data(const QModelIndex & index, int role) return QVariant(); } +bool QNetworkSettingsServiceModel::replacePlaceholder(QNetworkSettingsService* item) +{ + if (item->type() == QNetworkSettingsType::Wired) { + for (int i = 0; i < m_items.size(); ++i) { + QNetworkSettingsService* existing = m_items.at(i); + if (existing->placeholderState()) { + m_items.replace(i, item); + existing->deleteLater(); + updated(i); + return true; + } + } + } + return false; +} + void QNetworkSettingsServiceModel::append(QNetworkSettingsService* item) { item->setParent(this); connectStateChanges(item); + if ((item->type() == QNetworkSettingsType::Wired) && replacePlaceholder(item)) { + return; + } + beginResetModel(); m_items.append(item); endResetModel(); @@ -89,6 +109,11 @@ void QNetworkSettingsServiceModel::insert(int row, QNetworkSettingsService* item { item->setParent(this); connectStateChanges(item); + + if ((item->type() == QNetworkSettingsType::Wired) && replacePlaceholder(item)) { + return; + } + beginInsertRows(QModelIndex(), row, row); m_items.insert(row, item); endInsertRows(); @@ -105,6 +130,12 @@ void QNetworkSettingsServiceModel::connectStateChanges(QNetworkSettingsService* void QNetworkSettingsServiceModel::remove(int row) { QNetworkSettingsService* item = m_items.at(row); + if (item->type() == QNetworkSettingsType::Wired) { + /* Don't remove a wired service so that it doesn't become undefined in the UI. + This avoids problems when a cable is disconnected. */ + item->setPlaceholderState(true); + return; + } item->deleteLater(); beginRemoveRows(QModelIndex(), row, row); m_items.removeAt(row); @@ -262,3 +293,9 @@ int QNetworkSettingsServiceFilter::activeRow() const } return -1; } + +void QNetworkSettingsServiceFilter::setWiredNetworksAvailable(bool wiredNetworksAvailable) +{ + m_wiredNetworksAvailable = wiredNetworksAvailable; + emit wiredNetworksAvailableChanged(); +} |