그놈 접근성 개발자 안내서
그놈 접근성 안내서는 다양한 사용자가 프로그램을 사용할 수 있도록 프로그래밍에 노력을 기울이고자 하는 개발자용 문서입니다. 이 안내서는 508가지 요구사항을 다루는 수많은 섹션으로 구성했습니다.

접근성이란 무엇입니까?
접근성이란 장애우가 실질적인 활동을 할 수 있게 돕는 수단을 말합니다.서비스, 제품, 정보 활용, 업무 활동이 해당합니다. 그놈은 장애우가 그놈 사용자 환경의 모든 기능을 활용할 수 있도록 라이브러리와 지원 프레임워크를 제공합니다.
필요한 경우 보조 기술(음성 인터페이스, 스크린 리더, 입력 장치 등)을 활용하여 일시/영구적인 장애를 지닌 사람이 그놈 데스크톱을 활용할 수 있습니다. 보조 기술은 야외 또는 직장에서 컴퓨터를 활용하는 사용자에게도 쓸만합니다. 예를 들어, 교통 체증 상황인 경우 음성 입출력을 활용하여 전자메일을 확인할 수 있습니다.
보조 기술은 그놈 저장소의 ATK 모듈에서 찾을 수 있는 접근성 도구 모음(ATK) API로 프로그램에서 정보를 받습니다. 그놈 위젯에 접근성 API 지원을 내장했기 때문에 그놈 프로그램은 별도의 작업 없이 보조 기술과 상당히 잘 동작해야합니다. 예를 들어, 보조 기술은 어쨌든 프로그램에(gtk_label_set_text() 함수 또는 gtk_button_new_with_label() 함수와 같은 GTK 함수 호출로)설정한 위젯 레이블을 자동으로 읽을 수 있습니다. 게다가 위젯과 관련한 풍선 도움말 텍스트가 있는지 찾아서 위젯의 기능을 사용자에게 설명할 때 활용합니다.
하지만 약간의 노력을 보태면, 보조 기술과 좀 더 잘 어우러진 프로그램 기능을 만들 수 있습니다. 개인 사용자를 돕는데 앞서, 이 안내서는 관공서, 교육 시장에 매우 매력적인 제품을 만들 수 있으며, 법적으로 접근성을 요구하는 수많은 프로그램도 만들 수 있습니다.

장애의 유형
미국만 보더라도, 약 3천만명 정도의 사람이 접근 불가능한 설계로 인하여 컴퓨터를 충분히 사용하지 못하고 있으며, 월드 와이드 웹을 사용하는 전세계 8%의 사람이 유사한 어려움을 겪고 있습니다. 장애 유형은 다음과 같습니다:
시각 장애 - 시작 장에에는 저시력(근시, 난시, 초고도 근/원시, 색맹, 시야 협착 등)부터 완전한 맹인 단계까지가 여기에 해당합니다. 글자 크기 및 색상 선택, 손의 움직임 및 시선의 바람직한 연동성을 요구(마우스 커서 이동)하는 작업은 시각 장애우에게 불편을 초래합니다.
운동 장애 - 근육 제어에 이상이 있거나 힘이 약한 사용자는 표준 키보드나 마우스를 사용하는 것이 어렵습니다. 예를 들어, 두 키를 동시에 누를 수 없거나 임의의 키를 실수로 칠 수도 있습니다.
청각 장애 - 청각 장애는 일부 소리는 들을 수는 있지만 들은 단어나 문장을 구별하지 못하는 증상부터 심각한 난청 증상까지 포함합니다. 중요한 정보를 소리로만 다루는 프로그램은 이런 상요자에게 불편을 초래합니다.
인지 및 언어 장애 - 인지 및 언어 장애에는 난독증, 기억, 문제 해결과 이해, 언어 쓰거/말하기에 지장있는 경우가 이에 해당합니다. 복잡하거나 일관성이 없는 표시, 부적절한 단어의 선택으로 이러한 사용자가 컴퓨터 사용에 어려움을 겪습니다.
발작 장애 - 특정한 빛이나 반복적인 음성은 일부 민감한 사용자들에게 발작 증세를 일으킵니다.

그놈의 접근성 동작 방식
접근성 도구 모음(ATK)은 GUI 구성 요소에 접근할 수 있도록 필요한 모든 인터페이스 구현체 모음을 기술했습니다. 인터페이스는 도구 모음과 무관합니다. 구현체는 GTK, Motif, Qt 등 다양한 위젯으로 작성할 수 있습니다.
The implementation for the GTK widgets is done via the GtkAccessible class. It is the base class for accessible implementations for GtkWidget subclasses. It is a thin wrapper around AtkObject, which adds facilities for associating a widget with its accessible object. Those parts of your application that use standard GTK widgets will have a basic level of accessibility, without you having to modify your application at all.
다른 데스크톱에서 동작하는 대부분의 보조 기술은 역사적으로 데스크톱의 OS 이벤트 스누핑을 기반으로 동작하는 복잡한 오프스크린 모델, 비 지원 OS의 사용, 프로그램 기능 및 API, 기타 이식하기 난해한 기술의 관리가 필요함을 발견했습니다. 이 때문에 OS 및 프로그램별, 프로그램의 버전별로 각자 따로따로 놀아나는 "허접한" 보조기술 지원을 만들어냈습니다. 반면에 그놈 데스크톱에서는 AT에서 필요한 모든 정보를 프로그램이 실행할 때 그놈 접근성 프레임워크에서, 도구 모음과는 별개의 서비스 제공 인터페이스로 제공했습니다. SPI는 유닉스 기반 AT에 화면 리더, 화면 돋보기같은 수단을 제공하여 일관되고 안정적인 API로 실행중인 프로그램에 접근성 정보를 얻어냈고, 대부분에 경우에 있어 오프스크린 모델의 필요성을 불식시킬 수 있었습니다. 프로그램에 대한 접근성 지원은 도구 모음에 적절한 API에서 프로그램 도구 모음에 "내장"했고(대부분의 네이티브 C 프로그램에는 ATK를, 자바 프로그램에는 Java 접근성 API를 활용), 관련 "브릿지"(다이어그램 참고)로 "AT-SPI" 일반 인터페이스를 내놓았습니다.
그놈의 내장 접근성 지원이란, 내장 지원 방식과 혼동되는 일반적이지 않은 수단은 활용하지 않도록 "자유로운" 보조 기술을 지원하는 보유 그놈 위젯을 활용하여 프로그램을 만듦을 의미합니다.
gtk+/GNOME 위젯은 이 문서 어디든 일반 접근성 지침을 따랐을 경우 접근할 수 있으며, 사용자 인터페이스의 역할에 맞는 ATK 인터페이스를 구현합니다. ATK 구현체는 그놈 도구 모음 위젯 "보유물"(오래되지 않은 gtk+ 및 그놈 위젯)로 제공하며, 대부분 기존 gtk+ 또는 그놈 위젯에서 오는 새 위젯도 적절한 접근성 지원을 물려받습니다.
그놈 내장 접근성 지원에서는 프로그램의 일부를 바꾸는 접근성 관련 코드 없이도 중요한 기능을 제공하지만, 보통 프로그램에서는 일부 위젯에 제공하는 기본 설명을 종종 개선할 수 있으며 프로그램에서 간단한 ATK 메서드 호출로 위젯의 개별 목적에 따라 다듬을 수 있습니다. 예를 들면, 대부분의 경우 프로그램에 적당한 ATK 함수 호출로 위젯의 글자 설명을 추가하거나 바꿔서 보조 기술의 결과물이 사용자에게 기능의 목적이나 상태를 설명할 수 있어야합니다. 자세한 내용은 접근성 지원 코드 작성 지침서 를 참고하십시오.
프로그램에 개별 제작 위젯을 사용한다면, 해당 위젯의 속성을 보조 기술에 알려주어야 합니다. 추가 정보는 개별 구성요소 접근성 처리 및 접근성 API 활용 예제를 참고하십시오.
For additional, in-depth information regarding GTK/GTK+, see the GTK+ Reference Manual, the outdated GTK+ 2.0 Tutorial and the official GTK+ FAQ.

