From 0f382131294cae8dd8ff9b143ddbd110517759ee Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 11 Dec 2013 14:33:49 +0100 Subject: libnm-util: raise CHANGED signal in nm_connection_clear_secrets only on change Often, nm_connection_clear_secrets does have no consequences, because there is nothing to be cleared. Only raise a signal, if something actually changed. Signed-off-by: Thomas Haller --- libnm-util/nm-connection.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'libnm-util/nm-connection.c') diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c index 7a4e219cec..f62a2e9c55 100644 --- a/libnm-util/nm-connection.c +++ b/libnm-util/nm-connection.c @@ -841,15 +841,20 @@ nm_connection_clear_secrets (NMConnection *connection) { GHashTableIter iter; NMSetting *setting; + gboolean changed = FALSE; g_return_if_fail (NM_IS_CONNECTION (connection)); g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) - nm_setting_clear_secrets (setting); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) { + g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection); + changed |= _nm_setting_clear_secrets (setting); + g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection); + } g_signal_emit (connection, signals[SECRETS_CLEARED], 0); - g_signal_emit (connection, signals[CHANGED], 0); + if (changed) + g_signal_emit (connection, signals[CHANGED], 0); } /** @@ -868,15 +873,20 @@ nm_connection_clear_secrets_with_flags (NMConnection *connection, { GHashTableIter iter; NMSetting *setting; + gboolean changed = FALSE; g_return_if_fail (NM_IS_CONNECTION (connection)); g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) - nm_setting_clear_secrets_with_flags (setting, func, user_data); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) { + g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection); + changed |= _nm_setting_clear_secrets_with_flags (setting, func, user_data); + g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection); + } g_signal_emit (connection, signals[SECRETS_CLEARED], 0); - g_signal_emit (connection, signals[CHANGED], 0); + if (changed) + g_signal_emit (connection, signals[CHANGED], 0); } /** -- cgit v1.2.1