Skip to content

Commit ccbb00d

Browse files
committed
fix(developer): Open recent files with long paths elided with ellipsis
Fixes #10145. Turns out we were clobbering out internal data because Delphi strings are copy-on-write. At the same time, moved from using the Hint property to just referencing the source filename in the array, as that is cleaner anyway.
1 parent 149fc5e commit ccbb00d

2 files changed

Lines changed: 12 additions & 8 deletions

File tree

developer/src/tike/main/UfrmMain.pas

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1462,17 +1462,19 @@ procedure TfrmKeymanDeveloper.UpdateFileMRU;
14621462
begin
14631463
m := TMenuItem.Create(Self);
14641464
m.Caption := '&'+IntToStr(i+1)+' '+FGlobalProject.MRU.EllipsisFile(i);
1465-
m.Hint := FGlobalProject.MRU.Files[i];
1465+
m.Tag := i;
14661466
m.OnClick := mnuFileRecentFileClick;
14671467
mnuFileRecent.Add(m);
14681468
end;
14691469
end;
14701470
end;
14711471

14721472
procedure TfrmKeymanDeveloper.mnuFileRecentFileClick(Sender: TObject);
1473+
var
1474+
filename: string;
14731475
begin
1474-
with Sender as TMenuItem do
1475-
OpenFilesInProject([Hint]);
1476+
filename := FGlobalProject.MRU.Files[(Sender as TMenuItem).Tag];
1477+
OpenFilesInProject([filename]);
14761478
end;
14771479

14781480
{-------------------------------------------------------------------------------
@@ -1552,7 +1554,7 @@ procedure TfrmKeymanDeveloper.mnuProjectClick(Sender: TObject);
15521554
begin
15531555
m := TMenuItem.Create(Self);
15541556
m.Caption := '&'+IntToStr(i+1)+' '+FProjectMRU.EllipsisFile(i);
1555-
m.Hint := FProjectMRU.Files[i];
1557+
m.Tag := i;
15561558
m.OnClick := mnuProjectRecentFileClick;
15571559
mnuProjectsRecent.Add(m);
15581560
end;
@@ -1567,7 +1569,7 @@ procedure TfrmKeymanDeveloper.mnuProjectRecentFileClick(Sender: TObject);
15671569
var
15681570
filename: string;
15691571
begin
1570-
filename := (Sender as TMenuItem).Hint;
1572+
filename := FProjectMRU.Files[(Sender as TMenuItem).Tag];
15711573
OpenProject(filename);
15721574
end;
15731575

developer/src/tike/main/mrulist.pas

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,13 @@ destructor TMRUList.Destroy;
231231
end;
232232

233233
function TMRUList.EllipsisFile(Index: Integer): string;
234+
var
235+
buffer: array[0..MAX_PATH] of char;
234236
begin
235-
Result := Files[Index];
237+
StrPCopy(buffer, Files[Index]);
236238

237-
if PathCompactPath(0, PWideChar(Result), GetSystemMetrics(SM_CXSCREEN) div 3) then // I4697
238-
Result := string(PChar(Result)) // This removes the terminating nul
239+
if PathCompactPath(0, buffer, GetSystemMetrics(SM_CXSCREEN) div 3) then // I4697
240+
Result := buffer // This removes the terminating nul
239241
else
240242
Result := ExtractFileName(Files[Index]);
241243
end;

0 commit comments

Comments
 (0)