Merge pull request #1594 from Flow-Launcher/drag_and_drop_explorer

Fix Drag and Drop causing windows hang
This commit is contained in:
Jeremy Wu 2022-12-05 21:41:09 +11:00 committed by GitHub
commit 18451a3069
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 7 deletions

View file

@ -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)
{

View file

@ -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