获取辅助功能的编程指南

这里列出了一些可以在代码里做的事情,让程序更好的利用辅助技术。(当你想设计GUI的时候,可以看看后文里提到的这份列表 支持辅助功能的UI ):

  • 用于那些不显示短字符串的组件(比如图形按钮),使用 atk_object_set_name()为它指定一个名字。你可以用于纯图片按钮、具有逻辑分组的面板、文本区域等等。

  • 如果你没有为组件提供提示信息,使用 atk_object_set_description() 函数为用户提供一个辅助说明。例如,为一个 关闭 按钮提供辅助说明:

    Example 1-1为 GtkButton 提供辅助性说明
    {
      AtkObject *obj;
      obj = gtk_widget_get_accessible(button);
      atk_object_set_description(obj,_("Closes the window"));
    }
    
  • 使用 atk_image_set_description() 可以为程序中所有图片图标提供一个文本说明。

  • 如果多个组件逻辑上是一组的,建议将它们放在一个容器里。

  • Whenever you have a label that describes another component, use atk_relation_set_add_relation() so that assistive technologies can find the component with which the label is associated. (If you associate the label with the component using gtk_label_set_mnemonic_widget(), the ATK_RELATION_LABEL_FOR relation is generated automatically, so the following code would not be necessary):

    Example 1-2为一个 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));
    }
    
  • 如果创建了一个自定义 widget,要确认是否支持辅助功能。自定义组件通常继承于其他 GTK 部件,所以必要时得重写辅助功能信息。更多信息请参考 让自定义组件获得辅助功能

  • 不要重复造轮子!如果你的 GUI 有一个非辅助性的容器,那么该容器内的任何组件都可能失去辅助性。