static private void HandleNonMatchingWindows(Config.Arrangement p_arrangement, HashSet <WindowHandle> p_matched) { if (p_arrangement.NonMatchingWindowStatus != Config.Arrangement.NonMatchingStatus.NoChange) { /* Get all the visible windows */ HashSet <WindowHandle> allWindows = new HashSet <WindowHandle>(GetAllVisibleWindows()); /* Remove those we previously matched */ allWindows.ExceptWith(p_matched); /* Apply appropriate change to each of the non-matched windows */ foreach (WindowHandle wHand in allWindows) { switch (p_arrangement.NonMatchingWindowStatus) { case Config.Arrangement.NonMatchingStatus.Minimised: wHand.MinimizeWindow(); break; case Config.Arrangement.NonMatchingStatus.MoveBehind: wHand.SetZPosition((IntPtr)(1)); break; default: break; } } } }
void ApplyArrangement(object sender, EventArgs e) { if (sender is ToolStripMenuItem) { ToolStripMenuItem menuItem = (ToolStripMenuItem)sender; if (menuItem.Tag is Config.Arrangement) { Config.Arrangement arrangement = (Config.Arrangement)menuItem.Tag; WindowModifier.ApplyArrangement(config, arrangement); } } }
static public void ApplyArrangement(Config.Top p_config, Config.Arrangement p_arrangement) { HashSet <WindowHandle> matchedWindows = new HashSet <WindowHandle>(); IntPtr hwnd = IntPtr.Zero; foreach (Config.LocatedWindow locWin in p_arrangement.WindowPositions) { HashSet <WindowHandle> thisLocWinMatches = ApplyLocatedWindow(p_config, locWin, matchedWindows); if (p_arrangement.SetZIndex) { foreach (WindowHandle wHand in thisLocWinMatches) { wHand.SetZPosition(hwnd); hwnd = wHand.RawPtr; } } matchedWindows.UnionWith(thisLocWinMatches); } HandleNonMatchingWindows(p_arrangement, matchedWindows); }