From fd5e3219c35711c3acdef77d7391e0f01ac71598 Mon Sep 17 00:00:00 2001 From: Basile Burg Date: Mon, 14 Sep 2015 04:22:41 +0200 Subject: [PATCH] fix, exceptions in the options editor --- src/ce_optionseditor.pas | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ce_optionseditor.pas b/src/ce_optionseditor.pas index c7a2c90b..e5aaf2d2 100644 --- a/src/ce_optionseditor.pas +++ b/src/ce_optionseditor.pas @@ -44,6 +44,7 @@ type protected procedure UpdateShowing; override; private + fUpdatingCat: boolean; fCatChanged: boolean; fEdOptsSubj: TCEEditableOptionsSubject; procedure updateCategories; @@ -103,8 +104,13 @@ var i: Integer; dt: PCategoryData; ed: ICEEditableOptions; + sel: string = ''; begin + if selCat.Selected <> nil then + sel := selCat.Selected.Text; + fUpdatingCat := true; inspector.TIObject := nil; + selCat.BeginUpdate; selCat.Items.Clear; for i:= 0 to fEdOptsSubj.observersCount-1 do begin @@ -116,6 +122,11 @@ begin dt^.observer := ed; end; selCat.Items.SortTopLevelNodes(@sortCategories); + for i := 0 to selCat.Items.Count-1 do + if SelCat.Items.Item[i].Text = sel then + SelCat.Selected := SelCat.Items.Item[i]; + selCat.EndUpdate; + fUpdatingCat := false; end; function TCEOptionEditorWidget.sortCategories(Cat1, Cat2: TTreeNode): integer; @@ -134,6 +145,8 @@ var dt: PCategoryData; begin result := true; + if fUpdatingCat then exit; + if csDestroying in ComponentState then exit; if selCat.Selected = nil then exit; if selCat.Selected.Data = nil then exit; // accept/cancel is relative to a single category @@ -152,6 +165,7 @@ begin begin dt := PCategoryData(selCat.Selected.Data); if dt^.container = nil then exit; + if dt^.observer = nil then exit; if dt^.observer.optionedOptionsModified() then begin result := dlgOkCancel(msg_mod) = mrOk;