diff --git a/ide/main.pp b/ide/main.pp index ee0b018b1e..ae9785ff71 100644 --- a/ide/main.pp +++ b/ide/main.pp @@ -2887,19 +2887,25 @@ end; procedure TMainIDE.mnuSetFreeBookmark(Sender: TObject); begin - OnSrcNotebookEditorDoSetBookmark(SourceEditorManager.ActiveEditor, -1, False); + OnSrcNotebookEditorDoSetBookmark(SourceEditorManager.SenderToEditor(Sender), -1, False); end; procedure TMainIDE.mnuSaveClicked(Sender: TObject); +var + SrcEdit: TSourceEditor; begin - if SourceEditorManager.ActiveEditor = nil then exit; - DoSaveEditorFile(SourceEditorManager.ActiveEditor, [sfCheckAmbiguousFiles]); + SrcEdit:=SourceEditorManager.SenderToEditor(Sender); + if SrcEdit = nil then exit; + DoSaveEditorFile(SrcEdit, [sfCheckAmbiguousFiles]); end; procedure TMainIDE.mnuSaveAsClicked(Sender: TObject); +var + SrcEdit: TSourceEditor; begin - if SourceEditorManager.ActiveEditor = nil then exit; - DoSaveEditorFile(SourceEditorManager.ActiveEditor, [sfSaveAs, sfCheckAmbiguousFiles]); + SrcEdit:=SourceEditorManager.SenderToEditor(Sender); + if SrcEdit = nil then exit; + DoSaveEditorFile(SrcEdit, [sfSaveAs, sfCheckAmbiguousFiles]); end; procedure TMainIDE.mnuSaveAllClicked(Sender: TObject); @@ -10508,6 +10514,7 @@ var begin GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo); if ActiveSrcEdit=nil then exit; + debugln(['TMainIDE.DoFindDeclarationAtCursor ',ActiveSrcEdit.Filename,' ',GetParentForm(ActiveSrcEdit.EditorComponent).Name]); DoFindDeclarationAtCaret(ActiveSrcEdit.EditorComponent.LogicalCaretXY); end; @@ -11218,16 +11225,15 @@ var ActiveUnitInfo: TUnitInfo; ASrcEdit: TSourceEditor; begin - if SourceEditorManager.SourceEditorCount = 0 then Exit; - ASrcEdit := TSourceEditor(Sender); + ASrcEdit := SourceEditorManager.SenderToEditor(Sender); + if ASrcEdit=nil then exit; - if Sender <> nil then - Project1.UpdateVisibleUnit(ASrcEdit, - SourceEditorManager.IndexOfSourceWindow(ASrcEdit.SourceNotebook)); + Project1.UpdateVisibleUnit(ASrcEdit, + SourceEditorManager.IndexOfSourceWindow(ASrcEdit.SourceNotebook)); - ActiveUnitInfo := Project1.UnitWithEditorComponent(SourceEditorManager.ActiveEditor); + ActiveUnitInfo := Project1.UnitWithEditorComponent(ASrcEdit); if ActiveUnitInfo = nil then Exit; - ActiveUnitInfo.SetLastUsedEditor(SourceEditorManager.ActiveEditor); + ActiveUnitInfo.SetLastUsedEditor(ASrcEdit); UpdateSaveMenuItemsAndButtons(false); MainIDEBar.itmViewToggleFormUnit.Enabled := Assigned(ActiveUnitInfo.Component) @@ -11402,10 +11408,10 @@ var AnEditorInfo: TUnitEditorInfo; NewXY: TPoint; begin + AnEditor := SourceEditorManager.SenderToEditor(Sender); if ID < 0 then begin // ID < 0 => next/prev if Project1.BookMarks.Count = 0 then exit; - AnEditor := SourceEditorManager.ActiveEditor; if AnEditor = nil then exit; CurWin := SourceEditorManager.IndexOfSourceWindow(AnEditor.SourceNotebook); diff --git a/ide/sourceeditor.pp b/ide/sourceeditor.pp index e36a8691eb..05ccfcde68 100644 --- a/ide/sourceeditor.pp +++ b/ide/sourceeditor.pp @@ -1080,6 +1080,7 @@ type destructor Destroy; override; function CreateNewWindow(Activate: Boolean= False; DoDisableAutoSizing: boolean = False): TSourceNotebook; + function SenderToEditor(Sender: TObject): TSourceEditor; private // Context-Menu procedure CloseOtherPagesClicked(Sender: TObject); @@ -1259,6 +1260,7 @@ var procedure RegisterStandardSourceTabMenuItems; procedure RegisterStandardSourceEditorMenuItems; +function dbgSourceNoteBook(snb: TSourceNotebook): string; var Highlighters: array[TLazSyntaxHighlighter] of TSynCustomHighlighter; @@ -1586,6 +1588,25 @@ begin 'EditorProperties', dlgFROpts, nil, nil, nil, 'menu_environment_options'); end; +function dbgSourceNoteBook(snb: TSourceNotebook): string; +var + i: Integer; +begin + Result:=''; + if snb=nil then begin + Result:='nil'; + end else if snb.Count=0 then begin + Result:='empty'; + end else begin + for i:=0 to 4 do begin + if i>=snb.Count then break; + Result+='"'+ExtractFilename(snb.Items[i].FileName)+'",'; + end; + end; + if RightStr(Result,1)=',' then Result:=LeftStr(Result,length(Result)-1); + Result:='['+Result+']'; +end; + { TSourceEditCompletion } @@ -8335,14 +8356,19 @@ end; procedure TSourceEditorManagerBase.SetActiveSourceWindow( const AValue: TSourceEditorWindowInterface); +var + NewWindow: TSourceNotebook; begin - if AValue = FActiveWindow then exit; - if (FActiveWindow <> nil) and (AValue <> nil) and (FActiveWindow.Focused) then - AValue.SetFocus; + NewWindow:= AValue as TSourceNotebook; + if NewWindow = FActiveWindow then exit; - FActiveWindow := AValue as TSourceNotebook; - FSourceWindowByFocusList.Remove(AValue); - FSourceWindowByFocusList.Insert(0, AValue); + //debugln(['TSourceEditorManagerBase.SetActiveSourceWindow ',dbgSourceNoteBook(FActiveWindow),' ',dbgSourceNoteBook(NewWindow)]); + if (FActiveWindow <> nil) and (NewWindow <> nil) and (FActiveWindow.Focused) then + NewWindow.SetFocus; + + FActiveWindow := NewWindow; + FSourceWindowByFocusList.Remove(NewWindow); + FSourceWindowByFocusList.Insert(0, NewWindow); if Assigned(OnCurrentCodeBufferChanged) then OnCurrentCodeBufferChanged(nil); @@ -9882,6 +9908,16 @@ begin Result.EnableAutoSizing; end; +function TSourceEditorManager.SenderToEditor(Sender: TObject): TSourceEditor; +begin + if Sender is TSourceEditor then + Result:=TSourceEditor(Sender) + else if Sender is TSourceNotebook then + Result:=TSourceNotebook(Sender).ActiveEditor as TSourceEditor + else + Result:=ActiveEditor; +end; + procedure TSourceEditorManager.RemoveWindow(AWindow: TSourceNotebook); var i: Integer;