Blame SOURCES/evolution-3.12.11-crash-in-ect-dispose.patch

4b6d7b
diff -up evolution-3.12.11/e-util/e-table-click-to-add.c.crash-in-ect-dispose evolution-3.12.11/e-util/e-table-click-to-add.c
4b6d7b
--- evolution-3.12.11/e-util/e-table-click-to-add.c.crash-in-ect-dispose	2014-10-09 11:06:21.000000000 +0200
4b6d7b
+++ evolution-3.12.11/e-util/e-table-click-to-add.c	2015-08-12 15:00:05.523831117 +0200
4b6d7b
@@ -397,6 +397,15 @@ finish_editing (ETableClickToAdd *etcta)
4b6d7b
 		g_object_run_dispose (G_OBJECT (etcta->row));
4b6d7b
 		etcta->row = NULL;
4b6d7b
 
4b6d7b
+		if (etcta->text) {
4b6d7b
+			g_object_run_dispose (G_OBJECT (etcta->text));
4b6d7b
+			etcta->text = NULL;
4b6d7b
+		}
4b6d7b
+		if (etcta->rect) {
4b6d7b
+			g_object_run_dispose (G_OBJECT (etcta->rect));
4b6d7b
+			etcta->rect = NULL;
4b6d7b
+		}
4b6d7b
+
4b6d7b
 		one = e_table_one_new (etcta->model);
4b6d7b
 		etcta_add_one (etcta, one);
4b6d7b
 		g_object_unref (one);
4b6d7b
diff -up evolution-3.12.11/e-util/gal-a11y-e-table-item.c.crash-in-ect-dispose evolution-3.12.11/e-util/gal-a11y-e-table-item.c
4b6d7b
--- evolution-3.12.11/e-util/gal-a11y-e-table-item.c.crash-in-ect-dispose	2014-10-20 15:28:40.000000000 +0200
4b6d7b
+++ evolution-3.12.11/e-util/gal-a11y-e-table-item.c	2015-08-12 15:01:16.629828006 +0200
4b6d7b
@@ -86,17 +86,39 @@ free_columns (ETableCol **columns)
4b6d7b
 }
4b6d7b
 
4b6d7b
 static void
4b6d7b
+table_item_cell_gone_cb (gpointer user_data,
4b6d7b
+			 GObject *gone_cell)
4b6d7b
+{
4b6d7b
+	GalA11yETableItem *a11y;
4b6d7b
+	GObject *old_cell;
4b6d7b
+
4b6d7b
+	a11y = GAL_A11Y_E_TABLE_ITEM (user_data);
4b6d7b
+
4b6d7b
+	old_cell = g_object_get_data (G_OBJECT (a11y), "gail-focus-object");
4b6d7b
+	if (old_cell == gone_cell)
4b6d7b
+		g_object_set_data (G_OBJECT (a11y), "gail-focus-object", NULL);
4b6d7b
+}
4b6d7b
+
4b6d7b
+static void
4b6d7b
 item_finalized (gpointer user_data,
4b6d7b
                 GObject *gone_item)
4b6d7b
 {
4b6d7b
 	GalA11yETableItem *a11y;
4b6d7b
 	GalA11yETableItemPrivate *priv;
4b6d7b
+	GObject *old_cell;
4b6d7b
 
4b6d7b
 	a11y = GAL_A11Y_E_TABLE_ITEM (user_data);
4b6d7b
 	priv = GET_PRIVATE (a11y);
4b6d7b
 
4b6d7b
 	priv->item = NULL;
4b6d7b
 
4b6d7b
+	old_cell = g_object_get_data (G_OBJECT (a11y), "gail-focus-object");
4b6d7b
+	if (old_cell) {
4b6d7b
+		g_object_weak_unref (G_OBJECT (old_cell), table_item_cell_gone_cb, a11y);
4b6d7b
+		g_object_unref (old_cell);
4b6d7b
+	}
4b6d7b
+	g_object_set_data (G_OBJECT (a11y), "gail-focus-object", NULL);
4b6d7b
+
4b6d7b
 	atk_state_set_add_state (priv->state_set, ATK_STATE_DEFUNCT);
4b6d7b
 	atk_object_notify_state_change (ATK_OBJECT (a11y), ATK_STATE_DEFUNCT, TRUE);
4b6d7b
 
4b6d7b
@@ -211,8 +233,10 @@ eti_a11y_reset_focus_object (GalA11yETab
4b6d7b
 	if (old_cell && GAL_A11Y_IS_E_CELL (old_cell))
4b6d7b
 		gal_a11y_e_cell_remove_state (
4b6d7b
 			GAL_A11Y_E_CELL (old_cell), ATK_STATE_FOCUSED, FALSE);
4b6d7b
-	if (old_cell)
4b6d7b
+	if (old_cell) {
4b6d7b
+		g_object_weak_unref (G_OBJECT (old_cell), table_item_cell_gone_cb, a11y);
4b6d7b
 		g_object_unref (old_cell);
4b6d7b
+	}
4b6d7b
 
4b6d7b
 	cell = eti_ref_at (ATK_TABLE (a11y), view_row, view_col);
4b6d7b
 
4b6d7b
@@ -220,6 +244,7 @@ eti_a11y_reset_focus_object (GalA11yETab
4b6d7b
 		g_object_set_data (G_OBJECT (a11y), "gail-focus-object", cell);
4b6d7b
 		gal_a11y_e_cell_add_state (
4b6d7b
 			GAL_A11Y_E_CELL (cell), ATK_STATE_FOCUSED, FALSE);
4b6d7b
+		g_object_weak_ref (G_OBJECT (cell), table_item_cell_gone_cb, a11y);
4b6d7b
 	} else
4b6d7b
 		g_object_set_data (G_OBJECT (a11y), "gail-focus-object", NULL);
4b6d7b
 
4b6d7b
@@ -359,23 +384,6 @@ eti_ref_accessible_at_point (AtkComponen
4b6d7b
 	}
4b6d7b
 }
4b6d7b
 
4b6d7b
-static void
4b6d7b
-cell_destroyed (gpointer data)
4b6d7b
-{
4b6d7b
-	GalA11yECell * cell;
4b6d7b
-
4b6d7b
-	g_return_if_fail (GAL_A11Y_IS_E_CELL (data));
4b6d7b
-	cell = GAL_A11Y_E_CELL (data);
4b6d7b
-
4b6d7b
-	g_return_if_fail (cell->item && G_IS_OBJECT (cell->item));
4b6d7b
-
4b6d7b
-	if (cell->item) {
4b6d7b
-		g_object_unref (cell->item);
4b6d7b
-		cell->item = NULL;
4b6d7b
-	}
4b6d7b
-
4b6d7b
-}
4b6d7b
-
4b6d7b
 /* atk table */
4b6d7b
 static AtkObject *
4b6d7b
 eti_ref_at (AtkTable *table,
4b6d7b
@@ -409,10 +417,6 @@ eti_ref_at (AtkTable *table,
4b6d7b
 			column,
4b6d7b
 			row);
4b6d7b
 		if (ATK_IS_OBJECT (ret)) {
4b6d7b
-			g_object_weak_ref (
4b6d7b
-				G_OBJECT (ret),
4b6d7b
-				(GWeakNotify) cell_destroyed,
4b6d7b
-				ret);
4b6d7b
 			/* if current cell is focused, add FOCUSED state */
4b6d7b
 			if (e_selection_model_cursor_row (item->selection) ==
4b6d7b
 				GAL_A11Y_E_CELL (ret)->row &&