SrcEdit: Fix order of events for editor created/destoyed

git-svn-id: trunk@36352 -
This commit is contained in:
martin 2012-03-26 19:23:40 +00:00
parent 0d3821b8c6
commit 30aa47c2c1
2 changed files with 24 additions and 9 deletions

View File

@ -659,8 +659,8 @@ type
function NewSE(Pagenum: Integer; NewPagenum: Integer = -1;
ASharedEditor: TSourceEditor = nil;
ATabCaption: String = ''): TSourceEditor;
procedure AcceptEditor(AnEditor: TSourceEditor);
procedure ReleaseEditor(AnEditor: TSourceEditor);
procedure AcceptEditor(AnEditor: TSourceEditor; SendEvent: Boolean = False);
procedure ReleaseEditor(AnEditor: TSourceEditor; SendEvent: Boolean = False);
procedure EditorChanged(Sender: TObject);
procedure DoClose(var CloseAction: TCloseAction); override;
procedure DoShow; override;
@ -975,6 +975,8 @@ type
protected
procedure NewEditorCreated(AEditor: TSourceEditor);
procedure EditorRemoved(AEditor: TSourceEditor);
procedure SendEditorCreated(AEditor: TSourceEditor);
procedure SendEditorDestroyed(AEditor: TSourceEditor);
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure RemoveWindow(AWindow: TSourceNotebook);
public
@ -2525,7 +2527,7 @@ begin
UnbindEditor;
FEditor.Visible:=false;
FEditor.Parent:=nil;
TSourceNotebook(FAOwner).ReleaseEditor(self);
TSourceNotebook(FAOwner).ReleaseEditor(self, True);
// free the synedit control after processing the events
EditorComponent.Owner.RemoveComponent(EditorComponent);
Application.ReleaseComponent(FEditor);
@ -6123,14 +6125,14 @@ begin
{$ENDIF}
Result := TSourceEditor.Create(Self, NotebookPage[PageNum], ASharedEditor);
Result.FPageName := NoteBookPages[Pagenum];
AcceptEditor(Result);
AcceptEditor(Result, True);
PageIndex := Pagenum;
{$IFDEF IDE_DEBUG}
debugln('TSourceNotebook.NewSE end ');
{$ENDIF}
end;
procedure TSourceNotebook.AcceptEditor(AnEditor: TSourceEditor);
procedure TSourceNotebook.AcceptEditor(AnEditor: TSourceEditor; SendEvent: Boolean);
begin
FSourceEditorList.Add(AnEditor);
@ -6143,11 +6145,16 @@ begin
AnEditor.OnKeyDown := @EditorKeyDown;
AnEditor.EditorComponent.Beautifier.OnGetDesiredIndent := @EditorGetIndent;
AnEditor.EditorComponent.EndUpdate;
if SendEvent then
Manager.SendEditorCreated(AnEditor)
end;
procedure TSourceNotebook.ReleaseEditor(AnEditor: TSourceEditor);
procedure TSourceNotebook.ReleaseEditor(AnEditor: TSourceEditor; SendEvent: Boolean);
begin
FSourceEditorList.Remove(AnEditor);
if SendEvent then
Manager.SendEditorDestroyed(AnEditor)
end;
function TSourceNotebook.FindSourceEditorWithPageIndex(APageIndex: integer): TSourceEditor;
@ -8719,13 +8726,21 @@ procedure TSourceEditorManager.NewEditorCreated(AEditor: TSourceEditor);
begin
if FDefaultCompletionForm <> nil then
FDefaultCompletionForm.AddEditor(AEditor.EditorComponent);
FChangeNotifyLists[semEditorCreate].CallNotifyEvents(AEditor);
end;
procedure TSourceEditorManager.EditorRemoved(AEditor: TSourceEditor);
begin
if FDefaultCompletionForm <> nil then
FDefaultCompletionForm.RemoveEditor(AEditor.EditorComponent);
end;
procedure TSourceEditorManager.SendEditorCreated(AEditor: TSourceEditor);
begin
FChangeNotifyLists[semEditorCreate].CallNotifyEvents(AEditor);
end;
procedure TSourceEditorManager.SendEditorDestroyed(AEditor: TSourceEditor);
begin
FChangeNotifyLists[semEditorDestroy].CallNotifyEvents(AEditor);
end;

View File

@ -248,8 +248,8 @@ type
semWindowDestroy, // Called after removal of a Window
semWindowActivate, // Window is now ActiveSourceWindow (does not vave to be focused)
semWindowFocused, // The window became the active win of the application
semEditorCreate,
semEditorDestroy,
semEditorCreate, // Called after a new editor was created and added to list
semEditorDestroy, // Called when an Editor is destroyed / after it is removed fron the list of editors
semEditorActivate, // Editor is ActiveEditor
semEditorStatus // any status change of the editor (Caret, Selection, topline, ...)
);