[evolution-patches] patches about gtkhtml. fix #70078,84,85,86,87,88



hi, rodo

I split my former big patches into several small ones according to the bugID.
In addition, for your convenience, I split the patch which I sent you on Dec 10th into two parts and send you again.

So, you could Only review the patches I send you this time :)


#70084
src-78.diff

#70085
src-85.diff

#70078 & #70086
src-78.diff a11y-78.diff
---------------------------------------------------------------------------------------------------------------------------
Actually 70086 depends on 70078, and I only add one line code to fix it. So I put them together.
---------------------------------------------------------------------------------------------------------------------------

#70087
src-87.diff

#70088
a11y-88.diff


will you please review it ?


Thanks very much for your supporting.

Yours,
Mengjie Yu
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/ChangeLog,v
retrieving revision 1.2062
diff -u -p -r1.2062 ChangeLog
--- ChangeLog	6 Dec 2004 16:41:35 -0000	1.2062
+++ ChangeLog	14 Dec 2004 06:25:42 -0000
@@ -1,3 +1,15 @@
+2004-12-14  Mengjie Yu  <meng-jie yu sun com>
+
+	* gtkhtml.c: (focus), (gtk_html_class_init), (cursor_move):
+	fix #70078 Add new signals when for insert/delete 
+	fix #70086 emit "cursor_changed" signal when changing cursor's 
+		   positon
+	* gtkhtml.h:
+	fix #70078 add signal field
+	* htmlengine-edit-cut-and-paste.c: (insert_object_for_undo),
+	(html_engine_delete):
+	fix #70078 emit signal when insert/delete objects
+
 2004-09-29  Radek Doulik  <rodo ximian com>
 
 	* gtkhtml.c (drag_data_received): call gdk_window_get_pointer so
Index: gtkhtml.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/gtkhtml.c,v
retrieving revision 1.583
diff -u -p -r1.583 gtkhtml.c
--- gtkhtml.c	6 Dec 2004 16:41:35 -0000	1.583
+++ gtkhtml.c	14 Dec 2004 06:25:56 -0000
@@ -124,6 +124,9 @@ enum {
 	SCROLL,
 	CURSOR_MOVE,
 	COMMAND,
+	CURSOR_CHANGED,
+	OBJECT_INSERTED,
+	OBJECT_DELETED,
 	/* now only last signal */
 	LAST_SIGNAL
 };
@@ -2337,9 +2340,10 @@ focus (GtkWidget *w, GtkDirectionType di
 
 		if (!GTK_WIDGET_HAS_FOCUS (w) && !html_object_is_embedded (obj))
 			gtk_widget_grab_focus (w);
-		if (e->caret_mode)
+		if (e->caret_mode) {
 			html_engine_jump_to_object (e, obj, offset);
-
+			g_signal_emit (GTK_HTML (w), signals [CURSOR_CHANGED], 0, direction, GTK_HTML_CURSOR_SKIP_ALL);
+		}
 		return TRUE;
 	}
 
@@ -2879,6 +2883,34 @@ gtk_html_class_init (GtkHTMLClass *klass
 			      g_cclosure_marshal_VOID__ENUM,
 			      G_TYPE_NONE, 1, GTK_TYPE_HTML_COMMAND);
 
