static void _evry_plugin_action(Evry_Selector *sel, int finished);
static void _evry_plugin_select(Evry_State *s, Evry_Plugin *p);
static void _evry_plugin_list_insert(Evry_State *s, Evry_Plugin *p);
-static int _evry_backspace(Evry_State *s);
-static void _evry_update(Evry_State *s, int fetch);
+static int _evry_backspace(Evry_Selector *sel);
+static void _evry_update(Evry_Selector *sel, int fetch);
static void _evry_update_text_label(Evry_State *s);
-static int _evry_clear(Evry_State *s);
-static int _evry_update_timer(void *data);
+static int _evry_clear(Evry_Selector *sel);
+static int _evry_cb_update_timer(void *data);
static Evry_State *_evry_state_new(Evry_Selector *sel, Eina_List *plugins);
static void _evry_state_pop(Evry_Selector *sel);
static Evry_List_Window *list = NULL;
static Ecore_X_Window input_window = 0;
static Eina_List *handlers = NULL;
-static Ecore_Timer *update_timer = NULL;
static Evry_Selector *selector = NULL;
static const char *thumb_types = NULL;
Evry_Selector **selectors;
-Evry_Plugin *action_selector;
+const char *action_selector;
/* externally accessible functions */
int
evry_init(void)
{
- action_selector = evry_plug_actions_new();
+ action_selector = eina_stringshare_add(_("Select Action"));
thumb_types = eina_stringshare_add("FILE");
return 1;
}
{
evry_hide();
- evry_plug_actions_free(action_selector);
eina_stringshare_del(thumb_types);
+ eina_stringshare_del(action_selector);
return 1;
}
_evry_selector_subjects_get(params);
_evry_selector_activate(selectors[0]);
- update_timer = ecore_timer_add(INITIAL_MATCH_LAG, _evry_update_timer, NULL);
+ selectors[0]->update_timer =
+ ecore_timer_add(INITIAL_MATCH_LAG, _evry_cb_update_timer, selectors[0]);
if (evry_conf->views && selector->state)
{
_evry_view_clear(selector->state);
- if (update_timer)
- ecore_timer_del(update_timer);
- update_timer = NULL;
-
list->visible = EINA_FALSE;
_evry_selector_free(selectors[0]);
_evry_selector_free(selectors[1]);
if (type == type_subject)
{
sel->history = evry_hist->subjects;
+ sel->actions = evry_plug_actions_new(type_subject);
edje_object_part_swallow(win->o_main, "e.swallow.subject_selector", o);
}
else if (type == type_action)
{
sel->history = evry_hist->actions;
+ sel->actions = evry_plug_actions_new(type_action);
edje_object_part_swallow(win->o_main, "e.swallow.action_selector", o);
- }
-
+ }
else if (type == type_object)
{
sel->history = evry_hist->subjects;
evry_plug_aggregator_free(sel->aggregator);
+ if (sel->actions)
+ evry_plug_actions_free(sel->actions);
+
if (sel->plugins) eina_list_free(sel->plugins);
+ if (sel->update_timer)
+ ecore_timer_del(sel->update_timer);
+
E_FREE(sel);
}
}
}
+static int
+_evry_timer_cb_actions_get(void *data)
+{
+ Evry_Item *it = data;
+ Evry_Selector *sel = selectors[1];
+ Evry_State *s;
+
+ sel->update_timer = NULL;
+
+ _evry_selector_actions_get(it);
+ _evry_selector_update(sel);
+
+ if (selector == sel && selector->state)
+ {
+ s = sel->state;
+ if (s->view)
+ s->view->update(s->view);
+ else
+ _evry_view_update(s, NULL);
+ }
+
+ return 0;
+}
+
+
static void
_evry_selector_update(Evry_Selector *sel)
{
if (sel == selectors[0])
{
- _evry_selector_actions_get(it);
- _evry_selector_update(selectors[1]);
-
- if (selector == selectors[1] && selector->state)
- {
- s = selector->state;
- if (s->view)
- s->view->update(s->view);
- else
- _evry_view_update(s, NULL);
- }
+ sel = selectors[1];
+ if (sel->update_timer)
+ ecore_timer_del(sel->update_timer);
+ sel->update_timer = ecore_timer_add(0.1, _evry_timer_cb_actions_get, it);
}
}
EINA_LIST_FOREACH(sel->plugins, l, plugin)
{
- if ((plugin == action_selector) || (plugin == sel->aggregator) ||
- (plugin->type_in && type_out && plugin->type_in == type_out))
+ if ((plugin == sel->actions) || (plugin == sel->aggregator) ||
+ (plugin->type_in && type_out && plugin->type_in == type_out))
{
if (plugin->begin)
{
{
Evry_State *s = selector->state;
- if (update_timer)
+ if (selector->update_timer)
{
if ((selector == selectors[0]) ||
(selector == selectors[1]))
_evry_selector_update(selector);
}
- ecore_timer_del(update_timer);
- update_timer = NULL;
+ /* ecore_timer_del(update_timer);
+ * update_timer = NULL; */
}
if (selector == selectors[0])
Evry_Action *act;
if ((s->cur_item) &&
- (s->cur_item->plugin == action_selector) &&
+ (s->cur_item->plugin == selector->actions) &&
(act = s->cur_item->data) &&
(act->type_in2))
{
{
if (!strcmp(key, "u"))
{
- if (!_evry_clear(s))
+ if (!_evry_clear(selector))
evry_browse_back(selector);
}
else if (!strcmp(key, "1"))
_evry_selectors_switch();
else if (!strcmp(key, "BackSpace"))
{
- if (!_evry_backspace(s))
+ if (!_evry_backspace(selector))
evry_browse_back(selector);
}
else if (!strcmp(key, "Delete"))
- _evry_backspace(s);
+ _evry_backspace(selector);
else if (_evry_view_key_press(s, ev))
goto end;
else if ((ev->compose && !(ev->modifiers & ECORE_EVENT_MODIFIER_ALT)))
(_evry_view_toggle(s, s->input + 1)))
{
/* space at the beginning is trigger */
- _evry_update(s, 0);
+ _evry_update(selector, 0);
}
else if (isspace(*ev->compose))
{
/* do not update matches on space */
- _evry_update(s, 0);
+ _evry_update(selector, 0);
}
else
- _evry_update(s, 1);
+ _evry_update(selector, 1);
}
}
}
static int
-_evry_backspace(Evry_State *s)
+_evry_backspace(Evry_Selector *sel)
{
+ Evry_State *s = sel->state;
int len, val, pos;
len = strlen(s->input);
s->input[pos] = 0;
if ((pos == 0) || !isspace(val))
- _evry_update(s, 1);
+ _evry_update(sel, 1);
return 1;
}
}
static void
-_evry_update(Evry_State *s, int fetch)
+_evry_update(Evry_Selector *sel, int fetch)
{
+ Evry_State *s = sel->state;
+
_evry_update_text_label(s);
if (fetch)
{
- if (update_timer) ecore_timer_del(update_timer);
- update_timer = ecore_timer_add(MATCH_LAG, _evry_update_timer, s);
+ if (sel->update_timer)
+ ecore_timer_del(sel->update_timer);
+
+ sel->update_timer = ecore_timer_add(MATCH_LAG, _evry_cb_update_timer, sel);
if (s->plugin && !s->plugin->trigger)
edje_object_signal_emit(list->o_main, "e,signal,update", "e");
}
static int
-_evry_update_timer(void *data)
+_evry_cb_update_timer(void *data)
{
- _evry_matches_update(selector, 1);
- _evry_selector_update(selector);
- _evry_list_win_update(selector->state);
- update_timer = NULL;
+ Evry_Selector *sel = data;
+
+ _evry_matches_update(sel, 1);
+ _evry_selector_update(sel);
+ _evry_list_win_update(sel->state);
+ sel->update_timer = NULL;
return 0;
}
static int
-_evry_clear(Evry_State *s)
+_evry_clear(Evry_Selector *sel)
{
+ Evry_State *s = sel->state;
+
if ((s->plugin && s->plugin->trigger && s->input) &&
- (!strncmp(s->plugin->trigger, s->input, strlen(s->plugin->trigger))))
+ (!strncmp(s->plugin->trigger, s->input,
+ strlen(s->plugin->trigger))))
{
s->input[strlen(s->plugin->trigger)] = 0;
- _evry_update(s, 1);
+ _evry_update(sel, 1);
return 1;
}
else if (s->input && s->input[0] != 0)
{
s->input[0] = 0;
- _evry_update(s, 1);
+ _evry_update(sel, 1);
if (!list->visible && evry_conf->hide_input)
edje_object_signal_emit(list->o_main, "e,state,entry_hide", "e");
return 1;
if (!s_subject || !s_action)
return;
- if (update_timer)
+ if (selector->update_timer)
{
_evry_matches_update(selector, 0);
_evry_selector_update(selector);
-
- ecore_timer_del(update_timer);
- update_timer = NULL;
}
if (!s_subject->cur_item || !s_action->cur_item)
return;
- if (s_action->cur_item->plugin == action_selector)
+ /* FIXME */
+ if (s_action->cur_item->plugin == selectors[1]->actions)
{
Evry_Action *act = s_action->cur_item->data;
Evry_Item *it_object = NULL;
if (s->plugin && !eina_list_data_find_list(s->cur_plugins, s->plugin))
s->plugin = NULL;
+ if (sel->update_timer)
+ ecore_timer_del(sel->update_timer);
+ sel->update_timer = NULL;
+
_evry_plugin_select(s, s->plugin);
}
_evry_cb_selection_notify(void *data, int type, void *event)
{
Ecore_X_Event_Selection_Notify *ev;
+ /* FIXME Evry_Selector *sel = data; */
Evry_State *s = selector->state;
if (!s || (data != win)) return 1;
text_data = ev->data;
strncat(s->input, text_data->text, (INPUTLEN - strlen(s->input)) - 1);
- _evry_update(s, 1);
+ _evry_update(selector, 1);
}
}
_cleanup(Evry_Plugin *p)
{
Evry_Action *act;
- Evry_Selector *sel = selectors[1];
+ Evry_Selector *sel;
+
+ if (p->type == type_subject)
+ sel = selectors[0];
+ else
+ sel = selectors[1];
EVRY_PLUGIN_ITEMS_FREE(p);
- EINA_LIST_FREE(sel->actions, act)
+ EINA_LIST_FREE(sel->cur_actions, act)
if (act->cleanup) act->cleanup(act);
}
{
Evry_Action *act;
Eina_List *l;
- Evry_Selector *sel = selectors[1];
+ const char *type;
+ Evry_Selector *sel;
+
+ if (p->type == type_subject)
+ sel = selectors[0];
+ else
+ sel = selectors[1];
_cleanup(p);
- if (!it) return NULL;
-
- const char *type = it->plugin->type_out;
-
- if (!type) return NULL;
-
+ if (p->type == type_action)
+ {
+ if (!it) return NULL;
+ type = it->plugin->type_out;
+ if (!type) return NULL;
+ }
+ else
+ {
+ printf("begin %s\n", p->name);
+ }
+
EINA_LIST_FOREACH(evry_conf->actions, l, act)
{
- if (act->type_in1 && (act->type_in1 == type) &&
+ if (!act->type_in1 || (act->type_in1 == type) &&
(!act->check_item || act->check_item(act, it)))
{
act->item1 = it;
if (act->type_out && act->intercept && !(act->intercept(act)))
continue;;
- sel->actions = eina_list_append(sel->actions, act);
+ sel->cur_actions = eina_list_append(sel->cur_actions, act);
}
}
- if (!sel->actions) return NULL;
-
+ if (!sel->cur_actions) return NULL;
+
return p;
}
Evry_Action *act;
Eina_List *l;
Evry_Item *it;
- Evry_Selector *sel = selectors[1];
+ Evry_Selector *sel;
int match = 0;
+ if (p->type == type_subject)
+ sel = selectors[0];
+ else
+ sel = selectors[1];
+
EVRY_PLUGIN_ITEMS_FREE(p);
- EINA_LIST_FOREACH(sel->actions, l, act)
+ EINA_LIST_FOREACH(sel->cur_actions, l, act)
{
if (input)
match = evry_fuzzy_match(act->name, input);
}
Evry_Plugin *
-evry_plug_actions_new(void)
+evry_plug_actions_new(int type)
{
Evry_Plugin *p;
- p = evry_plugin_new(NULL, "Select Action", type_action, "", "", 0, NULL, NULL,
+ p = evry_plugin_new(NULL, action_selector, type, "", "", 0, NULL, NULL,
_begin, _cleanup, _fetch, NULL, _icon_get, NULL, NULL);
evry_plugin_register(p, 2);