Index: Slim/Buttons/Plugins.pm =================================================================== --- Slim/Buttons/Plugins.pm (revision 2685) +++ Slim/Buttons/Plugins.pm (working copy) @@ -217,15 +217,33 @@ sub addMenus { no strict 'refs'; + + return if $addGroups; + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); for my $plugin (keys %{installedPlugins()}) { + # don't bother if name isn't defined (corrupt/invalid plugin) + next unless defined $plugins{$plugin}->{'name'}; + + if (exists $disabledplugins{$plugin}) { + Slim::Buttons::Home::delSubMenu("PLUGINS", $plugins{$plugin}->{'name'}); + $::d_plugins && msg("Removing $plugin from menu.\n"); + } + + # don't bother going further if there is no addMenu next unless UNIVERSAL::can("Plugins::${plugin}","addMenu"); - next if exists $disabledplugins{$plugin}; my $menu = eval { &{"Plugins::${plugin}::addMenu"}() }; + if (exists $disabledplugins{$plugin}) { + $::d_plugins && msg("Removing $plugin from menu: $menu\n"); + Slim::Buttons::Home::delSubMenu($menu, $plugins{$plugin}->{'name'}); + next; + } + + if (!$@ && defined $menu) { my %params = ( @@ -247,6 +265,9 @@ sub addScreensavers { no strict 'refs'; + + return if $addGroups; + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); for my $plugin (keys %{installedPlugins()}) { @@ -292,6 +313,9 @@ sub addWebPages { no strict 'refs'; + + return if $addGroups && !Slim::Utils::Prefs::get('plugins-onthefly'); + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); for my $plugin (keys %{installedPlugins()}) { @@ -338,6 +362,7 @@ } sub clearGroups { + $::d_plugins && msg("Resetting plugins\n"); $addGroups = 0; } Index: Slim/Buttons/Home.pm =================================================================== --- Slim/Buttons/Home.pm (revision 2685) +++ Slim/Buttons/Home.pm (working copy) @@ -169,6 +169,7 @@ } unless (defined $submenuname) { warn "No submenu information supplied!\n"; + Slim::Utils::Misc::bt(); return; } if (exists $home{$menu}{'submenus'}{$submenuname}) { Index: Slim/Web/Setup.pm =================================================================== --- Slim/Web/Setup.pm (revision 2685) +++ Slim/Web/Setup.pm (working copy) @@ -1269,11 +1269,13 @@ my $i = 0; my %plugins = map {$_ => 1} Slim::Utils::Prefs::getArray('disabledplugins'); - Slim::Buttons::Plugins::addSetupGroups(); Slim::Buttons::Plugins::addWebPages(); Slim::Buttons::Plugins::addMenus(); Slim::Buttons::Plugins::addScreensavers(); - + + # call addSetupGroups last, since it sets a flag to say we're done refreshing plugins. + Slim::Buttons::Plugins::addSetupGroups(); + Slim::Utils::Prefs::delete('disabledplugins'); my $pluginlistref = Slim::Buttons::Plugins::installedPlugins();