diff --git a/components/sparta/dockedformeditor/source/sparta_mainide.pas b/components/sparta/dockedformeditor/source/sparta_mainide.pas index 562a5a9038..01db3106b4 100644 --- a/components/sparta/dockedformeditor/source/sparta_mainide.pas +++ b/components/sparta/dockedformeditor/source/sparta_mainide.pas @@ -174,7 +174,9 @@ type class procedure OnShowMethod(const Name: String); class procedure OnDesignRefreshPropertyValues; - class procedure OnMenuChanged; + class procedure OnModifiedPersistentAdded(APersistent: TPersistent; Select: Boolean); + class procedure OnModifiedSender(Sender: TObject); + class procedure OnModified; class procedure DesignerSetFocus; class procedure OnDesignMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); @@ -464,9 +466,6 @@ begin RepaintFormImages; end; - if (TheMessage.msg = CM_MENUCHANGED) and (Form.Form is TFakeForm) then - TSpartaMainIDE.OnMenuChanged; - // during docking, form position was in wrong place... we need to delay changing position :) if TheMessage.msg = WM_BoundToDesignTabSheet then if Form.LastActiveSourceWindow <> nil then @@ -1494,13 +1493,24 @@ begin DesignerSetFocus; end; -class procedure TSpartaMainIDE.OnMenuChanged; +class procedure TSpartaMainIDE.OnModifiedSender(Sender: TObject); +begin + OnModified; +end; + +class procedure TSpartaMainIDE.OnModified; var LResizer: TResizer; begin LResizer := GetCurrentResizer; if LResizer<>nil then - LResizer.FResizerFrame.OnMenuChanged; + LResizer.FResizerFrame.OnModified; +end; + +class procedure TSpartaMainIDE.OnModifiedPersistentAdded( + APersistent: TPersistent; Select: Boolean); +begin + OnModified; end; class procedure TSpartaMainIDE.OnShowDesignerForm(Sender: TObject; AEditor: TSourceEditorInterface; diff --git a/components/sparta/dockedformeditor/source/sparta_reg_dockedformeditor.pas b/components/sparta/dockedformeditor/source/sparta_reg_dockedformeditor.pas index c0aae54b99..2c36341442 100644 --- a/components/sparta/dockedformeditor/source/sparta_reg_dockedformeditor.pas +++ b/components/sparta/dockedformeditor/source/sparta_reg_dockedformeditor.pas @@ -46,6 +46,9 @@ begin LazarusIDE.AddHandlerOnShowSourceOfActiveDesignerForm(TSpartaMainIDE.OnShowSrcEditor); GlobalDesignHook.AddHandlerShowMethod(TSpartaMainIDE.OnShowMethod); + GlobalDesignHook.AddHandlerModified(TSpartaMainIDE.OnModifiedSender); + GlobalDesignHook.AddHandlerPersistentAdded(TSpartaMainIDE.OnModifiedPersistentAdded); + GlobalDesignHook.AddHandlerPersistentDeleted(TSpartaMainIDE.OnModified); GlobalDesignHook.AddHandlerRefreshPropertyValues(TSpartaMainIDE.OnDesignRefreshPropertyValues); GlobalDesignHook.AddHandlerDesignerMouseDown(TSpartaMainIDE.OnDesignMouseDown); diff --git a/components/sparta/dockedformeditor/source/sparta_resizerframe.pas b/components/sparta/dockedformeditor/source/sparta_resizerframe.pas index 19dde3b800..aeacd48990 100644 --- a/components/sparta/dockedformeditor/source/sparta_resizerframe.pas +++ b/components/sparta/dockedformeditor/source/sparta_resizerframe.pas @@ -74,7 +74,7 @@ type FActivePropertyGridItemIndex: Integer; FLastClientWidth, FLastClientHeight: Integer; FOldHasMainMenu: Boolean; - FMenuChanged: Boolean; + FDesignerModified: Boolean; function HasMainMenu: Boolean; procedure AppOnIdle(Sender: TObject; var Done: Boolean); @@ -135,7 +135,7 @@ type procedure ShowSizeRects; procedure ShowSizeControls; - procedure OnMenuChanged; + procedure OnModified; procedure DesignerSetFocus; property VerticalScrollPos: Integer read FVerticalScrollPos write FVerticalScrollPos; @@ -633,9 +633,9 @@ begin end; end; -procedure TResizerFrame.OnMenuChanged; +procedure TResizerFrame.OnModified; begin - FMenuChanged := True; + FDesignerModified := True; end; function TResizerFrame.GetRightMargin: Integer; @@ -834,7 +834,7 @@ end; procedure TResizerFrame.AppOnIdle(Sender: TObject; var Done: Boolean); begin - if FMenuChanged then + if FDesignerModified then begin if FOldHasMainMenu <> HasMainMenu then begin @@ -843,9 +843,9 @@ begin OnNodePositioning(Self, [pkBottom], pcPositioningEnd); Application.NotifyUserInputHandler(Self, 0); // force repaint invisible components end else - pFakeMenu.Invalidate; + pFakeMenu.Invalidate; // always repaint menu on modification - FMenuChanged := False; + FDesignerModified := False; end; end;