Blob Blame History Raw
From 93f268a4a83a8032f3f3dc4923fc725b9cb82c12 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
Date: Tue, 13 Nov 2018 03:43:57 +0100
Subject: [PATCH 04/28] tests: Add 'accept_focus' command to runner and client

Under the hood, calls gtk_window_set_accept_focus in the client

https://gitlab.gnome.org/GNOME/mutter/merge_requests/307
(cherry picked from commit e1f839f48f8e49c826ba558fbc9d6842a156b28b)
---
 src/tests/test-client.c | 18 ++++++++++++++++++
 src/tests/test-runner.c | 19 +++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/src/tests/test-client.c b/src/tests/test-client.c
index 583608300..1870fd249 100644
--- a/src/tests/test-client.c
+++ b/src/tests/test-client.c
@@ -161,6 +161,24 @@ process_line (const char *line)
       gtk_window_set_transient_for (GTK_WINDOW (window),
                                     GTK_WINDOW (parent_window));
     }
+  else if (strcmp (argv[0], "accept_focus") == 0)
+    {
+      if (argc != 3)
+        {
+          g_print ("usage: %s <window-id> [true|false]", argv[0]);
+          goto out;
+        }
+
+      GtkWidget *window = lookup_window (argv[1]);
+      if (!window)
+        {
+          g_print ("unknown window %s", argv[1]);
+          goto out;
+        }
+
+      gboolean enabled = g_ascii_strcasecmp (argv[2], "true") == 0;
+      gtk_window_set_accept_focus (GTK_WINDOW (window), enabled);
+    }
   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 8867945c1..613c0bbfb 100644
--- a/src/tests/test-runner.c
+++ b/src/tests/test-runner.c
@@ -406,6 +406,25 @@ test_case_do (TestCase *test,
                            NULL))
         return FALSE;
     }
+  else if (strcmp (argv[0], "accept_focus") == 0)
+    {
+      if (argc != 3 ||
+          (g_ascii_strcasecmp (argv[2], "true") != 0 &&
+           g_ascii_strcasecmp (argv[2], "false") != 0))
+        BAD_COMMAND("usage: %s <client-id>/<window-id> [true|false]",
+                    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,
+                           argv[0], window_id,
+                           argv[2],
+                           NULL))
+        return FALSE;
+    }
   else if (strcmp (argv[0], "show") == 0 ||
            strcmp (argv[0], "hide") == 0 ||
            strcmp (argv[0], "activate") == 0 ||
-- 
2.21.0