summary refs log tree commit diff
path: root/system-settings/plugins/ifcfg-rh/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'system-settings/plugins/ifcfg-rh/plugin.c')
-rw-r--r--system-settings/plugins/ifcfg-rh/plugin.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/system-settings/plugins/ifcfg-rh/plugin.c b/system-settings/plugins/ifcfg-rh/plugin.c
index e6dfa5bc..8dce0334 100644
--- a/system-settings/plugins/ifcfg-rh/plugin.c
+++ b/system-settings/plugins/ifcfg-rh/plugin.c
@@ -147,7 +147,6 @@ read_one_connection (SCPluginIfcfg *plugin, const char *filename)
 		if (nm_ifcfg_connection_get_unmanaged_spec (connection)) {
 			PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "Ignoring connection '%s' and its "
 			              "device due to NM_CONTROLLED/BRIDGE/VLAN.", cid);
-			g_signal_emit_by_name (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
 		} else {
 			/* Wait for the connection to become unmanaged once it knows the
 			 * UDI of it's device, if/when the device gets plugged in.
@@ -218,8 +217,6 @@ connection_changed_handler (SCPluginIfcfg *plugin,
 	g_return_if_fail (do_remove != NULL);
 	g_return_if_fail (do_new != NULL);
 
-	PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
-
 	new = (NMIfcfgConnection *) nm_ifcfg_connection_new (path, &error, &ignore_error);
 	if (!new) {
 		/* errors reading connection; remove it */
@@ -234,8 +231,19 @@ connection_changed_handler (SCPluginIfcfg *plugin,
 		return;
 	}
 
+
 	/* Successfully read connection changes */
 
+	/* When the connections are the same, nothing is done */
+	if (nm_connection_compare (NM_CONNECTION (connection),
+	                           NM_CONNECTION (new),
+	                           NM_SETTING_COMPARE_FLAG_EXACT)) {
+		g_object_unref (new);
+		return;
+	}
+
+	PLUGIN_PRINT (IFCFG_PLUGIN_NAME, "updating %s", path);
+
 	old_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (connection));
 	new_unmanaged = nm_ifcfg_connection_get_unmanaged_spec (NM_IFCFG_CONNECTION (new));
 
@@ -305,7 +313,9 @@ handle_connection_remove_or_new (SCPluginIfcfg *plugin,
 	if (do_new) {
 		connection = read_one_connection (plugin, path);
 		if (connection) {
-			if (!nm_ifcfg_connection_get_unmanaged_spec (connection))
+			if (nm_ifcfg_connection_get_unmanaged_spec (connection))
+				g_signal_emit_by_name (plugin, NM_SYSTEM_CONFIG_INTERFACE_UNMANAGED_SPECS_CHANGED);
+			else
 				g_signal_emit_by_name (plugin, NM_SYSTEM_CONFIG_INTERFACE_CONNECTION_ADDED, connection);
 		}
 	}