개발자 간편 시작
시작할 때 몇가지 확인해볼 사항이 있습니다:

프로그램에 접근성이 있는지 어떻게 확인합니까?
시작하기에 앞서, GNOME 프로그램 접근성 처리 - 개요를 참고하십시오. 코드 작성에 앞서 접근성 지원 사용자 인터페이스 지침서, 접근성 지원 코드 작성 지침서를 참고하십시오. 설계 후 시험 항목에 대한 확인 목록을 참고하려면 사용자 인터페이스 확인 목록을 참고하십시오.

공통적인 함정에는 무엇이 있습니까?
사용자 인터페이스 확인 목록에는 설계 단계에서 가끔씩 살펴볼 광범위한 분야를 다룹니다.

공통 ATK로 무얼 할 수 있습니까?
공통 ATK 호출 구성 요소의 약어 목록은 여기에 있습니다.

좀 더 복잡한 ATK로 무얼 할 수 있습니까?
추가 정보는 개별 요소 접근성 처리 및 접근성 API 활용 예제 를 살펴보십시오.

Introducing ATK, AT-SPI and GTK+
그놈 접근성 구조
ATK is the toolkit that GNOME uses to enable accessibility for users needing extra support to make the most of their computers. ATK is used by tools such as screen readers, magnifiers, and input devices to permit a rich interaction with the desktop through alternative means. See the ATK SourceForge Project and the ATK Library for more information.
AT-SPI is the primary service interface by which assistive technologies query and receive notifications from running applications. The full API can be explored here.
GTK+ is a library for creating graphical user interfaces. It works on many UNIX-like platforms, Windows, and on framebuffer devices. GTK+ is released under the GNU Library General Public License (GNU LGPL), which allows for flexible licensing of client applications. GTK+ has a C-based object-oriented architecture that allows for maximum flexibility. Bindings for other languages have been written, including C++, Objective-C, Guile/Scheme, Perl, Python, TOM, Ada95, Free Pascal, and Eiffel. Its GtkAccessible class is the base class for accessible implementations for GtkWidget subclasses. It is a thin wrapper around AtkObject, which adds facilities for associating a widget with its accessible object.
For additional, in-depth information regarding GTK/GTK+, see the GTK+ Reference Manual, the GTK section of the ATK Guide, the outdated GNOME-hosted GTK+ 2.0 Tutorial and the official GTK+ FAQ.

접근성 있는 GNOME 응용 프로그램 만들기 - 개요
프로그램에서 표준 GTK 위젯만 활용한다면, 프로그램에(확실히) 접근성 처리 과정에 별도로 해야 할 일이 없습니다. 다만, GUI 객체 중에 레이블이나 풍선 도움말이 없는 그래픽 단추, 상태 표시줄과 같은 구성 요소에 관련 있는 텍스트 설명이 없는 점에 주목하십시오.
일부 위젯에서 제공하는 기본 설명을 개선하고, 프로그램의 위젯별 목적에 맞춰 다듬을 수도 있습니다. 적당한 ATK 함수 호출로 위젯의 슬 설명을 추가하거나 바꾸어 보조 기술을 통해 사용자에게 위젯의 존재 목적과 상태를 설명할 수 있어야합니다. 자세한 내용은 접근성 지원 코드 작성 지침서를 참고하십시오.
프로그램에 개별 제작 위젯을 사용한다면, 해당 위젯의 속성을 보조 기술에 알려주어야 합니다. 추가 정보는 개별 구성요소 접근성 처리 및 접근성 API 활용 예제를 참고하십시오.

접근성 지원 코드 작성 지침
가능한한 보조 기술이 프로그램에서 동작하도록 코드에서 처리할 수 있는 일을 여기에 언급하겠습니다. (이 문서 후반의 접근성 지원 사용자 인터페이스 지침서에서 GUI를 설계할 때 고려해야 할 사항을 찾아보실 수 있습니다):
간단한 문장을 표시하지 않으려는 구성 요소(그래픽 단추의 경우)에 대해서는, atk_object_set_name() 함수로 이름을 지정하십시오. 이미지만 있는 단추, 논리 그룹을 붙일 패널, 텍스트 영역 등에 대해 이런 처리를 하고 싶을 수도 있습니다.
구성요소에 풍선 도움말을 제공할 수 없다면 사용자에게 제공할 수 있는 보조 기술의 설명을 제공하는 대신 atk_object_set_description() 함수를 사용하십시오. 예를 들자면, 닫기 단추에 편의 설명을 제공하는 경우:

GtkButton에 편의 설명 제공

{
  AtkObject *obj;
  obj = gtk_widget_get_accessible(button);
  atk_object_set_description(obj,_("Closes the window"));
}

프로그램의 모든 이미지 및 아이콘에 글자 설명을 넣으려면 atk_image_set_description() 함수를 사용하십시오.
여러 구성 요소가 논리 그룹을 형성한다면 컨테이너 하나에 넣으십시오.
다른 구성 요소를 설명하는 레이블을 언제 넣든지, atk_relation_set_add_relation() 함수를 사용하여 어떤 레이블이 구성 요소에 붙었는지 보조 기술에서 확인할 수 있게 하십시오. (gtk_label_set_mnemonic_widget() 함수를 활용하여 구성요소의 레이블을 붙였다면 ATK_RELATION_LABEL_FOR 관계를 자동으로 만드므로 다음 코드는 필요하지 않습니다):

GtkWidget에 GtkLabel 연동

{
  GtkWidget *widget;
  GtkLabel *label;

  AtkObject *atk_widget, *atk_label;
  AtkRelationSet *relation_set;
  AtkRelation *relation;
  AtkObject *targets[1];

  atk_widget = gtk_widget_get_accessible(widget);
  atk_label = gtk_widget_get_accessible (GTK_WIDGET(label));

  relation_set = atk_object_ref_relation_set (atk_label);
  targets[0] = atk_widget;

  relation = atk_relation_new(targets,1, ATK_RELATION_LABEL_FOR);
  atk_relation_set_add(relation_set,relation);
  g_object_unref(G_OBJECT(relation));
}

개별 위젯을 만들 경우, 접근성을 지원하는지 확인하십시오. 다른 GTK 위젯의 파생요소인 개별 구성요소는 필요한 대로 접근성 정보를 물려받아야합니다. 추가 정보는 개별 구성요소 접근성 처리를 살펴보십시오.
자유롭게 가져온 위젯을 깨먹지 마십시오! GUI에서 컨테이너에 접근할 수 없으면 컨테이너의 어떤 구성 요소에도 접근할 수 없습니다.

접근성 API
보조 기술과 잘 동작하는지 프로그램에서 확인할 때 활용할 몇가지 기본 API 호출이 있습니다. 예를 들면 여러분이 직접 개별 편의 위젯을 작성할 수 있게 하는 그런 확장성을 지닌 완전한 접근성 API가 있습니다.

