[nautilus] a11y: add a method to create a derived GtkWidgetAccessible type



commit a9777929c4dd1a6975afd38c9e708ebc14cd7b02
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Thu Jun 7 13:45:01 2012 -0400

    a11y: add a method to create a derived GtkWidgetAccessible type
    
    For EelEditableLabel, we need to create an object derived from the
    accessible type of the parent class; since that will be a
    GtkWidgetAccessible, which is private, we can't just subclass it using
    the regular GObject mechanisms.
    This functions creates a derived GType by peeking at the parent
    accessible class and type.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=672498

 eel/eel-accessibility.c |   33 +++++++++++++++++++++++++++++++++
 eel/eel-accessibility.h |    3 +++
 2 files changed, 36 insertions(+), 0 deletions(-)
---
diff --git a/eel/eel-accessibility.c b/eel/eel-accessibility.c
index 099dff1..62249c9 100644
--- a/eel/eel-accessibility.c
+++ b/eel/eel-accessibility.c
@@ -110,6 +110,39 @@ eel_accessibility_create_derived_type (const char *type_name,
 	return type;
 }
 
+GType
+eel_accessibility_create_accessible_gtype (const char *type_name,
+					   GtkWidget *widget,
+					   GClassInitFunc class_init)
+{
+	GType atk_type, parent_atk_type;
+	GTypeQuery query;
+	AtkObject *parent_atk;
+	GtkWidgetClass *parent_class;
+
+	if ((atk_type = g_type_from_name (type_name))) {
+		return atk_type;
+	}
+
+	parent_class = g_type_class_peek_parent (G_OBJECT_GET_CLASS (widget));
+	parent_atk = parent_class->get_accessible (widget);
+	parent_atk_type = G_TYPE_FROM_INSTANCE (parent_atk);
+
+	if (!parent_atk_type) {
+		return G_TYPE_INVALID;
+	}
+
+	/* Figure out the size of the class and instance 
+	 * we are deriving from
+	 */
+	g_type_query (parent_atk_type, &query);
+
+	/* Register the type */
+	return g_type_register_static_simple (parent_atk_type, type_name,
+					      query.class_size, class_init,
+					      query.instance_size, NULL, 0);
+}
+
 
 static GQuark
 get_quark_accessible (void)
diff --git a/eel/eel-accessibility.h b/eel/eel-accessibility.h
index 7b4e280..408ea1a 100644
--- a/eel/eel-accessibility.h
+++ b/eel/eel-accessibility.h
@@ -43,6 +43,9 @@ AtkObject    *eel_accessibility_set_atk_object_return (gpointer              obj
 GType         eel_accessibility_create_derived_type   (const char           *type_name,
 						       GType                 existing_gobject_with_proxy,
 						       EelAccessibilityClassInitFn class_init);
+GType         eel_accessibility_create_accessible_gtype (const char *type_name,
+							 GtkWidget *widget,
+							 GClassInitFunc class_init);
 
 char*         eel_accessibility_text_get_text         (AtkText              *text,
                                                        gint                 start_pos,



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