| // |
| // Copyright 2026 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| |
| // window_system.h: Shared X11-vs-Wayland selection policy for Ozone/Linux. |
| |
| #ifndef COMMON_LINUX_WINDOW_SYSTEM_H_ |
| #define COMMON_LINUX_WINDOW_SYSTEM_H_ |
| |
| namespace angle |
| { |
| // Neutral (non-EGL) identifier for a Linux native window system. Kept free of |
| // the Xlib "None" identifier, which is a preprocessor macro on X11 builds. |
| enum class WindowSystem |
| { |
| Unspecified, |
| X11, |
| Wayland, |
| }; |
| |
| // Returns true when WAYLAND_DISPLAY names a compositor socket, i.e. when the |
| // environment points this process at a Wayland display. |
| bool IsWaylandDisplay(); |
| |
| // Returns true when the environment describes a Wayland session, which stays |
| // true for clients that reach it through XWayland. Deliberately broader than |
| // IsWaylandDisplay() and not a basis for choosing a backend; rx::IsXWayland() |
| // uses it to gate workarounds for X11 clients of a Wayland compositor. Not |
| // cached; callers that query it repeatedly memoize. |
| bool IsWaylandSession(); |
| |
| // The window system the environment points this process at: Wayland when it |
| // names a compositor socket, otherwise X11. |
| WindowSystem GetWindowSystemFromEnvironment(); |
| |
| // Pure selection policy: the preferred window system if it is compiled in, |
| // otherwise whichever one is, preferring X11; Unspecified when neither is. |
| // |
| // No I/O, so every combination is unit-testable. Callers supply the preference |
| // (see GetWindowSystemFromEnvironment()) and, in the util layer, probe for |
| // availability. libANGLE consults this only when the caller passed no |
| // EGL_PLATFORM_ANGLE_NATIVE_PLATFORM_TYPE_ANGLE. |
| WindowSystem ChoosePreferredWindowSystem(bool x11Compiled, |
| bool waylandCompiled, |
| WindowSystem preferred); |
| |
| } // namespace angle |
| |
| #endif // COMMON_LINUX_WINDOW_SYSTEM_H_ |