일반적으로 활용하는 ATK API 호출
API	설명
AtkObject* gtk_widget_get_accessible (GtkWidget*)	지정 GTK 위젯을 보조 기술로 설명하는 접근성 객체를 반환합니다.
void atk_object_set_name (AtkObject*, const gchar*)	접근성 객체의 이름을 지정합니다. 눌렀을 때 프로그램을 끝내는 그래픽 단추 객체가 있다면 해당 객체의 이름은 "끝내기"가 됩니다.
void atk_object_set_description (AtkObject*, const gchar*)	접근성 객체의 텍스트 설명을 설정합니다. 그래픽 "닫기" 단추 객체가 있다면 객체 설명은 "창을 닫습니다"가 됩니다.
AtkRelation* atk_relation_new (AtkObject**, gint, AtkRelationType)	대상 객체의 지정 키 밎 지정 목록의 새 관계를 만듭니다. 보통 어떤 위젯과 보조 기술의 관계가 어떻게 되는지를 나타냅니다. 예를 들어, 일부 GtkLabel 위젯은 동일한 창에 있는 GtkTreeView의 설명입니다.
void atk_image_set_description (AtkImage*, const gchar*)	접근 가능한 이미지 객체의 텍스트 설명을 설정합니다. 패널 애플릿에서 가상 데스크톱의 작은 미리보기 그림이 있다면, 이 그림에 대한 설명은 "1번 데스크톱에서 정리한 창을 보여주는 이미지"가 됩니다.

접근성 API 활용 예제
앞서 설명한 대로, GTK 위젯을 설정했거나 ATK 인터페이스를 구현한 다른 위젯 라이브러리를 활용할 경우 프로그램에 접근할 수 있게 약간의 처리 과정을 거치든지 손을 댈 필요가 없습니다. 보통 손을 대야하는 대부분의 일반적인 경우는 두가지입니다:
atk_object_set_description()함수 또는 atk_image_set_description(): 함수로 일부 컨트롤 및 이미지의 설명을 달아주십시오:

단추에서 볼 수 있는 설명 설정

{
   AtkObject *obj;
   obj = gtk_widget_get_accessible(button);
   atk_object_set_description(obj,_("Opens Preferences dialog"));
}

atk_relation_new() 함수와 atk_relation_set_add() 함수로 위젯의 흔치 않은 그룹 관계를 지정하십시오:

두 컨트롤의 접근 관계 지정

{
  GtkWidget *widget;
  GtkLabel *label;

  AtkObject *atk_widget, *atk_label;
  AtkRelationSet *relation_set;
  AtkRelation *relation;
  AtkObject *targets[1];

  atk_widget = gtk_widget_get_accessible (widget);
  atk_label = gtk_widget_get_accessible (GTK_WIDGET(label));

  relation_set = atk_object_ref_relation_set (atk_label);
  targets[0] = atk_widget;

  relation = atk_relation_new(targets,1, ATK_RELATION_LABEL_FOR);
  atk_relation_set_add(relation_set,relation);
  g_object_unref(G_OBJECT(relation));
}

The examples in the rest of this section are mostly to give you a flavor of the scope of the ATK. They cover techniques that you may never need to use as an application developer, although they may be of interest if you are writing your own custom widgets (see Making Custom Components Accessible) or if you want to write an assistive technology application.

프로그램에서 접근성 정보 가져오기
ATK 호출을 활용하려는 프로그램은 다음 지시 사항 중 하나(또는 이상)를 진행해야합니다:
atk_add_focus_tracker() 함수와 같은 이벤트 감시자를 만드십시오:

atk_add_focus_tracker (_my_focus_tracker);

_my_focus_tracker()은 함수 프로토타입입니다:

void _my_focus_tracker (AtkObject *aobject);

atk_add_global_event_listener() 함수로 전역 이벤트 리스터를 설정하십시오:

mouse_watcher_focus_id =   atk_add_global_event_listener(_my_global_listener,"Gtk:GtkWidget:enter_notify_event");

_my_global_listener에는 Glib GSignalEmissionHook 프로토타입을 지니고 있습니다. 이 예제에서는 GtkWidget 객체애서 enter_notify_even signal 시그널이 발생했을 때 _my_global_listener() 함수를 호출합니다.
다음 함수를 호출하여 ATK 최상위 객체에 접근하십시오.

AtkObject *root_obj = atk_get_root();

이 코드에서는 현재 실행중인 프로그램에서 모든 최상위 창 정보를 담은 AtkObject를 반환합니다. 사용자는 최상위 창에 해당하는 최상위 객체의 하위 객체로 접근하여 객체 계층을 타고 탐색할 수 있습니다.

AtkObject 인터페이스 요청
(예: gtk_widget_get_accessible() 함수를 호출하여) 프로그램의 객체와 관련된 AtkObject 를 찾았다면, 다양한 방식으로 구현한 인터페이스를 찾을 수 있습니다:
예를 들자면 이미 존재하는 ATK_IS_... 매크로를 활용합니다:
ATK_IS_ACTION(atkobj)
ATK_IS_COMPONENT(atkobj)
등(각 인터페이스당 하나를 활용)
매크로에서 TRUE를 반환하면 인터페이스에서 안전하게 ATK 객체를 만들 수 있습니다.
atk_object_get_role() 함수를 호출하여 AtkObject 동작을 시험하십시오. 어떤 주어진 동작이든 몇가지 ATK API를 구현합니다.

ATK 시그널 처리자 설정
예제에서는 column_inserted 시그널을 활용합니다:

table_column_inserted_id = g_signal_connect_closure_by_id (my_atk_obj, 
g_signal_lookup("column_inserted", G_OBJECT_TYPE(my_atk_obj)), 0, 
g_cclosure_new(G_CALLBACK (_my_table_column_inserted_func), NULL, NULL), FALSE);

AtkObject my_atk_object에서 column_inserted 시그널이 나오면 _my_table_column_inserted_func() 함수를 호출합니다.
시그널에 세부 속성 값을 지원한다면 시그널에 연결하는 방식이 다를 수 있습니다. children_changed 시그널에는 add 세부 속성 값을 지원합니다. add 세부 속성값도 지정한 시그널에 연결하려면 다음 코드를 활용하십시오:

child_added_id = g_signal_connect_closure (my_atk_obj,"children_changed::add",
g_cclosure_new (G_CALLBACK(_my_children_changed_func), NULL, NULL), FALSE);

이 코드에서는 AtkObject my_atk_obj에서 나타난 children_changed 시그널에 add 세부 속성 값이 들어갔을 경우 _my_children_changed_func() 함수를 호출합니다.

ATK 객체 구현

등록
이 예제에서는 GTK_TYPE_MYTYPE 객체 활용을 예로 들어보겠습니다. ATK 구현체는 MYATKIMP_TYPE_MYTYPE이라고 하겠습니다. MYATKIMP_TYPE_MYTYPE_FACTORY 라고 하는 팩토리 객체가 필요합니다.
GTK 객체의 ATK 구현체를 등록하려면, 모듈의 gtk_module_init() 함수에서 다음 단계를 따라야합니다:
기본 레지스트리에 접근하십시오:

default_registry = atk_get_default_registry();

이 함수 호출을 만들어 이 모듈의 gtk_module_init() 함수에 ATK 객체를 등록하십시오:

