From 5b6a18879c297b1f03b4e3f34695e8f55683c12b Mon Sep 17 00:00:00 2001 From: Hongtao Zhang Date: Sun, 4 Dec 2022 21:46:56 -0600 Subject: [PATCH] Fix Multiple Drag and drop causing NotReturn Method Call --- Flow.Launcher/ResultListBox.xaml.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/ResultListBox.xaml.cs b/Flow.Launcher/ResultListBox.xaml.cs index 6bd1490c3..e85f2b3d7 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,16 @@ 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; + + var effect = DragDrop.DoDragDrop((DependencyObject)sender, data, DragDropEffects.Move | DragDropEffects.Copy); + if (effect == DragDropEffects.Move) + App.API.ChangeQuery(query, true); } private void ResultListBox_OnPreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) {