+	signals [CURSOR_CHANGED] = 
+		g_signal_new ("cursor_changed",
+			      G_TYPE_FROM_CLASS (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (GtkHTMLClass, cursor_changed),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
+
+	signals [OBJECT_INSERTED] = 
+		g_signal_new ("object_inserted",
+			      G_TYPE_FROM_CLASS (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (GtkHTMLClass, object_inserted),
+			      NULL, NULL,
+			      html_g_cclosure_marshal_VOID__INT_INT,
+			      G_TYPE_NONE, 2,
+			      G_TYPE_INT, G_TYPE_INT);
+
+	signals [OBJECT_DELETED] = 
+		g_signal_new ("object_deleted",
+			      G_TYPE_FROM_CLASS (object_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (GtkHTMLClass, object_deleted),
+			      NULL, NULL,
+			      html_g_cclosure_marshal_VOID__INT_INT,
+			      G_TYPE_NONE, 2,
+			      G_TYPE_INT, G_TYPE_INT);
 	object_class->destroy = destroy;
 	
 
@@ -4400,6 +4432,7 @@ cursor_move (GtkHTML *html, GtkDirection
 	html->priv->update_styles = TRUE;
 	gtk_html_edit_make_cursor_visible (html);
 	html_engine_update_selection_active_state (html->engine, html->priv->event_time);
+	g_signal_emit (GTK_HTML (html), signals [CURSOR_CHANGED], 0, dir_type, skip);
 }
 
 static gboolean
Index: gtkhtml.h
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/gtkhtml.h,v
retrieving revision 1.154
diff -u -p -r1.154 gtkhtml.h
--- gtkhtml.h	1 Nov 2004 12:20:26 -0000	1.154
+++ gtkhtml.h	14 Dec 2004 06:25:57 -0000
@@ -101,6 +101,9 @@ struct _GtkHTMLClass {
 					   gfloat position);
 	void     (* cursor_move)          (GtkHTML *html, GtkDirectionType dir_type, GtkHTMLCursorSkipType skip);
 	gboolean (* command)              (GtkHTML *html, GtkHTMLCommandType com_type);
+	void (* cursor_changed)       (GtkHTML *html);
+	void (* object_inserted)       (GtkHTML *html, int pos, int len);
+	void (* object_deleted)        (GtkHTML *html, int pos, int len);
 
 	/* properties */
 	GtkHTMLClassProperties *properties;
Index: htmlengine-edit-cut-and-paste.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmlengine-edit-cut-and-paste.c,v
retrieving revision 1.104
diff -u -p -r1.104 htmlengine-edit-cut-and-paste.c
--- htmlengine-edit-cut-and-paste.c	10 Nov 2004 17:23:42 -0000	1.104
+++ htmlengine-edit-cut-and-paste.c	14 Dec 2004 06:26:00 -0000
@@ -1076,6 +1076,7 @@ insert_object_for_undo (HTMLEngine *e, H
 	html_cursor_jump_to_position_no_spell (e->cursor, e, position_after + (delete_paragraph_before ? 1 : 0));
 	insert_setup_undo (e, len, position_before + (delete_paragraph_before ? 1 : 0),
 			   dir, delete_paragraph_before, delete_paragraph_after);
+	g_signal_emit_by_name (e->widget, "object_inserted", position_before, len);
 }
 
 static void
@@ -1710,6 +1711,8 @@ html_engine_delete (HTMLEngine *e)
 		HTMLCursor *start = html_cursor_dup (e->mark->position < e->cursor->position ? e->mark : e->cursor);
 		HTMLCursor *end = html_cursor_dup (e->mark->position < e->cursor->position ? e->cursor : e->mark);
 		gint start_position = start->position;
+		gint end_position = end->position;
+
 
 		while (start->position < end->position) {
 			if (start->object->parent->parent == end->object->parent->parent) {
@@ -1755,6 +1758,11 @@ html_engine_delete (HTMLEngine *e)
 		if (end)
 			html_cursor_destroy (end);
 		html_cursor_jump_to_position (e->cursor, e, start_position);
+
+		if (end_position - start_position > 0) {
+			int len = end_position - start_position;
+			g_signal_emit_by_name (e->widget, "object_deleted", start_position, len);
+		}
 	}
 	html_undo_level_end (e->undo);
 }
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/a11y/ChangeLog,v
retrieving revision 1.12
diff -u -p -r1.12 ChangeLog
--- ChangeLog	1 Nov 2004 09:41:59 -0000	1.12
+++ ChangeLog	14 Dec 2004 06:28:31 -0000
@@ -1,3 +1,12 @@
+2004-12-14  Mengjie Yu  <meng-jie yu sun com>
+
+	* object.c: (gtk_html_a11y_cursor_changed_cb),
+	(gtk_html_a11y_insert_object_cb), (gtk_html_a11y_delete_object_cb),
+	(gtk_html_a11y_new):
+	fix #70078 listen and handle the insert/delete signal. 
+		   For text object, emit text_changed signal.
+		   change gtk_html_a11y_cursor_move_cb to cursor_changed_cb
+
 2004-11-01  Radek Doulik  <rodo ximian com>
 
 	* Makefile.am (AM_CFLAGS): use AM_FLAGS instead of CFLAGS
Index: object.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/a11y/object.c,v
retrieving revision 1.5
diff -u -p -r1.5 object.c
--- object.c	26 May 2004 02:26:17 -0000	1.5
+++ object.c	14 Dec 2004 06:28:35 -0000
@@ -178,11 +178,13 @@ gtk_html_a11y_grab_focus_cb(GtkWidget * 
 
 }
 
+
+static AtkObject * prev_object = NULL;
+
 static void
-gtk_html_a11y_cursor_move_cb(GtkWidget *widget,  GtkDirectionType dir_type, GtkHTMLCursorSkipType skip)
+gtk_html_a11y_cursor_changed_cb(GtkWidget *widget,  GtkDirectionType dir_type, GtkHTMLCursorSkipType skip)
 {
         AtkObject *focus_object, *obj;
-	static AtkObject * prev_object = NULL;
 
 	focus_object = gtk_html_a11y_get_focus_object (widget);
        obj = gtk_widget_get_accessible (widget);
@@ -201,6 +203,47 @@ gtk_html_a11y_cursor_move_cb(GtkWidget *
         }
 }
 
+static void
+gtk_html_a11y_insert_object_cb (GtkWidget * widget, int pos, int len) 
+{
+	AtkObject * a11y, *obj;
+	HTMLText * text;
+
+        obj = gtk_widget_get_accessible (widget);
+	a11y = gtk_html_a11y_get_focus_object (widget);
+
+	if (prev_object != a11y) {
+		prev_object = a11y;
+        	g_object_set_data (G_OBJECT(obj), "gail-focus-object", a11y);
+        	atk_focus_tracker_notify (a11y);
+	}
+
+	if (G_IS_HTML_A11Y_TEXT(a11y)) {
+		g_signal_emit_by_name (a11y, "text_changed::insert", pos, len);
+
+	} 
+}
+
+static void
+gtk_html_a11y_delete_object_cb (GtkWidget * widget, int pos, int len) 
+{
+	AtkObject * a11y, *obj;
+	HTMLText * text;
+
+        obj = gtk_widget_get_accessible (widget);
+	a11y = gtk_html_a11y_get_focus_object (widget);
+
+	if (prev_object != a11y) {
+		prev_object = a11y;
+        	g_object_set_data (G_OBJECT(obj), "gail-focus-object", a11y);
+        	atk_focus_tracker_notify (a11y);
+	}
+
+	if (G_IS_HTML_A11Y_TEXT(a11y)) {
+		g_signal_emit_by_name (a11y, "text_changed::delete", pos, len);
+	}
+}
+
 AtkObject* 
 gtk_html_a11y_new (GtkWidget *widget)
 {
@@ -218,9 +261,16 @@ gtk_html_a11y_new (GtkWidget *widget)
 	g_signal_connect_after(widget, "grab_focus", 
 			G_CALLBACK (gtk_html_a11y_grab_focus_cb),
 			NULL);
-	g_signal_connect_after(widget, "cursor_move",
-			G_CALLBACK(gtk_html_a11y_cursor_move_cb),
+	g_signal_connect_after(widget, "cursor_changed",
+			G_CALLBACK(gtk_html_a11y_cursor_changed_cb),
+			NULL);
+	g_signal_connect_after(widget, "object_inserted",
+			G_CALLBACK(gtk_html_a11y_insert_object_cb),
 			NULL);
+	g_signal_connect_after(widget, "object_deleted",
+			G_CALLBACK(gtk_html_a11y_delete_object_cb),
+			NULL);
+
 	html_utils_get_accessible(GTK_HTML(widget)->engine->clue, accessible);
 
 	/* printf ("created new gtkhtml accessible object\n"); */
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/ChangeLog,v
retrieving revision 1.2062
diff -u -p -r1.2062 ChangeLog
--- ChangeLog	6 Dec 2004 16:41:35 -0000	1.2062
+++ ChangeLog	14 Dec 2004 07:02:20 -0000
@@ -1,3 +1,13 @@
+2004-12-14  Mengjie Yu  <meng-jie yu sun com>
+
+	* htmlengine-edit-table.c: (delete_column_undo_action):
+	fix #70084 Before doing undo, we need move the cursor back 
+		   to original position.
+
+	* htmlinterval.c: (do_downtree_lines_intersection),
+	(html_interval_forall):
+	fix #70084 add more judgement to avoid crash.
+
 2004-09-29  Radek Doulik  <rodo ximian com>
 
 	* gtkhtml.c (drag_data_received): call gdk_window_get_pointer so
Index: htmlengine-edit-table.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmlengine-edit-table.c,v
retrieving revision 1.75
diff -u -p -r1.75 htmlengine-edit-table.c
--- htmlengine-edit-table.c	20 Apr 2004 09:57:06 -0000	1.75
+++ htmlengine-edit-table.c	14 Dec 2004 07:02:41 -0000
@@ -340,6 +340,7 @@ delete_column_undo_action (HTMLEngine *e
 	DeleteCellsUndo *data = (DeleteCellsUndo *) undo_data;
 	HTMLTable *table;
 
+	html_cursor_jump_to_position (e->cursor, e, position_after);
 	table = html_engine_get_table (e);
 	g_assert (data->size == table->totalRows);
 	html_table_insert_column (table, e, data->pos, data->cells, html_undo_direction_reverse (dir));
Index: htmlinterval.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmlinterval.c,v
retrieving revision 1.20
diff -u -p -r1.20 htmlinterval.c
--- htmlinterval.c	15 Oct 2003 14:42:23 -0000	1.20
+++ htmlinterval.c	14 Dec 2004 07:02:58 -0000
@@ -218,8 +218,6 @@ get_downtree_line (HTMLObject *o)
 static HTMLEngine *
 do_downtree_lines_intersection (GSList **l1, GSList **l2, HTMLEngine *e)
 {
-	g_assert ((*l1)->data == (*l2)->data);
-
 	while (*l1 && *l2 && (*l1)->data == (*l2)->data) {
 		e = html_object_get_engine (HTML_OBJECT ((*l1)->data), e);
 		*l1 = g_slist_remove_link (*l1, *l1);
@@ -292,14 +290,16 @@ html_interval_forall (HTMLInterval *i, H
 
 	from_downline = get_downtree_line (i->from.object);
 	to_downline   = get_downtree_line (i->to.object);
-	engine = do_downtree_lines_intersection  (&from_downline, &to_downline, e);
+	if (from_downline && to_downline) {
+		engine = do_downtree_lines_intersection  (&from_downline, &to_downline, e);
 
-	if (from_downline)
-		interval_forall    (HTML_OBJECT (from_downline->data)->parent, from_downline, to_downline,
-				    html_object_get_engine (HTML_OBJECT (from_downline->data)->parent, engine), f, data);
-	else {
-		g_assert (i->from.object == i->to.object);
-		html_object_forall (i->from.object, html_object_get_engine (i->from.object, engine), f, data);
+	if (from_downline && HTML_OBJECT (from_downline->data)->parent)
+			interval_forall    (HTML_OBJECT (from_downline->data)->parent, from_downline, to_downline,
+					    html_object_get_engine (HTML_OBJECT (from_downline->data)->parent, engine), f, data);
+		else {
+			if (i->from.object == i->to.object)
+				html_object_forall (i->from.object, html_object_get_engine (i->from.object, engine), f, data);
+		}
 	}
 
 	g_slist_free (from_downline);
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/ChangeLog,v
retrieving revision 1.2062
diff -u -p -r1.2062 ChangeLog
--- ChangeLog	6 Dec 2004 16:41:35 -0000	1.2062
+++ ChangeLog	14 Dec 2004 06:38:34 -0000
@@ -1,3 +1,9 @@
+2004-12-14  Mengjie Yu  <meng-jie yu sun com>
+
+	* gtkhtml.c: (key_press_event):
+	fix #70085 he focus object may be a frame or an iframe, if so, 
+		   we must check its focus object recursively.
+
 2004-09-29  Radek Doulik  <rodo ximian com>
 
 	* gtkhtml.c (drag_data_received): call gdk_window_get_pointer so
Index: gtkhtml.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/gtkhtml.c,v
retrieving revision 1.583
diff -u -p -r1.583 gtkhtml.c
--- gtkhtml.c	6 Dec 2004 16:41:35 -0000	1.583
+++ gtkhtml.c	14 Dec 2004 06:38:47 -0000
@@ -866,6 +866,7 @@ key_press_event (GtkWidget *widget, GdkE
 	GtkHTML *html = GTK_HTML (widget);
 	GtkHTMLClass *html_class = GTK_HTML_CLASS (GTK_WIDGET_GET_CLASS (html));
 	gboolean retval, update = TRUE;
+	HTMLEngine *e;
 
 	html->binding_handled = FALSE;
 	html->priv->update_styles = FALSE;
@@ -898,9 +899,14 @@ key_press_event (GtkWidget *widget, GdkE
 		switch (event->keyval) {
 		case GDK_Return:
 		case GDK_KP_Enter:
-			if (html->engine->focus_object) {
+			e = html->engine;
+			/* the toplevel gtkhtml's focus object may be a frame or ifame */
+			while (html_object_is_frame (e->focus_object)) {
+				e = html_object_get_engine (e->focus_object, e);
+			}
+			if (e->focus_object) {
 				gchar *url;
-				url = html_object_get_complete_url (html->engine->focus_object, html->engine->focus_object_offset);
+				url = html_object_get_complete_url (e->focus_object, e->focus_object_offset);
 				if (url) {
 					/* printf ("link clicked: %s\n", url); */
 					g_signal_emit (html, signals [LINK_CLICKED], 0, url);
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/ChangeLog,v
retrieving revision 1.2062
diff -u -p -r1.2062 ChangeLog
--- ChangeLog	6 Dec 2004 16:41:35 -0000	1.2062
+++ ChangeLog	14 Dec 2004 07:08:00 -0000
@@ -1,3 +1,9 @@
+2004-12-14  Mengjie Yu  <meng-jie yu sun com>
+
+	* htmltext.c: (html_text_get_slave_at_offset):
+	fix #70087 fixes the wrong behaviour when offset is at the end
+		   of non-last line of a paragraph
+
 2004-09-29  Radek Doulik  <rodo ximian com>
 
 	* gtkhtml.c (drag_data_received): call gdk_window_get_pointer so
Index: htmltext.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmltext.c,v
retrieving revision 1.269
diff -u -p -r1.269 htmltext.c
--- htmltext.c	29 Nov 2004 15:53:09 -0000	1.269
+++ htmltext.c	14 Dec 2004 07:08:33 -0000
@@ -2914,8 +2914,7 @@ html_text_get_slave_at_offset (HTMLObjec
 
 	while (o && HTML_IS_TEXT_SLAVE (o)) {
 		if (HTML_IS_TEXT_SLAVE (o) && HTML_TEXT_SLAVE (o)->posStart <= offset
-		    && (offset < HTML_TEXT_SLAVE (o)->posStart + HTML_TEXT_SLAVE (o)->posLen
-			|| (offset == HTML_TEXT_SLAVE (o)->posStart + HTML_TEXT_SLAVE (o)->posLen && HTML_TEXT_SLAVE (o)->owner->text_len == offset)))
+		    && (offset <= HTML_TEXT_SLAVE (o)->posStart + HTML_TEXT_SLAVE (o)->posLen))
 			return HTML_TEXT_SLAVE (o);
 		o = o->next;
 	}
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/a11y/ChangeLog,v
retrieving revision 1.12
diff -u -p -r1.12 ChangeLog
--- ChangeLog	1 Nov 2004 09:41:59 -0000	1.12
+++ ChangeLog	14 Dec 2004 06:48:55 -0000
@@ -1,3 +1,11 @@
+2004-12-14  Mengjie Yu  <meng-jie yu sun com>
+
+	* object.c: (get_n_actions), (get_description), (action_get_name),
+	(do_action), (atk_action_interface_init), (gtk_html_a11y_get_type),
+	(gtk_html_a11y_get_name), (gtk_html_a11y_class_init),
+	(gtk_html_a11y_new):
+	fix #70088 make ui grab work by add a grab focus action interface.
+
 2004-11-01  Radek Doulik  <rodo ximian com>
 
 	* Makefile.am (AM_CFLAGS): use AM_FLAGS instead of CFLAGS
Index: object.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/a11y/object.c,v
retrieving revision 1.5
diff -u -p -r1.5 object.c
--- object.c	26 May 2004 02:26:17 -0000	1.5
+++ object.c	14 Dec 2004 06:48:55 -0000
@@ -29,12 +29,80 @@
 #include "paragraph.h"
 #include "utils.h"
 #include "text.h"
+#include <glib/gi18n.h>
 
 static void gtk_html_a11y_class_init (GtkHTMLA11YClass *klass);
 static void gtk_html_a11y_init       (GtkHTMLA11Y *a11y);
 
 static GtkAccessibleClass *parent_class = NULL;
 
+
+static gint
+get_n_actions (AtkAction *action)
+{
+	return 1;
+}
+
+static G_CONST_RETURN gchar*
+get_description (AtkAction *action, gint i)
+{
+	if (i == 0)
+		return _("grab focus");
+
+	return NULL;
+}
+
+static G_CONST_RETURN gchar*
+action_get_name (AtkAction *action, gint i)
+{
+	if (i == 0)
+		return _("grab focus");
+
+	return NULL;
+}
+
+
+
+static gboolean
+do_action (AtkAction * action, gint i)
+{
+	GtkWidget *widget;
+	gboolean return_value = TRUE;
+
+	widget = GTK_ACCESSIBLE (action)->widget;
+
+	if (widget == NULL) {
+	/*
+	* State is defunct
+	*/
+	return FALSE;
+	}
+
+	if (!GTK_WIDGET_SENSITIVE (widget) || !GTK_WIDGET_VISIBLE (widget))
+		return FALSE;
+
+
+	switch (i) {
+	case 0:
+		gtk_widget_grab_focus (widget);
+	default:
+		return_value = FALSE;
+		break;
+	}
+	return return_value;
+}
+
+static void
+atk_action_interface_init (AtkActionIface *iface)
+{
+	g_return_if_fail (iface != NULL);
+
+	iface->do_action = do_action;
+	iface->get_n_actions = get_n_actions;
+	iface->get_description = get_description;
+	iface->get_name = action_get_name;
+}
+
 GType
 gtk_html_a11y_get_type (void)
 {
@@ -54,6 +122,12 @@ gtk_html_a11y_get_type (void)
 			NULL                                             /* value table */
 		};
 
+		static const GInterfaceInfo atk_action_info = {
+			(GInterfaceInitFunc) atk_action_interface_init,
+			(GInterfaceFinalizeFunc) NULL,
+			NULL
+		};
+
 		/*
 		 * Figure out the size of the class and instance 
 		 * we are deriving from
@@ -69,6 +143,8 @@ gtk_html_a11y_get_type (void)
 		tinfo.instance_size = query.instance_size;
 
 		type = g_type_register_static (derived_atk_type, "GtkHTMLA11Y", &tinfo, 0);
+
+		g_type_add_interface_static (type, ATK_TYPE_ACTION, &atk_action_info);
 	}
 
 	return type;
@@ -125,6 +201,16 @@ gtk_html_a11y_ref_child (AtkObject *acce
 	return accessible_child;
 }
 
+static G_CONST_RETURN gchar*
+gtk_html_a11y_get_name (AtkObject *obj)
+{
+	G_CONST_RETURN gchar *name;
+	if (obj->name != NULL) {
+		return obj->name;
+	}
+	return _("HTML Container");
+}
+
 static void
 gtk_html_a11y_class_init (GtkHTMLA11YClass *klass)
 {
@@ -136,6 +222,7 @@ gtk_html_a11y_class_init (GtkHTMLA11YCla
 	atk_class->initialize = gtk_html_a11y_initialize;
 	atk_class->get_n_children = gtk_html_a11y_get_n_children;
 	atk_class->ref_child = gtk_html_a11y_ref_child;
+	atk_class->get_name = gtk_html_a11y_get_name;
 
 	gobject_class->finalize = gtk_html_a11y_finalize;
 }
@@ -214,7 +301,7 @@ gtk_html_a11y_new (GtkWidget *widget)
 	accessible = ATK_OBJECT (object);
 	atk_object_initialize (accessible, widget);
 
-	accessible->role = ATK_ROLE_HTML_CONTAINER;
+	accessible->role = ATK_ROLE_PANEL;
 	g_signal_connect_after(widget, "grab_focus", 
 			G_CALLBACK (gtk_html_a11y_grab_focus_cb),
 			NULL);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]