diff options
4 files changed, 24 insertions, 16 deletions
diff --git a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs index 7cfeb98..f7357a0 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs @@ -470,7 +470,7 @@ namespace Mono.Addins.Database } } - Configuration.SetStatus (id, true, ainfo.AddinInfo.EnabledByDefault); + Configuration.SetEnabled (id, true, ainfo.AddinInfo.EnabledByDefault); SaveConfiguration (); if (addinEngine != null && addinEngine.IsInitialized) @@ -486,7 +486,7 @@ namespace Mono.Addins.Database if (!IsAddinEnabled (domain, id)) return; - Configuration.SetStatus (id, false, ai.AddinInfo.EnabledByDefault); + Configuration.SetEnabled (id, false, ai.AddinInfo.EnabledByDefault); SaveConfiguration (); // Disable all add-ins which depend on it @@ -519,7 +519,7 @@ namespace Mono.Addins.Database } catch { // If something goes wrong, enable the add-in again - Configuration.SetStatus (id, true, ai.AddinInfo.EnabledByDefault); + Configuration.SetEnabled (id, true, ai.AddinInfo.EnabledByDefault); SaveConfiguration (); throw; } diff --git a/Mono.Addins/Mono.Addins.Database/AddinScanner.cs b/Mono.Addins/Mono.Addins.Database/AddinScanner.cs index d323649..923eb94 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinScanner.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinScanner.cs @@ -554,13 +554,16 @@ namespace Mono.Addins.Database if (!ScanEmbeddedDescription (monitor, filePath, reflector, asm, out config)) return false; - if (config == null) { + if (config == null || config.IsExtensionModel) { // In this case, only scan the assembly if it has the Addin attribute. AddinAttribute att = (AddinAttribute) reflector.GetCustomAttribute (asm, typeof(AddinAttribute), false); - if (att == null) + if (att == null) { + config = null; return true; + } - config = new AddinDescription (); + if (config == null) + config = new AddinDescription (); } config.SetBasePath (Path.GetDirectoryName (filePath)); diff --git a/Mono.Addins/Mono.Addins.Database/DatabaseConfiguration.cs b/Mono.Addins/Mono.Addins.Database/DatabaseConfiguration.cs index 3e48d39..207fcdb 100644 --- a/Mono.Addins/Mono.Addins.Database/DatabaseConfiguration.cs +++ b/Mono.Addins/Mono.Addins.Database/DatabaseConfiguration.cs @@ -55,27 +55,31 @@ namespace Mono.Addins.Database public bool IsEnabled (string addinId, bool defaultValue) { + var addinName = Addin.GetIdName (addinId); + AddinStatus s; - if (addinStatus.TryGetValue (addinId, out s)) - return s.Enabled && !s.Uninstalled; + if (addinStatus.TryGetValue (addinName, out s)) + return s.Enabled && !IsRegisteredForUninstall (addinId); else return defaultValue; } - public void SetStatus (string addinId, bool enabled, bool defaultValue) + public void SetEnabled (string addinId, bool enabled, bool defaultValue) { - AddinStatus s; - addinStatus.TryGetValue (addinId, out s); - - if (s != null && s.Uninstalled) + if (IsRegisteredForUninstall (addinId)) return; + + var addinName = Addin.GetIdName (addinId); + + AddinStatus s; + addinStatus.TryGetValue (addinName, out s); if (enabled == defaultValue) { - addinStatus.Remove (addinId); + addinStatus.Remove (addinName); return; } if (s == null) - s = addinStatus [addinId] = new AddinStatus (addinId); + s = addinStatus [addinName] = new AddinStatus (addinName); s.Enabled = enabled; } @@ -123,7 +127,7 @@ namespace Mono.Addins.Database if (disabledElem != null) { // For back compatibility foreach (XmlElement elem in disabledElem.SelectNodes ("Addin")) - config.SetStatus (elem.InnerText, false, true); + config.SetEnabled (elem.InnerText, false, true); return config; } diff --git a/Mono.Addins/Mono.Addins/AddinModuleAttribute.cs b/Mono.Addins/Mono.Addins/AddinModuleAttribute.cs index 83d7b6f..a1f0174 100644 --- a/Mono.Addins/Mono.Addins/AddinModuleAttribute.cs +++ b/Mono.Addins/Mono.Addins/AddinModuleAttribute.cs @@ -31,6 +31,7 @@ namespace Mono.Addins /// <summary> /// Declares an optional add-in module /// </summary> + [AttributeUsage (AttributeTargets.Assembly, AllowMultiple=true)] public class AddinModuleAttribute: Attribute { string assemblyFile; |