public void ToggleVisibility() { ThreadPool.QueueUserWorkItem(o => { lock (Lock) { if (_hiddenWindows.All(Closed)) { foreach (var window in _hiddenWindows) { window.Dispose(); } _hiddenWindows.Clear(); } if (_hiddenWindows.Any()) { ShowHiddenWindows(); } else { foreach (var window in WindowEnumeration.GetCurrentWindows()) { if (!window.IsPopup || !window.IsVisible) { window.Dispose(); continue; } window.Hide(); _hiddenWindows.Add(window); } } } }); }
/// <summary> /// This doesn't work very well on WPF windows, as they have weird container windows that retain opacity. /// </summary> public void ToggleFade() { lock (Lock) { if (_fadedWindows.All(Closed)) { _fadedWindows.Clear(); foreach (var window in _fadedWindows) { window.Dispose(); } _fadedWindows.Clear(); } if (_fadedWindows.Any()) { foreach (var window in _fadedWindows) { window.SetOpaque(); window.Dispose(); } _fadedWindows.Clear(); } else { foreach (var window in WindowEnumeration.GetCurrentWindows()) { // Not filtered to popups until it's working properly /*if (!window.IsPopup || !window.IsVisible) * { * window.Dispose(); * continue; * }*/ window.SetTranslucent(70); _fadedWindows.Add(window); } } } }
IEnumerable <Window> FilteredWindowList() { return(WindowEnumeration.GetCurrentWindows() .Where(w => (!w.IsPopup) || _showingPopups) .Where(NotInIgnoreList)); }