클래스/인스턴스 초기화 처리자

AtkObject 구현체가 다음에 해당하는 경우 GObject용 클래스 초기화 처리자를 설정해야합니다:

  1. 상위 객체에서 정의한 함수 호출을 재정의합니다. 객체에 atk_object_get_n_accessible_children() 함수와 비슷한 함수를 구현해야 할 때 보통 필요합니다. 객체가 하위 요소지만 위젯을 나타내지 않는다면 필요합니다.

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

    1. parent->init

      ATK 구현체에서 다음 두가지 경우가 필요한 경우 parent->init() 함수가 필요할 수도 있습니다:

      1. 보조 GTK 위젯에서 가져온 데이터를 캐시할 경우.
      2. 보조 GTK 위젯에서 보낸 시그널을 기다릴 경우.
    2. parent->notify_gtk

      ATK 구현체에서 보조 GTK 객체의 속성 알림을 기다려야 한다면, parent->notify_gtk() 함수가 필요할 지도 모르겠습니다. 예를 들어:

      예제 1-7notify_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

      GObject 인스턴스를 무효화 했을 때 데이터를 버려야 한다면 finalize() 함수로 메모리를 해제해야합니다. 예를 들면:

      예제 1-8finalize() 함수 개별 구현체
      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); 
      }