Example #1
0
        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);
            }
        }