atk_registry_set_factory_type (default_registry, GTK_TYPE_MYTYPE, 
MYATKIMP_TYPE_MYTYPE_FACTORY);

GTK_TYPE_MYTYPE의 AtkObject 구현체를 MYATKIMP_TYPE_MYTYPE_FACTORY에 등록합니다. 이 팩토리 객체는 MYATKIMP_TYPE_MYTYPE 형식 객체를 만드는 방법을 구현합니다.

팩토리 객체
팩토리 객체는 ATK_TYPE_OBJECT_FACTORY 클래스 형식의 하위 형식과 create_accessible() 함수를 구현해야 합니다. 앞서 언급한 함수는 적절한 AtkObject 객체를 만들어야합니다. 팩토리 객체는 하나 이상의 형식 객체를 만들 때 활용할 수 있으며 create_accessible() 함수는 객체 빌드 과정에서 출분히 알아서 잘 동작해야 하고 올바른 AtkObject 객체를 반환해야합니다.

개별 객체의 ATK 구현 처리
모든 GObject 객체는 get_type() 함수를 구현합니다. 이 함수 이름에 대해 이름 규칙을 적용하면 myatkimp_mytype_get_type()이 됩니다.
이 함수에서, 객체 구현체의 인터페이스를 지정합니다. 다음 로직이 get_type() 함수에 있다면, 이 객체는 ATK_TEXT 인터페이스를 구현합니다:

get_type() 함수 예제

static const GInterfaceInfo atk_text_info = 
{ 
   (GInterfaceInitFunc) atk_text_interface_init, 
   (GInterfaceFinalizeFunc) NULL, 
   NULL 
}; 

g_type_add_interface_static (type, ATK_TYPE_TEXT, 
                             &atk_text_info);

다음 프로토타입을 보유한 atk_text_interface_init() 함수도 구현해야합니다:

void atk_text_interface_init (AtkTextIface *iface);

이 함수는 다음과 같이 인터페이스 함수 호출을 개별 구현체에 연결합니다:

AtkObject 구현체에 개별 인터페이스 호출 연결

void 
atk_text_interface_init (AtkTextIface *iface) 
{ 
   g_return_if_fail (iface != NULL); 
   iface->get_text = myatkimp_mytype_get_text; 
   iface->get_character_at_offset = myatkimp_mytype_get_character_at_offset; 
   ... 
}

그 다음 myatkimp_mytype_get_text() 함수, myatkimp_mytype_get_character_at_offset() 함수, ATK_TEXT 인터페이스 함수의 나머지 부분을 구현해야합니다.

AtkObject 구현
AtkObject는 GObjects이며, 모든 GObject는 get_type() 함수를 지정해야합니다. 클래스 및 인스턴스 초기화 처리자를 설정하는 예제를 보여드리겠습니다. 여기서 get_type() 함수는 ATK_TEXT 객체 구현체를 지정하며, MYATKIMP_MYPARENTTYPE이 될 상위 객체도 지정합니다.

클래스/인스턴스 초기화 처리자
AtkObject 구현체가 다음에 해당하는 경우 GObject용 클래스 초기화 처리자를 설정해야합니다:
상위 객체에서 정의한 함수 호출을 재정의합니다. 객체에 atk_object_get_n_accessible_children() 함수와 비슷한 함수를 구현해야 할 때 보통 필요합니다. 객체가 하위 요소지만 위젯을 나타내지 않는다면 필요합니다.
Requires a parent->init, parent->notify_gtk, or parent->finalize function.
parent->init
ATK 구현체에서 다음 두가지 경우가 필요한 경우 parent->init() 함수가 필요할 수도 있습니다:
보조 GTK 위젯에서 가져온 데이터를 캐시할 경우.
보조 GTK 위젯에서 보낸 시그널을 기다릴 경우.
parent->notify_gtk
ATK 구현체에서 보조 GTK 객체의 속성 알림을 기다려야 한다면, parent->notify_gtk() 함수가 필요할 지도 모르겠습니다. 예를 들어:

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); 
   } 
}

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

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); 
}

개별 구성 요소 접근성 처리
개별 구현 위젯에 ATK 지원 기능을 추가하면 틀림없이 편의성 기반과 함께 동작합니다. 이에 따라 필요한 몇가지 과정이 있습니다:
사용자 인터페이스 지침에 해당하는 개별 구현 위젯을 판단합니다.
위젯 특징 및 기능에 따라 어떤 ATK 인터페이스를 개별 위젯에 구현해야 할 지 결정합니다;
어떤 ATK 인터페이스를 상위 위젯 클래스로부터 상속할 수 있는지 판단합니다;
위젯 클래스에 적당한 ATK 인터페이스를 다음 두가지 중 한가지 방법으로 구현하십시오:
개별 구현 위젯으로 바로 처리하거나
in an AtkObject subtype created by a new AtkObjectFactory subclass
두번째 방식으로 간다면 적절한 팩토리 객체 형식을 실행 도중에 AtkObjectFactoryRegistry로 등록해야합니다.

접근성 지원 사용자 인터페이스 지침
프로그램 GUI를 설계할 때, 보조 기술과의 연계성과는 관계없이 가능한 한 다양한 사용자가 쓸 수 있도록 따르는 여러 단순 지침서가 있습니다. "GUI를 장애우가 활용할 수 있도록 하는" 경우만 생각하는 어리석음에 빠지지 마시고 장애우가 프로그램을 사용할 일이 없다는걸 알아도 이런 예외를 신경쓰지 않는게 좋습니다. 여러분을 비롯한 모두가 프로그램을 사용할 경우 다음 지침이 전반적인 편의성 개선을 도와줍니다!

