Inicializadores de clases/instancias

Deberá tener creada un inicializador de clases para el GObject si su implementación de AtkObject:

  1. Redefina cualquier llamada de función por el padre del objeto. Generalmente esto es necesario cuando un objeto necesita implementar una función como atk_object_get_n_accessible_children(). Es necesario si el objeto tiene hijos pero no están representados con los widgets.

  2. Requires a parent->init, parent->notify_gtk, or parent->finalize function.

    1. parent->init

      Se puede necesitar una función parent->init() si la implementación de ATK necesita hacer cualquiera de las siguientes:

      1. Cachear cualquier dato obtenido desde un respaldo del widget de GTK.
      2. Escuche cualquier señal desde el widget GTK de respaldo.
    2. parent->notify_gtk

      Si la implementación de ATK necesita escuchar cualquier notificación de propiedad en el respaldo del objeto GTK, podría ser necesaria una función parent->notify_gtk(). Por ejemplo:

      Ejemplo 1-7Una función notify_gtk() personalizada
      void 
      myatkimp_mytype_real_notify_gtk (GObject    *obj, 
                                       GParamSpec *pspec) 
      { 
         GtkWidget *widget = GTK_WIDGET (obj); 
         AtkObject* atk_obj = gtk_widget_get_accessible (widget); 
      
         if (strcmp (pspec->name, "property-of-interest") == 0) 
         { 
            /* Gestionar el cambio de la propiedad. */ 
         } 
         else 
         { 
            parent_class->notify_gtk (obj, pspec); 
         } 
      } 
      
    3. parent->finalize

      Si es necesario para liberar cualquier dato cuando se destruye una instancia de GObject, entonces se necesita una función finalize() para liberar la memoria. Por ejemplo:

      Ejemplo 1-8Una función finalize() personalizada
      void 
      myatkimp_mytype_finalize (GObject *object) 
      { 
         MyAtkimpMyType *my_type = MYATKIMP_MYTYPE (object); 
      
         g_object_unref (my_type->cached_value); 
         G_OBJECT_CLASS (parent_class)->finalize (object); 
      }