1 #include "e_mod_main.h"
4 typedef struct _Plugin Plugin;
13 static Eina_List *plugins = NULL;
14 static const char _module_icon[] = "preferences-plugin";
15 static Evry_Type COLLECTION_PLUGIN;
16 static Plugin_Config plugin_config;
19 _browse(Evry_Plugin *plugin, const Evry_Item *item)
26 if (!CHECK_TYPE(item, COLLECTION_PLUGIN))
29 if (item->plugin != plugin)
35 if (pp->begin && (inst = pp->begin(pp, NULL)))
37 if (!strcmp(plugin->name, "Plugins"))
38 inst->config = &plugin_config;
49 _add_item(Plugin *p, Plugin_Config *pc)
54 if (pc->enabled && (pp = evry_plugin_find(pc->name)))
59 it = EVRY_ITEM_NEW(Evry_Item, EVRY_PLUGIN(p), itp->label, NULL, NULL);
60 if (itp->icon) it->icon = eina_stringshare_ref(itp->icon);
61 it->icon_get = itp->icon_get;
63 it->browseable = EINA_TRUE;
64 it->detail = eina_stringshare_ref(EVRY_ITEM(p)->label);
65 p->plugins = eina_list_append(p->plugins, it);
71 _begin(Evry_Plugin *plugin, const Evry_Item *item __UNUSED__)
77 EVRY_PLUGIN_INSTANCE(p, plugin);
79 EINA_LIST_FOREACH(plugin->config->plugins, l, pc)
82 return EVRY_PLUGIN(p);
86 _begin_all(Evry_Plugin *plugin, const Evry_Item *item __UNUSED__)
92 EVRY_PLUGIN_INSTANCE(p, plugin);
94 EINA_LIST_FOREACH(evry_conf->conf_subjects, l, pc)
96 if (!strcmp(pc->name, "All") ||
97 !strcmp(pc->name, "Actions") ||
98 !strcmp(pc->name, "Calculator") ||
99 !strcmp(pc->name, "Plugins"))
105 return EVRY_PLUGIN(p);
109 _finish(Evry_Plugin *plugin)
113 GET_PLUGIN(p, plugin);
115 EVRY_PLUGIN_ITEMS_CLEAR(p);
117 EINA_LIST_FREE(p->plugins, it)
124 _fetch(Evry_Plugin *plugin, const char *input)
126 GET_PLUGIN(p, plugin);
128 EVRY_PLUGIN_ITEMS_CLEAR(p);
130 EVRY_PLUGIN_ITEMS_ADD(p, p->plugins, input, 1, 0);
132 return !!(plugin->items);
136 _add_plugin(const char *name)
142 p = EVRY_PLUGIN_NEW(Evry_Plugin, N_(name),
143 _module_icon, COLLECTION_PLUGIN,
144 _begin, _finish, _fetch, NULL);
145 p->browse = &_browse;
147 snprintf(path, sizeof(path), "launcher/everything-%s", p->name);
149 snprintf(title, sizeof(title), "%s: %s", _("Everything Plugin"), p->base.label);
151 e_configure_registry_item_params_add
152 (path, 110, title, NULL, p->base.icon, evry_collection_conf_dialog, p->name);
154 p->config_path = eina_stringshare_add(path);
156 plugins = eina_list_append(plugins, p);
162 evry_plug_collection_init(void)
168 plugin_config.min_query = 0;
169 plugin_config.top_level = EINA_TRUE;
170 plugin_config.aggregate = EINA_FALSE;
171 plugin_config.view_mode = VIEW_MODE_DETAIL;
173 COLLECTION_PLUGIN = evry_type_register("COLLECTION_PLUGIN");
175 p = _add_plugin("Plugins");
176 p->begin = &_begin_all;
177 if (evry_plugin_register(p, EVRY_PLUGIN_SUBJECT, 100))
179 p->config->aggregate = EINA_TRUE;
180 p->config->top_level = EINA_TRUE;
181 p->config->view_mode = VIEW_MODE_THUMB;
184 EINA_LIST_FOREACH(evry_conf->collections, l, pc)
186 p = _add_plugin(pc->name);
190 if (evry_plugin_register(p, EVRY_PLUGIN_SUBJECT, 1))
191 p->config->aggregate = EINA_FALSE;
198 evry_plug_collection_shutdown(void)
202 EINA_LIST_FREE(plugins, p)
206 e_configure_registry_item_del(p->config_path);
207 eina_stringshare_del(p->config_path);