일반
프로그램에서 어떤 기능을 찾을 수 없거나, 모든 설정을 복구할 수 있음에도 설정을 되돌리는데 상당한 시간을 소비하는 실수를 범하면 심히 당황스럽습니다. 여러분의 신체에 어떤 장애가 있다면 노력만이 답이고 이런 부당함으로 인해 상당수의 시간을 허비합니다. 다음 일부 지침은 모든 사용자가 이런 상황을 겪지않게 도와줍니다.
사용자 데이터 또는 프로그램 설정을 바꾸는 모든 동작을 되돌리는 기능을 제공하십시오. 가능하다면, 한 단계 이상의 실행 취소 및 다시 실행 동작, 어떤 동작을 되돌릴 수 없는지 미리 볼 수 있는 기록 목록을 제공하십시오.
기본 설정을 복원하는 명령을 제공하십시오. 일부 설정(글꼴이 매우 작아진다거나)때문에 개인이 프로그램을 완전히 쓰지 못하게 하는 상황을 만들 수 있다면, 프로그램 자체에서보단 프로그램 외부에서 기본 값으로 설정 항목을 복원하게 하는것이 좋습니다. 예를 들자면 이런 수단은 명령행 스위치로 처리할 수 있습니다.
사용자가 잘못된 동작을 수행하지 못하도록 막아주십시오. 갑작스럽게 일어날 수 있는 동작(마우스 동작)이나 쉽게 되돌릴 수 없는(파일 덮어쓰기)동작 같은 경우와 같은 일부의 경우에 중요합니다. 확인 대화상자를 활용하거나 잠재적으로 문제를 일으키는 동작을 수행하는 개별 모드를 사용자가 개별적으로 처리하도록 강제하는 방안을 고려하십시오.
사용자 메모리 사용량을 최소화하십시오. 예를 들어 사용자가 여러 문서를 동시에 보게 하시고, 사용자가 설명 내용을 따르는 동안 온라인 도움말 또는 다른 절차를 볼 수 있게 하십시오. 나타난 어떤 내용이든 복사하고 입력할 수 있는 데이터를 어디든 붙여넣을 수 있게 하십시오.
사용자에게 디스크 삽입 동작을 요구하지 마십시오. 사용자의 신체 장애 여부에 따라 디스크를 넣거나 바꾸는 동작이 실제로 어려울 수 있든지, 그 전에 올바른 디스크를 알아내는 과정도 어려울 수 있습니다. 프로그램을 CD-ROM으로 설치했다면, 모든 파일을 사용자의 하드 드라이브에 복사하도록 요구하는 단계를 제공하십시오.
자주 사용하는 기능을 메뉴 깊숙한 곳에 두지 마십시오. 마우스를 사용하든, 키보드 또는 어떤 입력장치를 사용하든 깊은 곳에 들어간 메뉴 항목은 가장 꺼려하는 부분입니다. 해당 항목이 어디있는지 반복해서 기억하는만큼, 언제든 어렵고 접근하는데 시간이 걸립니다.
사용자로 하여금 불필요한 과정을 거치게 하지 마십시오. 예를 들어, 마법사 도구는 수많은 설정 항목에 불편을 느끼는 사용자에게 한번에 처리할 수 있도록 하는 목적으로 요긴하지만, 어떤 사용자에겐 시간을 아끼고, 키 누름 횟수를 최소화할 목적으로 필요합니다. 어떤 사용자는 불필요한 단계를 건너뛸 수 있거나 필요한 과정으로 바로 건너뛰는게 이득입니다. 마지막 단계로 바로 건너뛰는 완료 단추의 배치를 고려하시고 중간 단계의 기본 응답을 가정하십시오. 여러 단계를 거쳐야 한다면, 사용자가 해당 단계를 다 거쳐갈 지, 일반적인 설정을 활용할 지 질문하는 방안을 고려하십시오.

키보드 탐색
제대로 설계한 키보드 사용자 인터페이스는 여러분의 편의성을 지닌 프로그램을 설계할 때 키 동작을 적절하게 수행합니다. 시각 장애우는 키보드를 사용하는 방식이 프로그램 기능을 탐색하는 방법으로 더 효율적일 수 있는데, 마우스를 활용할 때 마우스 포인터 위치의 시각 반응에 의지해야 하기 때문입니다. 또한, 거동 장애우에겐 마우스 활용이 프로그램 탐색기능에 걸림돌이 되는데, 미세한 전동기 조종 기술이 필요하기 때문입니다.
따라서 모든 마우스 동작을 모든 도구 모음, 메뉴, 링크, 단추로의 키보드 접근 동작으로 처리할 수 있게 조치하는게 중요합니다. 프로그램의 모든 동작은 키보드로만으로도 사용할 수 있어야합니다. 프로그램을 시험하는 동안 키보드를 시험한다면 마우스를 숨겨두십시오!
대부분의 기능은 키보드 단축키, 도구 모음의 내장 탐색 기능으로 쉽게 접근할 수 있어야 합니다. 허나 끌어다 놓기에 의존하는 동작의 경우는 좀 더 생각이 필요합니다.
모든 프로그램 기능에 대한 효율적인 키보드 접근 기능을 제공하십시오. 일부 사용자는 마우스를 사용할 수 없을지도 모르며, 대부분의 "고급 사용자"는 어쨌거나 키보드 활용을 더 좋아합니다. 게다가 일부 특화된 보조 기술 입력 장치의 경우 마우스 동작보단 키보드 동작을 흉내냅니다. 일부 사용자에겐 어렵거나 괴로울 수 있으므로, 주어진 동작을 처리할 경우 키 누름 횟수를 최소화 한 키보드 인터페이스를 제공하는 것이 중요합니다.
논리적인 키보드 탐색 순서를 활용하십시오. 탭키고 창을 둘러볼 때, 키보드 포커스는 예상 가능한 순서대로 컨트롤을 가리키며 움직여야합니다. 서부 유럽 로캘의 경우, 보통 왼쪽에서 오른쪽으로, 그리고 상단에서 하단으로 움직입니다.
확인 상자, 라디오 단추, 토글 상태 단추의 활성 여부에 따라 컨트롤 탭 순서가 올바른지 확인하십시오. 일부 단추를 선택하면, 관련 컨트롤을 활성화해야 하며, 그룹에 있는 다른 단추와 관련한 컨트롤은 비활성화해야합니다. 사용자가 컨트롤에 따른 확인 상자, 라디오 단추, 토글 단추를 선택하면 첫번째 관련 컨트롤에 포커스를 주지 마시고 단추에 포커스가 올라간 상태 그대로 두십시오.
Don't override existing system-level accessibility features. For example, AccessX is an Xserver extension that has been supported since X11R6. The MouseKeys feature of this extension allows mouse movement and button clicks to be simulated using the keypad. Therefore you should not add features to your application that can only be accessed by pressing keys on the keypad, as users relying on the MouseKeys feature will not be able to use them.
가능하다면 키보드 동작을 처리할 방법을 한가지 이상 제공하십시오. 어떤 사용자는 일부 키 및 단축키를 찾는게 다른 방편보다 쉬울 수도 있습니다.
가능하다면 기능을 활용할 때 키보드 마우스 둘 다 활용하여 접근할 수 있도록 하십시오. 어떤 사용자는 마우스 또는 키보드 둘 다 사용할 수 있거나 둘 중 하나로만 접근할 수도 있습니다.
자주 활용하는 키보드 동작에 불편한 방식을 할당하지 마십시오. 어떤 사람은 키보드를 한손으로만 활용할 수 있어, 일반 동작은 한손으로 쉽게 활용할 수 있게 하는게 적절합니다. 일부 경우에는 길게 누르거나 손이 닿기 어려운 방식으로 자주 사용하는 기능에 접근할 수 있게 하면, 모든 사용자에게 근육통, 부상 가능성이 늘어날 수 있습니다.
동시 키 누름을 반복적으로 요구하지 마십시오. 일부 사용자는 한번에 키 하나만 누를 수 있습니다. AccessX 같은 보조 기술은 키를 동시에 누르기보단 순차적으로 누를 수 있게 하는데 이런 방편은 키를 눌러 조작하는데 시간이 좀 더 걸릴 수 있습니다.
마우스로 선택할 수 있는 텍스트를 키보드로도 선택할 수 있는지 확인하십시오. 모든 사용자의 편의 수단이지만, 특히 마우스 사용이 불편한 이들에게 바람직한 제어 수단이 될 수 있습니다.
마우스 끌어다 놓기 동작으로 크기를 조절하거나 움직일 수 있는 객체를 키보드로도 크기를 조절하거나 움직일 수 있는지 확인하십시오. 이를테면, 데스크톱의 아이콘 및 창이 있습니다. 좌표를 입력하는 대화상자를 제공하거나 사용자가 설정할 수 있는 그리드에 객체를 잡아두는 수단을 제공하여 다이어그램의 모양새를 다루는 것처럼 객체의 정확한 크기 조절 및 위치 지정은 어쨌든 중요합니다.
동작을 실행할 때 일반 탐색 기능을 활용하지 마십시오. 예를 들자면, 대화상자 상에서 기본적인 Tab 키보드 탐색 기능을 컨트롤과 관련한 어떤 동작에든 활용하지 마십시오.
키보드로 실행한 메뉴, 창, 풍선 도움말을 관련 객체 주위에 나타내십시오. 그놈 2.0에서는 Shift F10 키로 단축 메뉴를 띄울 수 있고, Shift F1 키로 풍선 도움말을 띄울 수 있습니다. 허나 메뉴 또는 풍선 도움말을 참고하는 객체를 완전히 숨기거나 애매하게 나타내지 마십시오.

