Dynamic buttons do not retain their disabled state.

If a dynamic button is created with a disabled status and I navigate to another button and then return, the button does not retain its disabled status.

We'd need some more information about how the buttons are being generated, but in general
OnAddButtons is called every time the menu containing the dynamic command is shown. The dynamic buttons aren't cached from one display of the menu to the next.

function toolbox_add_dynamic_buttons_menu(menu, toolbox_map)
{
	DOpus.output("not called every time a dynamic button is shown");

	var button = menu.children.AddButton();

	button.label = toolbox_map("menu_button_name");
	button.image = toolbox_map("menu_button_icon");
	button.showimage = true;
	
	var dopus_function = toolbox_map("command") + " ITEMSPATH {f!}";
	button.func = dopus_function;
	button.desc = dopus_function;
	
	if (DOpus.Listers.LastActive.activetab.selstats.selfiles == 0)
		button.disabled = true;
}

It's confirmed, the function is not called every time the menu is displayed ?

How are you calling that function from OnAddButtons ? That's the actual entry point that Opus will be calling.

function OnAddButtons(addButtonsData)
{
	var cmdline = addButtonsData.cmdline;
	var command = cmdline.substring(0, cmdline.indexOf(" "));

	var toolbox_map = DOpus.Create.Map();

	var tool_group = DOpus.Vars.Get("global_tool_group_command")("command")(command)("tool_group");
	toolbox_map("menu_global_tool_group") = tool_group;
	Tool_Group_Menu_Init(toolbox_map);
	toolbox_map("command") = command;
	var menu = addButtonsData.buttons.AddMenuButton();

	menu.desc = toolbox_map("menu_global_tool_group");

	toolbox_map("auto_icon") = DOpus.Vars.Get("global_tool_group_command")("tool_group")(toolbox_map("menu_global_tool_group"))("icon");
	if (toolbox_map.exists("menu_icon"))
		var icon = toolbox_map("menu_icon");
	else if (toolbox_map.exists("config_dos_menu_image"))
		var icon = toolbox_map("config_dos_menu_image");
	else
		var icon = toolbox_map("auto_icon");
	menu.image = icon;
	menu.showimage = true;

	for (var choice_number = 1; choice_number <= (toolbox_map("menu_button_name_desc").count); choice_number++)
	{
		toolbox_map("menu_button_name") = toolbox_map("menu_button_name_desc")(choice_number);
		toolbox_map("menu_button_icon") = toolbox_map("menu_button_icon_desc")(choice_number);
		toolbox_add_dynamic_buttons_menu(menu, toolbox_map);
	}
	return true;
}