File evolution-bsc930240-a11y-3-16-fixes.patch of Package evolution
From: Mike Gorse <mgorse@suse.com>
Date: Tue May 19 16:45:32 CDT 2015
Subject: [PATCH] Evolution a11y fixes
Fixes for bgo#741080, bgo#741083, and bgo#743404
Rebased from 3.16
--
diff -urN evolution-3.10.4.orig/addressbook/gui/widgets/ea-addressbook.c evolution-3.10.4/addressbook/gui/widgets/ea-addressbook.c
--- evolution-3.10.4.orig/addressbook/gui/widgets/ea-addressbook.c 2013-12-07 08:14:56.000000000 -0600
+++ evolution-3.10.4/addressbook/gui/widgets/ea-addressbook.c 2015-05-08 17:58:01.740564516 -0500
@@ -80,9 +80,10 @@
GnomeCanvasItem *item = GNOME_CANVAS_ITEM (object);
ea_event = atk_gobject_accessible_for_object (object);
if (event->type == GDK_FOCUS_CHANGE) {
- if ((event->focus_change.in) &&
- (E_IS_MINICARD (item->canvas->focused_item)))
- atk_focus_tracker_notify (ea_event);
+ if (E_IS_MINICARD (item->canvas->focused_item))
+ atk_object_notify_state_change (ea_event,
+ ATK_STATE_FOCUSED,
+ event->focus_change.in);
}
}
diff -urN evolution-3.10.4.orig/calendar/gui/ea-calendar.c evolution-3.10.4/calendar/gui/ea-calendar.c
--- evolution-3.10.4.orig/calendar/gui/ea-calendar.c 2015-05-08 17:57:43.811565688 -0500
+++ evolution-3.10.4/calendar/gui/ea-calendar.c 2015-05-08 17:58:01.741564516 -0500
@@ -136,15 +136,12 @@
canvas_item = GNOME_CANVAS_ITEM (object);
if (event->type == GDK_FOCUS_CHANGE) {
- if (event->focus_change.in) {
- ea_event =
- ea_calendar_helpers_get_accessible_for (canvas_item);
- if (!ea_event)
- /* not canvas item we want */
- return TRUE;
-
- }
- atk_focus_tracker_notify (ea_event);
+ ea_event =
+ ea_calendar_helpers_get_accessible_for (canvas_item);
+ if (!ea_event)
+ /* not canvas item we want */
+ return TRUE;
+ atk_object_notify_state_change (ea_event, ATK_STATE_FOCUSED, event->focus_change.in);
}
}
else if (E_IS_DAY_VIEW (object)) {
@@ -158,17 +155,12 @@
}
else if (E_IS_DAY_VIEW_MAIN_ITEM (object)) {
if (event->type == GDK_FOCUS_CHANGE) {
- if (event->focus_change.in) {
- /* we should emit focus on main item */
- ea_event = atk_gobject_accessible_for_object (object);
- }
- else
- /* focus out */
- ea_event = NULL;
+ /* we should emit focus on main item */
+ ea_event = atk_gobject_accessible_for_object (object);
#ifdef ACC_DEBUG
printf ("EvoAcc: focus notify on day main item %p\n", (gpointer) object);
#endif
- atk_focus_tracker_notify (ea_event);
+ atk_object_notify_state_change (ea_event, ATK_STATE_FOCUSED, event->focus_change.in);
}
} else if (E_IS_WEEK_VIEW (object)) {
EWeekView *week_view = E_WEEK_VIEW (object);
@@ -181,14 +173,9 @@
}
else if (E_IS_WEEK_VIEW_MAIN_ITEM (object)) {
if (event->type == GDK_FOCUS_CHANGE) {
- if (event->focus_change.in) {
- /* we should emit focus on main item */
- ea_event = atk_gobject_accessible_for_object (object);
- }
- else
- /* focus out */
- ea_event = NULL;
- atk_focus_tracker_notify (ea_event);
+ /* we should emit focus on main item */
+ ea_event = atk_gobject_accessible_for_object (object);
+ atk_object_notify_state_change (ea_event, ATK_STATE_FOCUSED, event->focus_change.in);
}
}
return TRUE;
diff -urN evolution-3.10.4.orig/calendar/gui/ea-day-view-main-item.c evolution-3.10.4/calendar/gui/ea-day-view-main-item.c
--- evolution-3.10.4.orig/calendar/gui/ea-day-view-main-item.c 2015-05-08 17:57:43.815565688 -0500
+++ evolution-3.10.4/calendar/gui/ea-day-view-main-item.c 2015-05-08 17:58:01.742564516 -0500
@@ -423,7 +423,6 @@
item_cell);
g_signal_emit_by_name (data, "selection_changed");
- atk_focus_tracker_notify (item_cell);
g_object_unref (item_cell);
}
@@ -775,8 +774,9 @@
ATK_OBJECT (ea_main_item),
index);
if (child)
- atk_component_get_size (
- ATK_COMPONENT (child), &width, &height);
+ atk_component_get_extents (
+ ATK_COMPONENT (child), NULL, NULL, &width, &height,
+ ATK_XY_SCREEN);
return width;
}
@@ -798,8 +798,9 @@
ATK_OBJECT (ea_main_item),
index);
if (child)
- atk_component_get_size (
- ATK_COMPONENT (child), &width, &height);
+ atk_component_get_extents (
+ ATK_COMPONENT (child), NULL, NULL, &width, &height,
+ ATK_XY_SCREEN);
return height;
}
diff -urN evolution-3.10.4.orig/calendar/gui/ea-week-view-main-item.c evolution-3.10.4/calendar/gui/ea-week-view-main-item.c
--- evolution-3.10.4.orig/calendar/gui/ea-week-view-main-item.c 2015-05-08 17:57:43.817565688 -0500
+++ evolution-3.10.4/calendar/gui/ea-week-view-main-item.c 2015-05-08 17:58:01.742564516 -0500
@@ -450,7 +450,6 @@
"active-descendant-changed",
item_cell);
g_signal_emit_by_name (data, "selection_changed");
- atk_focus_tracker_notify (item_cell);
g_object_unref (item_cell);
}
}
@@ -766,8 +765,9 @@
child = atk_object_ref_accessible_child (
ATK_OBJECT (ea_main_item), index);
if (child)
- atk_component_get_size (
- ATK_COMPONENT (child), &width, &height);
+ atk_component_get_extents (
+ ATK_COMPONENT (child), NULL, NULL, &width, &height,
+ ATK_XY_SCREEN);
return width;
}
@@ -787,8 +787,9 @@
child = atk_object_ref_accessible_child (
ATK_OBJECT (ea_main_item), index);
if (child)
- atk_component_get_size (
- ATK_COMPONENT (child), &width, &height);
+ atk_component_get_extents (
+ ATK_COMPONENT (child), NULL, NULL, &width, &height,
+ ATK_XY_SCREEN);
return height;
}
diff -urN evolution-3.10.4.orig/e-util/ea-calendar-cell.c evolution-3.10.4/e-util/ea-calendar-cell.c
--- evolution-3.10.4.orig/e-util/ea-calendar-cell.c 2015-05-08 17:57:43.836565686 -0500
+++ evolution-3.10.4/e-util/ea-calendar-cell.c 2015-05-08 17:58:01.742564516 -0500
@@ -233,20 +233,13 @@
return NULL;
if (!accessible->name) {
- AtkObject *atk_obj;
- EaCalendarItem *ea_calitem;
ECalendarCell *cell;
- gint day_index;
gint year, month, day;
gchar buffer[128];
cell = E_CALENDAR_CELL (g_obj);
- atk_obj = ea_calendar_cell_get_parent (accessible);
- ea_calitem = EA_CALENDAR_ITEM (atk_obj);
- day_index = atk_table_get_index_at (
- ATK_TABLE (ea_calitem),
- cell->row, cell->column);
- e_calendar_item_get_date_for_offset (cell->calitem, day_index,
+ e_calendar_item_get_date_for_cell (cell->calitem, cell->row,
+ cell->column,
&year, &month, &day);
g_snprintf (buffer, 128, "%d-%d-%d", year, month + 1, day);
@@ -336,7 +329,6 @@
ECalendarCell *cell;
ECalendarItem *calitem;
EaCalendarItem *ea_calitem;
- gint day_index;
gint year, month, day;
gint canvas_x, canvas_y, canvas_width, canvas_height;
@@ -353,10 +345,7 @@
calitem = cell->calitem;
atk_obj = atk_gobject_accessible_for_object (G_OBJECT (calitem));
ea_calitem = EA_CALENDAR_ITEM (atk_obj);
- day_index = atk_table_get_index_at (
- ATK_TABLE (ea_calitem),
- cell->row, cell->column);
- e_calendar_item_get_date_for_offset (calitem, day_index,
+ e_calendar_item_get_date_for_cell (calitem, cell->row, cell->column,
&year, &month, &day);
if (!e_calendar_item_get_day_extents (calitem,
diff -urN evolution-3.10.4.orig/e-util/ea-calendar-item.c evolution-3.10.4/e-util/ea-calendar-item.c
--- evolution-3.10.4.orig/e-util/ea-calendar-item.c 2013-12-07 08:14:35.000000000 -0600
+++ evolution-3.10.4/e-util/ea-calendar-item.c 2015-05-08 17:58:01.743564516 -0500
@@ -1144,7 +1144,7 @@
calitem = E_CALENDAR_ITEM (g_obj);
- index = atk_table_get_index_at (ATK_TABLE (ea_calitem), row, 0);
+ index = table_interface_get_index_at (ATK_TABLE (ea_calitem), row, 0);
if (!e_calendar_item_get_date_for_offset (calitem, index,
&year, &month, &day))
return FALSE;
@@ -1298,6 +1298,19 @@
return TRUE;
}
+gboolean
+e_calendar_item_get_date_for_cell (ECalendarItem *calitem,
+ gint row,
+ gint column,
+ gint *year,
+ gint *month,
+ gint *day)
+{
+ gint index = table_interface_get_index_at (ATK_TABLE (calitem), row, column);
+
+ return e_calendar_item_get_date_for_offset (calitem, index, year, month, day);
+}
+
/* the arg month is from 0 to 11 */
static gboolean
e_calendar_item_get_offset_for_date (ECalendarItem *calitem,
diff -urN evolution-3.10.4.orig/e-util/ea-calendar-item.h evolution-3.10.4/e-util/ea-calendar-item.h
--- evolution-3.10.4.orig/e-util/ea-calendar-item.h 2013-12-07 08:14:45.000000000 -0600
+++ evolution-3.10.4/e-util/ea-calendar-item.h 2015-05-08 17:58:01.743564516 -0500
@@ -63,6 +63,11 @@
gint day_offset,
gint *year, gint *month,
gint *day);
+gboolean e_calendar_item_get_date_for_cell (ECalendarItem *calitem,
+ gint row,
+ gint column,
+ gint *year, gint *month,
+ gint *day);
gint e_calendar_item_get_n_days_from_week_start (ECalendarItem *calitem,
gint year, gint month);
diff -urN evolution-3.10.4.orig/e-util/e-cell-text.c evolution-3.10.4/e-util/e-cell-text.c
--- evolution-3.10.4.orig/e-util/e-cell-text.c 2013-12-07 08:14:40.000000000 -0600
+++ evolution-3.10.4/e-util/e-cell-text.c 2015-05-08 17:58:03.567564397 -0500
@@ -48,6 +48,8 @@
#include <libgnomecanvas/libgnomecanvas.h>
+#include "gal-a11y-e-cell-registry.h"
+#include "gal-a11y-e-cell-text.h"
#include "e-canvas.h"
#include "e-cell-text.h"
#include "e-table-item.h"
@@ -1703,6 +1705,8 @@
use_ellipsis_default = FALSE;
}
}
+
+ gal_a11y_e_cell_registry_add_cell_type (NULL, E_TYPE_CELL_TEXT, gal_a11y_e_cell_text_new);
}
/* IM Context Callbacks */
diff -urN evolution-3.10.4.orig/e-util/e-cell-toggle.c evolution-3.10.4/e-util/e-cell-toggle.c
--- evolution-3.10.4.orig/e-util/e-cell-toggle.c 2013-12-07 08:14:37.000000000 -0600
+++ evolution-3.10.4/e-util/e-cell-toggle.c 2015-05-08 17:58:06.176564227 -0500
@@ -44,6 +44,7 @@
struct _ECellTogglePrivate {
gchar **icon_names;
+ gchar **icon_descriptions;
guint n_icon_names;
GdkPixbuf *empty;
@@ -128,6 +129,12 @@
g_free (priv->icon_names[ii]);
g_free (priv->icon_names);
+ if (priv->icon_descriptions) {
+ for (ii = 0; ii < priv->n_icon_names; ii++)
+ g_free (priv->icon_descriptions[ii]);
+ g_free (priv->icon_descriptions);
+ }
+
g_ptr_array_free (priv->pixbufs, TRUE);
/* Chain up to parent's finalize() method. */
@@ -467,3 +474,36 @@
return cell_toggle->priv->pixbufs;
}
+
+void
+e_cell_toggle_set_icon_descriptions (ECellToggle *cell_toggle,
+ const gchar **descriptions,
+ gint n_descriptions)
+{
+ gint ii;
+ gint n_icon_names;
+
+ g_return_if_fail (E_IS_CELL_TOGGLE (cell_toggle));
+ g_return_if_fail (cell_toggle->priv->icon_descriptions == NULL);
+ g_return_if_fail (n_descriptions == cell_toggle->priv->n_icon_names);
+
+ n_icon_names = cell_toggle->priv->n_icon_names;
+
+ cell_toggle->priv->icon_descriptions = g_new (gchar *, n_icon_names);
+
+ for (ii = 0; ii < n_icon_names; ii++)
+ cell_toggle->priv->icon_descriptions[ii] = g_strdup (descriptions[ii]);
+}
+
+const gchar *
+e_cell_toggle_get_icon_description (ECellToggle *cell_toggle,
+ gint n)
+{
+ if (n < 0 || n >= cell_toggle->priv->n_icon_names)
+ return NULL;
+
+ if (!cell_toggle->priv->icon_descriptions)
+ return NULL;
+
+ return cell_toggle->priv->icon_descriptions[n];
+}
diff -urN evolution-3.10.4.orig/e-util/e-cell-toggle.h evolution-3.10.4/e-util/e-cell-toggle.h
--- evolution-3.10.4.orig/e-util/e-cell-toggle.h 2013-12-07 08:14:50.000000000 -0600
+++ evolution-3.10.4/e-util/e-cell-toggle.h 2015-05-08 17:58:06.176564227 -0500
@@ -77,6 +77,12 @@
guint n_icon_names);
GPtrArray * e_cell_toggle_get_pixbufs (ECellToggle *cell_toggle);
+void e_cell_toggle_set_icon_descriptions (ECellToggle *cell_toggle,
+ const gchar **descriptions,
+ gint n_descriptions);
+
+const gchar * e_cell_toggle_get_icon_description (ECellToggle *cell_toggle,
+ gint n);
G_END_DECLS
#endif /* E_CELL_TOGGLE_H */
diff -urN evolution-3.10.4.orig/e-util/gal-a11y-e-cell.c evolution-3.10.4/e-util/gal-a11y-e-cell.c
--- evolution-3.10.4.orig/e-util/gal-a11y-e-cell.c 2013-12-07 08:14:40.000000000 -0600
+++ evolution-3.10.4/e-util/gal-a11y-e-cell.c 2015-05-08 17:58:01.743564516 -0500
@@ -185,9 +185,9 @@
width, height);
}
- atk_component_get_position (
+ atk_component_get_extents (
ATK_COMPONENT (a11y->parent),
- x, y, coord_type);
+ x, y, NULL, NULL, coord_type);
if (x && *x != G_MININT)
*x += xval;
if (y && *y != G_MININT)
diff -urN evolution-3.10.4.orig/e-util/gal-a11y-e-cell-text.c evolution-3.10.4/e-util/gal-a11y-e-cell-text.c
--- evolution-3.10.4.orig/e-util/gal-a11y-e-cell-text.c 1969-12-31 18:00:00.000000000 -0600
+++ evolution-3.10.4/e-util/gal-a11y-e-cell-text.c 2015-05-08 17:58:03.567564397 -0500
@@ -0,0 +1,725 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Christopher James Lahey <clahey@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <atk/atk.h>
+
+#include "e-util/e-cell-text.h"
+#include <glib/gi18n.h>
+
+#include "gal-a11y-e-cell-text.h"
+
+#define CS_CLASS(a11y) (G_TYPE_INSTANCE_GET_CLASS ((a11y), C_TYPE_STREAM, GalA11yECellTextClass))
+static AtkObjectClass *parent_class;
+#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
+
+/* Static functions */
+static void
+ect_dispose (GObject *object)
+{
+ GObjectClass *g_class;
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (object);
+ GalA11yECellText *gaet = GAL_A11Y_E_CELL_TEXT (object);
+
+ if (gaet->inserted_id != 0) {
+ ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
+
+ if (ect) {
+ g_signal_handler_disconnect (ect, gaet->inserted_id);
+ g_signal_handler_disconnect (ect, gaet->deleted_id);
+ }
+
+ gaet->inserted_id = 0;
+ gaet->deleted_id = 0;
+ }
+
+ g_class = (GObjectClass *)parent_class;
+ if (g_class->dispose)
+ g_class->dispose (object);
+
+}
+
+static gboolean
+ect_check (gpointer a11y)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
+ ETableItem *item = gaec->item;
+
+ g_return_val_if_fail ((gaec->item != NULL), FALSE);
+ g_return_val_if_fail ((gaec->cell_view != NULL), FALSE);
+ g_return_val_if_fail ((gaec->cell_view->ecell != NULL), FALSE);
+
+ if (atk_state_set_contains_state (gaec->state_set, ATK_STATE_DEFUNCT))
+ return FALSE;
+
+ if (gaec->row < 0 || gaec->row >= item->rows
+ || gaec->view_col <0 || gaec->view_col >= item->cols
+ || gaec->model_col <0 || gaec->model_col >= e_table_model_column_count (item->table_model))
+ return FALSE;
+
+ if (!E_IS_CELL_TEXT (gaec->cell_view->ecell))
+ return FALSE;
+
+ return TRUE;
+}
+
+static G_CONST_RETURN gchar *
+ect_get_name (AtkObject * a11y)
+{
+ GalA11yECell *gaec;
+ gchar *name;
+
+ if (!ect_check (a11y))
+ return NULL;
+
+ gaec = GAL_A11Y_E_CELL (a11y);
+ name = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+ if (name != NULL) {
+ ATK_OBJECT_CLASS (parent_class)->set_name (a11y, name);
+ g_free (name);
+ }
+
+ if (a11y->name != NULL && strcmp (a11y->name, "")) {
+ return a11y->name;
+ } else {
+ return parent_class->get_name (a11y);
+ }
+}
+
+static gchar *
+ect_get_text (AtkText *text,
+ gint start_offset,
+ gint end_offset)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gchar *full_text;
+ gchar *ret_val;
+
+ if (!ect_check (text))
+ return NULL;
+
+ full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+
+ if (end_offset == -1)
+ end_offset = strlen (full_text);
+ else
+ end_offset = g_utf8_offset_to_pointer (full_text, end_offset) - full_text;
+
+ start_offset = g_utf8_offset_to_pointer (full_text, start_offset) - full_text;
+
+ ret_val = g_strndup (full_text + start_offset, end_offset - start_offset);
+
+ g_free (full_text);
+
+ return ret_val;
+}
+
+static gchar *
+ect_get_text_after_offset (AtkText *text,
+ gint offset,
+ AtkTextBoundary boundary_type,
+ gint *start_offset,
+ gint *end_offset)
+{
+ /* Unimplemented */
+ return NULL;
+}
+
+static gchar *
+ect_get_text_at_offset (AtkText *text,
+ gint offset,
+ AtkTextBoundary boundary_type,
+ gint *start_offset,
+ gint *end_offset)
+{
+ /* Unimplemented */
+ return NULL;
+}
+
+static gunichar
+ect_get_character_at_offset (AtkText *text,
+ gint offset)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gunichar ret_val;
+ gchar *at_offset;
+ gchar *full_text;
+
+ if (!ect_check (text))
+ return -1;
+
+ full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+ at_offset = g_utf8_offset_to_pointer (full_text, offset);
+ ret_val = g_utf8_get_char_validated (at_offset, -1);
+ g_free (full_text);
+
+ return ret_val;
+}
+
+static gchar *
+ect_get_text_before_offset (AtkText *text,
+ gint offset,
+ AtkTextBoundary boundary_type,
+ gint *start_offset,
+ gint *end_offset)
+{
+ /* Unimplemented */
+ return NULL;
+}
+
+static gint
+ect_get_caret_offset (AtkText *text)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gint start, end;
+
+ if (!ect_check (text))
+ return -1;
+
+ if (e_cell_text_get_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ &start, &end)) {
+ gchar *full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+ end = g_utf8_pointer_to_offset (full_text, full_text + end);
+ g_free (full_text);
+
+ return end;
+ }
+ else
+ return -1;
+}
+
+static AtkAttributeSet*
+ect_get_run_attributes (AtkText *text,
+ gint offset,
+ gint *start_offset,
+ gint *end_offset)
+{
+ /* Unimplemented */
+ return NULL;
+}
+
+static AtkAttributeSet*
+ect_get_default_attributes (AtkText *text)
+{
+ /* Unimplemented */
+ return NULL;
+}
+
+static void
+ect_get_character_extents (AtkText *text,
+ gint offset,
+ gint *x,
+ gint *y,
+ gint *width,
+ gint *height,
+ AtkCoordType coords)
+{
+ /* Unimplemented */
+}
+
+static gint
+ect_get_character_count (AtkText *text)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gint ret_val;
+ gchar *full_text;
+
+ if (!ect_check (text))
+ return -1;
+
+ full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+
+ ret_val = g_utf8_strlen (full_text, -1);
+ g_free (full_text);
+ return ret_val;
+}
+
+static gint
+ect_get_offset_at_point (AtkText *text,
+ gint x,
+ gint y,
+ AtkCoordType coords)
+{
+ /* Unimplemented */
+ return 0;
+}
+
+static gint
+ect_get_n_selections (AtkText *text)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gint selection_start, selection_end;
+
+ if (!ect_check (text))
+ return 0;
+
+ if (e_cell_text_get_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ &selection_start,
+ &selection_end)
+ && selection_start != selection_end)
+ return 1;
+ return 0;
+}
+
+static gchar *
+ect_get_selection (AtkText *text,
+ gint selection_num,
+ gint *start_offset,
+ gint *end_offset)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gchar *ret_val;
+ gint selection_start, selection_end;
+
+ if (selection_num == 0
+ && e_cell_text_get_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ &selection_start,
+ &selection_end)
+ && selection_start != selection_end) {
+ gint real_start, real_end, len;
+ gchar *full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+ len = strlen (full_text);
+ real_start = MIN (selection_start, selection_end);
+ real_end = MAX (selection_start, selection_end);
+ real_start = MIN (MAX (0, real_start), len);
+ real_end = MIN (MAX (0, real_end), len);
+
+ ret_val = g_strndup (full_text + real_start, real_end - real_start);
+
+ real_start = g_utf8_pointer_to_offset (full_text, full_text + real_start);
+ real_end = g_utf8_pointer_to_offset (full_text, full_text + real_end);
+
+ if (start_offset)
+ *start_offset = real_start;
+ if (end_offset)
+ *end_offset = real_end;
+ g_free (full_text);
+ } else {
+ if (start_offset)
+ *start_offset = 0;
+ if (end_offset)
+ *end_offset = 0;
+ ret_val = NULL;
+ }
+
+ return ret_val;
+}
+
+static gboolean
+ect_add_selection (AtkText *text,
+ gint start_offset,
+ gint end_offset)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+
+ if (start_offset != end_offset) {
+ gint real_start, real_end, len;
+ gchar *full_text =
+ e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+
+ len = g_utf8_strlen (full_text, -1);
+ if (end_offset == -1)
+ end_offset = len;
+
+ real_start = MIN (start_offset, end_offset);
+ real_end = MAX (start_offset, end_offset);
+
+ real_start = MIN (MAX (0, real_start), len);
+ real_end = MIN (MAX (0, real_end), len);
+
+ real_start = g_utf8_offset_to_pointer (full_text, real_start) - full_text;
+ real_end = g_utf8_offset_to_pointer (full_text, real_end) - full_text;
+ g_free (full_text);
+
+ if (e_cell_text_set_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ real_start, real_end)) {
+ g_signal_emit_by_name (ATK_OBJECT(text), "text_selection_changed");
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean
+ect_remove_selection (AtkText *text,
+ gint selection_num)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gint selection_start, selection_end;
+
+ if (selection_num == 0
+ && e_cell_text_get_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ &selection_start,
+ &selection_end)
+ && selection_start != selection_end
+ && e_cell_text_set_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ selection_end, selection_end)) {
+ g_signal_emit_by_name (ATK_OBJECT(text), "text_selection_changed");
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static gboolean
+ect_set_selection (AtkText *text,
+ gint selection_num,
+ gint start_offset,
+ gint end_offset)
+{
+ if (selection_num == 0) {
+ atk_text_add_selection (text, start_offset, end_offset);
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static gboolean
+ect_set_caret_offset (AtkText *text,
+ gint offset)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ gchar *full_text;
+ gint len;
+
+ full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+
+ len = g_utf8_strlen (full_text, -1);
+ if (offset == -1)
+ offset = len;
+ else
+ offset = MIN (MAX (0, offset), len);
+
+ offset = g_utf8_offset_to_pointer (full_text, offset) - full_text;
+
+ g_free (full_text);
+
+ return e_cell_text_set_selection (gaec->cell_view,
+ gaec->view_col, gaec->row,
+ offset, offset);
+}
+
+static gboolean
+ect_set_run_attributes (AtkEditableText *text,
+ AtkAttributeSet *attrib_set,
+ gint start_offset,
+ gint end_offset)
+{
+ /* Unimplemented */
+ return FALSE;
+}
+
+static void
+ect_set_text_contents (AtkEditableText *text,
+ const gchar *string)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
+
+ e_cell_text_set_value (ect, gaec->item->table_model, gaec->model_col, gaec->row, string);
+ e_table_item_enter_edit (gaec->item, gaec->view_col, gaec->row);
+}
+
+static void
+ect_insert_text (AtkEditableText *text,
+ const gchar *string,
+ gint length,
+ gint *position)
+{
+ /* Utf8 unimplemented */
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
+
+ gchar *full_text = e_cell_text_get_text_by_view (gaec->cell_view, gaec->model_col, gaec->row);
+ gchar *result = g_strdup_printf ("%.*s%.*s%s", *position, full_text, length, string, full_text + *position);
+
+ e_cell_text_set_value (ect, gaec->item->table_model, gaec->model_col, gaec->row, result);
+
+ *position += length;
+
+ g_free (result);
+ g_free (full_text);
+}
+
+static void
+ect_copy_text (AtkEditableText *text,
+ gint start_pos,
+ gint end_pos)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ if (start_pos != end_pos
+ && atk_text_set_selection (ATK_TEXT (text), 0, start_pos, end_pos))
+ e_cell_text_copy_clipboard (gaec->cell_view,
+ gaec->view_col, gaec->row);
+}
+
+static void
+ect_delete_text (AtkEditableText *text,
+ gint start_pos,
+ gint end_pos)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+ if (start_pos != end_pos
+ && atk_text_set_selection (ATK_TEXT (text), 0, start_pos, end_pos))
+ e_cell_text_delete_selection (gaec->cell_view,
+ gaec->view_col, gaec->row);
+}
+
+static void
+ect_cut_text (AtkEditableText *text,
+ gint start_pos,
+ gint end_pos)
+{
+ ect_copy_text (text, start_pos, end_pos);
+ ect_delete_text (text, start_pos, end_pos);
+}
+
+static void
+ect_paste_text (AtkEditableText *text,
+ gint position)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (text);
+
+ e_table_item_enter_edit (gaec->item, gaec->view_col, gaec->row);
+
+ if (atk_text_set_caret_offset (ATK_TEXT (text), position))
+ e_cell_text_paste_clipboard (gaec->cell_view,
+ gaec->view_col, gaec->row);
+}
+
+static void
+ect_do_action_edit (AtkAction *action)
+{
+ GalA11yECell *a11y = GAL_A11Y_E_CELL (action);
+ ETableModel *e_table_model = a11y->item->table_model;
+
+ if (e_table_model_is_cell_editable (e_table_model, a11y->model_col, a11y->row)) {
+ e_table_item_enter_edit (a11y->item, a11y->view_col, a11y->row);
+ }
+}
+
+/* text signal handlers */
+static void
+ect_text_inserted_cb (ECellText *text, ECellView *cell_view, gint pos, gint len, gint row, gint model_col, gpointer data)
+{
+ GalA11yECellText *gaet;
+ GalA11yECell *gaec;
+
+ if (!ect_check (data))
+ return;
+ gaet = GAL_A11Y_E_CELL_TEXT (data);
+ gaec = GAL_A11Y_E_CELL (data);
+
+ if (cell_view == gaec->cell_view && row == gaec->row && model_col == gaec->model_col) {
+ g_signal_emit_by_name (gaet, "text_changed::insert", pos, len);
+
+ }
+}
+
+static void
+ect_text_deleted_cb (ECellText *text, ECellView *cell_view, gint pos, gint len, gint row, gint model_col, gpointer data)
+{
+ GalA11yECellText *gaet;
+ GalA11yECell *gaec;
+ if (!ect_check (data))
+ return;
+ gaet = GAL_A11Y_E_CELL_TEXT (data);
+ gaec = GAL_A11Y_E_CELL (data);
+ if (cell_view == gaec->cell_view && row == gaec->row && model_col == gaec->model_col) {
+ g_signal_emit_by_name (gaet, "text_changed::delete", pos, len);
+ }
+}
+
+static void
+ect_atk_text_iface_init (AtkTextIface *iface)
+{
+ iface->get_text = ect_get_text;
+ iface->get_text_after_offset = ect_get_text_after_offset;
+ iface->get_text_at_offset = ect_get_text_at_offset;
+ iface->get_character_at_offset = ect_get_character_at_offset;
+ iface->get_text_before_offset = ect_get_text_before_offset;
+ iface->get_caret_offset = ect_get_caret_offset;
+ iface->get_run_attributes = ect_get_run_attributes;
+ iface->get_default_attributes = ect_get_default_attributes;
+ iface->get_character_extents = ect_get_character_extents;
+ iface->get_character_count = ect_get_character_count;
+ iface->get_offset_at_point = ect_get_offset_at_point;
+ iface->get_n_selections = ect_get_n_selections;
+ iface->get_selection = ect_get_selection;
+ iface->add_selection = ect_add_selection;
+ iface->remove_selection = ect_remove_selection;
+ iface->set_selection = ect_set_selection;
+ iface->set_caret_offset = ect_set_caret_offset;
+}
+
+static void
+ect_atk_editable_text_iface_init (AtkEditableTextIface *iface)
+{
+ iface->set_run_attributes = ect_set_run_attributes;
+ iface->set_text_contents = ect_set_text_contents;
+ iface->insert_text = ect_insert_text;
+ iface->copy_text = ect_copy_text;
+ iface->cut_text = ect_cut_text;
+ iface->delete_text = ect_delete_text;
+ iface->paste_text = ect_paste_text;
+}
+
+static void
+ect_class_init (GalA11yECellTextClass *klass)
+{
+ AtkObjectClass *a11y = ATK_OBJECT_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ parent_class = g_type_class_ref (PARENT_TYPE);
+ a11y->get_name = ect_get_name;
+ object_class->dispose = ect_dispose;
+}
+
+static void
+ect_action_init (GalA11yECellText *a11y)
+{
+ GalA11yECell *gaec = GAL_A11Y_E_CELL (a11y);
+ ECellText *ect = E_CELL_TEXT (gaec->cell_view->ecell);
+ if (ect->editable && e_table_model_is_cell_editable (gaec->cell_view->e_table_model, gaec->model_col, gaec->row))
+ gal_a11y_e_cell_add_action (gaec,
+ "edit",
+ /* Translators: description of an "edit" action */
+ _("begin editing this cell"),
+ NULL,
+ (ACTION_FUNC) ect_do_action_edit);
+}
+
+/**
+ * gal_a11y_e_cell_text_get_type:
+ * @void:
+ *
+ * Registers the &GalA11yECellText class if necessary, and returns the type ID
+ * associated to it.
+ *
+ * Return value: The type ID of the &GalA11yECellText class.
+ **/
+GType
+gal_a11y_e_cell_text_get_type (void)
+{
+ static GType type = 0;
+
+ if (!type) {
+ GTypeInfo info = {
+ sizeof (GalA11yECellTextClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) ect_class_init,
+ (GClassFinalizeFunc) NULL,
+ NULL, /* class_data */
+ sizeof (GalA11yECellText),
+ 0,
+ (GInstanceInitFunc) NULL,
+ NULL /* value_cell_text */
+ };
+
+ static const GInterfaceInfo atk_text_info = {
+ (GInterfaceInitFunc) ect_atk_text_iface_init,
+ (GInterfaceFinalizeFunc) NULL,
+ NULL
+ };
+
+ static const GInterfaceInfo atk_editable_text_info = {
+ (GInterfaceInitFunc) ect_atk_editable_text_iface_init,
+ (GInterfaceFinalizeFunc) NULL,
+ NULL
+ };
+
+ type = g_type_register_static (PARENT_TYPE, "GalA11yECellText", &info, 0);
+ g_type_add_interface_static (type, ATK_TYPE_TEXT, &atk_text_info);
+ g_type_add_interface_static (type, ATK_TYPE_EDITABLE_TEXT, &atk_editable_text_info);
+ gal_a11y_e_cell_type_add_action_interface (type);
+ }
+
+ return type;
+}
+
+static void
+cell_text_destroyed (gpointer data)
+{
+ g_return_if_fail (GAL_A11Y_IS_E_CELL_TEXT (data));
+
+ g_object_unref (data);
+}
+
+AtkObject *
+gal_a11y_e_cell_text_new (ETableItem *item,
+ ECellView *cell_view,
+ AtkObject *parent,
+ gint model_col,
+ gint view_col,
+ gint row)
+{
+ AtkObject *a11y;
+ GalA11yECell *gaec;
+ GalA11yECellText *gaet;
+ ECellText *ect;
+
+ a11y = g_object_new (gal_a11y_e_cell_text_get_type (), NULL);
+
+ gal_a11y_e_cell_construct (a11y,
+ item,
+ cell_view,
+ parent,
+ model_col,
+ view_col,
+ row);
+ gaet = GAL_A11Y_E_CELL_TEXT (a11y);
+
+ /* will be unrefed in cell_text_destroyed */
+ g_object_ref (a11y);
+
+ gaet->inserted_id = g_signal_connect (E_CELL_TEXT (((ECellView *)cell_view)->ecell),
+ "text_inserted", G_CALLBACK (ect_text_inserted_cb), a11y);
+ gaet->deleted_id = g_signal_connect (E_CELL_TEXT (((ECellView *)cell_view)->ecell),
+ "text_deleted", G_CALLBACK (ect_text_deleted_cb), a11y);
+
+ g_object_weak_ref (G_OBJECT (((ECellView *)cell_view)->ecell),
+ (GWeakNotify) cell_text_destroyed,
+ a11y);
+
+ ect_action_init (gaet);
+
+ ect = E_CELL_TEXT (cell_view->ecell);
+ gaec = GAL_A11Y_E_CELL (a11y);
+ if (ect->editable && e_table_model_is_cell_editable (gaec->cell_view->e_table_model, gaec->model_col, gaec->row))
+ gal_a11y_e_cell_add_state (gaec, ATK_STATE_EDITABLE, FALSE);
+ else
+ gal_a11y_e_cell_remove_state (gaec, ATK_STATE_EDITABLE, FALSE);
+
+ return a11y;
+}
diff -urN evolution-3.10.4.orig/e-util/gal-a11y-e-cell-text.h evolution-3.10.4/e-util/gal-a11y-e-cell-text.h
--- evolution-3.10.4.orig/e-util/gal-a11y-e-cell-text.h 1969-12-31 18:00:00.000000000 -0600
+++ evolution-3.10.4/e-util/gal-a11y-e-cell-text.h 2015-05-08 17:58:03.568564397 -0500
@@ -0,0 +1,63 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Authors:
+ * Christopher James Lahey <clahey@ximian.com>
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+#ifndef __GAL_A11Y_E_CELL_TEXT_H__
+#define __GAL_A11Y_E_CELL_TEXT_H__
+
+#include <glib-object.h>
+#include <e-util/e-table-item.h>
+#include <e-util/e-cell-text.h>
+#include <e-util/gal-a11y-e-cell.h>
+
+#define GAL_A11Y_TYPE_E_CELL_TEXT (gal_a11y_e_cell_text_get_type ())
+#define GAL_A11Y_E_CELL_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GAL_A11Y_TYPE_E_CELL_TEXT, GalA11yECellText))
+#define GAL_A11Y_E_CELL_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GAL_A11Y_TYPE_E_CELL_TEXT, GalA11yECellTextClass))
+#define GAL_A11Y_IS_E_CELL_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GAL_A11Y_TYPE_E_CELL_TEXT))
+#define GAL_A11Y_IS_E_CELL_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GAL_A11Y_TYPE_E_CELL_TEXT))
+
+typedef struct _GalA11yECellText GalA11yECellText;
+typedef struct _GalA11yECellTextClass GalA11yECellTextClass;
+typedef struct _GalA11yECellTextPrivate GalA11yECellTextPrivate;
+
+/* This struct should actually be larger as this isn't what we derive from.
+ * The GalA11yECellTextPrivate comes right after the parent class structure.
+ **/
+struct _GalA11yECellText {
+ GalA11yECell object;
+ gint inserted_id;
+ gint deleted_id;
+};
+
+struct _GalA11yECellTextClass {
+ GalA11yECellClass parent_class;
+};
+
+/* Standard Glib function */
+GType gal_a11y_e_cell_text_get_type (void);
+AtkObject *gal_a11y_e_cell_text_new (ETableItem *item,
+ ECellView *cell_view,
+ AtkObject *parent,
+ gint model_col,
+ gint view_col,
+ gint row);
+
+#endif /* __GAL_A11Y_E_CELL_TEXT_H__ */
diff -urN evolution-3.10.4.orig/e-util/gal-a11y-e-cell-toggle.c evolution-3.10.4/e-util/gal-a11y-e-cell-toggle.c
--- evolution-3.10.4.orig/e-util/gal-a11y-e-cell-toggle.c 2013-12-07 08:14:47.000000000 -0600
+++ evolution-3.10.4/e-util/gal-a11y-e-cell-toggle.c 2015-05-08 17:58:06.177564226 -0500
@@ -34,8 +34,6 @@
#define PARENT_TYPE (gal_a11y_e_cell_get_type ())
static GObjectClass *parent_class;
-static void gal_a11y_e_cell_toggle_class_init (GalA11yECellToggleClass *class);
-
static void
gal_a11y_e_cell_toggle_dispose (GObject *object)
{
@@ -52,36 +50,33 @@
parent_class->dispose (object);
}
-GType
-gal_a11y_e_cell_toggle_get_type (void)
+static void
+ect_get_current_value (AtkValue *obj,
+ GValue *value)
{
- static GType type = 0;
+ gint val;
+ GalA11yECell *cell = GAL_A11Y_E_CELL (obj);
- if (!type)
- {
- static const GTypeInfo tinfo =
- {
- sizeof (GalA11yECellToggleClass),
- (GBaseInitFunc) NULL, /* base init */
- (GBaseFinalizeFunc) NULL, /* base finalize */
- (GClassInitFunc) gal_a11y_e_cell_toggle_class_init, /* class init */
- (GClassFinalizeFunc) NULL, /* class finalize */
- NULL, /* class data */
- sizeof (GalA11yECellToggle), /* instance size */
- 0, /* nb preallocs */
- NULL, /* instance init */
- NULL /* value table */
- };
-
- type = g_type_register_static (GAL_A11Y_TYPE_E_CELL,
- "GalA11yECellToggle", &tinfo, 0);
- gal_a11y_e_cell_type_add_action_interface (type);
+ val = GPOINTER_TO_INT (e_table_model_value_at (cell->cell_view->e_table_model, cell->model_col, cell->row));
- }
- return type;
+ memset (value, 0, sizeof (GValue));
+ g_value_init (value, G_TYPE_DOUBLE);
+ g_value_set_double (value, val);
}
static void
+ect_value_iface_init (AtkValueIface *iface)
+{
+ iface->get_current_value = ect_get_current_value;
+}
+
+G_DEFINE_TYPE_WITH_CODE (GalA11yECellToggle,
+ gal_a11y_e_cell_toggle,
+ GAL_A11Y_TYPE_E_CELL,
+ gal_a11y_e_cell_type_add_action_interface (g_define_type_id);
+ G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE, ect_value_iface_init))
+
+static void
gal_a11y_e_cell_toggle_class_init (GalA11yECellToggleClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
@@ -91,6 +86,11 @@
}
static void
+gal_a11y_e_cell_toggle_init (GalA11yECellToggle *toggle)
+{
+}
+
+static void
toggle_cell_action (GalA11yECell *cell)
{
gint finished;
@@ -121,26 +121,33 @@
}
static void
+update_cell (GalA11yECell *cell,
+ gboolean notify)
+{
+ gint value;
+ const gchar *name;
+
+ value = GPOINTER_TO_INT (e_table_model_value_at (cell->cell_view->e_table_model, cell->model_col, cell->row));
+ name = e_cell_toggle_get_icon_description (E_CELL_TOGGLE (cell->cell_view->ecell), value);
+
+ if (name)
+ atk_object_set_name (ATK_OBJECT (cell), name);
+
+ if (value && !name)
+ gal_a11y_e_cell_add_state (cell, ATK_STATE_CHECKED, notify);
+ else
+ gal_a11y_e_cell_remove_state (cell, ATK_STATE_CHECKED, notify);
+}
+
+static void
model_change_cb (ETableModel *etm,
gint col,
gint row,
GalA11yECell *cell)
{
- gint value;
-
- if (col == cell->model_col && row == cell->row) {
- value = GPOINTER_TO_INT (
- e_table_model_value_at (cell->cell_view->e_table_model,
- cell->model_col, cell->row));
- /* Cheat gnopernicus, or it will ignore the state change signal */
- atk_focus_tracker_notify (ATK_OBJECT (cell));
-
- if (value)
- gal_a11y_e_cell_add_state (cell, ATK_STATE_CHECKED, TRUE);
- else
- gal_a11y_e_cell_remove_state (cell, ATK_STATE_CHECKED, TRUE);
- }
+ if (col == cell->model_col && row == cell->row)
+ update_cell (cell, TRUE);
}
AtkObject *
@@ -154,7 +161,6 @@
AtkObject *a11y;
GalA11yECell *cell;
GalA11yECellToggle *toggle_cell;
- gint value;
a11y = ATK_OBJECT (g_object_new (GAL_A11Y_TYPE_E_CELL_TOGGLE, NULL));
@@ -185,14 +191,7 @@
item->table_model, "model_cell_changed",
(GCallback) model_change_cb, a11y);
- value = GPOINTER_TO_INT (
- e_table_model_value_at (
- cell->cell_view->e_table_model,
- cell->model_col, cell->row));
- if (value)
- gal_a11y_e_cell_add_state (cell, ATK_STATE_CHECKED, FALSE);
- else
- gal_a11y_e_cell_remove_state (cell, ATK_STATE_CHECKED, FALSE);
+ update_cell (cell, FALSE);
return a11y;
}
diff -urN evolution-3.10.4.orig/e-util/gal-a11y-e-table-click-to-add.c evolution-3.10.4/e-util/gal-a11y-e-table-click-to-add.c
--- evolution-3.10.4.orig/e-util/gal-a11y-e-table-click-to-add.c 2015-05-08 17:57:43.841565686 -0500
+++ evolution-3.10.4/e-util/gal-a11y-e-table-click-to-add.c 2015-05-08 17:58:01.744564516 -0500
@@ -317,7 +317,7 @@
cell_a11y = g_object_get_data (
G_OBJECT (row_a11y), "gail-focus-object");
if (cell_a11y) {
- atk_focus_tracker_notify (cell_a11y);
+ atk_object_notify_state_change (cell_a11y, ATK_STATE_FOCUSED, TRUE);
}
}
}
diff -urN evolution-3.10.4.orig/e-util/gal-a11y-e-table-item.c evolution-3.10.4/e-util/gal-a11y-e-table-item.c
--- evolution-3.10.4.orig/e-util/gal-a11y-e-table-item.c 2015-05-08 17:57:43.844565686 -0500
+++ evolution-3.10.4/e-util/gal-a11y-e-table-item.c 2015-05-08 17:58:01.744564516 -0500
@@ -225,7 +225,7 @@
g_object_set_data (G_OBJECT (a11y), "gail-focus-object", NULL);
if (notify && cell)
- atk_focus_tracker_notify (cell);
+ g_signal_emit_by_name (a11y, "active-descendant-changed", cell);
}
static void
@@ -338,10 +338,12 @@
if (!item)
return NULL;
- atk_component_get_position (
+ atk_component_get_extents (
component,
&x_origin,
&y_origin,
+ NULL,
+ NULL,
coord_type);
x -= x_origin;
y -= y_origin;
diff -urN evolution-3.10.4.orig/e-util/Makefile.am evolution-3.10.4/e-util/Makefile.am
--- evolution-3.10.4.orig/e-util/Makefile.am 2013-09-21 08:53:22.000000000 -0500
+++ evolution-3.10.4/e-util/Makefile.am 2015-05-08 17:58:03.566564397 -0500
@@ -307,6 +307,7 @@
ea-widgets.h \
gal-a11y-e-cell-popup.h \
gal-a11y-e-cell-registry.h \
+ gal-a11y-e-cell-text.h \
gal-a11y-e-cell-toggle.h \
gal-a11y-e-cell-tree.h \
gal-a11y-e-cell-vbox.h \
@@ -541,6 +542,7 @@
ea-widgets.c \
gal-a11y-e-cell-popup.c \
gal-a11y-e-cell-registry.c \
+ gal-a11y-e-cell-text.c \
gal-a11y-e-cell-toggle.c \
gal-a11y-e-cell-tree.c \
gal-a11y-e-cell-vbox.c \
diff -urN evolution-3.10.4.orig/mail/message-list.c evolution-3.10.4/mail/message-list.c
--- evolution-3.10.4.orig/mail/message-list.c 2014-02-02 11:07:09.000000000 -0600
+++ evolution-3.10.4/mail/message-list.c 2015-05-08 17:58:06.178564226 -0500
@@ -1985,8 +1985,8 @@
e_table_extras_add_compare (extras, "address_compare", address_compare);
- cell = e_cell_toggle_new (
- status_icons, G_N_ELEMENTS (status_icons));
+ cell = e_cell_toggle_new (status_icons, G_N_ELEMENTS (status_icons));
+ e_cell_toggle_set_icon_descriptions (E_CELL_TOGGLE (cell), status_map, G_N_ELEMENTS (status_map));
e_table_extras_add_cell (extras, "render_message_status", cell);
g_object_unref (cell);
@@ -3101,13 +3101,13 @@
ii = GPOINTER_TO_UINT (value);
if (ii > 5)
return g_strdup ("");
- return g_strdup (_(status_map[ii]));
+ return g_strdup (status_map[ii]);
case COL_SCORE:
ii = GPOINTER_TO_UINT (value) + 3;
if (ii > 6)
ii = 3;
- return g_strdup (_(score_map[ii]));
+ return g_strdup (score_map[ii]);
case COL_ATTACHMENT:
case COL_FLAGGED:
@@ -3147,10 +3147,22 @@
message_list_class_init (MessageListClass *class)
{
GObjectClass *object_class;
- gint i;
- for (i = 0; i < G_N_ELEMENTS (ml_drag_info); i++)
- ml_drag_info[i].atom = gdk_atom_intern (ml_drag_info[i].target, FALSE);
+ if (!ml_drag_info[0].atom) {
+ gint ii;
+
+ for (ii = 0; ii < G_N_ELEMENTS (ml_drag_info); ii++) {
+ ml_drag_info[ii].atom = gdk_atom_intern (ml_drag_info[ii].target, FALSE);
+ }
+
+ for (ii = 0; ii < G_N_ELEMENTS (status_map); ii++) {
+ status_map[ii] = _(status_map[ii]);
+ }
+
+ for (ii = 0; ii < G_N_ELEMENTS (score_map); ii++) {
+ score_map[ii] = _(score_map[ii]);
+ }
+ }
g_type_class_add_private (class, sizeof (MessageListPrivate));
diff -urN evolution-3.10.4.orig/po/POTFILES.in evolution-3.10.4/po/POTFILES.in
--- evolution-3.10.4.orig/po/POTFILES.in 2013-11-10 07:47:06.000000000 -0600
+++ evolution-3.10.4/po/POTFILES.in 2015-05-08 17:58:03.568564397 -0500
@@ -278,6 +278,7 @@
e-util/evolution-source-viewer.c
e-util/filter.error.xml
e-util/gal-a11y-e-cell-popup.c
+e-util/gal-a11y-e-cell-text.c
e-util/gal-a11y-e-cell-toggle.c
e-util/gal-a11y-e-cell-tree.c
e-util/gal-a11y-e-cell.c