마우스 동작
모든 사람이 동일한 마우스 활용 능력을 갖춘게 아니며 일부 사용자는 마우스 포인터를 따라가보는데 어려움이 있습니다.
두번째 또는 세번째 마우스 단추 입력에 의존하지 마십시오. 실제로 누르기 어려운 만큼 일부 지시 장치 및 많은 보조 기술 장치에서는 단추 하나만 지원합니다. 일부 보조 기술은 마우스 동작을 완전히 흉내내는건 아니지만 키보드 동작을 대신 흉내냅니다.
마우스 동작을 취소할 수 있게 하십시오. 파일 관리자에서 파일을 끌어다 놓거나 그림 프로그램에서 도형을 그리는 등의 마우스 동작 진행시 Esc 키를 누르면 취소할 수 있어야합니다.
끌어다 놓기 동작을 처리할 때 시각 반응 기능을 넣으십시오. 마우스 커서를 올바른 대상으로 옮길 때 해당 위치를 강조하고 마우스 포인터 모양새를 바꾸십시오. 잘못된 대상 위치로 마우스 포인터를 옮겼다면 "놓을 수 없음" 마우스 포인터 커서를 활용하십시오. 마우스 동작 예제를 참고하십시오.
마우스 포인터를 멋대로 옮기거나 화면 일부 영역으로 마우스 움직임을 제한하지 마십시오. 보조 기술을 활용할 때 혼란감을 줄 수 있으며 AT에 의존하지 않는 사용자에게도 혼란감을 안겨줍니다.
마우스 처리 대상을 너무 작게 만들지 마십시오. 보통 마우스 처리 대상은 현재 창 관리자/테마의 크기 조절 가능 창 테두리 주변에 있는 "강조 영역"의 최소한의 크기여야 합니다. 거동 또는 시각이 불편한 사용자는 기준치보다 더 크고 넓은 영역을 차지하는 창 관리자를 사용한다는 사실을 숙지하십시오.

마우스 동작 예제

CDE/Motif에서 "놓을 수 없음" 포인터 예제
"잘못된 놓기 대상" 포인터 모양 예제

그래픽 요소
프로그램에서 중요한 모든 그래픽 항목을 프리젠테이션하도록 개별 설정하는 항목을 제공하십시오. 이 설정 항목은 시각 장애우 및 인지 장애우에게 편의성을 제공합니다.
선, 테두리, 그림자 두께 같은 그래픽 속성 값을 코드에 넣지 마십시오. 이 항목은 GTK 또는 창 관리자 테마에서 읽는게 바람직합니다. 만약 그렇게 할 수 없다면 프로그램에서 설정 항목을 제공하여 값을 바꿀 수 있게 하십시오.
Provide descriptive names for all interface components. GTK provides default accessible descriptions for many GTK widgets, but you will still need to add your own in some cases, such as for widgets that use graphics instead of text (e.g. a well in a color palette, or an icon without a label). Consider overriding the defaults with more helpful or application-specific descriptions where possible.
가능하다면 다중 색상 그래픽 요소(도구 모음 아이콘)를 흑백으로만 볼 수 있게 허용 하십시오. 흑백 이미지는 사용자가(GTK 테마 선택으로) 최대 가독성 확보를 목적으로 선택한 시스템 전경 배경색 사이에서도 나타나야 합니다.
대화식 GUI 요소를 쉽게 식별할 수 있게 하십시오. 객체 클릭 가능 여부를 결정할 목적으로 마우스를 올려놓게 하지 마십시오. 객체간 충분한 공간을 남겨두고 객체 경계를 분명히 하십시오. 실제로 아무 동작도할 수 없는 GUI 요소를 사용할 수 없게 끄는 설정 항목을 제공하기 전에는 예쁘게 보이지 마십시오.
핵심 정보를 전달하지 않는 그래픽은 숨기는 설정 항목을 제공하십시오. 그래픽 이미지는 사용자에게 혼란을 안겨줄 수 있습니다. 예를 들어, 그놈 발 메뉴 아이콘이 없어도 메뉴는 제대로 동작하므로 이 아이콘을 숨길 수 있습니다.

글꼴 및 텍스트
사용자의 시력이 정상이라 해도 텍스트 출력은 대부분의 프로그램에서 주요 정보이자 반응요소로 제공합니다. 그렇기 때문에 화면에 텍스트를 조심스레 선택하고 배치하는 것이 중요하며, 글꼴 및 크기는 사용자의 선택으로 두고, 시각 장애우가 실질적으로 프로그램을 활용할 수 있는지 확인해보십시오.
글꼴 모양새와 크기를 코드에 넣지 마십시오. 사용자는 모든 글꼴 크기 및 모양새 를 조절할 수 있어야합니다. 어떤 이유로 이 기능을 사용하지 못하게 한다면, 글꼴 크기 값을 10 포인트보다 작게 코드에 넣지 마십시오.
텍스트 뒤에 있는 그래픽 배경 또는 "워터마크"를 없애는 설정 항목을 제공하십시오. 일부 이미지는 텍스트와 배경의 대비 혼동을 주어, 시각 장애우 사용자가 화면의 내용을 알아보는데 어려움을 줍니다.
컨텍스트를 벗어났을 때 상황에 맞게 객체에 이름을 레이블로 붙이십시오. 스크린 리더 또는 유사한 보조 기술에 의지하는 사용자에게는 컨트롤과 컨트롤 주변과의 관계를 즉시 이해하게 할 필요가 없습니다.
동일한 창에 레이블을 하나 이상 붙이지 마십시오. 다른 창에 동일한 레이블을 활용하면 두 창이 동일하다는 의미로 해석할 수 있게 합니다. 또한("Read"나 "Red"와 같은)동음이의어는 스크린 리더에 의지하는 사용자에게 혼동을 주므로 레이블로 활용하지 마십시오.
프로그램에 레이블을 제 위치에 두십시오. 보통 큰 아이콘 아래, 작은 아이콘 오른쪽, 다른 컨트롤의 위 또는 왼쪽에 두라는 의미입니다. 글꼴 및 텍스트 예제를 참고하십시오.
컨트롤에 정적 텍스트로 이름을 붙일 때, 레이블 마지막을 콜론으로 끝내십시오. 예를 들어 사용자 이름(ID)을 입력할 텍스트 필드에 이름을 붙일 때 사용자 이름:으로 적으십시오. 독립 텍스트, 컨트롤의 레이블의 구분을 돕습니다.
컨트롤에 정적 텍스트로 이름을 붙일 때 탭 순서에 따라 컨트롤의 바로 앞에 레이블을 붙였는지 확인하십시오. 개발자 여러분이 레이블에 할당한 니모닉(밑줄 문자)으로 포커스를 이동하거나 누른 컨트롤을 올바르게 활성화해줍니다.
WYSIWYG 대응 요소를 제공하십시오. 이를테면, 일부 사용자는 작은 글꼴로 텍스트를 인쇄하지만, 편집할 때는 큰 화면 글꼴로 편집합니다. 가능한 대응 요소에는 동일한 글꼴 및 크기(를 사용자가 선택)로 모든 텍스트를 표시하는 방안이 있습니다. "창 폭에 따라 줄바꾸기" 설정 항목은 수평 방향으로 스크롤하지 않아도 창의 모든 텍스트를 볼 수 있게 합니다. 창의 내용을 단일 컬럼에 보여주는 단일 컬럼 보기는 여러 컬럼으로 나타나도 단일 컬럼으로만 표시합니다. 텍스트 전용 보기는 그래픽 요소가 예제 또는 텍스트 설명으로 나타나는 곳에 활용합니다. 프로그램에 하위 컨트롤을 지닌 창이 있다면 상위 창을 따라 패널 크기 조절이 가능하도록 하는 방안을 고려해보십시오.

