Blame SOURCES/evolution-data-server-3.8.5-vfolder-update.patch

6bbc61
diff -up evolution-data-server-3.8.5/camel/camel-vee-folder.c.vfolder-update evolution-data-server-3.8.5/camel/camel-vee-folder.c
6bbc61
--- evolution-data-server-3.8.5/camel/camel-vee-folder.c.vfolder-update	2013-07-23 13:57:49.000000000 +0200
6bbc61
+++ evolution-data-server-3.8.5/camel/camel-vee-folder.c	2014-01-23 15:47:41.876982760 +0100
6bbc61
@@ -1708,6 +1708,30 @@ camel_vee_folder_ignore_next_changed_eve
6bbc61
 }
6bbc61
 
6bbc61
 /**
6bbc61
+ * camel_vee_folder_remove_from_ignore_changed_event:
6bbc61
+ * @vfolder: a #CamelVeeFolder
6bbc61
+ * @subfolder: a #CamelFolder folder
6bbc61
+ *
6bbc61
+ * Make sure the next @subfolder-'s 'changed' event will not be silently ignored.
6bbc61
+ * This is a counter-part function of camel_vee_folder_ignore_next_changed_event(),
6bbc61
+ * when there was expected a change, which did not happen, to take back the previous
6bbc61
+ * ignore event request.
6bbc61
+ *
6bbc61
+ * Since: 3.10.4
6bbc61
+ **/
6bbc61
+void
6bbc61
+camel_vee_folder_remove_from_ignore_changed_event (CamelVeeFolder *vfolder,
6bbc61
+						   CamelFolder *subfolder)
6bbc61
+{
6bbc61
+	g_return_if_fail (CAMEL_IS_VEE_FOLDER (vfolder));
6bbc61
+	g_return_if_fail (subfolder != NULL);
6bbc61
+
6bbc61
+	g_rec_mutex_lock (&vfolder->priv->changed_lock);
6bbc61
+	g_hash_table_remove (vfolder->priv->ignore_changed, subfolder);
6bbc61
+	g_rec_mutex_unlock (&vfolder->priv->changed_lock);
6bbc61
+}
6bbc61
+
6bbc61
+/**
6bbc61
  * camel_vee_folder_lock:
6bbc61
  * @folder: a #CamelVeeFolder
6bbc61
  * @lock: lock type to lock
6bbc61
diff -up evolution-data-server-3.8.5/camel/camel-vee-folder.h.vfolder-update evolution-data-server-3.8.5/camel/camel-vee-folder.h
6bbc61
--- evolution-data-server-3.8.5/camel/camel-vee-folder.h.vfolder-update	2013-07-23 13:57:53.000000000 +0200
6bbc61
+++ evolution-data-server-3.8.5/camel/camel-vee-folder.h	2014-01-23 15:47:41.876982760 +0100
6bbc61
@@ -141,6 +141,9 @@ const gchar *	camel_vee_folder_get_expre
6bbc61
 void		camel_vee_folder_ignore_next_changed_event
6bbc61
 							(CamelVeeFolder *vfolder,
6bbc61
 							 CamelFolder *subfolder);
6bbc61
+void		camel_vee_folder_remove_from_ignore_changed_event
6bbc61
+							(CamelVeeFolder *vfolder,
6bbc61
+							 CamelFolder *subfolder);
6bbc61
 
6bbc61
 void		camel_vee_folder_lock			(CamelVeeFolder *folder,
6bbc61
 							 CamelVeeFolderLock lock);
6bbc61
diff -up evolution-data-server-3.8.5/camel/camel-vee-summary.c.vfolder-update evolution-data-server-3.8.5/camel/camel-vee-summary.c
6bbc61
--- evolution-data-server-3.8.5/camel/camel-vee-summary.c.vfolder-update	2013-07-23 13:57:42.000000000 +0200
6bbc61
+++ evolution-data-server-3.8.5/camel/camel-vee-summary.c	2014-01-23 15:47:41.876982760 +0100
6bbc61
@@ -191,10 +191,14 @@ vee_info_set_user_flag (CamelMessageInfo
6bbc61
 
6bbc61
 		res = camel_message_info_set_user_flag (rmi, name, value);
6bbc61
 
6bbc61
-		camel_message_info_free (rmi);
6bbc61
+		if (ignore_changes) {
6bbc61
+			if (res)
6bbc61
+				vee_summary_notify_mi_changed (vf, mi);
6bbc61
+			else
6bbc61
+				camel_vee_folder_remove_from_ignore_changed_event (vf, camel_folder_summary_get_folder (rmi->summary));
6bbc61
+		}
6bbc61
 
6bbc61
-		if (ignore_changes)
6bbc61
-			vee_summary_notify_mi_changed (vf, mi);
6bbc61
+		camel_message_info_free (rmi);
6bbc61
 	}
6bbc61
 
6bbc61
 	return res;
6bbc61
@@ -220,10 +224,15 @@ vee_info_set_user_tag (CamelMessageInfo
6bbc61
 			camel_vee_folder_ignore_next_changed_event (vf, camel_folder_summary_get_folder (rmi->summary));
6bbc61
 
6bbc61
 		res = camel_message_info_set_user_tag (rmi, name, value);
6bbc61
-		camel_message_info_free (rmi);
6bbc61
 
6bbc61
-		if (ignore_changes)
6bbc61
-			vee_summary_notify_mi_changed (vf, mi);
6bbc61
+		if (ignore_changes) {
6bbc61
+			if (res)
6bbc61
+				vee_summary_notify_mi_changed (vf, mi);
6bbc61
+			else
6bbc61
+				camel_vee_folder_remove_from_ignore_changed_event (vf, camel_folder_summary_get_folder (rmi->summary));
6bbc61
+		}
6bbc61
+
6bbc61
+		camel_message_info_free (rmi);
6bbc61
 	}
6bbc61
 
6bbc61
 	return res;
6bbc61
@@ -259,10 +268,14 @@ vee_info_set_flags (CamelMessageInfo *mi
6bbc61
 			camel_folder_summary_replace_flags (mi->summary, mi);
6bbc61
 		}
6bbc61
 
6bbc61
-		camel_message_info_free (rmi);
6bbc61
+		if (ignore_changes) {
6bbc61
+			if (res)
6bbc61
+				vee_summary_notify_mi_changed (vf, mi);
6bbc61
+			else
6bbc61
+				camel_vee_folder_remove_from_ignore_changed_event (vf, camel_folder_summary_get_folder (rmi->summary));
6bbc61
+		}
6bbc61
 
6bbc61
-		if (ignore_changes)
6bbc61
-			vee_summary_notify_mi_changed (vf, mi);
6bbc61
+		camel_message_info_free (rmi);
6bbc61
 	}
6bbc61
 
6bbc61
 	/* Do not call parent class' info_set_flags, to not do flood