public static bool Disable(Window window, bool instant = false) { if (!HiddenWindows.ContainsKey(window)) { return(false); } if (instant) { HiddenWindows[window].Deactivate(); } HiddenWindows.Remove(window); return(true); }
private async void Loop() { while (HiddenWindows.ContainsKey(Window) && Window.Exists) { await Task.Delay(100); if (!State && PreviewArea.Contains(Mouse.Position) && Window.IsOnCurrentDesktop) { if (Window.HasAnimation()) { Window.StopAnimation(); Window.Move(HiddenArea); Window.SetOpacity(0); await Task.Yield(); } PreviewShow(); bool flick = await WaitForFlick(); if (flick) { Show(); } else { PreviewHide(); } await WaitForLeave(); } else if (State && (!ActiveArea.Contains(Mouse.Position) || !Window.IsOnCurrentDesktop)) { Hide(); } } Program.OnExit -= Deactivate; if (noCleanup) { return; } if (!Window.Exists) { return; } if (!IsAlwaysOnTop) { Window.SetAlwaysOnTop(false); } Show(); }
public static async Task <bool> EnableAsync(Window window, EdgeType direction) { if (direction.IsCorner()) { throw new ArgumentException($"{nameof(direction)} cannot be a corner"); } if (HiddenWindows.ContainsKey(window)) { Notification($"{window.Title}\nis already in a hide animation"); return(false); } if (direction.IsNone() is bool manual && manual) { direction = await GetInput(); if (direction.IsNone()) { return(false); } } window.Restore(); var monitor = window.Monitor.Area; var hider = new WindowDocker(window); hider.IsAlwaysOnTop = window.IsAlwaysOnTop; hider.ActiveArea = hider.HiddenArea = window.Area; hider.ActiveArea = hider.ActiveArea.SetEdge(monitor.GetEdge(direction)); hider.HiddenArea = hider.HiddenArea.SetEdge(direction.Reverse(), monitor.GetEdge(direction).Pos); hider.PreviewArea = hider.HiddenArea.SetEdge(direction, direction.IsTopOrLeft() ? previewWidth : -previewWidth, relative: true); hider.PeekArea = hider.HiddenArea.SetEdge(direction, direction.IsTopOrLeft() ? peekWidth : -peekWidth, relative: true); if (manual) { Notification("Hide animation set succesfully"); } HiddenWindows.Add(window, hider); Program.OnExit += hider.Deactivate; window.SetAlwaysOnTop(true); hider.State = false; hider.Hide(); hider.Loop(); return(true); }
public static bool IsEnabled(Window window) => HiddenWindows.ContainsKey(window);