Example #1
0
bool_t iface_plugin_set_current (PluginHandle * plugin)
{
    hook_call ("config save", NULL); /* tell interface to save layout */

    if (current_plugin != NULL)
    {
        AUDDBG ("Unloading plugin widgets.\n");
        general_cleanup ();

        AUDDBG ("Unloading visualizers.\n");
        vis_cleanup ();

        AUDDBG ("Unloading %s.\n", plugin_get_name (current_plugin));
        interface_unload ();

        current_plugin = NULL;
    }

    if (plugin != NULL)
    {
        AUDDBG ("Loading %s.\n", plugin_get_name (plugin));

        if (! interface_load (plugin))
            return FALSE;

        current_plugin = plugin;

        AUDDBG ("Loading visualizers.\n");
        vis_init ();

        AUDDBG ("Loading plugin widgets.\n");
        general_init ();
    }

    return TRUE;
}
Example #2
0
static struct TVisualBase *
vis_modopen(struct TVisualBase *mod, TTAGITEM *tags)
{
	struct TExecBase *TExecBase = TGetExecBase(mod);
	struct TVisualBase *inst = TNULL;
	TBOOL success = TTRUE;

	TLock(mod->vis_Lock);

	if (mod->vis_RefCount == 0)
		success = vis_init(mod);

	if (success)
		mod->vis_RefCount++;

	TUnlock(mod->vis_Lock);

	if (success)
	{
		struct TVisualBase *base =
			(struct TVisualBase *) TGetTag(tags, TVisual_Attach, TNULL);
		if (TGetTag(tags, TVisual_NewInstance, TFALSE)) base = mod;

		if (base)
		{
			inst = (struct TVisualBase *) TNewInstance((struct TModule *) base,
				base->vis_Module.tmd_PosSize, base->vis_Module.tmd_NegSize);
			if (inst)
			{
				TInitList(&inst->vis_ReqPool);
				TInitList(&inst->vis_WaitList);

				inst->vis_IMsgPort = (struct TMsgPort *)
					TGetTag(tags, TVisual_IMsgPort, TNULL);
				if (inst->vis_IMsgPort == TNULL)
				{
					inst->vis_IMsgPort = TCreatePort(TNULL);
					inst->vis_Flags |= TVISFL_IMSGPORT_OWNER;
				}

				inst->vis_CmdRPort = (struct TMsgPort *)
					TGetTag(tags, TVisual_CmdRPort, TNULL);
				if (inst->vis_CmdRPort == TNULL)
				{
					inst->vis_CmdRPort = TCreatePort(TNULL);
					inst->vis_Flags |= TVISFL_CMDRPORT_OWNER;
				}

				if (inst->vis_IMsgPort == TNULL || inst->vis_CmdRPort == TNULL)
				{
					vis_destroyports(inst);
					TFreeInstance(&inst->vis_Module);
					inst = TNULL;
				}
			}
			if (inst == TNULL)
				vis_modclose(mod);
		}
		else
			inst = mod;
	}

	return inst;
}