From 5df157a62ce23061a6f285994b7c20c3ce5ebb28 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Sat, 15 Dec 2018 06:42:40 +0100 Subject: [PATCH] fix #380 - Same module can still be opened twice --- src/ce_ceproject.pas | 11 ++++++++--- src/ce_common.pas | 2 ++ src/ce_dubproject.pas | 8 +++++--- src/ce_messages.pas | 4 ++-- src/ce_synmemo.pas | 5 +++-- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/ce_ceproject.pas b/src/ce_ceproject.pas index 94b1a4f6..77151565 100644 --- a/src/ce_ceproject.pas +++ b/src/ce_ceproject.pas @@ -265,9 +265,14 @@ begin end; procedure TCENativeProject.customLoadFromFile(const fname: string); +var + f: string; begin - fbasePath := fname.extractFilePath; - inherited customLoadFromFile(fname); + f := fname; + if not FilenameIsAbsolute(f) then + f := ExpandFileName(f); + fbasePath := f.extractFilePath; + inherited customLoadFromFile(f); end; procedure TCENativeProject.customSaveToFile(const fname: string); @@ -1090,7 +1095,7 @@ var fname: string; begin fname := fSrcs[index]; - if fname.fileExists then + if FilenameIsAbsolute(fname) then result := fname else result := expandFilenameEx(fBasePath, fname); diff --git a/src/ce_common.pas b/src/ce_common.pas index f165cb35..61947161 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -630,6 +630,8 @@ function expandFilenameEx(const basePath, fname: string): string; var curr: string = ''; begin + if FilenameIsAbsolute(fname) then + exit(fname); getDir(0, curr); try if (curr <> basePath) and basePath.dirExists then diff --git a/src/ce_dubproject.pas b/src/ce_dubproject.pas index 947a216a..6c57dc70 100644 --- a/src/ce_dubproject.pas +++ b/src/ce_dubproject.pas @@ -744,9 +744,11 @@ var ext: string; bom: dword = 0; begin - ext := fname.extractFileExt.upperCase; - fBasePath := fname.extractFilePath; fFilename := fname; + if not FilenameIsAbsolute(fFilename) then + fFilename := ExpandFileName(fFilename); + ext := fFilename.extractFileExt.upperCase; + fBasePath := fFilename.extractFilePath; fSaveAsUtf8 := false; fIsSdl := false; if ext = '.JSON' then @@ -897,7 +899,7 @@ var fname: string; begin fname := fSrcs[index]; - if fname.fileExists then + if FilenameIsAbsolute(fname) then result := fname else result := expandFilenameEx(fBasePath, fname); diff --git a/src/ce_messages.pas b/src/ce_messages.pas index 556a7fb1..70612897 100644 --- a/src/ce_messages.pas +++ b/src/ce_messages.pas @@ -7,7 +7,7 @@ interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, ComCtrls, EditBtn, lcltype, ce_widget, ActnList, Menus, clipbrd, AnchorDocking, math, - TreeFilterEdit, Buttons, GraphType, fgl, strutils, + TreeFilterEdit, Buttons, GraphType, fgl, strutils, LazFileUtils, ce_ddemangle, ce_writableComponent, ce_common, ce_synmemo, ce_interfaces, ce_observer, ce_sharedres, ce_stringrange, ce_dsgncontrols; @@ -1171,7 +1171,7 @@ begin exit(true); end; // absolute fname - if ident.fileExists then + if FilenameIsAbsolute(ident) then begin getMultiDocHandler.openDocument(ident); exit(true); diff --git a/src/ce_synmemo.pas b/src/ce_synmemo.pas index 058fff39..450f3db3 100644 --- a/src/ce_synmemo.pas +++ b/src/ce_synmemo.pas @@ -3217,10 +3217,11 @@ begin else Highlighter := TxtSyn; end; - Lines.LoadFromFile(fname); fFilename := fname; + if not FilenameIsAbsolute(fFilename) then + fFilename := ExpandFileName(fFilename); + Lines.LoadFromFile(fname); FileAge(fFilename, fFileDate); - fModified := false; if Showing then begin