'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;
Eina_Bool changed;
Eina_Bool trigger_active;
};
struct _Evry_View

View File

@ -1880,30 +1880,53 @@ _evry_matches_update(Evry_Selector *sel, int async)
Evry_Plugin *p;
Eina_List *l;
const char *input;
s->changed = 1;
EINA_LIST_FREE(s->cur_plugins, p);
s->changed = 1;
if (s->inp[0])
input = s->inp;
else
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)
{
/* input matches plugin trigger? */
if (!p->trigger) continue;
int len = strlen(p->trigger);
if ((strlen(s->inp) >= strlen(p->trigger)) &&
(!strncmp(s->inp, p->trigger, strlen(p->trigger))))
if (len_trigger && len != len_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->input = s->inp + strlen(p->trigger);
p->fetch(p, s->input);
p->fetch(p, s->input + len);
}
}
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)