/* * We redefine atk_class->ref_relation_set instead of just calling * atk_object_add_relationship on ev_page_accessible_new because at * that moment not all the pages could be created, being easier add * the relation on demand. */ static AtkRelationSet * ev_page_accessible_ref_relation_set (AtkObject *accessible) { gint n_pages; EvPageAccessible *self; AtkRelationSet *relation_set; AtkObject *accessible_array[1]; AtkRelation *relation; g_return_val_if_fail (EV_IS_PAGE_ACCESSIBLE (accessible), NULL); self = EV_PAGE_ACCESSIBLE (accessible); relation_set = ATK_OBJECT_CLASS (ev_page_accessible_parent_class)->ref_relation_set (accessible); if (relation_set == NULL) return NULL; n_pages = ev_view_accessible_get_n_pages (self->priv->view_accessible); if (n_pages == 0) return relation_set; if ((self->priv->page + 1) < n_pages && !atk_relation_set_contains (relation_set, ATK_RELATION_FLOWS_TO)) { AtkObject *next_page; next_page = atk_object_ref_accessible_child (ATK_OBJECT (self->priv->view_accessible), self->priv->page + 1); accessible_array [0] = next_page; relation = atk_relation_new (accessible_array, 1, ATK_RELATION_FLOWS_TO); atk_relation_set_add (relation_set, relation); g_object_unref (relation); g_object_unref (next_page); } if (self->priv->page > 0 && !atk_relation_set_contains (relation_set, ATK_RELATION_FLOWS_FROM)) { AtkObject *prev_page; prev_page = atk_object_ref_accessible_child (ATK_OBJECT (self->priv->view_accessible), self->priv->page - 1); accessible_array [0] = prev_page; relation = atk_relation_new (accessible_array, 1, ATK_RELATION_FLOWS_FROM); atk_relation_set_add (relation_set, relation); g_object_unref (relation); g_object_unref (prev_page); } return relation_set; }
/** * panel_a11y_set_atk_relation * @widget : The Gtk widget which is labelled by @label * @label : The label for the @widget. * * Description : This function establishes atk relation * between a gtk widget and a label. */ void panel_a11y_set_atk_relation (GtkWidget *widget, GtkLabel *label) { AtkObject *aobject; AtkRelationSet *relation_set; AtkRelation *relation; AtkObject *targets [1]; g_return_if_fail (GTK_IS_WIDGET(widget)); g_return_if_fail (GTK_IS_LABEL(label)); if (!panel_a11y_get_is_a11y_enabled (widget)) return; aobject = gtk_widget_get_accessible (widget); gtk_label_set_mnemonic_widget (label, widget); targets [0] = gtk_widget_get_accessible (GTK_WIDGET (label)); relation_set = atk_object_ref_relation_set (aobject); relation = atk_relation_new (targets, 1, ATK_RELATION_LABELLED_BY); atk_relation_set_add (relation_set, relation); g_object_unref (relation); }
AtkRelationSet * refRelationSetCB(AtkObject *aAtkObj) { AtkRelationSet *relation_set = nsnull; relation_set = ATK_OBJECT_CLASS(parent_class)->ref_relation_set(aAtkObj); nsAccessibleWrap *accWrap = GetAccessibleWrap(aAtkObj); if (!accWrap) { return relation_set; } AtkRelation* relation; PRUint32 relationType[] = {nsIAccessibleRelation::RELATION_LABELLED_BY, nsIAccessibleRelation::RELATION_LABEL_FOR, nsIAccessibleRelation::RELATION_NODE_CHILD_OF, nsIAccessibleRelation::RELATION_CONTROLLED_BY, nsIAccessibleRelation::RELATION_CONTROLLER_FOR, nsIAccessibleRelation::RELATION_EMBEDS, nsIAccessibleRelation::RELATION_FLOWS_TO, nsIAccessibleRelation::RELATION_FLOWS_FROM, nsIAccessibleRelation::RELATION_DESCRIBED_BY, nsIAccessibleRelation::RELATION_DESCRIPTION_FOR, }; for (PRUint32 i = 0; i < NS_ARRAY_LENGTH(relationType); i++) { relation = atk_relation_set_get_relation_by_type(relation_set, static_cast<AtkRelationType>(relationType[i])); if (relation) { atk_relation_set_remove(relation_set, relation); } nsCOMPtr<nsIAccessibleRelation> geckoRelation; nsresult rv = accWrap->GetRelationByType(relationType[i], getter_AddRefs(geckoRelation)); if (NS_SUCCEEDED(rv) && geckoRelation) { PRUint32 targetsCount = 0; geckoRelation->GetTargetsCount(&targetsCount); if (targetsCount) { AtkObject** accessible_array = new AtkObject*[targetsCount]; for (PRUint32 index = 0; index < targetsCount; index++) { nsCOMPtr<nsIAccessible> geckoTarget; geckoRelation->GetTarget(index, getter_AddRefs(geckoTarget)); accessible_array[index] = nsAccessibleWrap::GetAtkObject(geckoTarget); } relation = atk_relation_new(accessible_array, targetsCount, static_cast<AtkRelationType>(relationType[i])); atk_relation_set_add(relation_set, relation); g_object_unref(relation); delete [] accessible_array; } } } return relation_set; }
static void add_atk_relation (GtkWidget *w0, GtkWidget *w1, AtkRelationType type) { AtkObject *atk0 = gtk_widget_get_accessible(w0); AtkObject *atk1 = gtk_widget_get_accessible(w1); AtkRelationSet *relation_set = atk_object_ref_relation_set (atk0); AtkRelation *relation = atk_relation_new (&atk1, 1, type); atk_relation_set_add (relation_set, relation); g_object_unref (relation_set); g_object_unref (relation); }
/* sets up ATK Relation between the widgets */ static void add_atk_relation(GtkWidget* widget1, GtkWidget* widget2, AtkRelationType type) { AtkObject* atk_obj1; AtkObject* atk_obj2; AtkRelationSet* relation_set; AtkRelation* relation; atk_obj1 = gtk_widget_get_accessible(widget1); if (!GTK_IS_ACCESSIBLE(atk_obj1)) { return; } atk_obj2 = gtk_widget_get_accessible(widget2); relation_set = atk_object_ref_relation_set(atk_obj1); relation = atk_relation_new(&atk_obj2, 1, type); atk_relation_set_add(relation_set, relation); g_object_unref(G_OBJECT(relation)); }
static AtkRelationSet* gail_window_ref_relation_set (AtkObject *obj) { GtkWidget *widget; AtkRelationSet *relation_set; AtkObject *array[1]; AtkRelation* relation; GtkWidget *current_widget; gail_return_val_if_fail (GAIL_IS_WIDGET (obj), NULL); widget = GTK_ACCESSIBLE (obj)->widget; if (widget == NULL) /* * State is defunct */ return NULL; relation_set = ATK_OBJECT_CLASS (gail_window_parent_class)->ref_relation_set (obj); if (atk_object_get_role (obj) == ATK_ROLE_TOOL_TIP) { relation = atk_relation_set_get_relation_by_type (relation_set, ATK_RELATION_POPUP_FOR); if (relation) { atk_relation_set_remove (relation_set, relation); } if (gtk_widget_get_visible(widget) && gtk_tooltips_get_info_from_tip_window (GTK_WINDOW (widget), NULL, ¤t_widget)) { array [0] = gtk_widget_get_accessible (current_widget); relation = atk_relation_new (array, 1, ATK_RELATION_POPUP_FOR); atk_relation_set_add (relation_set, relation); g_object_unref (relation); } } return relation_set; }
/** * gedit_set_atk_relation: * @obj1: specified widget. * @obj2: specified widget. * @rel_type: the type of relation to set up. * * This function establishes atk relation * between 2 specified widgets. */ void gedit_utils_set_atk_relation (GtkWidget *obj1, GtkWidget *obj2, AtkRelationType rel_type) { AtkObject *atk_obj1, *atk_obj2; AtkRelationSet *relation_set; AtkObject *targets[1]; AtkRelation *relation; atk_obj1 = gtk_widget_get_accessible (obj1); atk_obj2 = gtk_widget_get_accessible (obj2); if (!(GTK_IS_ACCESSIBLE (atk_obj1)) || !(GTK_IS_ACCESSIBLE (atk_obj2))) return; relation_set = atk_object_ref_relation_set (atk_obj1); targets[0] = atk_obj2; relation = atk_relation_new (targets, 1, rel_type); atk_relation_set_add (relation_set, relation); g_object_unref (G_OBJECT (relation)); }
/** * atk_relation_set_add_relation_by_type: * @set: an #AtkRelationSet * @relationship: an #AtkRelationType * @target: an #AtkObject * * Add a new relation of the specified type with the specified target to * the current relation set if the relation set does not contain a relation * of that type. If it is does contain a relation of that typea the target * is added to the relation. * * Since: ATK 1.9 **/ void atk_relation_set_add_relation_by_type (AtkRelationSet *set, AtkRelationType relationship, AtkObject *target) { AtkRelation *relation; g_return_if_fail (ATK_IS_RELATION_SET (set)); g_return_if_fail (ATK_IS_OBJECT (target)); relation = atk_relation_set_get_relation_by_type (set, relationship); if (relation) { atk_relation_add_target (relation, target); } else { /* the relation hasn't been created yet ... */ relation = atk_relation_new (&target, 1, relationship); atk_relation_set_add (set, relation); g_object_unref(relation); } }
G_MODULE_EXPORT void test_init (gchar *path) { AtkObject *r1, *r2, *r3; AtkObject *m1, *m2, *m3; AtkRelationSet *rset; AtkRelation *rel; AtkObject *rls[3]; root_accessible = g_object_new(MY_TYPE_ATK_OBJECT, NULL); r1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, "accessible-name", "r1", "accessible-description", "", "accessible-role", ATK_ROLE_INVALID, NULL)); my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r1)); r2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, "accessible-name", "r2", "accessible-description", "", "accessible-role", ATK_ROLE_INVALID, NULL)); my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r2)); r3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, "accessible-name", "r3", "accessible-description", "", "accessible-role", ATK_ROLE_INVALID, NULL)); my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(r3)); m1 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, "accessible-name", "m1", "accessible-description", "", "accessible-role", ATK_ROLE_INVALID, NULL)); my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m1)); m2 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, "accessible-name", "m2", "accessible-description", "", "accessible-role", ATK_ROLE_INVALID, NULL)); my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m2)); m3 = ATK_OBJECT(g_object_new(MY_TYPE_ATK_OBJECT, "accessible-name", "m3", "accessible-description", "", "accessible-role", ATK_ROLE_INVALID, NULL)); my_atk_object_add_child(MY_ATK_OBJECT(root_accessible), MY_ATK_OBJECT(m3)); atk_object_add_relationship(root_accessible, ATK_RELATION_EMBEDS, r1); atk_object_add_relationship(root_accessible, ATK_RELATION_PARENT_WINDOW_OF, r2); atk_object_add_relationship(root_accessible, ATK_RELATION_DESCRIBED_BY, r3); rls[0] = m1; rls[1] = m2; rls[2] = m3; rset = atk_object_ref_relation_set(root_accessible); rel = atk_relation_new(rls, 3, ATK_RELATION_POPUP_FOR); atk_relation_set_add(rset, rel); g_object_unref(G_OBJECT(rset)); }
static void thunar_apr_desktop_page_init (ThunarAprDesktopPage *desktop_page) { AtkRelationSet *relations; PangoAttribute *attribute; PangoAttrList *attr_list; AtkRelation *relation; AtkObject *object; GtkWidget *table; GtkWidget *label; gtk_container_set_border_width (GTK_CONTAINER (desktop_page), 12); /* allocate shared bold Pango attributes */ attr_list = pango_attr_list_new (); attribute = pango_attr_weight_new (PANGO_WEIGHT_BOLD); attribute->start_index = 0; attribute->end_index = -1; pango_attr_list_insert (attr_list, attribute); table = gtk_table_new (8, 2, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 12); gtk_table_set_row_spacings (GTK_TABLE (table), 0); gtk_container_add (GTK_CONTAINER (desktop_page), table); gtk_widget_show (table); label = gtk_label_new (_("Description:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_label_set_attributes (GTK_LABEL (label), attr_list); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (label); desktop_page->description_entry = gtk_entry_new (); gtk_widget_set_tooltip_text (desktop_page->description_entry, _("The generic name of the entry, for example \"Web Browser\" " "in case of Firefox.")); g_signal_connect (G_OBJECT (desktop_page->description_entry), "activate", G_CALLBACK (thunar_apr_desktop_page_activated), desktop_page); g_signal_connect (G_OBJECT (desktop_page->description_entry), "focus-out-event", G_CALLBACK (thunar_apr_desktop_page_focus_out_event), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->description_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->description_entry); exo_binding_new (G_OBJECT (desktop_page->description_entry), "visible", G_OBJECT (label), "visible"); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (desktop_page->description_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); label = gtk_label_new (_("Command:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_label_set_attributes (GTK_LABEL (label), attr_list); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (label); desktop_page->command_entry = gtk_entry_new (); gtk_widget_set_tooltip_text (desktop_page->command_entry, _("The program to execute, possibly with arguments.")); g_signal_connect (G_OBJECT (desktop_page->command_entry), "activate", G_CALLBACK (thunar_apr_desktop_page_activated), desktop_page); g_signal_connect (G_OBJECT (desktop_page->command_entry), "focus-out-event", G_CALLBACK (thunar_apr_desktop_page_focus_out_event), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->command_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->command_entry); exo_binding_new (G_OBJECT (desktop_page->command_entry), "visible", G_OBJECT (label), "visible"); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (desktop_page->command_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); label = gtk_label_new (_("Working Directory:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_label_set_attributes (GTK_LABEL (label), attr_list); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (label); desktop_page->path_entry = gtk_entry_new (); gtk_widget_set_tooltip_text (desktop_page->path_entry, _("The working directory for the program.")); g_signal_connect (G_OBJECT (desktop_page->path_entry), "activate", G_CALLBACK (thunar_apr_desktop_page_activated), desktop_page); g_signal_connect (G_OBJECT (desktop_page->path_entry), "focus-out-event", G_CALLBACK (thunar_apr_desktop_page_focus_out_event), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->path_entry, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->path_entry); exo_binding_new (G_OBJECT (desktop_page->path_entry), "visible", G_OBJECT (label), "visible"); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (desktop_page->path_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); label = gtk_label_new (_("URL:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_label_set_attributes (GTK_LABEL (label), attr_list); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (label); desktop_page->url_entry = gtk_entry_new (); gtk_widget_set_tooltip_text (desktop_page->url_entry, _("The URL to access.")); g_signal_connect (G_OBJECT (desktop_page->url_entry), "activate", G_CALLBACK (thunar_apr_desktop_page_activated), desktop_page); g_signal_connect (G_OBJECT (desktop_page->url_entry), "focus-out-event", G_CALLBACK (thunar_apr_desktop_page_focus_out_event), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->url_entry, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->url_entry); exo_binding_new (G_OBJECT (desktop_page->url_entry), "visible", G_OBJECT (label), "visible"); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (desktop_page->url_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); label = gtk_label_new (_("Comment:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_label_set_attributes (GTK_LABEL (label), attr_list); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (label); desktop_page->comment_entry = gtk_entry_new (); gtk_widget_set_tooltip_text (desktop_page->comment_entry, _("Tooltip for the entry, for example \"View sites on the Internet\" " "in case of Firefox. Should not be redundant with the name or the " "description.")); g_signal_connect (G_OBJECT (desktop_page->comment_entry), "activate", G_CALLBACK (thunar_apr_desktop_page_activated), desktop_page); g_signal_connect (G_OBJECT (desktop_page->comment_entry), "focus-out-event", G_CALLBACK (thunar_apr_desktop_page_focus_out_event), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->comment_entry, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->comment_entry); exo_binding_new (G_OBJECT (desktop_page->comment_entry), "visible", G_OBJECT (label), "visible"); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (desktop_page->comment_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); /* add spacing between the entries and the options */ gtk_table_set_row_spacing (GTK_TABLE (table), 4, 24); label = gtk_label_new (_("Options:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_label_set_attributes (GTK_LABEL (label), attr_list); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 6, 7, GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (label); desktop_page->snotify_button = gtk_check_button_new_with_mnemonic (_("Use _startup notification")); gtk_widget_set_tooltip_text (desktop_page->snotify_button, _("Select this option to enable startup notification when the command " "is run from the file manager or the menu. Not every application supports " "startup notification.")); g_signal_connect (G_OBJECT (desktop_page->snotify_button), "toggled", G_CALLBACK (thunar_apr_desktop_page_toggled), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->snotify_button, 1, 2, 6, 7, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->snotify_button); desktop_page->terminal_button = gtk_check_button_new_with_mnemonic (_("Run in _terminal")); gtk_widget_set_tooltip_text (desktop_page->terminal_button, _("Select this option to run the command in a terminal window.")); g_signal_connect (G_OBJECT (desktop_page->terminal_button), "toggled", G_CALLBACK (thunar_apr_desktop_page_toggled), desktop_page); gtk_table_attach (GTK_TABLE (table), desktop_page->terminal_button, 1, 2, 7, 8, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 3); gtk_widget_show (desktop_page->terminal_button); /* set Atk label relation for the buttons */ relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); object = gtk_widget_get_accessible (desktop_page->snotify_button); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); object = gtk_widget_get_accessible (desktop_page->terminal_button); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); exo_binding_new (G_OBJECT (desktop_page->snotify_button), "visible", G_OBJECT (label), "visible"); /* release shared bold Pango attributes */ pango_attr_list_unref (attr_list); }
static AtkRelationSet * gtk_widget_accessible_ref_relation_set (AtkObject *obj) { GtkWidget *widget; AtkRelationSet *relation_set; GtkWidget *label; AtkObject *array[1]; AtkRelation* relation; widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); if (widget == NULL) return NULL; relation_set = ATK_OBJECT_CLASS (_gtk_widget_accessible_parent_class)->ref_relation_set (obj); if (GTK_IS_BOX (widget)) return relation_set; if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABELLED_BY)) { label = find_label (widget); if (label == NULL) { if (GTK_IS_BUTTON (widget)) /* * Handle the case where GnomeIconEntry is the mnemonic widget. * The GtkButton which is a grandchild of the GnomeIconEntry * should really be the mnemonic widget. See bug #133967. */ { GtkWidget *temp_widget; temp_widget = gtk_widget_get_parent (widget); if (GTK_IS_ALIGNMENT (temp_widget)) { temp_widget = gtk_widget_get_parent (temp_widget); if (GTK_IS_BOX (temp_widget)) { label = find_label (temp_widget); if (!label) label = find_label (gtk_widget_get_parent (temp_widget)); } } } else if (GTK_IS_COMBO_BOX (widget)) /* * Handle the case when GtkFileChooserButton is the mnemonic * widget. The GtkComboBox which is a child of the * GtkFileChooserButton should be the mnemonic widget. * See bug #359843. */ { GtkWidget *temp_widget; temp_widget = gtk_widget_get_parent (widget); if (GTK_IS_BOX (temp_widget)) { label = find_label (temp_widget); } } } if (label) { array[0] = gtk_widget_get_accessible (label); relation = atk_relation_new (array, 1, ATK_RELATION_LABELLED_BY); atk_relation_set_add (relation_set, relation); g_object_unref (relation); } } return relation_set; }
AtkRelationSet* gail_label_ref_relation_set (AtkObject *obj) { GtkWidget *widget; AtkRelationSet *relation_set; g_return_val_if_fail (GAIL_IS_LABEL (obj), NULL); widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); if (widget == NULL) /* * State is defunct */ return NULL; relation_set = ATK_OBJECT_CLASS (gail_label_parent_class)->ref_relation_set (obj); if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABEL_FOR)) { /* * Get the mnemonic widget * * The relation set is not updated if the mnemonic widget is changed */ GtkWidget *mnemonic_widget = gtk_label_get_mnemonic_widget (GTK_LABEL (widget)); if (mnemonic_widget) { AtkObject *accessible_array[1]; AtkRelation* relation; if (!gtk_widget_get_can_focus (mnemonic_widget)) { /* * Handle the case where a GtkFileChooserButton is specified as the * mnemonic widget. use the combobox which is a child of the * GtkFileChooserButton as the mnemonic widget. See bug #359843. */ if (GTK_IS_BOX (mnemonic_widget)) { GList *list, *tmpl; list = gtk_container_get_children (GTK_CONTAINER (mnemonic_widget)); if (g_list_length (list) == 2) { tmpl = g_list_last (list); if (GTK_IS_COMBO_BOX(tmpl->data)) { mnemonic_widget = GTK_WIDGET(tmpl->data); } } g_list_free (list); } /* * Handle the case where a GnomeIconEntry is specified as the * mnemonic widget. use the button which is a grandchild of the * GnomeIconEntry as the mnemonic widget. See bug #133967. */ else if (GTK_IS_BOX (mnemonic_widget)) { GList *list; list = gtk_container_get_children (GTK_CONTAINER (mnemonic_widget)); if (g_list_length (list) == 1) { if (GTK_IS_ALIGNMENT (list->data)) { GtkWidget *temp_widget; temp_widget = gtk_bin_get_child (GTK_BIN (list->data)); if (GTK_IS_BUTTON (temp_widget)) mnemonic_widget = temp_widget; } else if (GTK_IS_HBOX (list->data)) { GtkWidget *temp_widget; temp_widget = GTK_WIDGET (list->data); g_list_free (list); list = gtk_container_get_children (GTK_CONTAINER (temp_widget)); } } g_list_free (list); } } accessible_array[0] = gtk_widget_get_accessible (mnemonic_widget); relation = atk_relation_new (accessible_array, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relation_set, relation); /* * Unref the relation so that it is not leaked. */ g_object_unref (relation); } } return relation_set; }
static void thunar_sbr_number_renamer_init (ThunarSbrNumberRenamer *number_renamer) { AtkRelationSet *relations; AtkRelation *relation; GEnumClass *klass; AtkObject *object; GtkWidget *combo; GtkWidget *entry; GtkWidget *label; GtkWidget *hbox; guint n; hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (number_renamer), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("_Number Format:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); combo = gtk_combo_box_new_text (); klass = g_type_class_ref (THUNAR_SBR_TYPE_NUMBER_MODE); for (n = 0; n < klass->n_values; ++n) gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _(klass->values[n].value_nick)); exo_mutual_binding_new (G_OBJECT (number_renamer), "mode", G_OBJECT (combo), "active"); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); g_type_class_unref (klass); gtk_widget_show (combo); /* set Atk label relation for the combo */ object = gtk_widget_get_accessible (combo); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); number_renamer->start_entry = gtk_entry_new (); gtk_entry_set_max_length (GTK_ENTRY (number_renamer->start_entry), 4); gtk_entry_set_width_chars (GTK_ENTRY (number_renamer->start_entry), 3); gtk_entry_set_alignment (GTK_ENTRY (number_renamer->start_entry), 1.0f); gtk_entry_set_activates_default (GTK_ENTRY (number_renamer->start_entry), TRUE); exo_mutual_binding_new (G_OBJECT (number_renamer->start_entry), "text", G_OBJECT (number_renamer), "start"); gtk_box_pack_end (GTK_BOX (hbox), number_renamer->start_entry, TRUE, TRUE, 0); gtk_widget_show (number_renamer->start_entry); label = gtk_label_new_with_mnemonic (_("_Start With:")); gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), number_renamer->start_entry); gtk_widget_show (label); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (number_renamer->start_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_end (GTK_BOX (number_renamer), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); label = gtk_label_new_with_mnemonic (_("Text _Format:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_widget_show (label); combo = gtk_combo_box_new_text (); klass = g_type_class_ref (THUNAR_SBR_TYPE_TEXT_MODE); for (n = 0; n < klass->n_values; ++n) gtk_combo_box_append_text (GTK_COMBO_BOX (combo), _(klass->values[n].value_nick)); exo_mutual_binding_new (G_OBJECT (number_renamer), "text-mode", G_OBJECT (combo), "active"); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); g_type_class_unref (klass); gtk_widget_show (combo); /* set Atk label relation for the combo */ object = gtk_widget_get_accessible (combo); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); entry = gtk_entry_new (); gtk_entry_set_width_chars (GTK_ENTRY (entry), 4); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); exo_mutual_binding_new (G_OBJECT (entry), "text", G_OBJECT (number_renamer), "text"); gtk_box_pack_end (GTK_BOX (hbox), entry, TRUE, TRUE, 0); gtk_widget_show (entry); label = gtk_label_new_with_mnemonic (_("_Text:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_box_pack_end (GTK_BOX (hbox), label, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); gtk_widget_show (label); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); }
static void thunar_sbr_insert_renamer_init (ThunarSbrInsertRenamer *insert_renamer) { AtkRelationSet *relations; GtkAdjustment *adjustment; AtkRelation *relation; GEnumClass *klass; AtkObject *object; GtkWidget *spinner; GtkWidget *combo; GtkWidget *entry; GtkWidget *label; GtkWidget *table; GtkWidget *hbox; guint n; table = gtk_table_new (2, 3, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 12); gtk_box_pack_start (GTK_BOX (insert_renamer), table, TRUE, TRUE, 0); gtk_widget_show (table); combo = gtk_combo_box_text_new (); klass = g_type_class_ref (THUNAR_SBR_TYPE_INSERT_MODE); for (n = 0; n < klass->n_values; ++n) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), _(klass->values[n].value_nick)); exo_mutual_binding_new (G_OBJECT (insert_renamer), "mode", G_OBJECT (combo), "active"); gtk_table_attach (GTK_TABLE (table), combo, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); g_type_class_unref (klass); gtk_widget_show (combo); label = gtk_label_new_with_mnemonic (_("_Text:")); gtk_table_attach (GTK_TABLE (table), label, 1, 2, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_show (label); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); exo_mutual_binding_new (G_OBJECT (entry), "text", G_OBJECT (insert_renamer), "text"); gtk_table_attach (GTK_TABLE (table), entry, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); gtk_widget_show (entry); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); label = gtk_label_new_with_mnemonic (_("_At position:")); gtk_misc_set_alignment (GTK_MISC (label), 1.0f, 0.5f); gtk_table_attach (GTK_TABLE (table), label, 0, 2, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (label); hbox = gtk_hbox_new (FALSE, 12); gtk_table_attach (GTK_TABLE (table), hbox, 2, 3, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (hbox); spinner = gtk_spin_button_new_with_range (0u, G_MAXUINT, 1u); gtk_entry_set_width_chars (GTK_ENTRY (spinner), 4); gtk_entry_set_alignment (GTK_ENTRY (spinner), 1.0f); gtk_entry_set_activates_default (GTK_ENTRY (spinner), TRUE); gtk_spin_button_set_digits (GTK_SPIN_BUTTON (spinner), 0); gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinner), TRUE); gtk_spin_button_set_snap_to_ticks (GTK_SPIN_BUTTON (spinner), TRUE); gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinner); gtk_widget_show (spinner); adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (spinner)); exo_mutual_binding_new (G_OBJECT (insert_renamer), "offset", G_OBJECT (adjustment), "value"); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (spinner); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); combo = gtk_combo_box_text_new (); klass = g_type_class_ref (THUNAR_SBR_TYPE_OFFSET_MODE); for (n = 0; n < klass->n_values; ++n) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), _(klass->values[n].value_nick)); exo_mutual_binding_new (G_OBJECT (insert_renamer), "offset-mode", G_OBJECT (combo), "active"); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); g_type_class_unref (klass); gtk_widget_show (combo); }
static void thunar_sbr_replace_renamer_init (ThunarSbrReplaceRenamer *replace_renamer) { AtkRelationSet *relations; AtkRelation *relation; AtkObject *object; GtkWidget *table; GtkWidget *label; GtkWidget *entry; GtkWidget *button; #ifdef HAVE_PCRE /* check if PCRE supports UTF-8 */ if (pcre_config (PCRE_CONFIG_UTF8, &replace_renamer->regexp_supported) != 0) replace_renamer->regexp_supported = FALSE; #endif /* allocate the shared tooltips */ replace_renamer->tooltips = gtk_tooltips_new (); exo_gtk_object_ref_sink (GTK_OBJECT (replace_renamer->tooltips)); table = gtk_table_new (2, 3, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_table_set_col_spacings (GTK_TABLE (table), 12); gtk_box_pack_start (GTK_BOX (replace_renamer), table, FALSE, FALSE, 0); gtk_widget_show (table); label = gtk_label_new_with_mnemonic (_("_Search For:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_show (label); replace_renamer->pattern_entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (replace_renamer->pattern_entry), TRUE); exo_mutual_binding_new (G_OBJECT (replace_renamer->pattern_entry), "text", G_OBJECT (replace_renamer), "pattern"); gtk_tooltips_set_tip (replace_renamer->tooltips, replace_renamer->pattern_entry, _("Enter the text to search for in the file names."), NULL); gtk_table_attach (GTK_TABLE (table), replace_renamer->pattern_entry, 1, 2, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), replace_renamer->pattern_entry); gtk_widget_show (replace_renamer->pattern_entry); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (replace_renamer->pattern_entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); button = gtk_check_button_new_with_mnemonic (_("Regular _Expression")); exo_mutual_binding_new (G_OBJECT (button), "active", G_OBJECT (replace_renamer), "regexp"); gtk_tooltips_set_tip (replace_renamer->tooltips, button, _("If you enable this option, the pattern will be treated as a regular expression and " "matched using the Perl-compatible regular expressions (PCRE). Check the documentation " "for details about the regular expression syntax."), NULL); gtk_table_attach (GTK_TABLE (table), button, 2, 3, 0, 1, GTK_FILL, 0, 0, 0); gtk_widget_set_sensitive (button, replace_renamer->regexp_supported); gtk_widget_show (button); label = gtk_label_new_with_mnemonic (_("Replace _With:")); gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.5f); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (label); entry = gtk_entry_new (); gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE); exo_mutual_binding_new (G_OBJECT (entry), "text", G_OBJECT (replace_renamer), "replacement"); gtk_tooltips_set_tip (replace_renamer->tooltips, entry, _("Enter the text that should be used as replacement for the pattern above."), NULL); gtk_table_attach (GTK_TABLE (table), entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0); gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); gtk_widget_show (entry); /* set Atk label relation for the entry */ object = gtk_widget_get_accessible (entry); relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relations, relation); g_object_unref (G_OBJECT (relation)); button = gtk_check_button_new_with_mnemonic (_("C_ase Sensitive Search")); exo_mutual_binding_new (G_OBJECT (button), "active", G_OBJECT (replace_renamer), "case-sensitive"); gtk_tooltips_set_tip (replace_renamer->tooltips, button, _("If you enable this option, the pattern will be searched in a case-sensitive manner. " "The default is to use a case-insensitive search."), NULL); gtk_table_attach (GTK_TABLE (table), button, 2, 3, 1, 2, GTK_FILL, 0, 0, 0); gtk_widget_show (button); }
static AtkRelationSet * gtk_label_accessible_ref_relation_set (AtkObject *obj) { GtkWidget *widget; AtkRelationSet *relation_set; g_return_val_if_fail (GTK_IS_LABEL_ACCESSIBLE (obj), NULL); widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (obj)); if (widget == NULL) return NULL; relation_set = ATK_OBJECT_CLASS (_gtk_label_accessible_parent_class)->ref_relation_set (obj); if (!atk_relation_set_contains (relation_set, ATK_RELATION_LABEL_FOR)) { /* Get the mnemonic widget. * The relation set is not updated if the mnemonic widget is changed */ GtkWidget *mnemonic_widget; mnemonic_widget = gtk_label_get_mnemonic_widget (GTK_LABEL (widget)); if (mnemonic_widget) { AtkObject *accessible_array[1]; AtkRelation* relation; if (!gtk_widget_get_can_focus (mnemonic_widget)) { /* * Handle the case where a GtkFileChooserButton is specified * as the mnemonic widget. use the combobox which is a child of the * GtkFileChooserButton as the mnemonic widget. See bug #359843. */ if (GTK_IS_BOX (mnemonic_widget)) { GList *list, *tmpl; list = gtk_container_get_children (GTK_CONTAINER (mnemonic_widget)); if (g_list_length (list) == 2) { tmpl = g_list_last (list); if (GTK_IS_COMBO_BOX(tmpl->data)) { mnemonic_widget = GTK_WIDGET(tmpl->data); } } g_list_free (list); } } accessible_array[0] = gtk_widget_get_accessible (mnemonic_widget); relation = atk_relation_new (accessible_array, 1, ATK_RELATION_LABEL_FOR); atk_relation_set_add (relation_set, relation); /* * Unref the relation so that it is not leaked. */ g_object_unref (relation); } } return relation_set; }