mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-06 03:38:26 +02:00
DockedFormEditor: Fixed AV on designer default method creation (mouse double click)
git-svn-id: trunk@64573 -
This commit is contained in:
parent
26c6ac0ef4
commit
e1df656379
@ -229,7 +229,7 @@ var
|
|||||||
LPageIndex: Integer;
|
LPageIndex: Integer;
|
||||||
begin
|
begin
|
||||||
LPageCtrl := SourceEditorWindows.FindModulePageControl(LastActiveSourceEditor);
|
LPageCtrl := SourceEditorWindows.FindModulePageControl(LastActiveSourceEditor);
|
||||||
LRefreshDesigner := Assigned(LPageCtrl) and (LPageCtrl.PageIndex in [1, 2]);
|
LRefreshDesigner := Assigned(LPageCtrl) and LPageCtrl.DesignerFocused;
|
||||||
LPageIndex := LPageCtrl.PageIndex;
|
LPageIndex := LPageCtrl.PageIndex;
|
||||||
LPageCtrl.CreateTabSheetAnchors;
|
LPageCtrl.CreateTabSheetAnchors;
|
||||||
|
|
||||||
@ -465,14 +465,14 @@ begin
|
|||||||
// Prevent unexpected events (when is deactivated some control outside designed form)
|
// Prevent unexpected events (when is deactivated some control outside designed form)
|
||||||
if (LDesignForm.LastActiveSourceWindow = LSourceEditorWindowInterface)
|
if (LDesignForm.LastActiveSourceWindow = LSourceEditorWindowInterface)
|
||||||
// important!!! for many error - switching between editors...
|
// important!!! for many error - switching between editors...
|
||||||
and (LPageCtrl.PageIndex in [1, 2]) then
|
and LPageCtrl.DesignerFocused then
|
||||||
SourceEditorWindows.SourceEditorWindow[LSourceEditorWindowInterface].ActiveDesignForm := LDesignForm
|
SourceEditorWindows.SourceEditorWindow[LSourceEditorWindowInterface].ActiveDesignForm := LDesignForm
|
||||||
else
|
else
|
||||||
SourceEditorWindows.SourceEditorWindow[LSourceEditorWindowInterface].ActiveDesignForm := nil;
|
SourceEditorWindows.SourceEditorWindow[LSourceEditorWindowInterface].ActiveDesignForm := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
LPageCtrl.InitPage;
|
LPageCtrl.InitPage;
|
||||||
if (LPageCtrl.PageIndex in [1, 2]) then
|
if LPageCtrl.DesignerFocused then
|
||||||
begin
|
begin
|
||||||
if not LDesignForm.Hiding then
|
if not LDesignForm.Hiding then
|
||||||
begin
|
begin
|
||||||
@ -578,7 +578,7 @@ begin
|
|||||||
LSourceEditorWindow := SourceEditorWindows.SourceEditorWindow[LActiveSourceWindowInterface];
|
LSourceEditorWindow := SourceEditorWindows.SourceEditorWindow[LActiveSourceWindowInterface];
|
||||||
if LSourceEditorWindow = nil then Exit;
|
if LSourceEditorWindow = nil then Exit;
|
||||||
|
|
||||||
if not (LPageCtrl.PageIndex in [1, 2]) then
|
if not LPageCtrl.DesignerFocused then
|
||||||
begin
|
begin
|
||||||
LSourceEditorWindow.ActiveDesignForm := nil;
|
LSourceEditorWindow.ActiveDesignForm := nil;
|
||||||
LPageCtrl.InitPage;
|
LPageCtrl.InitPage;
|
||||||
|
@ -51,6 +51,7 @@ type
|
|||||||
procedure CreateTabSheetAnchors;
|
procedure CreateTabSheetAnchors;
|
||||||
procedure CreateTabSheetDesigner;
|
procedure CreateTabSheetDesigner;
|
||||||
procedure DesignerSetFocus;
|
procedure DesignerSetFocus;
|
||||||
|
function DesignerFocused: Boolean;
|
||||||
procedure HideDesignPages;
|
procedure HideDesignPages;
|
||||||
procedure InitPage;
|
procedure InitPage;
|
||||||
procedure RefreshResizer;
|
procedure RefreshResizer;
|
||||||
@ -82,7 +83,6 @@ begin
|
|||||||
FDesignForm := AValue;
|
FDesignForm := AValue;
|
||||||
if AValue = nil then
|
if AValue = nil then
|
||||||
begin
|
begin
|
||||||
//find
|
|
||||||
if Assigned(FResizer) then
|
if Assigned(FResizer) then
|
||||||
FResizer.DesignForm := nil;
|
FResizer.DesignForm := nil;
|
||||||
end else begin
|
end else begin
|
||||||
@ -153,6 +153,12 @@ begin
|
|||||||
Resizer.DesignerSetFocus;
|
Resizer.DesignerSetFocus;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TModulePageControl.DesignerFocused: Boolean;
|
||||||
|
begin
|
||||||
|
Result := (ActivePage = FTabSheetDesigner) or
|
||||||
|
(ActivePage = FTabSheetAnchors);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TModulePageControl.HideDesignPages;
|
procedure TModulePageControl.HideDesignPages;
|
||||||
begin
|
begin
|
||||||
FreeAndNil(FTabSheetAnchors);
|
FreeAndNil(FTabSheetAnchors);
|
||||||
|
@ -447,8 +447,13 @@ end;
|
|||||||
procedure TResizeFrame.SetDesignForm(const AValue: TDesignForm);
|
procedure TResizeFrame.SetDesignForm(const AValue: TDesignForm);
|
||||||
begin
|
begin
|
||||||
FDesignForm := AValue;
|
FDesignForm := AValue;
|
||||||
// special for QT (at start "design form" has wrong position)
|
if Assigned(AValue) then
|
||||||
TryBoundDesignForm;
|
begin
|
||||||
|
// special for QT (at start "design form" has wrong position)
|
||||||
|
TryBoundDesignForm;
|
||||||
|
Application.AddOnIdleHandler(@AppOnIdle);
|
||||||
|
end else
|
||||||
|
Application.RemoveOnIdleHandler(@AppOnIdle);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TResizeFrame.TryBoundDesignForm;
|
procedure TResizeFrame.TryBoundDesignForm;
|
||||||
@ -481,14 +486,11 @@ begin
|
|||||||
PanelFormClient.OnChangeBounds := @ClientChangeBounds;
|
PanelFormClient.OnChangeBounds := @ClientChangeBounds;
|
||||||
PanelAnchorContainer.OnChangeBounds := @ClientChangeBounds;
|
PanelAnchorContainer.OnChangeBounds := @ClientChangeBounds;
|
||||||
AdjustPanelResizer;
|
AdjustPanelResizer;
|
||||||
|
|
||||||
Application.AddOnIdleHandler(@AppOnIdle);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TResizeFrame.Destroy;
|
destructor TResizeFrame.Destroy;
|
||||||
begin
|
begin
|
||||||
Pointer(FDesignForm) := nil;
|
DesignForm := nil;
|
||||||
Application.RemoveOnIdleHandler(@AppOnIdle);
|
|
||||||
FBitmapBarInactive.Free;
|
FBitmapBarInactive.Free;
|
||||||
FBitmapBarActive.Free;
|
FBitmapBarActive.Free;
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
|
@ -107,6 +107,10 @@ end;
|
|||||||
|
|
||||||
procedure TResizer.SetDesignForm(AValue: TDesignForm);
|
procedure TResizer.SetDesignForm(AValue: TDesignForm);
|
||||||
begin
|
begin
|
||||||
|
{$IFDEF DEBUGDOCKEDFORMEDITOR}
|
||||||
|
if Assigned(AValue) then DebugLn('TResizer.SetDesignForm: New Designform: ', DbgSName(AValue.Form))
|
||||||
|
else DebugLn('TResizer.SetDesignForm: New Designform: nil');
|
||||||
|
{$ENDIF}
|
||||||
if FDesignForm <> nil then
|
if FDesignForm <> nil then
|
||||||
FDesignForm.OnChangeHackedBounds := nil;
|
FDesignForm.OnChangeHackedBounds := nil;
|
||||||
FDesignForm := AValue;
|
FDesignForm := AValue;
|
||||||
|
Loading…
Reference in New Issue
Block a user