diff --git a/libs/editor/connectioneditorbase.cpp b/libs/editor/connectioneditorbase.cpp --- a/libs/editor/connectioneditorbase.cpp +++ b/libs/editor/connectioneditorbase.cpp @@ -231,16 +231,16 @@ InfinibandWidget *infinibandWidget = new InfinibandWidget(m_connection->setting(NetworkManager::Setting::Infiniband), this); addSettingWidget(infinibandWidget, i18n("Infiniband")); } else if (type == NetworkManager::ConnectionSettings::Bond) { // Bond - BondWidget *bondWidget = new BondWidget(m_connection->uuid(), m_connection->setting(NetworkManager::Setting::Bond), this); + BondWidget *bondWidget = new BondWidget(m_connection->uuid(), m_connection->id(), m_connection->setting(NetworkManager::Setting::Bond), this); addSettingWidget(bondWidget, i18n("Bond")); } else if (type == NetworkManager::ConnectionSettings::Bridge) { // Bridge - BridgeWidget *bridgeWidget = new BridgeWidget(m_connection->uuid(), m_connection->setting(NetworkManager::Setting::Bridge), this); + BridgeWidget *bridgeWidget = new BridgeWidget(m_connection->uuid(), m_connection->id(), m_connection->setting(NetworkManager::Setting::Bridge), this); addSettingWidget(bridgeWidget, i18n("Bridge")); } else if (type == NetworkManager::ConnectionSettings::Vlan) { // Vlan VlanWidget *vlanWidget = new VlanWidget(m_connection->setting(NetworkManager::Setting::Vlan), this); addSettingWidget(vlanWidget, i18n("Vlan")); } else if (type == NetworkManager::ConnectionSettings::Team) { // Team - TeamWidget *teamWidget = new TeamWidget(m_connection->uuid(), m_connection->setting(NetworkManager::Setting::Team), this); + TeamWidget *teamWidget = new TeamWidget(m_connection->uuid(), m_connection->id(), m_connection->setting(NetworkManager::Setting::Team), this); addSettingWidget(teamWidget, i18n("Team")); } else if (type == NetworkManager::ConnectionSettings::WireGuard) { // WireGuard WireGuardInterfaceWidget *wireGuardInterfaceWidget = new WireGuardInterfaceWidget(m_connection->setting(NetworkManager::Setting::WireGuard), this); diff --git a/libs/editor/settings/bondwidget.h b/libs/editor/settings/bondwidget.h --- a/libs/editor/settings/bondwidget.h +++ b/libs/editor/settings/bondwidget.h @@ -39,7 +39,8 @@ { Q_OBJECT public: - explicit BondWidget(const QString & masterUuid, const NetworkManager::Setting::Ptr &setting = NetworkManager::Setting::Ptr(), + explicit BondWidget(const QString & masterUuid, const QString &masterId, + const NetworkManager::Setting::Ptr &setting = NetworkManager::Setting::Ptr(), QWidget* parent = nullptr, Qt::WindowFlags f = {}); ~BondWidget() override; @@ -61,6 +62,7 @@ private: QString m_uuid; + QString m_id; Ui::BondWidget * m_ui; QMenu * m_menu; }; diff --git a/libs/editor/settings/bondwidget.cpp b/libs/editor/settings/bondwidget.cpp --- a/libs/editor/settings/bondwidget.cpp +++ b/libs/editor/settings/bondwidget.cpp @@ -36,9 +36,11 @@ #define NM_SETTING_BOND_OPTION_MII_MONITOR "mii" #define NM_SETTING_BOND_OPTION_ARP_MONITOR "arp" -BondWidget::BondWidget(const QString & masterUuid, const NetworkManager::Setting::Ptr &setting, QWidget* parent, Qt::WindowFlags f): +BondWidget::BondWidget(const QString & masterUuid, const QString &masterId, + const NetworkManager::Setting::Ptr &setting, QWidget* parent, Qt::WindowFlags f): SettingWidget(setting, parent, f), m_uuid(masterUuid), + m_id(masterId), m_ui(new Ui::BondWidget) { m_ui->setupUi(this); @@ -277,7 +279,12 @@ for (const NetworkManager::Connection::Ptr &connection : NetworkManager::listConnections()) { NetworkManager::ConnectionSettings::Ptr settings = connection->settings(); - if (settings->master() == m_uuid && settings->slaveType() == type()) { + // The mapping from slave to master may be by uuid or name, try our best to + // figure out if we are master to the slave. + const QString master = settings->master(); + bool isSlave = ((master == m_uuid) || // by-uuid + (!m_id.isEmpty() && master == m_id)); // by-name + if (isSlave && (settings->slaveType() == type())) { const QString label = QString("%1 (%2)").arg(connection->name()).arg(connection->settings()->typeAsString(connection->settings()->connectionType())); QListWidgetItem * slaveItem = new QListWidgetItem(label, m_ui->bonds); slaveItem->setData(Qt::UserRole, connection->uuid()); diff --git a/libs/editor/settings/bridgewidget.h b/libs/editor/settings/bridgewidget.h --- a/libs/editor/settings/bridgewidget.h +++ b/libs/editor/settings/bridgewidget.h @@ -39,8 +39,9 @@ { Q_OBJECT public: - explicit BridgeWidget(const QString & masterUuid, const NetworkManager::Setting::Ptr &setting = NetworkManager::Setting::Ptr(), - QWidget* parent = nullptr, Qt::WindowFlags f = {}); + explicit BridgeWidget(const QString & masterUuid, const QString &masterId, + const NetworkManager::Setting::Ptr &setting = NetworkManager::Setting::Ptr(), + QWidget* parent = nullptr, Qt::WindowFlags f = {}); ~BridgeWidget() override; void loadConfig(const NetworkManager::Setting::Ptr &setting) override; @@ -61,6 +62,7 @@ private: QString m_uuid; + QString m_id; Ui::BridgeWidget * m_ui; QMenu * m_menu; }; diff --git a/libs/editor/settings/bridgewidget.cpp b/libs/editor/settings/bridgewidget.cpp --- a/libs/editor/settings/bridgewidget.cpp +++ b/libs/editor/settings/bridgewidget.cpp @@ -33,9 +33,12 @@ #include #include -BridgeWidget::BridgeWidget(const QString & masterUuid, const NetworkManager::Setting::Ptr &setting, QWidget* parent, Qt::WindowFlags f): +BridgeWidget::BridgeWidget(const QString & masterUuid, const QString &masterId, + const NetworkManager::Setting::Ptr &setting, + QWidget* parent, Qt::WindowFlags f): SettingWidget(setting, parent, f), m_uuid(masterUuid), + m_id(masterId), m_ui(new Ui::BridgeWidget) { m_ui->setupUi(this); @@ -227,7 +230,12 @@ for (const NetworkManager::Connection::Ptr &connection : NetworkManager::listConnections()) { NetworkManager::ConnectionSettings::Ptr settings = connection->settings(); - if (settings->master() == m_uuid && settings->slaveType() == type()) { + // The mapping from slave to master may be by uuid or name, try our best to + // figure out if we are master to the slave. + const QString master = settings->master(); + bool isSlave = ((master == m_uuid) || // by-uuid + (!m_id.isEmpty() && master == m_id)); // by-name + if (isSlave && (settings->slaveType() == type())) { const QString label = QString("%1 (%2)").arg(connection->name()).arg(connection->settings()->typeAsString(connection->settings()->connectionType())); QListWidgetItem * slaveItem = new QListWidgetItem(label, m_ui->bridges); slaveItem->setData(Qt::UserRole, connection->uuid()); diff --git a/libs/editor/settings/teamwidget.h b/libs/editor/settings/teamwidget.h --- a/libs/editor/settings/teamwidget.h +++ b/libs/editor/settings/teamwidget.h @@ -39,7 +39,8 @@ { Q_OBJECT public: - explicit TeamWidget(const QString & masterUuid, const NetworkManager::Setting::Ptr &setting = NetworkManager::Setting::Ptr(), + explicit TeamWidget(const QString & masterUuid, const QString &masterId, + const NetworkManager::Setting::Ptr &setting = NetworkManager::Setting::Ptr(), QWidget* parent = nullptr, Qt::WindowFlags f = {}); ~TeamWidget() override; @@ -63,6 +64,7 @@ private: QString m_uuid; + QString m_id; Ui::TeamWidget * m_ui; QMenu * m_menu; }; diff --git a/libs/editor/settings/teamwidget.cpp b/libs/editor/settings/teamwidget.cpp --- a/libs/editor/settings/teamwidget.cpp +++ b/libs/editor/settings/teamwidget.cpp @@ -35,9 +35,11 @@ #include #include -TeamWidget::TeamWidget(const QString & masterUuid, const NetworkManager::Setting::Ptr &setting, QWidget* parent, Qt::WindowFlags f): +TeamWidget::TeamWidget(const QString & masterUuid, const QString &masterId, + const NetworkManager::Setting::Ptr &setting, QWidget* parent, Qt::WindowFlags f): SettingWidget(setting, parent, f), m_uuid(masterUuid), + m_id(masterId), m_ui(new Ui::TeamWidget) { m_ui->setupUi(this); @@ -216,7 +218,12 @@ for (const NetworkManager::Connection::Ptr &connection : NetworkManager::listConnections()) { NetworkManager::ConnectionSettings::Ptr settings = connection->settings(); - if (settings->master() == m_uuid && settings->slaveType() == type()) { + // The mapping from slave to master may be by uuid or name, try our best to + // figure out if we are master to the slave. + const QString master = settings->master(); + bool isSlave = ((master == m_uuid) || // by-uuid + (!m_id.isEmpty() && master == m_id)); // by-name + if (isSlave && (settings->slaveType() == type())) { const QString label = QString("%1 (%2)").arg(connection->name()).arg(connection->settings()->typeAsString(connection->settings()->connectionType())); QListWidgetItem * slaveItem = new QListWidgetItem(label, m_ui->teams); slaveItem->setData(Qt::UserRole, connection->uuid());