Пример #1
0
        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;
                    }
                }
            }
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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);
        }