'everything' use an indicator to show when a trigger is active

SVN revision: 48240
This commit is contained in:
Hannes Janetzek 2010-04-23 00:49:29 +00:00
parent aa65519498
commit e739b9ecd9
2 changed files with 33 additions and 9 deletions

View File

@ -250,6 +250,7 @@ struct _Evry_State
Evry_View *view; Evry_View *view;
Eina_Bool changed; Eina_Bool changed;
Eina_Bool trigger_active;
}; };
struct _Evry_View struct _Evry_View

View File

@ -1880,30 +1880,53 @@ _evry_matches_update(Evry_Selector *sel, int async)
Evry_Plugin *p; Evry_Plugin *p;
Eina_List *l; Eina_List *l;
const char *input; const char *input;
s->changed = 1; s->changed = 1;
EINA_LIST_FREE(s->cur_plugins, p);
if (s->inp[0]) if (s->inp[0])
input = s->inp; input = s->inp;
else else
input = NULL; input = NULL;
if (input) if (!input || !s->trigger_active)
{
EINA_LIST_FREE(s->cur_plugins, p);
s->trigger_active = EINA_FALSE;
}
else
{ {
EINA_LIST_FOREACH(s->cur_plugins, l, p)
p->fetch(p, s->input);
}
if (!s->cur_plugins && input)
{
int len_trigger = 0;
EINA_LIST_FOREACH(s->plugins, l, p) EINA_LIST_FOREACH(s->plugins, l, p)
{ {
/* input matches plugin trigger? */ /* input matches plugin trigger? */
if (!p->trigger) continue; if (!p->trigger) continue;
int len = strlen(p->trigger);
if ((strlen(s->inp) >= strlen(p->trigger)) && if (len_trigger && len != len_trigger)
(!strncmp(s->inp, p->trigger, strlen(p->trigger)))) continue;
if ((strlen(s->inp) >= len) &&
(!strncmp(s->inp, p->trigger, len)))
{ {
len_trigger = len;
s->cur_plugins = eina_list_append(s->cur_plugins, p); s->cur_plugins = eina_list_append(s->cur_plugins, p);
s->input = s->inp + strlen(p->trigger); p->fetch(p, s->input + len);
p->fetch(p, s->input);
} }
} }
if (s->cur_plugins)
{
s->trigger_active = EINA_TRUE;
s->inp[0] = '>';
s->inp[1] = '\0';
s->input = s->inp + 1;
_evry_update_text_label(s);
}
} }
if (!s->cur_plugins) if (!s->cur_plugins)