Initialisateurs de classe/instance

Vous allez devoir configurer un initialisateur de classe pour l'objet GObject dans l'un des deux cas suivants : si votre implémentation d'AtkObject

  1. redéfinit un des appels de fonction défini par l'objet parent. C'est en général nécessaire quand un objet doit implémenter une fonction comme atk_object_get_n_accessible_children(). C'est nécessaire si l'objet possède des fils qui ne sont pas représentés par des éléments graphiques.

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

    1. parent->init

      Une fonction parent->init() peut être nécessaire si l'implémentation ATK a besoin d'effectuer l'une des actions suivantes :

      1. mettre en cache toutes les données obtenues à partir de l'élément graphique GTK auxiliaire,
      2. écouter tous les signaux émis par l'élément graphique GTK auxiliaire.
    2. parent->notify_gtk

      Si l'implémentation d'ATK doit écouter toutes les notifications de propriété de l'objet GTK auxiliaire, une fonction parent->notify_gtk() peut être nécessaire. Par exemple :

      Exemple I.7 Une fonction personnalisée notify_gtk()
      void 
      mon_imp_atk_montype_real_notify_gtk (GObject    *obj, 
                                       GParamSpec *pspec) 
      { 
         GtkWidget *widget = GTK_WIDGET (obj); 
         AtkObject* atk_obj = gtk_widget_get_accessible (widget); 
      
         if (strcmp (pspec->name, "propriété-concernée") == 0) 
         { 
            /* Gestion de la modification de propriété. */ 
         } 
         else 
         { 
            parent_class->notify_gtk (obj, pspec); 
         } 
      } 
      
    3. parent->finalize

      S'il est nécessaire de libérer toutes les données quand une instance GObject est détruite alors il y a besoin d'une fonction finalize() pour libérer la mémoire. Par exemple :

      Exemple I.8 Une fonction personnalisée finalize()
      void 
      mon_imp_atk_montype_finalize (GObject *object) 
      { 
         MonImpAtkMonType *mon_type = MONIMPATK_MONTYPE (object); 
      
         g_object_unref (mon_type->cached_value); 
         G_OBJECT_CLASS (parent_class)->finalize (object); 
      }