mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Merge pull request #1594 from Flow-Launcher/drag_and_drop_explorer
Fix Drag and Drop causing windows hang
This commit is contained in:
commit
18451a3069
2 changed files with 17 additions and 7 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue