Skip to content

Commit

Permalink
Merge pull request #2143 from Flow-Launcher/expand-resultcopy
Browse files Browse the repository at this point in the history
Consistent handling of clipboard copying
  • Loading branch information
Garulf committed Jun 4, 2023
2 parents 22dd59e + c631895 commit fa2c894
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 37 deletions.
8 changes: 5 additions & 3 deletions Flow.Launcher/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,16 @@ public MainWindow()

private void OnCopy(object sender, ExecutedRoutedEventArgs e)
{
if (QueryTextBox.SelectionLength == 0)
var result = _viewModel.Results.SelectedItem?.Result;
if (QueryTextBox.SelectionLength == 0 && result != null)
{
_viewModel.ResultCopy(string.Empty);
string copyText = result.CopyText;
_viewModel.ResultCopy(copyText);

}
else if (!string.IsNullOrEmpty(QueryTextBox.Text))
{
_viewModel.ResultCopy(QueryTextBox.SelectedText);
System.Windows.Clipboard.SetText(QueryTextBox.SelectedText);
}
}

Expand Down
2 changes: 1 addition & 1 deletion Flow.Launcher/PublicAPIInstance.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public void ShellRun(string cmd, string filename = "cmd.exe")

public void CopyToClipboard(string text)
{
Clipboard.SetDataObject(text);
_mainVM.ResultCopy(text);
}

public void StartLoadingBar() => _mainVM.ProgressBarVisibility = Visibility.Visible;
Expand Down
58 changes: 25 additions & 33 deletions Flow.Launcher/ViewModel/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1104,47 +1104,39 @@ public void UpdateResultView(IEnumerable<ResultsForUpdate> resultsForUpdates)
}

/// <summary>
/// This is the global copy method for an individual result. If no text is passed,
/// the method will work out what is to be copied based on the result, so plugin can offer the text
/// to be copied via the result model. If the text is a directory/file path,
/// then actual file/folder will be copied instead.
/// The result's subtitle text is the default text to be copied
/// Copies the specified file or folder path to the clipboard, or the specified text if it is not a valid file or folder path.
/// Shows a message indicating whether the operation was completed successfully.
/// </summary>
/// <param name="stringToCopy">The file or folder path, or text to copy to the clipboard.</param>
/// <returns>Nothing.</returns>
public void ResultCopy(string stringToCopy)
{
if (string.IsNullOrEmpty(stringToCopy))
{
var result = Results.SelectedItem?.Result;
if (result != null)
{
string copyText = result.CopyText;
var isFile = File.Exists(copyText);
var isFolder = Directory.Exists(copyText);
if (isFile || isFolder)
{
var paths = new StringCollection
{
copyText
};

Clipboard.SetFileDropList(paths);
App.API.ShowMsg(
$"{App.API.GetTranslation("copy")} {(isFile ? App.API.GetTranslation("fileTitle") : App.API.GetTranslation("folderTitle"))}",
App.API.GetTranslation("completedSuccessfully"));
}
else
{
Clipboard.SetDataObject(copyText);
App.API.ShowMsg(
$"{App.API.GetTranslation("copy")} {App.API.GetTranslation("textTitle")}",
App.API.GetTranslation("completedSuccessfully"));
}
}

return;
}
var isFile = File.Exists(stringToCopy);
var isFolder = Directory.Exists(stringToCopy);
if (isFile || isFolder)
{
var paths = new StringCollection
{
stringToCopy
};

Clipboard.SetDataObject(stringToCopy);
Clipboard.SetFileDropList(paths);
App.API.ShowMsg(
$"{App.API.GetTranslation("copy")} {(isFile ? App.API.GetTranslation("fileTitle") : App.API.GetTranslation("folderTitle"))}",
App.API.GetTranslation("completedSuccessfully"));
}
else
{
Clipboard.SetDataObject(stringToCopy);
App.API.ShowMsg(
$"{App.API.GetTranslation("copy")} {App.API.GetTranslation("textTitle")}",
App.API.GetTranslation("completedSuccessfully"));
}
return;
}

#endregion
Expand Down

0 comments on commit fa2c894

Please sign in to comment.