/** * gtk_test_display_button_window: * @window_title: Title of the window to be displayed. * @dialog_text: Text inside the window to be displayed. * @...: %NULL terminated list of (const char *label, int *nump) pairs. * * Create a window with window title @window_title, text contents @dialog_text, * and a number of buttons, according to the paired argument list given * as @... parameters. * Each button is created with a @label and a ::clicked signal handler that * incremrents the integer stored in @nump. * The window will be automatically shown with gtk_widget_show_now() after * creation, so when this function returns it has already been mapped, * resized and positioned on screen. * The window will quit any running gtk_main()-loop when destroyed, and it * will automatically be destroyed upon test function teardown. * * Returns: (transfer full): a widget pointer to the newly created GtkWindow. * * Since: 2.14 **/ GtkWidget* gtk_test_display_button_window (const gchar *window_title, const gchar *dialog_text, ...) /* NULL terminated list of (label, &int) pairs */ { va_list var_args; GtkWidget *window = gtk_test_create_widget (GTK_TYPE_WINDOW, "title", window_title, NULL); GtkWidget *vbox = gtk_test_create_widget (GTK_TYPE_BOX, "parent", window, "orientation", GTK_ORIENTATION_VERTICAL, NULL); const char *arg1; gtk_test_create_widget (GTK_TYPE_LABEL, "label", dialog_text, "parent", vbox, NULL); g_signal_connect (window, "destroy", G_CALLBACK (try_main_quit), NULL); va_start (var_args, dialog_text); arg1 = va_arg (var_args, const char*); while (arg1) { int *arg2 = va_arg (var_args, int*); GtkWidget *button = gtk_test_create_widget (GTK_TYPE_BUTTON, "label", arg1, "parent", vbox, NULL); g_signal_connect_swapped (button, "clicked", G_CALLBACK (test_increment_intp), arg2); arg1 = va_arg (var_args, const char*); } va_end (var_args); gtk_widget_show_all (vbox); gtk_widget_show_now (window); while (gtk_events_pending ()) gtk_main_iteration (); return window; }
static void test_widget_windows (gpointer data) { GType type = GPOINTER_TO_SIZE (data); GtkWidget* window = gtk_test_create_widget (GTK_TYPE_WINDOW, NULL); GtkWidget* widget = gtk_test_create_widget (type, NULL); GList * windows; gtk_container_add (GTK_CONTAINER (window), widget); gtk_widget_show_all (window); windows = g_list_prepend (NULL, gtk_widget_get_window (window)); while (windows) { gpointer user_data = NULL; GList * children = gdk_window_get_children (windows->data); if (!gdk_window_is_visible (windows->data)) { g_error ("the GdkWindow %p wasn't shown in map()", windows->data); } gdk_window_get_user_data (windows->data, &user_data); if (!user_data) { /* at some point provide a better message (e.g. with the window tree and the data) */ g_error ("the GdkWindow %p doesn't have user data set", windows->data); } windows = g_list_delete_link (windows, windows); windows = g_list_concat (windows, children); } }
static void test_text_access (void) { const int N_WIDGETS = 4; GtkWidget *widgets[N_WIDGETS]; int i = 0; widgets[i++] = gtk_test_create_widget (GTK_TYPE_LABEL, NULL); widgets[i++] = gtk_test_create_widget (GTK_TYPE_ENTRY, NULL); widgets[i++] = gtk_test_create_widget (GTK_TYPE_TEXT_VIEW, NULL); widgets[i++] = gtk_test_create_widget (g_type_from_name ("GtkText"), NULL); g_assert (i == N_WIDGETS); for (i = 0; i < N_WIDGETS; i++) gtk_test_text_set (widgets[i], "foobar"); for (i = 0; i < N_WIDGETS; i++) { gchar *text = gtk_test_text_get (widgets[i]); g_assert (strcmp (text, "foobar") == 0); g_free (text); } for (i = 0; i < N_WIDGETS; i++) gtk_test_text_set (widgets[i], ""); for (i = 0; i < N_WIDGETS; i++) { gchar *text = gtk_test_text_get (widgets[i]); g_assert (strcmp (text, "") == 0); g_free (text); } }
/** * gtk_test_create_simple_window: * @window_title: Title of the window to be displayed. * @dialog_text: Text inside the window to be displayed. * * Create a simple window with window title @window_title and * text contents @dialog_text. * The window will quit any running gtk_main()-loop when destroyed, and it * will automatically be destroyed upon test function teardown. * * Returns: (transfer none): a widget pointer to the newly created GtkWindow. * * Since: 2.14 **/ GtkWidget* gtk_test_create_simple_window (const gchar *window_title, const gchar *dialog_text) { GtkWidget *window = gtk_test_create_widget (GTK_TYPE_WINDOW, "title", window_title, NULL); GtkWidget *vbox = gtk_test_create_widget (GTK_TYPE_BOX, "parent", window, "orientation", GTK_ORIENTATION_VERTICAL, NULL); gtk_test_create_widget (GTK_TYPE_LABEL, "label", dialog_text, "parent", vbox, NULL); g_signal_connect (window, "destroy", G_CALLBACK (try_main_quit), NULL); gtk_widget_show_all (vbox); return window; }
static void test_widget_life_cycle (gpointer data) { GType type = GPOINTER_TO_SIZE (data); GtkWidget* window = gtk_test_create_widget (GTK_TYPE_WINDOW, NULL); GtkWidget* widget = gtk_test_create_widget (type, NULL); gtk_container_add (GTK_CONTAINER (window), widget); gtk_widget_show_all (window); }
static void test_container_add (gpointer data) { GType type = GPOINTER_TO_SIZE (data); GtkWidget* window = gtk_test_create_widget (GTK_TYPE_WINDOW, NULL); GtkWidget* container = gtk_test_create_widget (type, NULL); int i; for (i = 0; i < 5; i++) { gchar * text = g_strdup_printf ("%d", 1 + i); GtkWidget* child = gtk_label_new (text); gtk_container_add (GTK_CONTAINER (container), child); } gtk_container_add (GTK_CONTAINER (window), container); gtk_widget_show (window); }