changed LastOpenHistoryResult's Copy to DeepCopy to clarify intent

This commit is contained in:
Jeremy 2026-01-02 22:30:09 +11:00
parent 9c2f2398f1
commit 024eeaf6bf
2 changed files with 19 additions and 8 deletions

View file

@ -60,26 +60,37 @@ public class LastOpenedHistoryResult : Result
} }
/// <summary> /// <summary>
/// Creates a deep copy of <see cref="LastOpenedHistoryResult"/>. /// Selectively creates a deep copy of the required properties for <see cref="LastOpenedHistoryResult"/>.
/// This copy should be independent of original and full isolated.
/// </summary> /// </summary>
/// <returns>A new <see cref="LastOpenedHistoryResult"/> containing the same required data.</returns> /// <returns>A new <see cref="LastOpenedHistoryResult"/> containing the same required data.</returns>
public LastOpenedHistoryResult Copy() public LastOpenedHistoryResult DeepCopy()
{ {
// queryValue and glyphValue are captured to ensure they are correctly referenced in the Action delegate.
var queryValue = Query;
var glyphValue = this.Glyph;
return new LastOpenedHistoryResult return new LastOpenedHistoryResult
{ {
Title = this.Title, Title = this.Title,
SubTitle = this.SubTitle, SubTitle = this.SubTitle,
PluginID = this.PluginID, PluginID = this.PluginID,
Query = this.Query, Query = this.Query,
OriginQuery = this.OriginQuery, OriginQuery = new Query { TrimmedQuery = Query },
RecordKey = this.RecordKey, RecordKey = this.RecordKey,
IcoPath = this.IcoPath, IcoPath = this.IcoPath,
PluginDirectory = this.PluginDirectory, PluginDirectory = this.PluginDirectory,
Action = this.Action, // Used for Query History style reopening
AsyncAction = this.AsyncAction, Action = _ =>
Glyph = this.Glyph, {
App.API.BackToQueryResults();
App.API.ChangeQuery(queryValue);
return false;
},
//Used for Last Opened History style reopening, currently need to be assigned at MainViewModel.cs
AsyncAction = null,
Glyph = new GlyphInfo(this.Glyph.FontFamily, this.Glyph.Glyph),
ExecutedDateTime = this.ExecutedDateTime ExecutedDateTime = this.ExecutedDateTime
// Note: Other properties are left as default — copy if needed.
}; };
} }

View file

@ -1333,7 +1333,7 @@ namespace Flow.Launcher.ViewModel
foreach (var item in historyItems) foreach (var item in historyItems)
{ {
var copiedItem = item.Copy(); var copiedItem = item.DeepCopy();
// Subtitle has datetime which can cause duplicates when saving. // Subtitle has datetime which can cause duplicates when saving.
copiedItem.SubTitle = Localize.lastExecuteTime(item.ExecutedDateTime); copiedItem.SubTitle = Localize.lastExecuteTime(item.ExecutedDateTime);
// Empty PluginID so the source of last opened history results won't be updated, these results are meant to be temporary copy. // Empty PluginID so the source of last opened history results won't be updated, these results are meant to be temporary copy.