void OnApplicationAddinExtensionChanged(object sender, Mono.Addins.ExtensionNodeEventArgs args) { Mono.Addins.TypeExtensionNode type_node = args.ExtensionNode as Mono.Addins.TypeExtensionNode; ApplicationAddin addin; if (args.Change == Mono.Addins.ExtensionChange.Add) { // Load NoteAddins if (Tomboy.DefaultNoteManager == null) { return; // too early -- YUCK! Bad hack } addin = type_node.GetInstance( typeof(ApplicationAddin)) as ApplicationAddin; if (addin != null) { if (addin.Initialized == false) { try { addin.Initialize(); app_addins [type_node.Id] = addin; } catch (Exception e) { Logger.Debug("Error initializing app addin {0}: {1}\n{2}", addin.GetType().ToString(), e.Message, e.StackTrace); } } } } else { if (app_addins.ContainsKey(type_node.Id)) { addin = app_addins [type_node.Id]; try { addin.Shutdown(); } catch (Exception e1) { Logger.Warn("Error shutting down app addin {0}: {1}\n{2}", addin.GetType().ToString(), e1.Message, e1.StackTrace); } finally { app_addins.Remove(type_node.Id); } try { addin.Dispose(); } catch (Exception e1) { Logger.Warn("Error disposing app addin: {0} - {1}", addin.GetType().ToString(), e1.Message); } } } if (ApplicationAddinListChanged != null) { ApplicationAddinListChanged(sender, args); } }