MenuDesigner: new method IsUpdate for MenuDesigner (related to BeginUpdate and EndUpdate) to prevent IDE crash. Fix for issue #29362. (merged from sparta, by hnb)

git-svn-id: trunk@51241 -
This commit is contained in:
ondrej 2016-01-10 20:58:45 +00:00
parent 9072a13913
commit f3ec76381d
2 changed files with 13 additions and 2 deletions

View File

@ -97,6 +97,7 @@ type
procedure UpdateTemplatesCount;
procedure BeginUpdate;
procedure EndUpdate;
function IsUpdate: Boolean;
property AcceleratorMenuItemsCount: integer read FAcceleratorMenuItemsCount;
property EditedMenu: TMenu read FEditedMenu;
property SavedTemplatesCount: integer read FSavedTemplatesCount;
@ -591,6 +592,11 @@ begin
OnDesignerSetSelection(FormEditingHook.GetCurrentObjectInspector.Selection);
end;
function TMenuDesigner.IsUpdate: Boolean;
begin
Result := FUpdateCount > 0;
end;
{ TMainMenuComponentEditor}
procedure TMainMenuComponentEditor.Edit;

View File

@ -4693,15 +4693,17 @@ end;
procedure TShadowMenu.AddOnClick(Sender: TObject);
var
compEditor: TDefaultComponentEditor;
compEditor: TDefaultComponentEditor = nil;
begin
if (FSelectedMenuItem <> nil) then begin
compEditor:=TDefaultComponentEditor.Create(FSelectedMenuItem, FEditorDesigner);
MenuDesigner.BeginUpdate;
try
compEditor:=TDefaultComponentEditor.Create(FSelectedMenuItem, FEditorDesigner);
compEditor.Edit;
UpdateSelectedItemInfo;
finally
compEditor.Free;
MenuDesigner.EndUpdate;
end;
end;
end;
@ -5698,6 +5700,9 @@ var
si: TShadowItem;
refreshNeeded: boolean = False;
begin
if MenuDesigner.IsUpdate then
Exit;
if (Sender is TPropertyEditor) then begin
for i:=0 to TPropertyEditor(Sender).PropCount-1 do begin
persistent:=TPropertyEditor(Sender).GetComponent(i);