글꼴 및 텍스트 예제

다양한 GUI 요소의 올바른 레이블 위치
List control with label above 레이블이 상단에 있는 리스트 컨트롤	Large file manager icon with label underneath 레이블이 하단에 있는 큰 파일 관리자 아이콘	Small toolbar icon with label to its right 레이블이 우측에 있는 작은 도구 모음 아이콘	Spinbox control with label to its left 레이블이 좌측에 있는 스핀 상자 컨트롤

색상 및 대비
잘못된 화면 색상 선택은(색상이 중요한) 색맹 사용자 또는 근시 사용자(명도/대비가 중요)에게 불편을 초래할 수 있습니다. 보통 사용자가 프로그램 일부의 색상을 직접 설정하여 프로그램에서 중요한 정보를 명확하게 나타낼 수 있게 해야합니다.
시각 장애우 사용자는 배경과 텍스트 색상의 고대비 처리가 필요합니다. 배경 색상으로 "충혈"이 일어나는 상황을 피하려 종종 검은 바탕에 흰 글씨를 사용합니다. 이 설정은 시각 장애우 사용자에게 매우 중요합니다.
프로그램 색상 설정 값을 코드에 넣지 마십시오. 일부 사용자는 화면을 편하게 보려고 색상 조합과 대비 값을 설정해야합니다.따라서 그놈 프로그램에서 활용하는 모든 주요 색상은 GTK 테마에서 가져와야 하며, 단지 테마만 바꾸는 과정을 통해 프로그램의 모든 내용을 또렷하게 볼 수 있도록 색상을 설정할 수 있습니다. 어떤 이유로 테마에 없는 색상을 사용해야 한다면, 프로그램 자체에서 설정할 수 있는지 확인하십시오.
정보 항목을 식별하는 목적 만드로 색상을 활용하지 마십시오. 모든 해당 정보는 최소한 도형, 위치, 텍스트 설명 등 한가지 이상의 방식으로 제공해야합니다. 색상 대비 예제를 참고하십시오.
모든 고대비 그놈 테마를 지원하십시오. 고대비 테마중 하나를 설정하면 프로그램의 모든 텍스트를 테마에서 정한 전경, 배경색의 고대비로 나타나는지 확인하십시오.
프로그램이 일부 고대비 테마에 의존하지 않는지 확인하십시오. 여러가지 고대비 테마로 시험하여 프로그램이 설정 상태를 만족하는지 확인하십시오.

색상 및 대비 예제

색상 중복 사용 표현 예제
색상만 활용하여 주가 변동을 보여주는 예제	이 화면은 적녹 색맹 사용자(전세계 7명중 1명의 남성에게 생맥 증상이 있음)에게 문제를 일으킬 수 있습니다. 대비가 떨어지는 적색 글씨와 흑색 배경은 화면 돋보기를 활용한다 해도 저시력 사용자가 알아보기 어렵게 합니다.
색상 및 화살표를 활용하여 주가 변동을 보여주는 예제	주가 변동을 보여줄 때 색상 표시에 화살표를 넣어 보강한 화면이며, 녹색, 적색에 어두운 그림자를 넣고 배경을 밝게 하여 대비를 늘렸습니다. 주요 사용자가 보기에 꺼림칙한 반응을 보이기에 기본 색상 배치로 둘 필요는 없지만, 테마를 지정하거나 프로그램 기본 설정 대화상자를 통해 개별적으로 설정할 수 있습니다.

확대/축소
대부분의 사용자는, 심지어 시각 장애우들에게는, 텍스트 및 그래픽 돋보기의 도움을 받습니다. 허나 돋보기가 없으면 시각 장애우는 프로그램을 찾아 활용할 수 없을지도 모릅니다.
사용자가 작업 영역을 확대/축소하는 기능을 제공하십시오.
프로그램에서 작업 영역의 크기를 조절하는 설정 항목을 제공하십시오. 사용자는 작업 영역을 1.5배 내기는 4배 크기로 확대하는 설정 항목이 필요합니다. 돋보기 설정을 바꿀 때 여러분이 바라보는 대상에 영향을 주지 않는지 확인하여 프로그램을 시험해보십시오.

음성
난청 사용자, 컴퓨터의 소리를 끄고 일하는 사용자에겐 프로그램이 정보를 전달할 때 소리에 의존할 경우 제약을 받습니다. 일반적으로, 사용자가 다른 방식으로 잘 들리는 정보를 접할 수 있는지 확인하십시오.
사용자가 음성 정보를 들을 수 있다고 단정하지 마십시오. 망가진 사운드카드를 보유한 사용자는 물론이고 청각 장애우에게도 해당합니다!
오디오를 단지 정보전달 수단으로만 사용하지 마십시오. 마찬가지로 모든 음성 정보를 시각적인 방법으로 전달하는 설정 항목도 제공하십시오. 일부 중요한 음성 사운드 클립의 자막이나 녹취록도 포함입니다.
모든 경고 비프음과 다른 소리의 재생 주파수와 음량을 사용자가 설정할 수 있게 하십시오. 소리를 모두 끌 수 있는 기능도 포함입니다.

애니메이션
드물게 활용하는 애니메이션은 프로그램의 중요한 정보를 주목할 요소를 그릴 때 쓸만합니다. 그리고 멋지게 보일 수 있습니다. 허나, 일부 사용자에겐 이게 문제가 될 수 있어, 해당 사용자가 끌 수 있는지 확인하십시오.
번쩍이거나 깜빡이는 요소의 깜빡임 빈도를 초당 2회 이상 55회 미만으로 구현하지 마십시오. 어떤 그래픽 객체와 마찬가지로 텍스트에도 해당합니다. 이 빈도 범위는 시각 요소에 의한 발작에 예민한 사용자에게 문제를 일으킵니다. 참고로 "안전한" 깜빡임 빈도란 없습니다. 깜빡임 동작이 중요하다면 시스템 커서 깜짝임 주기 값(자체적으로 설정할 수 있음)을 활용하거나, 사용자가 깜빡임 빈도를 설정할 수 있게 하십시오.
화면의 대부분 영역을 번쩍이거나 깜빡이게 하지 마십시오. 좁은 영역을 깜빡일 수록 이런 요소에 민감한 사용자의 발작 가능성을 줄입니다.
모든 애니메이션을 따로 설정할 수 있게 하십시오. 움직이는 정보는 최소한 사용자의 요구에 따라 움직이지 않는 형식 하나는 있어야합니다.

