private bool ProcessSelection(IntPtr handle, bool preferSelection)
        {
            IntPtr shelldll_defview = InteropUtil.GetDlgItem(handle,
                                                             InteropUtil.ID_FileList);
            IntPtr listview = InteropUtil.GetDlgItem(shelldll_defview, 1);
            IntPtr focus    = InteropUtil.GetFocus();

            if (listview == focus || preferSelection)
            {
                return(AddSelectedItemsFromSelection(listview));
            }
            else
            {
                //check the content of the file combobox
                IntPtr hFileName = InteropUtil.GetDlgItem(handle,
                                                          InteropUtil.ID_FileNameCombo);
                string currentText = (InteropUtil.GetWindowTextW(hFileName) ?? "").Trim();
                if (!String.IsNullOrEmpty(currentText))
                {
                    try
                    {
                        if (System.IO.Path.IsPathRooted(currentText))
                        {
                            if (Directory.Exists(currentText) || File.Exists(currentText))
                            {
                                //the contents of the text box are a rooted path, that points to an existing directory.
                                //we interpret that to mean that the user wants to select that directory.
                                _selected.Add(currentText);
                                return(true);
                            }
                        }
                        else if (!String.IsNullOrEmpty(m_currentFolder))
                        {
                            string combined = System.IO.Path.Combine(m_currentFolder,
                                                                     currentText);
                            if (Directory.Exists(combined) || File.Exists(combined))
                            {
                                //the contents of the text box are a relative path, that points to a
                                //an existing directory. We interpret the users intent to mean that they wanted
                                //to select the existing path.
                                _selected.Add(combined);
                                return(true);
                            }
                        }
                    }
                    catch (Exception)
                    {
                        //try to add the selection
                        if (AddSelectedItemsFromSelection(listview))
                        {
                            return(true);
                        }
                    }
                }
                //forward all wrong inputs to the standard mechanism
                return(false);
            }
        }