1 #include "e_mod_main.h"
3 typedef struct _Plugin Plugin;
12 static Eina_List *plugins = NULL;
13 static Evry_Type COLLECTION_PLUGIN;
14 static Plugin_Config plugin_config;
17 _browse(Evry_Plugin *plugin, const Evry_Item *item)
24 if (!CHECK_TYPE(item, COLLECTION_PLUGIN))
27 if (item->plugin != plugin)
33 if (pp->begin && (inst = pp->begin(pp, NULL)))
35 if (!strcmp(plugin->name, "Plugins"))
36 inst->config = &plugin_config;
47 _add_item(Plugin *p, Plugin_Config *pc)
52 if (pc->enabled && (pp = evry_plugin_find(pc->name)))
57 it = EVRY_ITEM_NEW(Evry_Item, EVRY_PLUGIN(p), itp->label, NULL, NULL);
58 if (itp->icon) it->icon = eina_stringshare_ref(itp->icon);
59 it->icon_get = itp->icon_get;
61 it->browseable = EINA_TRUE;
62 it->detail = eina_stringshare_ref(EVRY_ITEM(p)->label);
63 p->plugins = eina_list_append(p->plugins, it);
69 _begin(Evry_Plugin *plugin, const Evry_Item *item __UNUSED__)
75 EVRY_PLUGIN_INSTANCE(p, plugin);
77 EINA_LIST_FOREACH (plugin->config->plugins, l, pc)
80 return EVRY_PLUGIN(p);
84 _begin_all(Evry_Plugin *plugin, const Evry_Item *item __UNUSED__)
90 EVRY_PLUGIN_INSTANCE(p, plugin);
92 EINA_LIST_FOREACH (evry_conf->conf_subjects, l, pc)
94 if (!strcmp(pc->name, "All") ||
95 !strcmp(pc->name, "Actions") ||
96 !strcmp(pc->name, "Calculator") ||
97 !strcmp(pc->name, "Plugins"))
103 return EVRY_PLUGIN(p);
107 _finish(Evry_Plugin *plugin)
111 GET_PLUGIN(p, plugin);
113 EVRY_PLUGIN_ITEMS_CLEAR(p);
115 EINA_LIST_FREE (p->plugins, it)
122 _fetch(Evry_Plugin *plugin, const char *input)
124 GET_PLUGIN(p, plugin);
126 EVRY_PLUGIN_ITEMS_CLEAR(p);
128 EVRY_PLUGIN_ITEMS_ADD(p, p->plugins, input, 1, 0);
130 return EVRY_PLUGIN_HAS_ITEMS(p);
134 _add_plugin(const char *name)
140 p = EVRY_PLUGIN_BASE(name, NULL, COLLECTION_PLUGIN,
141 _begin, _finish, _fetch);
142 p->browse = &_browse;
144 snprintf(path, sizeof(path), "launcher/everything-%s", p->name);
146 snprintf(title, sizeof(title), "%s: %s", _("Everything Plugin"), p->base.label);
148 e_configure_registry_item_params_add
149 (path, 110, title, NULL, p->base.icon, evry_collection_conf_dialog, p->name);
151 p->config_path = eina_stringshare_add(path);
153 plugins = eina_list_append(plugins, p);
159 evry_plug_collection_init(void)
165 plugin_config.min_query = 0;
166 plugin_config.top_level = EINA_TRUE;
167 plugin_config.aggregate = EINA_FALSE;
168 plugin_config.view_mode = VIEW_MODE_DETAIL;
170 COLLECTION_PLUGIN = evry_type_register("COLLECTION_PLUGIN");
172 p = _add_plugin("Plugins");
173 p->begin = &_begin_all;
174 EVRY_ITEM_ICON_SET(p, "preferences-plugin");
176 if (evry_plugin_register(p, EVRY_PLUGIN_SUBJECT, 100))
178 p->config->aggregate = EINA_TRUE;
179 p->config->top_level = EINA_TRUE;
180 p->config->view_mode = VIEW_MODE_THUMB;
183 EINA_LIST_FOREACH (evry_conf->collections, l, pc)
185 p = _add_plugin(pc->name);
186 EVRY_ITEM_ICON_SET(p, "start-here");
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);