From 4378ad1dfbed170f641a27d69922bb8cedcb78c6 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Thu, 28 Sep 2023 14:50:25 +0600 Subject: [PATCH] [X11] Force the first screen to be primary if XRandr haven't provided one --- src/Avalonia.X11/Screens/X11Screen.Providers.cs | 2 +- src/Avalonia.X11/Screens/X11Screens.cs | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.X11/Screens/X11Screen.Providers.cs b/src/Avalonia.X11/Screens/X11Screen.Providers.cs index 7ba3c67fa6..64cfd7fa79 100644 --- a/src/Avalonia.X11/Screens/X11Screen.Providers.cs +++ b/src/Avalonia.X11/Screens/X11Screen.Providers.cs @@ -13,7 +13,7 @@ internal partial class X11Screens { internal class X11Screen { - public bool IsPrimary { get; } + public bool IsPrimary { get; set; } public string Name { get; set; } public PixelRect Bounds { get; set; } public Size? PhysicalSize { get; set; } diff --git a/src/Avalonia.X11/Screens/X11Screens.cs b/src/Avalonia.X11/Screens/X11Screens.cs index bced3b669c..d29d156e82 100644 --- a/src/Avalonia.X11/Screens/X11Screens.cs +++ b/src/Avalonia.X11/Screens/X11Screens.cs @@ -86,8 +86,17 @@ namespace Avalonia.X11.Screens public int ScreenCount => _impl.Screens.Length; - public IReadOnlyList AllScreens => - _impl.Screens.Select((s, i) => new Screen(_scaling.GetScaling(s, i), s.Bounds, s.WorkingArea, s.IsPrimary)) - .ToArray(); + public IReadOnlyList AllScreens + { + get + { + var rawScreens = _impl.Screens; + if (!rawScreens.Any(s => s.IsPrimary) && rawScreens.Length > 0) + rawScreens[0].IsPrimary = true; + return rawScreens.Select((s, i) => + new Screen(_scaling.GetScaling(s, i), s.Bounds, s.WorkingArea, s.IsPrimary)) + .ToArray(); + } + } } }