| // | |
| // 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_ |