[evolution-patches] a11y patch in widgets directory
- From: Li Yuan <Li Yuan Sun COM>
- To: jpr novell com
- Cc: evolution-patches ximian com
- Subject: [evolution-patches] a11y patch in widgets directory
- Date: Mon, 18 Oct 2004 20:35:47 +0800
Hi,
Now I have a patch in *widgets* directory for cvs HEAD. It fixes some
a11y bugs. The patch has passed our internal review.
Please help me to review it. Thanks a lot.
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/widgets/ChangeLog,v
retrieving revision 1.123
diff -u -r1.123 ChangeLog
--- ChangeLog 13 Sep 2004 20:52:19 -0000 1.123
+++ ChangeLog 10 Oct 2004 07:41:15 -0000
@@ -1,3 +1,32 @@
+2004-09-29 Li Yuan <li yuan sun com>
+
+ * e-timezone-dialog/e-timezone-dialog.glade:
+ Add a name for timezone combox.
+ * misc/e-calendar.c: (e_calendar_init), (e_calendar_new):
+ Make accessibility name and description translatable.
+ Add a atk name for the two buttons so that they can be UI
+ grabbed by GOK.
+ * misc/e-combo-button.c: (impl_activated), (class_init):
+ Make gok work.
+ * misc/e-dateedit.c:
+ (e_date_edit_new), (create_children):
+ Add a name for atk object.
+ Make accessibility name and description translatable.
+ Add name and description for the date_entry, date_button
+ and time_combo.
+ (e_date_edit_show_date_popup), (hide_date_popup):
+ Grab and ungrab keyboard.
+ add_relation():
+ New function to add labelled_by relation for entry
+ and combobox.
+ * misc/e-map.c: (e_map_new):
+ Add a name for world map widget.
+ Make accessibility name and description translatable.
+ Set the atk role to image.
+ * misc/e-multi-config-dialog.c: (e_multi_config_dialog_add_page):
+ Add an atk name for the page.
+
+
2004-09-13 Rodney Dawes <dobey novell com>
* e-timezone-dialog/e-timezone-dialog.c (get_widgets):
Index: e-timezone-dialog/e-timezone-dialog.glade
===================================================================
RCS file: /cvs/gnome/evolution/widgets/e-timezone-dialog/e-timezone-dialog.glade,v
retrieving revision 1.7
diff -u -r1.7 e-timezone-dialog.glade
--- e-timezone-dialog/e-timezone-dialog.glade 13 Sep 2004 20:52:19 -0000 1.7
+++ e-timezone-dialog/e-timezone-dialog.glade 10 Oct 2004 07:41:18 -0000
@@ -291,6 +291,9 @@
<property name="case_sensitive">False</property>
<property name="enable_arrow_keys">True</property>
<property name="enable_arrows_always">False</property>
+ <accessibility>
+ <atkproperty name="AtkObject::accessible_name" translatable="yes">TimeZone Combobox</atkproperty>
+ </accessibility>
<child internal-child="entry">
<widget class="GtkEntry" id="combo-entry1">
Index: misc/e-calendar.c
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/e-calendar.c,v
retrieving revision 1.23
diff -u -r1.23 e-calendar.c
--- misc/e-calendar.c 5 Dec 2003 02:01:46 -0000 1.23
+++ misc/e-calendar.c 10 Oct 2004 07:41:22 -0000
@@ -42,6 +42,7 @@
#include <gtk/gtksignal.h>
#include <libgnomecanvas/gnome-canvas-widget.h>
#include <gal/util/e-util.h>
+#include <libgnome/gnome-i18n.h>
#define E_CALENDAR_SMALL_FONT_PTSIZE 6
@@ -140,6 +141,7 @@
GnomeCanvasGroup *canvas_group;
PangoFontDescription *small_font_desc;
GtkWidget *button, *pixmap;
+ AtkObject *a11y;
/* Create the small font. */
@@ -179,6 +181,10 @@
gnome_canvas_widget_get_type (),
"widget", button,
NULL);
+ a11y = gtk_widget_get_accessible (button);
+ if (a11y != NULL) {
+ atk_object_set_name (a11y, _("Previous Button"));
+ }
button = gtk_button_new ();
gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
@@ -201,6 +207,10 @@
gnome_canvas_widget_get_type (),
"widget", button,
NULL);
+ a11y = gtk_widget_get_accessible (button);
+ if (a11y != NULL) {
+ atk_object_set_name (a11y, _("Next Button"));
+ }
cal->min_rows = 1;
cal->min_cols = 1;
@@ -221,8 +231,13 @@
e_calendar_new (void)
{
GtkWidget *cal;
+ AtkObject *a11y;
cal = gtk_type_new (e_calendar_get_type ());
+ a11y = gtk_widget_get_accessible (cal);
+ if (a11y != NULL) {
+ atk_object_set_name (a11y, _("Month Calendar"));
+ }
return cal;
}
Index: misc/e-combo-button.c
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/e-combo-button.c,v
retrieving revision 1.18
diff -u -r1.18 e-combo-button.c
--- misc/e-combo-button.c 17 May 2004 17:10:39 -0000 1.18
+++ misc/e-combo-button.c 10 Oct 2004 07:41:24 -0000
@@ -390,6 +390,12 @@
}
}
+static void
+impl_activated (GtkButton *button)
+{
+ gtk_signal_emit (GTK_OBJECT (button), signals[ACTIVATE_DEFAULT]);
+}
+
static void
class_init (GtkObjectClass *object_class)
@@ -408,6 +414,7 @@
button_class = GTK_BUTTON_CLASS (object_class);
button_class->released = impl_released;
+ button_class->activate = impl_activated;
signals[ACTIVATE_DEFAULT] = gtk_signal_new ("activate_default",
GTK_RUN_FIRST,
Index: misc/e-dateedit.c
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/e-dateedit.c,v
retrieving revision 1.40
diff -u -r1.40 e-dateedit.c
--- misc/e-dateedit.c 12 Mar 2004 08:44:23 -0000 1.40
+++ misc/e-dateedit.c 10 Oct 2004 07:41:36 -0000
@@ -55,6 +55,8 @@
#include <gtk/gtkwindow.h>
#include <gtk/gtkmain.h>
#include <gtk/gtkvbox.h>
+#include <atk/atkrelation.h>
+#include <atk/atkrelationset.h>
#include <libgnome/gnome-i18n.h>
#include <gal/util/e-util.h>
#include "e-util/e-time-utils.h"
@@ -304,9 +306,15 @@
e_date_edit_new (void)
{
EDateEdit *dedit;
+ AtkObject *a11y;
dedit = g_object_new (E_TYPE_DATE_EDIT, NULL);
+ a11y = gtk_widget_get_accessible (GTK_WIDGET (dedit));
+ if (a11y != NULL) {
+ atk_object_set_name (a11y, _("Date and Time Entry"));
+ }
+
return GTK_WIDGET (dedit);
}
@@ -318,10 +326,16 @@
ECalendar *calendar;
GtkWidget *frame, *arrow;
GtkWidget *vbox, *bbox;
+ AtkObject *a11y;
priv = dedit->priv;
priv->date_entry = gtk_entry_new ();
+ a11y = gtk_widget_get_accessible (priv->date_entry);
+ if (a11y != NULL) {
+ atk_object_set_description (a11y, _("Text entry to input date"));
+ atk_object_set_name (a11y, _("Text Date Entry"));
+ }
gtk_box_pack_start (GTK_BOX (dedit), priv->date_entry, FALSE, TRUE, 0);
g_signal_connect (priv->date_entry, "key_press_event",
@@ -337,6 +351,11 @@
G_CALLBACK (on_date_button_clicked), dedit);
gtk_box_pack_start (GTK_BOX (dedit), priv->date_button,
FALSE, FALSE, 0);
+ a11y = gtk_widget_get_accessible (priv->date_button);
+ if (a11y != NULL) {
+ atk_object_set_description (a11y, _("Click this button to show a calendar"));
+ atk_object_set_name (a11y, _("Date Button"));
+ }
arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE);
gtk_container_add (GTK_CONTAINER (priv->date_button), arrow);
@@ -355,6 +374,11 @@
priv->time_combo = gtk_combo_new ();
gtk_box_pack_start (GTK_BOX (dedit), priv->time_combo, FALSE, TRUE, 0);
rebuild_time_popup (dedit);
+ a11y = gtk_widget_get_accessible (priv->time_combo);
+ if (a11y != NULL) {
+ atk_object_set_description (a11y, _("Combo box to select time"));
+ atk_object_set_name (a11y, _("Time Combo Box"));
+ }
g_signal_connect (GTK_COMBO (priv->time_combo)->entry,
"key_press_event",
@@ -1185,6 +1209,7 @@
| GDK_BUTTON_RELEASE_MASK
| GDK_POINTER_MOTION_MASK),
NULL, NULL, GDK_CURRENT_TIME);
+ gdk_keyboard_grab (priv->cal_popup->window, TRUE, GDK_CURRENT_TIME);
gdk_window_focus (priv->cal_popup->window, GDK_CURRENT_TIME);
}
@@ -1364,6 +1389,7 @@
gtk_widget_hide (dedit->priv->cal_popup);
gtk_grab_remove (dedit->priv->cal_popup);
gdk_pointer_ungrab (GDK_CURRENT_TIME);
+ gdk_keyboard_ungrab (GDK_CURRENT_TIME);
}
@@ -1580,6 +1606,49 @@
return FALSE;
}
+static void
+add_relation (EDateEdit *dedit, GtkWidget *widget)
+{
+ AtkObject *a11y_edit, *a11y_widget;
+
+ /* add a labelled_by relation for widget for accessibility */
+
+ a11y_edit = gtk_widget_get_accessible (GTK_WIDGET (dedit));
+ a11y_widget = gtk_widget_get_accessible (widget);
+
+ if (a11y_edit != NULL && a11y_widget!= NULL) {
+ AtkRelationSet *set;
+ AtkRelation *relation;
+ GPtrArray *target;
+ gpointer target_object;
+
+ set = atk_object_ref_relation_set (a11y_widget);
+ if (set != NULL) {
+ relation = atk_relation_set_get_relation_by_type (set,
+ ATK_RELATION_LABELLED_BY);
+ /* check whether has a labelled_by relation already */
+ if (relation != NULL)
+ return;
+ }
+
+ set = atk_object_ref_relation_set (a11y_edit);
+ if (!set)
+ return;
+
+ relation = atk_relation_set_get_relation_by_type (set,
+ ATK_RELATION_LABELLED_BY);
+ if (relation != NULL) {
+ target = atk_relation_get_target (relation);
+ target_object = g_ptr_array_index (target, 0);
+ if (ATK_IS_OBJECT (target_object)) {
+ atk_object_add_relationship (a11y_widget,
+ ATK_RELATION_LABELLED_BY,
+ ATK_OBJECT (target_object));
+ }
+ }
+ }
+}
+
/* This sets the text in the date entry according to the current settings. */
static void
@@ -1604,6 +1673,8 @@
e_utf8_strftime (buffer, sizeof (buffer), _("%m/%d/%Y"), &tmp_tm);
gtk_entry_set_text (GTK_ENTRY (priv->date_entry), buffer);
}
+
+ add_relation (dedit, priv->date_entry);
}
@@ -1642,6 +1713,8 @@
gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->time_combo)->entry),
buffer);
}
+
+ add_relation (dedit, priv->time_combo);
}
Index: misc/e-map.c
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/e-map.c,v
retrieving revision 1.6
diff -u -r1.6 e-map.c
--- misc/e-map.c 25 Feb 2003 15:39:47 -0000 1.6
+++ misc/e-map.c 10 Oct 2004 07:41:49 -0000
@@ -27,6 +27,7 @@
#include <gtk/gtksignal.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <libart_lgpl/art_filterlevel.h>
+#include <libgnome/gnome-i18n.h>
#include "e-map.h"
@@ -639,8 +640,15 @@
e_map_new ()
{
GtkWidget *widget;
+ AtkObject *a11y;
widget = GTK_WIDGET (gtk_type_new (TYPE_E_MAP));
+ a11y = gtk_widget_get_accessible (widget);
+ if (a11y != NULL) {
+ atk_object_set_name (a11y, _("World Map"));
+ atk_object_set_role (a11y, ATK_ROLE_IMAGE);
+ atk_object_set_description (a11y, _("Mouse-based interactive map widget for selecting timezone. Keyboard users should select the timezone from the below combo box instead."));
+ }
return (E_MAP (widget));
}
Index: misc/e-multi-config-dialog.c
===================================================================
RCS file: /cvs/gnome/evolution/widgets/misc/e-multi-config-dialog.c,v
retrieving revision 1.30
diff -u -r1.30 e-multi-config-dialog.c
--- misc/e-multi-config-dialog.c 13 Sep 2004 16:24:32 -0000 1.30
+++ misc/e-multi-config-dialog.c 10 Oct 2004 07:41:51 -0000
@@ -395,6 +395,8 @@
EConfigPage *page_widget)
{
EMultiConfigDialogPrivate *priv;
+ AtkObject *a11y;
+ gint page_no;
g_return_if_fail (E_IS_MULTI_CONFIG_DIALOG (dialog));
g_return_if_fail (title != NULL);
@@ -411,9 +413,19 @@
fill_in_pixbufs (dialog, e_table_model_row_count (priv->list_e_table_model) - 1);
}
- gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook),
+ page_no = gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook),
create_page_container (description, GTK_WIDGET (page_widget)),
NULL);
+
+ a11y = gtk_widget_get_accessible (GTK_WIDGET(priv->notebook));
+ if (a11y != NULL) {
+ AtkObject *a11y_page = atk_object_ref_accessible_child (a11y, page_no);
+ if (a11y_page != NULL) {
+ if (atk_object_get_role (a11y_page) == ATK_ROLE_PAGE_TAB)
+ atk_object_set_name (a11y_page, title);
+ g_object_unref (a11y_page);
+ }
+ }
if (priv->pages->next == NULL) {
ETable *table;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]