]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-61698: Use launchctl to detect macOS window manager in tests (GH-118390...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Sun, 13 Oct 2024 08:39:05 +0000 (10:39 +0200)
committerGitHub <noreply@github.com>
Sun, 13 Oct 2024 08:39:05 +0000 (08:39 +0000)
(cherry picked from commit ce740d46246b28bb675ba9d62214b59be9b8411e)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
Lib/test/support/__init__.py

index 5432b1ec5c9d843c9cffa05ffe862a1c8986f344..78f410e14558523b9a88a15c655078e7bbf46a22 100644 (file)
@@ -250,22 +250,16 @@ def _is_gui_available():
         # process not running under the same user id as the current console
         # user.  To avoid that, raise an exception if the window manager
         # connection is not available.
-        from ctypes import cdll, c_int, pointer, Structure
-        from ctypes.util import find_library
-
-        app_services = cdll.LoadLibrary(find_library("ApplicationServices"))
-
-        if app_services.CGMainDisplayID() == 0:
-            reason = "gui tests cannot run without OS X window manager"
+        import subprocess
+        try:
+            rc = subprocess.run(["launchctl", "managername"],
+                                capture_output=True, check=True)
+            managername = rc.stdout.decode("utf-8").strip()
+        except subprocess.CalledProcessError:
+            reason = "unable to detect macOS launchd job manager"
         else:
-            class ProcessSerialNumber(Structure):
-                _fields_ = [("highLongOfPSN", c_int),
-                            ("lowLongOfPSN", c_int)]
-            psn = ProcessSerialNumber()
-            psn_p = pointer(psn)
-            if (  (app_services.GetCurrentProcess(psn_p) < 0) or
-                  (app_services.SetFrontProcess(psn_p) < 0) ):
-                reason = "cannot run without OS X gui process"
+            if managername != "Aqua":
+                reason = f"{managername=} -- can only run in a macOS GUI session"
 
     # check on every platform whether tkinter can actually do anything
     if not reason: