/// <summary> /// Collects the current set of open windows and collects a new <see cref="Arrangement"/> object. /// </summary> public static Arrangement Save() { var windows = OpenWindowGetter.GetOpenWindows(); var windowInfos = from window in windows let sef = SideEffectHelper.EliminateSideEffects <WindowKey, WindowHandle, WindowInfo, bool>(WindowInfo.TrySave, window.Value, window.Key) where sef.result select sef.side; return(new Arrangement(windowInfos)); }
public static bool CheckNeedsRestore() { var openWindows = OpenWindowGetter.GetOpenWindows(); if (!openWindows.Any()) { return(false); } return /*openWindows * .Select(window => Desktop.FromWindow(window.Key)) * .All(desktop => desktop.Left is null)*/(true); }
/// <summary> /// Applies the window arrangement from the <paramref name="arrangement"/> parameter to open windows. /// </summary> /// <param name="arrangement">The target arrangement of windows.</param> public static void Apply(Arrangement arrangement) { var windows = OpenWindowGetter.GetOpenWindows().ToDictionary(); foreach (var windowInfo in arrangement.WindowInfos) { if (windows.TryGetSingle(window => window.Value.Equals(windowInfo.Key), out var singleWindow)) { var windowHandle = singleWindow.Key; windows.Remove(windowHandle); windowInfo.Apply(windowHandle); } } }