mirror of https://gitlab.com/basile.b/dexed.git
fix #107, Menu flickers when no custom tool is defined
This commit is contained in:
parent
a4cd64d58e
commit
ca84dffb31
|
@ -172,6 +172,8 @@ type
|
||||||
procedure menuDeclare(item: TMenuItem);
|
procedure menuDeclare(item: TMenuItem);
|
||||||
// item is the mainMenu entry declared previously. the sub items can be updated, deleted.
|
// item is the mainMenu entry declared previously. the sub items can be updated, deleted.
|
||||||
procedure menuUpdate(item: TMenuItem);
|
procedure menuUpdate(item: TMenuItem);
|
||||||
|
// indicates if menuDeclare should be called.
|
||||||
|
function menuHasItems: boolean;
|
||||||
end;
|
end;
|
||||||
(**
|
(**
|
||||||
* An implementer collects and updates its observers menus.
|
* An implementer collects and updates its observers menus.
|
||||||
|
|
|
@ -1894,31 +1894,42 @@ procedure TCEMainForm.updateMainMenuProviders;
|
||||||
var
|
var
|
||||||
i, j: Integer;
|
i, j: Integer;
|
||||||
itm: TMenuItem;
|
itm: TMenuItem;
|
||||||
doneUpdate: boolean = false;
|
hasItems: boolean;
|
||||||
|
doneUpdate: boolean;
|
||||||
begin
|
begin
|
||||||
if not assigned(mainMenu.Images) then
|
if not assigned(mainMenu.Images) then
|
||||||
exit;
|
exit;
|
||||||
for j := 0 to fMainMenuSubj.observersCount-1 do
|
for j := 0 to fMainMenuSubj.observersCount-1 do
|
||||||
begin
|
begin
|
||||||
|
doneUpdate := false;
|
||||||
|
hasItems := (fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuHasItems;
|
||||||
// try to update existing entry.
|
// try to update existing entry.
|
||||||
for i := 0 to mainMenu.Items.Count-1 do
|
for i := mainMenu.Items.Count-1 downto 0 do
|
||||||
if PtrInt(fMainMenuSubj.observers[j]) = mainMenu.Items[i].Tag then
|
if PtrInt(fMainMenuSubj.observers[j]) = mainMenu.Items[i].Tag then
|
||||||
|
begin
|
||||||
|
if not hasItems then
|
||||||
|
begin
|
||||||
|
doneUpdate:=true;
|
||||||
|
mainMenu.Items[i].Clear;
|
||||||
|
mainMenu.Items.Delete(i);
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
else
|
||||||
begin
|
begin
|
||||||
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuUpdate(mainMenu.Items[i]);
|
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuUpdate(mainMenu.Items[i]);
|
||||||
doneUpdate := true;
|
doneUpdate := true;
|
||||||
break;
|
break;
|
||||||
end;
|
end;
|
||||||
if doneUpdate then
|
end;
|
||||||
|
if doneUpdate or not hasItems then
|
||||||
continue;
|
continue;
|
||||||
// otherwise propose to create a new entry
|
// otherwise propose to create a new entry
|
||||||
itm := TMenuItem.Create(Self);
|
itm := TMenuItem.Create(Self);
|
||||||
mainMenu.Items.Add(itm);
|
mainMenu.Items.Add(itm);
|
||||||
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuDeclare(itm);
|
(fMainMenuSubj.observers[j] as ICEMainMenuProvider).menuDeclare(itm);
|
||||||
itm.Tag:= PtrInt(fMainMenuSubj.observers[j]);
|
itm.Tag:= PtrInt(fMainMenuSubj.observers[j]);
|
||||||
case itm.Count > 0 of
|
if itm.Count = 0 then
|
||||||
true: ;
|
itm.Free;
|
||||||
false: itm.Free;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ type
|
||||||
//
|
//
|
||||||
procedure menuDeclare(item: TMenuItem);
|
procedure menuDeclare(item: TMenuItem);
|
||||||
procedure menuUpdate(item: TMenuItem);
|
procedure menuUpdate(item: TMenuItem);
|
||||||
|
function menuHasItems: boolean;
|
||||||
procedure executeToolFromMenu(sender: TObject);
|
procedure executeToolFromMenu(sender: TObject);
|
||||||
//
|
//
|
||||||
procedure docNew(document: TCESynMemo);
|
procedure docNew(document: TCESynMemo);
|
||||||
|
@ -339,6 +340,11 @@ begin
|
||||||
mnuitm.shortcut := colitm.shortcut;
|
mnuitm.shortcut := colitm.shortcut;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TCETools.menuHasItems: boolean;
|
||||||
|
begin
|
||||||
|
result := tools.Count <> 0;
|
||||||
|
end;
|
||||||
{$ENDREGION}
|
{$ENDREGION}
|
||||||
|
|
||||||
{$REGION ICEEditableShortcut ---------------------------------------------------}
|
{$REGION ICEEditableShortcut ---------------------------------------------------}
|
||||||
|
|
Loading…
Reference in New Issue