/** * gtk_test_find_widget: * @widget: Container widget, usually a GtkWindow. * @label_pattern: Shell-glob pattern to match a label string. * @widget_type: Type of a aearched for label sibling widget. * * This function will search the descendants of @widget for a widget * of type @widget_type that has a label matching @label_pattern next * to it. This is most useful for automated GUI testing, e.g. to find * the "OK" button in a dialog and synthesize clicks on it. * However see gtk_test_find_label(), gtk_test_find_sibling() and * gtk_test_widget_click() for possible caveats involving the search of * such widgets and synthesizing widget events. * * Returns: (transfer none): a valid widget if any is found or %NULL. * * Since: 2.14 **/ GtkWidget* gtk_test_find_widget (GtkWidget *widget, const gchar *label_pattern, GType widget_type) { GtkWidget *label = gtk_test_find_label (widget, label_pattern); if (!label) label = gtk_test_find_label (gtk_widget_get_toplevel (widget), label_pattern); if (label) return gtk_test_find_sibling (label, widget_type); return NULL; }
/** * gtk_test_find_label: * @widget: Valid label or container widget. * @label_pattern: Shell-glob pattern to match a label string. * * This function will search @widget and all its descendants for a GtkLabel * widget with a text string matching @label_pattern. * The @label_pattern may contain asterisks “*” and question marks “?” as * placeholders, g_pattern_match() is used for the matching. * Note that locales other than "C“ tend to alter (translate” label strings, * so this function is genrally only useful in test programs with * predetermined locales, see gtk_test_init() for more details. * * Returns: (transfer none): a GtkLabel widget if any is found. * * Since: 2.14 **/ GtkWidget* gtk_test_find_label (GtkWidget *widget, const gchar *label_pattern) { GtkWidget *label = NULL; if (GTK_IS_LABEL (widget)) { const gchar *text = gtk_label_get_text (GTK_LABEL (widget)); if (g_pattern_match_simple (label_pattern, text)) return widget; } if (GTK_IS_CONTAINER (widget)) { GList *node, *list; list = gtk_container_get_children (GTK_CONTAINER (widget)); for (node = list; node; node = node->next) { label = gtk_test_find_label (node->data, label_pattern); if (label) break; } g_list_free (list); } return label; }