public void SearchResultUpdateHandler(object sender, WindowWalker.Components.Window.WindowListUpdateEventArgs e)
        {
            resultsListBox.Items.Clear();

            var windows = WindowSearchController.Instance.SearchMatches.Where(x => x.Hwnd != this.handleToMainWindow);

            foreach (var window in windows)
            {
                var tempStackPanel = new StackPanel();
                tempStackPanel.Orientation = Orientation.Horizontal;
                var image = new Image();
                image.Source = window.WindowIcon;
                image.Margin = new Thickness(0,0,5,0);
                tempStackPanel.Children.Add(image);
                var tempTextBlock = new TextBlockWindow();
                tempTextBlock.Text = window.Title;

                if (!window.ProcessName.ToUpper().Equals(string.Empty))
                {
                    tempTextBlock.Text += " (" + window.ProcessName.ToUpper() + ")" ;
                }

                tempTextBlock.Window = window;
                tempStackPanel.Children.Add(tempTextBlock);
                image.Height = 15;
                this.resultsListBox.Items.Add(tempStackPanel);
            }

            if (resultsListBox.Items.Count != 0)
            {
                resultsListBox.SelectedIndex = 0;
            }

            System.Diagnostics.Debug.Print("Search result updated in Main Window. There are now " + this.resultsListBox.Items.Count + " windows that match the search term");
        }
        public void SearchResultUpdateHandler(object sender, WindowWalker.Components.Window.WindowListUpdateEventArgs e)
        {
            this.Dispatcher.Invoke(() =>
            {
                resultsListBox.Items.Clear();

                var windowsResult = WindowSearchController.Instance.SearchMatches.Where(x => x.ResultWindow.Hwnd != this.handleToMainWindow);
                Dictionary<TextBlock, WindowSearchResult> highlightStack = new Dictionary<TextBlock, WindowSearchResult>();

                var windowResultsByType = new List<List<WindowSearchResult>>();

                var windowNoSearchTextResults = windowsResult.Where(x => x.SearchResultMatchType == WindowSearchResult.SearchType.Empty).OrderByDescending(x => x.Score);
                var windowsShortcutResults = windowsResult.Where(x => x.SearchResultMatchType == WindowSearchResult.SearchType.Shortcut).OrderByDescending(x => x.Score);
                var windowsFuzzyResults = windowsResult.Where(x => x.SearchResultMatchType == WindowSearchResult.SearchType.Fuzzy).OrderByDescending(x => x.Score);

                windowResultsByType.Add(windowNoSearchTextResults.ToList());
                windowResultsByType.Add(windowsShortcutResults.ToList());
                windowResultsByType.Add(windowsFuzzyResults.ToList());

                Dictionary<IntPtr, bool> windowsAlreadyDisplayed = new Dictionary<IntPtr, bool>();

                foreach (var windowsResultForType in windowResultsByType)
                {
                    foreach (WindowSearchResult windowResult in windowsResultForType)
                    {
                        if (windowsAlreadyDisplayed.ContainsKey(windowResult.ResultWindow.Hwnd))
                        {
                            continue;
                        }
                        else
                        {
                            windowsAlreadyDisplayed[windowResult.ResultWindow.Hwnd] = true;
                        }

                        /// Each window is shown in a horizontal stack panel
                        /// that contains an image object on the left and
                        /// a textblock with the window title on the right

                        var tempStackPanel = new StackPanel();
                        tempStackPanel.Orientation = Orientation.Horizontal;
                        var image = new Image();
                        image.Source = windowResult.ResultWindow.WindowIcon;
                        image.Margin = new Thickness(0, 0, 5, 0);
                        tempStackPanel.Children.Add(image);
                        var tempTextBlock = new TextBlockWindow();

                        tempTextBlock.Window = windowResult.ResultWindow;
                        tempStackPanel.Children.Add(tempTextBlock);
                        image.Height = 15;
                        this.resultsListBox.Items.Add(tempStackPanel);
                        highlightStack[tempTextBlock] = windowResult;
                    }
                }
                if (resultsListBox.Items.Count != 0)
                {
                    resultsListBox.SelectedIndex = 0;
                }

                this.UpdateTextWithHighlight(highlightStack);

                System.Diagnostics.Debug.Print("Search result updated in Main Window. There are now " + this.resultsListBox.Items.Count + " windows that match the search term");
            });
        }