1 #include "e_mod_main.h"
3 static Eina_List *actions = NULL;
6 evry_plugins_init(void)
12 evry_plugins_shutdown(void)
16 EINA_LIST_FREE(actions, act)
17 evry_action_free(act);
22 _evry_cb_plugin_sort(const void *data1, const void *data2)
24 const Plugin_Config *pc1 = data1;
25 const Plugin_Config *pc2 = data2;
27 return pc1->priority - pc2->priority;
31 _evry_plugin_free(Evry_Item *it)
33 GET_EVRY_PLUGIN(p, it);
35 evry_plugin_unregister(p);
38 if (p->config) p->config->plugin = NULL;
39 if (p->name) eina_stringshare_del(p->name);
48 evry_plugin_new(Evry_Plugin *base, const char *name, const char *label,
49 const char *icon, Evry_Type item_type,
50 Evry_Plugin *(*begin) (Evry_Plugin *p, const Evry_Item *item),
51 void (*finish) (Evry_Plugin *p),
52 int (*fetch) (Evry_Plugin *p, const char *input),
53 void (*cb_free) (Evry_Plugin *p))
61 p = E_NEW(Evry_Plugin, 1);
63 it = evry_item_new(EVRY_ITEM(p), NULL, label, NULL, _evry_plugin_free);
65 it->browseable = EINA_TRUE;
66 it->type = EVRY_TYPE_PLUGIN;
68 it->subtype = item_type;
70 it->icon = eina_stringshare_add(icon);
72 p->name = eina_stringshare_add(name);
77 p->async_fetch = EINA_FALSE;
78 p->history = EINA_TRUE;
86 evry_plugin_free(Evry_Plugin *p)
88 evry_item_free(EVRY_ITEM(p));
92 _evry_plugin_action_browse(Evry_Action *act)
95 Eina_List *plugins = NULL;
98 GET_ITEM(it, act->it1.item);
99 GET_EVRY_PLUGIN(pp, EVRY_ITEM(act)->data);
101 if (!it->plugin || !it->plugin->state)
104 sel = it->plugin->state->selector;
106 evry_selectors_switch(sel->win, -1, EINA_TRUE);
108 if ((p = pp->begin(pp, it)))
110 plugins = eina_list_append(plugins, p);
112 if (!evry_state_push(sel, plugins))
113 eina_list_free(plugins);
120 evry_plugin_register(Evry_Plugin *p, int type, int priority)
127 if ((type < 0) || (type > 2))
130 if (type == EVRY_PLUGIN_SUBJECT)
131 conf = evry_conf->conf_subjects;
132 else if (type == EVRY_PLUGIN_ACTION)
133 conf = evry_conf->conf_actions;
134 else if (type == EVRY_PLUGIN_OBJECT)
135 conf = evry_conf->conf_objects;
137 EINA_LIST_FOREACH(conf, l, pc)
138 if (pc->name && p->name && !strcmp(pc->name, p->name))
141 /* check if module of same name is already loaded */
142 /* if ((pc) && (pc->plugin))
145 /* collection plugin sets its own config */
146 if (!pc && p->config)
148 conf = eina_list_append(conf, p->config);
154 pc = E_NEW(Plugin_Config, 1);
155 pc->name = eina_stringshare_add(p->name);
157 pc->priority = priority ? priority : 100;
158 pc->view_mode = VIEW_MODE_NONE;
159 pc->aggregate = EINA_TRUE;
160 pc->top_level = EINA_TRUE;
162 conf = eina_list_append(conf, pc);
164 if (pc->trigger && strlen(pc->trigger) == 0)
166 eina_stringshare_del(pc->trigger);
173 conf = eina_list_sort(conf, -1, _evry_cb_plugin_sort);
175 if (type == EVRY_PLUGIN_SUBJECT)
176 evry_conf->conf_subjects = conf;
177 else if (type == EVRY_PLUGIN_ACTION)
178 evry_conf->conf_actions = conf;
179 else if (type == EVRY_PLUGIN_OBJECT)
180 evry_conf->conf_objects = conf;
182 if ((type == EVRY_PLUGIN_SUBJECT) && (strcmp(p->name, "All")))
185 snprintf(buf, sizeof(buf), _("Show %s Plugin"), p->name);
187 e_action_predef_name_set(_("Everything Launcher"), buf,
188 "everything", p->name, NULL, 1);
195 snprintf(buf, sizeof(buf), _("Browse %s"), EVRY_ITEM(p)->label);
197 act = EVRY_ACTION_NEW(buf, p->input_type, 0, EVRY_ITEM(p)->icon,
198 _evry_plugin_action_browse, NULL);
199 EVRY_ITEM(act)->icon_get = EVRY_ITEM(p)->icon_get;
200 EVRY_ITEM(act)->data = p;
201 evry_action_register(act, 1);
202 actions = eina_list_append(actions, act);
209 evry_plugin_unregister(Evry_Plugin *p)
212 Eina_List *l = evry_conf->conf_subjects;
214 if (l && eina_list_data_find_list(l, p->config))
217 snprintf(buf, sizeof(buf), _("Show %s Plugin"), p->name);
219 e_action_predef_name_del(_("Everything"), buf);
224 evry_plugin_find(const char *name)
226 Plugin_Config *pc = NULL;
228 const char *n = eina_stringshare_add(name);
230 EINA_LIST_FOREACH(evry_conf->conf_subjects, l, pc)
232 if (!pc->plugin) continue;
237 eina_stringshare_del(n);
239 if (!pc) return NULL;