|
|
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 &&
|