]> Pileus Git - ~andy/gtk/commitdiff
Fix GtkSwitchAccessible type definition
authorMatthias Clasen <mclasen@redhat.com>
Mon, 20 Jun 2011 04:00:39 +0000 (00:00 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 5 Jul 2011 20:08:00 +0000 (16:08 -0400)
It turns out that ATK_DEFINE_TYPE_WITH_CODE() is broken; it
tells GType that the class and instance size for the accessible
type are the same as for its parent type. Which is not true
if your instance struct has members such as 'description' here.
This was causing hard-to-track-down memory corruption, since
description and the GtkAccessible private pointer were sharing
the same memory location.

gtk/gtkswitch.c

index c63a68e6c44415d0d50ea561424c2e5ba47fa9af..6b8ed7845b2ebf821e10143593a6f2b62ffc4f1d 100644 (file)
@@ -1014,10 +1014,19 @@ struct _GtkSwitchAccessible
   guint  action_idle;
 };
 
+/* FIXME: We really want to use GailWidgetClass here */
+struct _GtkSwitchAccessibleClass
+{
+  GtkAccessibleClass parent_class;
+
+  gpointer f1;
+  gpointer f2;
+};
+
 static void atk_action_interface_init (AtkActionIface *iface);
 
-ATK_DEFINE_TYPE_WITH_CODE (GtkSwitchAccessible, _gtk_switch_accessible, GTK_TYPE_SWITCH,
-                           G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init))
+G_DEFINE_TYPE_WITH_CODE (GtkSwitchAccessible, _gtk_switch_accessible, g_type_from_name ("GailWidget"),
+                         G_IMPLEMENT_INTERFACE (ATK_TYPE_ACTION, atk_action_interface_init))
 
 static AtkStateSet *
 gtk_switch_accessible_ref_state_set (AtkObject *accessible)
@@ -1078,6 +1087,7 @@ _gtk_switch_accessible_init (GtkSwitchAccessible *self)
 {
   self->description = NULL;
   self->action_idle = 0;
+g_print ("switch action description inited to: %s\n", self->description);
 }
 
 /* accessibility: action interface */
@@ -1099,8 +1109,9 @@ static const gchar *
 gtk_switch_action_get_description (AtkAction *action,
                                    gint       i)
 {
-  GtkSwitchAccessible *accessible = (GtkSwitchAccessible*)action;
+  GtkSwitchAccessible *accessible = (GtkSwitchAccessible *)action;
 
+g_print ("switch action description: %s\n", accessible->description);
   return accessible->description;
 }
 
@@ -1111,6 +1122,7 @@ gtk_switch_action_set_description (AtkAction   *action,
 {
   GtkSwitchAccessible *accessible = (GtkSwitchAccessible*)action;
 
+g_print ("switch action set description: %s\n", description);
   g_free (accessible->description);
   accessible->description = g_strdup (description);