return -1;
if (it2->usage && !it1->usage)
return 1;
-
+
if ((it1->plugin == action_selector) ||
(it2->plugin == action_selector))
{
return (it1->plugin->config->priority -
(it2->plugin->config->priority + it2->priority));
}
-
+
return -1;
}
return (it1->plugin->config->priority -
(it1->plugin->config->priority + it2->priority));
}
-
+
if ((it1->plugin == it2->plugin) &&
(it1->priority - it2->priority))
return (it1->priority - it2->priority);
if (it1->priority - it2->priority)
return (it1->priority - it2->priority);
- return strcasecmp(it1->label, it2->label);
+ return strcasecmp(it1->label, it2->label);
}
static int
Plugin *p = (Plugin *) plugin;
Evry_Plugin *pp;
Evry_State *s;
- Eina_List *l, *ll;
+ Eina_List *l, *ll, *lll, *lp;
Evry_Item *it;
int cnt = 0;
Eina_List *items = NULL;
History_Item *hi;
const char *id;
- s = p->selector->state;
-
EVRY_PLUGIN_ITEMS_FREE(p);
- EINA_LIST_FOREACH(s->cur_plugins, l, pp)
- cnt += eina_list_count(pp->items);
+ s = p->selector->state;
+ /* first is aggregator itself */
+ lp = s->cur_plugins->next;
if (input[0])
{
- EINA_LIST_FOREACH(s->cur_plugins, l, pp)
+ EINA_LIST_FOREACH(lp, l, pp)
{
EINA_LIST_FOREACH(pp->items, ll, it)
{
}
}
- if (!input[0] || eina_list_count(items) < 50)
+ /* always append items of action selector */
+ if (!input[0] && (p->selector == selectors[1]))
{
- EINA_LIST_FOREACH(s->cur_plugins, l, pp)
+ EINA_LIST_FOREACH(lp, l, pp)
{
- for (cnt = 0, ll = pp->items; ll && cnt < 50; ll = ll->next, cnt++)
+ for (cnt = 0, ll = pp->items; ll && cnt < 50; ll = ll->next, cnt++)
{
- if (!items || !eina_list_data_find_list(items, ll->data))
+ if (!items || !eina_list_data_find_list(items, ll->data))
+ {
+ it = ll->data;
+
+ evry_item_ref(it);
+ it->fuzzy_match = 0;
+ EVRY_PLUGIN_ITEM_APPEND(p, it);
+ }
+ }
+ }
+ }
+
+ EINA_LIST_FOREACH(lp, l, pp)
+ {
+ EINA_LIST_FOREACH(pp->items, ll, it)
+ {
+ cnt = 1;
+ if (it->usage == 0)
+ continue;
+
+ if ((it->usage > 0) && (!eina_list_data_find_list(items, it)))
+ {
+ evry_item_ref(it);
+ it->fuzzy_match = 0;
+ items = eina_list_append(items, it);
+ EVRY_PLUGIN_ITEM_APPEND(p, it);
+ continue;
+ }
+
+ if (it->plugin->item_id)
+ id = it->plugin->item_id(it->plugin, it);
+ else
+ id = it->label;
+
+ if ((he = eina_hash_find(p->selector->history, id)))
+ {
+ EINA_LIST_FOREACH(he->items, lll, hi)
{
- it = ll->data;
+ if ((hi->plugin == it->plugin->name) &&
+ ((!input[0]) || (!input[0] && !hi->input) ||
+ (!strncmp(input, hi->input, strlen(input))) ||
+ (!strncmp(input, hi->input, strlen(hi->input)))))
+ {
+ cnt++;
+ it->usage += hi->last_used;
+ }
+ }
+ it->usage /= (double)cnt;
+ if (!eina_list_data_find_list(items, it))
+ {
evry_item_ref(it);
it->fuzzy_match = 0;
+ items = eina_list_append(items, it);
EVRY_PLUGIN_ITEM_APPEND(p, it);
}
- }
- }
+ }
+ else it->usage = 0;
+ }
}
- if (items) eina_list_free(items);
-
- EINA_LIST_FOREACH(EVRY_PLUGIN(p)->items, l, it)
+ /* NOTE this is kind of weird. list_count returns 2 even if there is
+ only one item in list */
+ if (eina_list_count(lp) == 2)
{
- cnt = 1;
- if (it->usage) continue;
-
- if (it->plugin->item_id)
- id = it->plugin->item_id(it->plugin, it);
- else
- id = it->label;
-
- if ((he = eina_hash_find(p->selector->history, id)))
+ pp = lp->data;
+ EINA_LIST_FOREACH(pp->items, l, it)
{
- EINA_LIST_FOREACH(he->items, ll, hi)
+ if (!eina_list_data_find_list(items, it))
{
- if ((hi->plugin == it->plugin->name) &&
- ((!input[0]) || (!input[0] && !hi->input) ||
- (!strncmp(input, hi->input, strlen(input))) ||
- (!strncmp(input, hi->input, strlen(hi->input)))))
- {
- cnt++;
- it->usage += hi->last_used;
- }
+ evry_item_ref(it);
+ it->fuzzy_match = 0;
+ EVRY_PLUGIN_ITEM_APPEND(p, it);
}
- it->usage /= (double)cnt;
}
}
-
+
+ if (items) eina_list_free(items);
+
if (input[0])
{
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
{
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort_recent);
}
-
+
return 1;
}