키보드 포커스
시각 장애우 뿐만 아니라 키보드를 마우스보다 더 선호하는 "고급 사용자" 들을 위해 키보드 포커스 위치를 언제나 분명하게 나타내는 것이 중요합니다. 주어진 시간 언제든 데스크톱의 어떤 컨트롤에든 포커스를 올려놓아 혼동을 주지 말아야합니다. 프로그램의 어떤 위젯에든 포커스를 올려놓은 상태에서 컴퓨터 앞을 벗어난 후, 여자친구랑 통화를 한다거나, 다루던 위젯이 어떤 위젯인지 잊을 때까지 개랑 산책을 할 수 있어야겠지요. 돌아온 다음에는 어떤 위젯을 다루고 있었는지 바로 알아볼 수 있도록 나타내야합니다.
시각 포커스 표시는 데스크톱의 다른 객체와 관계된 커서 위치의 음성 표현입니다. 이 수단 덕분에 포커스 위치가 바뀌어도 사용자가 어떤 객체에 대해서든 이리저리 포커스를 옮길 수 있습니다. 시각 포커스는 보조 기술에 프로그램상에서 노출해야합니다. 대부분의 경우 ATK에서 별도로 처리해야 할 일 없이 자동으로 처리해줍니다. 하지만 개별 위젯을 자체적으로 작성한다면 다음 과정이 필요합니다.
주로 활용하는 컨트롤에 포커스를 두어 시작하십시오. "가장" 쓸모있는 창의 컨트롤이 없는 것 같다면, 창을 열었을 때 가장 먼저 나타나는 컨트롤에 포커스를 두십시오. 대화 상자의 확인 단추 또는 취소 단추는 Enter키 또는 Escape 키로 바로 언제든 활성화할 수 있기 때문에 대부분 주로 활용 하는 컨트롤이라 해도 우선적으로 포커스를 두면 안됩니다.
언제든 현재 입력 위치에 포커스를 분명하게 보여주십시오. 스크롤 요소가 있는 컨트롤에서는 스크롤 영역안에서 선택하여 강조한 요소를 나타나지 않을 때도 있으므로 항상 만족스럽진 않을지도 모릅니다. 키보드 포커스 예제를 참고하십시오.
활성 창의 입력 포커스만 보여주십시오. 포커스가 없거나 활성화하지 않은 모든 창의 기본 시각 포커스 표시는 숨겨두십시오. 단일 창에 분할 창이 있다면, 하나의 창에 포커스 표시를 두시고, 다른 창의 포커스 표시는 숨겨야합니다. 포커스를 올려두지 않은 목록에서 어떤 항목을 계속 선택할 경우 중요한데 이때 2차 포커스 표시를 활용하십시오. 키보드 포커스 예제를 참고하십시오.
관련 객체 그룹의 마지막 이전을 탐색하려 할 경우 적당한 반응 요소를 제공하십시오. 목록을 탐색할 경우 음성을 출력하면서 멈추면 목록의 처음 객체로 포커스를 되돌라는 것보다 낫습니다. 그렇지 않으면, 장님, 저시력자의 경우 처음으로 돌아왔는지 깨닫지 못합니다. 문서에서 텍스트를 검색할 때 문서의 마지막에 도달하면 대화 상자가 나타나고 문서의 처음 부분부터 다시 검색할 지 물어봅니다.
사용자가 부적절한 키를 눌렀을 때 또는 탐색 키 조작 과정에서 포커스 이동에 실패했을 경우 시스템 기본 소리 또는 시각 경고 표시를 재생하십시오. 포커스가 텍스트 필드의 첫번째 문자에 둔 상태에서 왼쪽 화살표 키를 누르거나 단일 선택 대화상자에서 여러 요소 선택을 시도할 경우를 예로 들어볼 수 있습니다(난청 사용자는 기본 경고음과 동일한 시스템 시각 알림을 설정할 수 있어야합니다).

키보드 포커스 예제

포커스를 분명하게 보여줄 부분을 표현하는 예제
이 창에서 포커스를 올려둔 항목은 화면 밖으로 스크롤을 통해 나갔기 때문에 나타낼 수 없습니다	이 창에 있는 컨트롤 하나에 포커스를 두었지만 다음과 같이 할 수는 없습니다...
목록에 포커스를 올려둔 항목은 목록을 스크롤 하여 뷰에 나타냅니다	...현재 선택한 항목을 나타내는 목록을 스크롤 하기 이전까지.
이 예제의 리스트 컨트롤은 포커스를 나타내는 선 테두리가 있으며, 선택한 항목을 볼 수 있는지 없는지를 나타냅니다	리스트 컨트롤 자체에 "포커스" 테두리가 있다면, 현재 선택한 항목이 나타나지 않을 경우 포커스가 있음을 쉽게 알릴 수 있습니다.

2차 포커스 표현 예제
두 창에 포커스를 올려놓은 것 같은 분할 창	이 예제에서, 실제로 키보드 포커스를 지닌 두개의 창을 바라보기란 불가능합니다.
어떤 창에 포커스를 올려놓았는지 보여주는 2차 강조 분할 창	비활성 창의 2차 선택 강조 색상을 활용하여 트리 컨트롤에 포커스를 올려놓았음을 단박에 알아채게 했습니다...
어떤 창에 포커스를 올려놓았는지 보여주는 2차 강조 분할 창	...그리고 리스트 컨트롤에 포커스를 주었습니다.

타이밍
코드로 직접 제한 시간을 넣어 인터페이스를 나타내거나 숨기거나 하면 종종 접근성을 떨어트립니다. 일부 사용자는 다른 사용자에 비해 읽고 입력하고 반응하는 일련의 동작이 상당히 느립니다. 사용자가 필요한 정보를 끝까지 확인하기 전에 숨기거나 분명하게 요청하지 않은 내용이 떠서 가린다면, 프로그램 사용자는 상당한 불만을 느끼거나 사용하지 않을 수도 있습니다.
제한 시간 또는 다른 시간 기반 기능을 코드에 직접 넣지 마십시오. 창 가장자리를 따라 스크롤 바 단추를 잡고 끌어 내릴 때 자동으로 움직이는 경우 또는 객체를 트리 구조에 올려놓으면 짧은 시간에 펼쳐지는 경우를 예로 들어보겠습니다. 이와 같은 경우는 그놈 제어 센터 프로그램에서 자체적으로 설정할 수 있어야 하거나 최악의 경우에는 설정 파일 또는 GConf 항목을 통해 명령행에서 직접 설정할 수 있어야합니다.
마우스 포인터의 움직임에 따라 정보를 간단하게 보이거거나 숨기지 마십시오(예외: 시스템에서 전반적으로 사용자가 설정할 수 있게 풍선 도움말로 제공하는 기능).제각각의 기능을 제공해야 한다면, 별도의 설정 항목으로 만들어 사용자가 화면 검토 유틸리티를 설정했을 때 켜고 끌 수 있게 하십시오.

문서
신체적 불편을 지닌 사람은 필요한 설명서와 도움말 파일을 볼 수 없다면 프로그램을 제대로 활용할 수 없습니다. 대부분의 사용자에게 프로그램을 둘러볼 수 있게 하는 키보드 탐색 기능은 특히 중요한 측면이 있습니다.
접근 가능한 모든 형식으로 문서를 제공하십시오. ASCII 텍스트 및 HTML 형식 둘 다 보조 기술에 최적인 형식입니다.
문서에 모든 그래픽 구성요소에 대한 대체 텍스트 설명을 붙이십시오.
프로그램의 모든 접근성 기능을 문서로 기록하십시오. 키보드 탐색 기능 및 바로 가기 키는 문서에서 특히 중요합니다.문서에 모든 편의성 기능 설명을 제공하는 접근성 부분을 넣으십시오.