Inicializace třídy/instance

Budete muset vytvořit inicializátor třídy pro objekt GObject, pokud vaše implementace AtkObject buď:

  1. Znovu definuje kterákoliv volání funkcí definovaná v rodiči objektu. To je typicky nutné, když některý objekt potřebuje implementovat funkci, jako je atk_object_get_n_accessible_children(). To je nutné, když má objekt potomka, ale ten není reprezentován widgetem.

  2. Vyžaduje funkci parent->init, parent->notify_gtk nebo parent->finalize.

    1. parent->init

      Funkce parent->init() může být nutná, když implementace ATK potřebuje udělat něco z následujícího:

      1. Ukládat do mezipaměti data získaná z widgetu GTK v pozadí.
      2. Naslouchat signálům z widgetu GTK v pozadí.
    2. parent->notify_gtk

      Když implementace ATK potřebuje naslouchat upozornění na nějakou vlastnost u objektu GTK v pozadí, může být nutná funkce parent->notify_gtk(). Například:

      Příklad 1-7Vlastní funkce notify_gtk()
      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) 
         { 
            /* Handle the property change. */ 
         } 
         else 
         { 
            parent_class->notify_gtk (obj, pspec); 
         } 
      } 
      
    3. parent->finalize

      Když je potřeba uvolnit některá data při zničení instance GObject, pak je potřeba funkce finalize() k uvolnění paměti: Například:

      Příklad 1-8Vlastní funkce finalize()
      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); 
      }