Resolves: rhbz#1030870 --- pyanaconda/nm.py | 15 +++++++++++++++ pyanaconda/ui/gui/spokes/network.py | 33 +++++++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 4 deletions(-)
diff --git a/pyanaconda/nm.py b/pyanaconda/nm.py index 0d1d4a1..ceeb8fb 100644 --- a/pyanaconda/nm.py +++ b/pyanaconda/nm.py @@ -707,6 +707,21 @@ def nm_add_connection(values): connection = proxy.AddConnection('(a{sa{sv}})', settings) return connection
+def nm_delete_connection(uuid): + """Delete connection specified by uuid. + + :param uuid: uuid of connection to be deleted + :type uuid: str + :return: True if connection was deleted, False if it was not found + :rtype: bool + """ + + settings_paths = _find_settings(uuid, "connection", "uuid") + if not settings_paths: + return False + proxy = _get_proxy(object_path=settings_paths[0], interface_name="org.freedesktop.NetworkManager.Settings.Connection") + settings = proxy.Delete() + def nm_update_settings_of_device(name, new_values): """Update setting of device.
diff --git a/pyanaconda/ui/gui/spokes/network.py b/pyanaconda/ui/gui/spokes/network.py index 0c822b7..fe89b7a 100644 --- a/pyanaconda/ui/gui/spokes/network.py +++ b/pyanaconda/ui/gui/spokes/network.py @@ -248,6 +248,11 @@ class DeviceConfiguration(object): iface = self.device.get_iface() else: iface = self.setting_value("connection", "interface-name") + if not iface: + hwaddr = self.setting_value("802-3-ethernet","mac-address") + if hwaddr: + hwaddr = ":".join("%02X" % b for b in hwaddr) + iface = nm.nm_hwaddr_to_device_name(hwaddr) return iface
def setting_value(self, key1, key2): @@ -312,6 +317,8 @@ class NetworkControlBox(GObject.GObject): self.builder.get_object("add_toolbutton").connect("clicked", self.on_add_device_clicked) self.builder.get_object("remove_toolbutton").set_sensitive(False) + self.builder.get_object("remove_toolbutton").connect("clicked", + self.on_remove_device_clicked)
not_supported = ["start_hotspot_button", "stop_hotspot_button", @@ -423,6 +430,10 @@ class NetworkControlBox(GObject.GObject): continue dev_cfg = DeviceConfiguration(con_uuid=uuid) if dev_cfg.device_type in self.supported_device_types: + # Configs for ethernet has been already added, + # this must be some slave. + if dev_cfg.device_type == NetworkManager.DeviceType.ETHERNET: + continue self.add_dev_cfg(dev_cfg)
# select the first device @@ -591,10 +602,19 @@ class NetworkControlBox(GObject.GObject): dev_type = model[ai][1] self.add_device(dev_type)
- def add_device(self, type): - log.info("network: adding device of type %s" % type) + def on_remove_device_clicked(self, *args): + selection = self.builder.get_object("treeview_devices").get_selection() + model, itr = selection.get_selected() + if not itr: + return None + dev_cfg = model[itr][DEVICES_COLUMN_OBJECT] + model.remove(itr) + nm.nm_delete_connection(dev_cfg.con_uuid) + + def add_device(self, ty): + log.info("network: adding device of type %s" % ty) self.kill_nmce(msg="Add device button clicked") - proc = subprocess.Popen(["nm-connection-editor", "--create", "--type=%s" % type]) + proc = subprocess.Popen(["nm-connection-editor", "--create", "--ty=%s" % ty]) self._running_nmce = proc
GLib.child_watch_add(proc.pid, self.on_nmce_adding_exited) @@ -694,7 +714,9 @@ class NetworkControlBox(GObject.GObject): # This should not concern wifi and ethernet devices, # just virtual devices e.g. vpn probably log.debug("network: GUI, device removed: %s" % (device.get_iface())) - self.dev_cfg(device=device).device = None + dev_cfg = self.dev_cfg(device=device) + if dev_cfg: + dev_cfg.device = None
def refresh_ui(self, state=None):
@@ -863,6 +885,7 @@ class NetworkControlBox(GObject.GObject): self.builder.get_object("label_wired_vlanid").hide() self.builder.get_object("heading_wired_parent").hide() self.builder.get_object("label_wired_parent").hide() + self.builder.get_object("remove_toolbutton").set_sensitive(False) elif dev_type in [NetworkManager.DeviceType.BOND, NetworkManager.DeviceType.TEAM]: notebook.set_current_page(0) @@ -872,6 +895,7 @@ class NetworkControlBox(GObject.GObject): self.builder.get_object("label_wired_vlanid").hide() self.builder.get_object("heading_wired_parent").hide() self.builder.get_object("label_wired_parent").hide() + self.builder.get_object("remove_toolbutton").set_sensitive(True) elif dev_type == NetworkManager.DeviceType.VLAN: notebook.set_current_page(0) self.builder.get_object("heading_wired_slaves").hide() @@ -880,6 +904,7 @@ class NetworkControlBox(GObject.GObject): self.builder.get_object("label_wired_vlanid").show() self.builder.get_object("heading_wired_parent").show() self.builder.get_object("label_wired_parent").show() + self.builder.get_object("remove_toolbutton").set_sensitive(True) elif dev_type == NetworkManager.DeviceType.WIFI: notebook.set_current_page(1) self.builder.get_object("button_wireless_options").set_sensitive(self.selected_ssid is not None)