comments, and cleanups

SVN revision: 48597
This commit is contained in:
Hannes Janetzek 2010-05-03 23:08:24 +00:00
parent 936465b774
commit e0908dd7c9
2 changed files with 40 additions and 23 deletions

View File

@ -3,7 +3,7 @@
#include "e.h" #include "e.h"
#define EVRY_API_VERSION 13 #define EVRY_API_VERSION 14
#define EVRY_ACTION_OTHER 0 #define EVRY_ACTION_OTHER 0
#define EVRY_ACTION_FINISHED 1 #define EVRY_ACTION_FINISHED 1
@ -185,31 +185,42 @@ struct _Evry_Action
const char *name; const char *name;
struct struct
{ {
const Evry_Item *item; /* requested type for action */
Evry_Type type; Evry_Type type;
Evry_Type subtype; Evry_Type subtype;
/* handle multiple items */
Eina_Bool accept_list; Eina_Bool accept_list;
/* do not set ! */
const Evry_Item *item;
Eina_List *items; Eina_List *items;
} it1; } it1;
struct struct
{ {
const Evry_Item *item;
Evry_Type type; Evry_Type type;
Evry_Type subtype; Evry_Type subtype;
Eina_Bool accept_list; Eina_Bool accept_list;
/* do not set ! */
const Evry_Item *item;
Eina_List *items; Eina_List *items;
} it2; } it2;
/* this action is specific for a context. e.g. copy for file-type
is not, image viewer is. default is TRUE */ /* optional: this action is specific for a item 'context'.
e.g. 'copy' for file mime-type is not, 'image viewer' is.
default is FALSE */
Eina_Bool remember_context; Eina_Bool remember_context;
int (*action) (Evry_Action *act); int (*action) (Evry_Action *act);
/* optional */
int (*check_item) (Evry_Action *act, const Evry_Item *it); int (*check_item) (Evry_Action *act, const Evry_Item *it);
/* optional */
void (*free) (Evry_Action *act); void (*free) (Evry_Action *act);
/* when action is browseable */ /* optional: when action is browseable */
Eina_List *(*fetch) (Evry_Action *act); Eina_List *(*fetch) (Evry_Action *act);
}; };

View File

@ -26,14 +26,8 @@ _cb_sort(const void *data1, const void *data2)
const Evry_Action *act1 = data1; const Evry_Action *act1 = data1;
const Evry_Action *act2 = data2; const Evry_Action *act2 = data2;
if (act1->remember_context || act2->remember_context) /* sort actions that match the specific type before
{ those matching general type */
if (act1->remember_context && !act2->remember_context)
return -1;
if (!act1->remember_context && act2->remember_context)
return 1;
}
if (act1->it1.item && act2->it1.item) if (act1->it1.item && act2->it1.item)
{ {
if ((act1->it1.type == act1->it1.item->type) && if ((act1->it1.type == act1->it1.item->type) &&
@ -44,8 +38,20 @@ _cb_sort(const void *data1, const void *data2)
(act2->it1.type == act2->it1.item->type)) (act2->it1.type == act2->it1.item->type))
return 1; return 1;
} }
/* sort context specific actions before
general actions */
if (act1->remember_context || act2->remember_context)
{
if (act1->remember_context && !act2->remember_context)
return -1;
if (!act1->remember_context && act2->remember_context)
return 1;
}
} }
/* sort items which match input or which
match much better first */
if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0) if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0)
{ {
if (it2->fuzzy_match <= 0) if (it2->fuzzy_match <= 0)
@ -58,26 +64,25 @@ _cb_sort(const void *data1, const void *data2)
return (it1->fuzzy_match - it2->fuzzy_match); return (it1->fuzzy_match - it2->fuzzy_match);
} }
/* sort recently/most frequently used items first */
if (it1->usage > 0 || it2->usage > 0) if (it1->usage > 0 || it2->usage > 0)
{ {
return (it1->usage > it2->usage ? -1 : 1); return (it1->usage > it2->usage ? -1 : 1);
} }
/* sort items which match input better first */
if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0) if (it1->fuzzy_match > 0 || it2->fuzzy_match > 0)
{ {
if (it2->fuzzy_match <= 0)
return -1;
if (it1->fuzzy_match <= 0)
return 1;
if (it1->fuzzy_match - it2->fuzzy_match) if (it1->fuzzy_match - it2->fuzzy_match)
return (it1->fuzzy_match - it2->fuzzy_match); return (it1->fuzzy_match - it2->fuzzy_match);
} }
/* sort itemswith higher priority first */
if ((it1->plugin == it2->plugin) && if ((it1->plugin == it2->plugin) &&
(it1->priority - it2->priority)) (it1->priority - it2->priority))
return (it1->priority - it2->priority); return (it1->priority - it2->priority);
/* sort items with higher plugin priority first */
if (it1->type != EVRY_TYPE_ACTION && if (it1->type != EVRY_TYPE_ACTION &&
it2->type != EVRY_TYPE_ACTION) it2->type != EVRY_TYPE_ACTION)
{ {
@ -132,7 +137,9 @@ _fetch(Evry_Plugin *plugin, const char *input)
EVRY_PLUGIN_ITEMS_FREE(p); EVRY_PLUGIN_ITEMS_FREE(p);
s = p->selector->state; s = p->selector->state;
if (!s || !s->cur_plugins) if (!s) return 0;
if (!s->cur_plugins)
{ {
/* 'text' and 'actions' are always loaded */ /* 'text' and 'actions' are always loaded */
if ((p->selector == selectors[0]) && if ((p->selector == selectors[0]) &&
@ -144,7 +151,7 @@ _fetch(Evry_Plugin *plugin, const char *input)
return 1; return 1;
} }
/* get current 'context' ... */ /* get current items' context ... */
for (i = 1; i < 3; i++) for (i = 1; i < 3; i++)
{ {
if (p->selector == selectors[i]) if (p->selector == selectors[i])
@ -256,7 +263,6 @@ _fetch(Evry_Plugin *plugin, const char *input)
EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort); EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort);
cnt = 0;
EINA_LIST_FOREACH_SAFE(p->base.items, l, ll, it) EINA_LIST_FOREACH_SAFE(p->base.items, l, ll, it)
{ {
if (cnt++ < MAX_ITEMS) continue; if (cnt++ < MAX_ITEMS) continue;