diff --git a/Flow.Launcher/ResultListBox.xaml.cs b/Flow.Launcher/ResultListBox.xaml.cs index 6bd1490c3..bc784ab09 100644 --- a/Flow.Launcher/ResultListBox.xaml.cs +++ b/Flow.Launcher/ResultListBox.xaml.cs @@ -92,6 +92,8 @@ namespace Flow.Launcher private Point start; private string path; private string query; + // this method is called by the UI thread, which is single threaded, so we can be sloppy with locking + private bool isDragging; private void ResultList_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { @@ -101,15 +103,16 @@ namespace Flow.Launcher path = result.Result.CopyText; query = result.Result.OriginQuery.RawQuery; start = e.GetPosition(null); + isDragging = true; } - private void ResultList_MouseMove(object sender, MouseEventArgs e) { - if (e.LeftButton != MouseButtonState.Pressed) + if (e.LeftButton != MouseButtonState.Pressed|| !isDragging) { start = default; path = string.Empty; query = string.Empty; + isDragging = false; return; } @@ -123,15 +126,19 @@ namespace Flow.Launcher || Math.Abs(diff.Y) < SystemParameters.MinimumVerticalDragDistance) return; + isDragging = false; + var data = new DataObject(DataFormats.FileDrop, new[] { path }); - DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move | DragDropEffects.Copy); - App.API.ChangeQuery(query, true); - - e.Handled = true; + // Reassigning query to a new variable because for some reason + // after DragDrop.DoDragDrop call, 'query' loses its content, i.e. becomes empty string + var rawQuery = query; + var effect = DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move | DragDropEffects.Copy); + if (effect == DragDropEffects.Move) + App.API.ChangeQuery(rawQuery, true); } private void ResultListBox_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index e9cbfc2bd..8a12f1306 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -58,6 +58,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search SubTitle = Path.GetDirectoryName(path), AutoCompleteText = GetPathWithActionKeyword(path, ResultType.Folder), TitleHighlightData = StringMatcher.FuzzySearch(query.Search, title).MatchData, + CopyText = path, Action = c => { if (c.SpecialKeyState.CtrlPressed || (!Settings.PathSearchKeywordEnabled && !Settings.SearchActionKeywordEnabled)) @@ -174,7 +175,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search }, StringSplitOptions.None).Last(); var title = $"Open {folderName}"; - + var subtitleFolderName = folderName; // ie. max characters can be displayed without subtitle cutting off: "Program Files (x86)" @@ -189,6 +190,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search AutoCompleteText = GetPathWithActionKeyword(path, ResultType.Folder), IcoPath = path, Score = 500, + CopyText = path, Action = _ => { Context.API.OpenDirectory(path); @@ -213,6 +215,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search AutoCompleteText = GetPathWithActionKeyword(filePath, ResultType.File), TitleHighlightData = StringMatcher.FuzzySearch(query.Search, Path.GetFileName(filePath)).MatchData, Score = score, + CopyText = filePath, Action = c => { try