diff --git a/src/Makefile-tests.am b/src/Makefile-tests.am index a9554a0e0..05c842850 100644 --- a/src/Makefile-tests.am +++ b/src/Makefile-tests.am @@ -9,6 +9,7 @@ dist_stacking_DATA = \ tests/stacking/basic-wayland.metatest \ tests/stacking/minimized.metatest \ tests/stacking/mixed-windows.metatest \ + tests/stacking/set-parent.metatest \ tests/stacking/override-redirect.metatest mutter-all.test: tests/mutter-all.test.in diff --git a/src/tests/stacking/set-parent.metatest b/src/tests/stacking/set-parent.metatest new file mode 100644 index 000000000..e95eaca29 --- /dev/null +++ b/src/tests/stacking/set-parent.metatest @@ -0,0 +1,14 @@ +new_client 1 wayland +create 1/1 +show 1/1 +create 1/2 +show 1/2 +wait +assert_stacking 1/1 1/2 + +set_parent 1/1 2 +wait +assert_stacking 1/2 1/1 + +local_activate 1/2 +assert_stacking 1/2 1/1 diff --git a/src/tests/test-client.c b/src/tests/test-client.c index 7e24ab2ea..583608300 100644 --- a/src/tests/test-client.c +++ b/src/tests/test-client.c @@ -136,6 +136,31 @@ process_line (const char *line) } } + else if (strcmp (argv[0], "set_parent") == 0) + { + if (argc != 3) + { + g_print ("usage: menu "); + goto out; + } + + GtkWidget *window = lookup_window (argv[1]); + if (!window) + { + g_print ("unknown window %s", argv[1]); + goto out; + } + + GtkWidget *parent_window = lookup_window (argv[2]); + if (!parent_window) + { + g_print ("unknown parent window %s", argv[2]); + goto out; + } + + gtk_window_set_transient_for (GTK_WINDOW (window), + GTK_WINDOW (parent_window)); + } else if (strcmp (argv[0], "show") == 0) { if (argc != 2) diff --git a/src/tests/test-runner.c b/src/tests/test-runner.c index 842944d97..4f1f446af 100644 --- a/src/tests/test-runner.c +++ b/src/tests/test-runner.c @@ -767,6 +767,23 @@ test_case_do (TestCase *test, NULL)) return FALSE; } + else if (strcmp (argv[0], "set_parent") == 0) + { + if (argc != 3) + BAD_COMMAND("usage: %s / ", + argv[0]); + + TestClient *client; + const char *window_id; + if (!test_case_parse_window_id (test, argv[1], &client, &window_id, error)) + return FALSE; + + if (!test_client_do (client, error, + "set_parent", window_id, + argv[2], + NULL)) + return FALSE; + } else if (strcmp (argv[0], "show") == 0 || strcmp (argv[0], "hide") == 0 || strcmp (argv[0], "activate") == 0 ||