+ if (old_hash)
+ {
+ /* now check if the merged hash has changed */
+ changed = FALSE;
+ if (g_hash_table_size (old_hash) != g_hash_table_size (data->color_hash))
+ changed = TRUE;
+ else
+ {
+ GHashTableIter iter;
+ gpointer key, value, new_value;
+
+ g_hash_table_iter_init (&iter, old_hash);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ new_value = g_hash_table_lookup (data->color_hash, key);
+ if (!new_value || !gdk_color_equal (value, new_value))
+ {
+ changed = TRUE;
+ break;
+ }
+ }
+ }
+
+ g_hash_table_unref (old_hash);
+ }
+ else
+ changed = TRUE;
+
+ return changed;