summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2018-08-30 14:38:26 +0300
committerPasi Petäjäjärvi <pasi.petajajarvi@qt.io>2018-09-04 07:07:47 +0000
commitcb54408ea54c9ef77b5b271f3c4cc49a749ea712 (patch)
treeeba4060e29a81444af35df32e61702c5c50cedd4
parent65b663a9be5d27cbb77b48f9e392c9463416383a (diff)
Fix updating QDBusAbstractInterface.interfaces model on property change
Currently properties are not updated when they are changing on the real interface. Change-Id: I960497bc6366ff5219e0536118f959ff07c33d12 Reviewed-by: Teemu Holappa <teemu.holappa@qt.io>
-rw-r--r--src/networksettings/qnetworksettingsinterfacemodel.cpp42
-rw-r--r--src/networksettings/qnetworksettingsinterfacemodel.h8
2 files changed, 50 insertions, 0 deletions
diff --git a/src/networksettings/qnetworksettingsinterfacemodel.cpp b/src/networksettings/qnetworksettingsinterfacemodel.cpp
index 72ea805..baff929 100644
--- a/src/networksettings/qnetworksettingsinterfacemodel.cpp
+++ b/src/networksettings/qnetworksettingsinterfacemodel.cpp
@@ -84,6 +84,7 @@ QVariant QNetworkSettingsInterfaceModel::data(const QModelIndex & index, int rol
void QNetworkSettingsInterfaceModel::append(QNetworkSettingsInterface* item)
{
item->setParent(this);
+ connectStateChanges(item);
beginInsertRows(QModelIndex(), rowCount(), rowCount());
m_items.append(item);
@@ -93,12 +94,19 @@ void QNetworkSettingsInterfaceModel::append(QNetworkSettingsInterface* item)
void QNetworkSettingsInterfaceModel::insert(int row, QNetworkSettingsInterface* item)
{
item->setParent(this);
+ connectStateChanges(item);
beginInsertRows(QModelIndex(), row, row);
m_items.insert(row, item);
endInsertRows();
}
+void QNetworkSettingsInterfaceModel::connectStateChanges(QNetworkSettingsInterface* item)
+{
+ connect(item, &QNetworkSettingsInterface::stateChanged, this, &QNetworkSettingsInterfaceModel::connectionStatusChanged);
+ connect(item, &QNetworkSettingsInterface::poweredChanged, this, &QNetworkSettingsInterfaceModel::poweredChanged);
+}
+
void QNetworkSettingsInterfaceModel::remove(int row)
{
beginRemoveRows(QModelIndex(), row, row);
@@ -106,9 +114,43 @@ void QNetworkSettingsInterfaceModel::remove(int row)
endRemoveRows();
}
+void QNetworkSettingsInterfaceModel::updated(int row)
+{
+ dataChanged(createIndex(row, 0), createIndex(row, 0));
+}
+
QList<QNetworkSettingsInterface*> QNetworkSettingsInterfaceModel::getModel()
{
return m_items;
}
+void QNetworkSettingsInterfaceModel::connectionStatusChanged()
+{
+ QNetworkSettingsInterface *s = qobject_cast<QNetworkSettingsInterface*>(sender());
+
+ int row = 0;
+ foreach (QNetworkSettingsInterface* item, m_items) {
+ if (item == s) {
+ updated(row);
+ break;
+ }
+ row++;
+ }
+
+}
+
+void QNetworkSettingsInterfaceModel::poweredChanged()
+{
+ QNetworkSettingsInterface *s = qobject_cast<QNetworkSettingsInterface*>(sender());
+ int row = 0;
+ foreach (QNetworkSettingsInterface* item, m_items) {
+ if (item == s) {
+ updated(row);
+ break;
+ }
+ row++;
+ }
+}
+
+
QT_END_NAMESPACE
diff --git a/src/networksettings/qnetworksettingsinterfacemodel.h b/src/networksettings/qnetworksettingsinterfacemodel.h
index 4ecebc7..82acc91 100644
--- a/src/networksettings/qnetworksettingsinterfacemodel.h
+++ b/src/networksettings/qnetworksettingsinterfacemodel.h
@@ -59,6 +59,14 @@ public:
Powered
};
+ void updated(int row);
+private Q_SLOTS:
+ void connectionStatusChanged();
+ void poweredChanged();
+
+private:
+ void connectStateChanges(QNetworkSettingsInterface* item);
+
private:
QList<QNetworkSettingsInterface*> m_items;
QHash<int, QByteArray> m_roleNames;