diff --git a/data/themes/default.edc b/data/themes/default.edc index 927491dc1..68448746e 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -34262,7 +34262,7 @@ collections { } rel2.offset: -2 -4; color: 250 250 250 255; - color3: 20 20 20 40; + color3: 20 20 20 20; text { font: "Sans"; size: 10; diff --git a/src/modules/everything-apps/e_mod_main.c b/src/modules/everything-apps/e_mod_main.c index 7d6b8be0a..2ca06721a 100644 --- a/src/modules/everything-apps/e_mod_main.c +++ b/src/modules/everything-apps/e_mod_main.c @@ -160,8 +160,6 @@ _begin(Evry_Plugin *plugin, const Evry_Item *item) { GET_PLUGIN(p, plugin); - DBG("begin %p %p\n", item, _act_open_with); - if (item && (item != _act_open_with)) return NULL; diff --git a/src/modules/everything/Evry.h b/src/modules/everything/Evry.h index bfb9631eb..beb885b30 100644 --- a/src/modules/everything/Evry.h +++ b/src/modules/everything/Evry.h @@ -25,7 +25,6 @@ typedef struct _Evry_State Evry_State; typedef struct _Evry_View Evry_View; typedef struct _History Evry_History; typedef struct _Config Evry_Config; -typedef struct _Evry_Event_Item_Changed Evry_Event_Item_Changed; #define EVRY_ITEM(_item) ((Evry_Item *)_item) #define EVRY_ACTN(_item) ((Evry_Action *) _item) @@ -71,6 +70,7 @@ typedef struct _Evry_Event_Item_Changed Evry_Event_Item_Changed; _label, _icon_get, _free) #define EVRY_ITEM_FREE(_item) evry_item_free((Evry_Item *)_item) +#define EVRY_ITEM_REF(_item) evry_item_ref((Evry_Item *)_item) #define EVRY_PLUGIN_NEW(_base, _name, _icon, _item_type, _begin, _cleanup, _fetch, _free) \ evry_plugin_new(EVRY_PLUGIN(E_NEW(_base, 1)), _name, _(_name), _icon, _item_type, \ @@ -167,13 +167,6 @@ struct _Evry_View int priority; }; -struct _Evry_Event_Item_Changed -{ - Evry_Item *item; - int changed_selection; - int changed_icon; -}; - /* FIXME this should be exposed. - add functions to retrieve this stuff */ struct _Config diff --git a/src/modules/everything/e_mod_main.c b/src/modules/everything/e_mod_main.c index 67bfa989f..bbf037f69 100644 --- a/src/modules/everything/e_mod_main.c +++ b/src/modules/everything/e_mod_main.c @@ -46,6 +46,7 @@ EAPI Evry_Config *evry_conf = NULL; EAPI int EVRY_EVENT_ITEM_SELECT; EAPI int EVRY_EVENT_ITEM_CHANGED; EAPI int EVRY_EVENT_ITEMS_UPDATE; +EAPI int EVRY_EVENT_ACTION_PERFORMED; EAPI Evry_Type EVRY_TYPE_FILE; EAPI Evry_Type EVRY_TYPE_DIR; @@ -162,6 +163,8 @@ e_modapi_init(E_Module *m) EVRY_EVENT_ITEM_SELECT = ecore_event_type_new(); if (!EVRY_EVENT_ITEM_CHANGED) EVRY_EVENT_ITEM_CHANGED = ecore_event_type_new(); + if (!EVRY_EVENT_ACTION_PERFORMED) + EVRY_EVENT_ACTION_PERFORMED = ecore_event_type_new(); e_module_delayed_set(m, 0); diff --git a/src/modules/everything/evry.c b/src/modules/everything/evry.c index a54dd8d3d..60f87cc13 100644 --- a/src/modules/everything/evry.c +++ b/src/modules/everything/evry.c @@ -1842,6 +1842,46 @@ _evry_clear(Evry_Selector *sel) return 1; } +static void +_evry_cb_free_action_performed(void *data, void *event) +{ + Evry_Event_Action_Performed *ev = event; + + if (ev->it1) + EVRY_ITEM_FREE(ev->it1); + if (ev->it2) + EVRY_ITEM_FREE(ev->it2); + + IF_RELEASE(ev->action); + + E_FREE(ev); +} + +static int +_evry_action_do(Evry_Action *act) +{ + Evry_Event_Action_Performed *ev; + + if (act->action(act)) + { + ev = E_NEW(Evry_Event_Action_Performed, 1); + ev->action = eina_stringshare_ref(act->name); + ev->it1 = act->it1.item; + ev->it2 = act->it2.item; + + if (ev->it1) + EVRY_ITEM_REF(ev->it1); + if (ev->it2) + EVRY_ITEM_REF(ev->it2); + + ecore_event_add(EVRY_EVENT_ACTION_PERFORMED, ev, + _evry_cb_free_action_performed, NULL); + + return 1; + } + return 0; +} + static void _evry_plugin_action(Evry_Selector *sel, int finished) { @@ -1912,7 +1952,8 @@ _evry_plugin_action(Evry_Selector *sel, int finished) if (it->type != act->it2.type) continue; act->it2.item = it; - act->action(act); + + _evry_action_do(act); } } else if (s_subj->sel_items && !(act->it1.accept_list)) @@ -1922,7 +1963,8 @@ _evry_plugin_action(Evry_Selector *sel, int finished) if (it->type != act->it1.type) continue; act->it1.item = it; - act->action(act); + + _evry_action_do(act); } } else @@ -1933,7 +1975,7 @@ _evry_plugin_action(Evry_Selector *sel, int finished) if (s_obj) act->it2.items = s_obj->sel_items; - if (!act->action(act)) + if (!_evry_action_do(act)) return; } } diff --git a/src/modules/everything/evry_api.h b/src/modules/everything/evry_api.h index 0db903e49..6c36acdfa 100644 --- a/src/modules/everything/evry_api.h +++ b/src/modules/everything/evry_api.h @@ -38,10 +38,14 @@ EAPI extern Evry_Type EVRY_TYPE_TEXT; EAPI extern int EVRY_EVENT_ITEM_SELECT; EAPI extern int EVRY_EVENT_ITEM_CHANGED; EAPI extern int EVRY_EVENT_ITEMS_UPDATE; +EAPI extern int EVRY_EVENT_ACTION_PERFORMED; typedef struct _Evry_API Evry_API; typedef struct _Evry_Module Evry_Module; +typedef struct _Evry_Event_Item_Changed Evry_Event_Item_Changed; +typedef struct _Evry_Event_Action_Performed Evry_Event_Action_Performed; + /*************************************************** static Evry_Module *evry_module; @@ -137,6 +141,20 @@ struct _Evry_API int log_dom; }; +struct _Evry_Event_Item_Changed +{ + Evry_Item *item; + int changed_selection; + int changed_icon; +}; + +struct _Evry_Event_Action_Performed +{ + const char *action; + const Evry_Item *it1; + const Evry_Item *it2; +}; + #ifndef EVRY_H /*** cast default types ***/ diff --git a/src/modules/everything/evry_plug_aggregator.c b/src/modules/everything/evry_plug_aggregator.c index eb268a997..01d421744 100644 --- a/src/modules/everything/evry_plug_aggregator.c +++ b/src/modules/everything/evry_plug_aggregator.c @@ -12,30 +12,6 @@ struct _Plugin Evry_Item *warning; }; -static inline Eina_List * -_add_item(Plugin *p, Eina_List *items, Evry_Item *it) -{ - /* remove duplicates provided by different plugins */ - if (it->id) - { - Eina_List *_l; - Evry_Item *_it; - - EINA_LIST_FOREACH(p->base.items, _l, _it) - { - if ((it->plugin->name != _it->plugin->name) && - (it->type == _it->type) && - (it->id == _it->id)) - return items; - } - } - - items = eina_list_append(items, it); - EVRY_PLUGIN_ITEM_APPEND(p, it); - - return items; -} - static int _fetch(Evry_Plugin *plugin, const char *input) { @@ -43,7 +19,7 @@ _fetch(Evry_Plugin *plugin, const char *input) Evry_Plugin *pp; Evry_State *s; Eina_List *l, *ll, *lp = NULL; - Evry_Item *it; + Evry_Item *it, *it2; int i, cnt = 0; Eina_List *items = NULL; const char *context = NULL; @@ -105,20 +81,20 @@ _fetch(Evry_Plugin *plugin, const char *input) it->hi = NULL; it->usage = 0; it->fuzzy_match = 0; - + if (input) { evry_history_item_usage_set(it, NULL, NULL); - it->usage /= 2.0; - it->fuzzy_match = 5; + it->usage /= 100.0; + it->fuzzy_match = 6; } - + snprintf(buf, sizeof(buf), "%d %s", eina_list_count(pp->items), _("Items")); if (it->detail) eina_stringshare_del(it->detail); it->detail = eina_stringshare_add(buf); - items = _add_item(p, items, it); + items = eina_list_append(items, it); } } @@ -135,7 +111,8 @@ _fetch(Evry_Plugin *plugin, const char *input) evry_history_item_usage_set(it, input, context); if (it->fuzzy_match == 0) it->fuzzy_match = evry_fuzzy_match(it->label, input); - items = _add_item(p, items, it); + + items = eina_list_append(items, it); } } /* if there is input append all items that match or have @@ -154,7 +131,7 @@ _fetch(Evry_Plugin *plugin, const char *input) if (it->usage >= 0) evry_history_item_usage_set(it, input, context); - items = _add_item(p, items, it); + items = eina_list_append(items, it); } } } @@ -171,7 +148,8 @@ _fetch(Evry_Plugin *plugin, const char *input) if (it->usage >= 0) evry_history_item_usage_set(it, NULL, context); it->fuzzy_match = 0; - items = _add_item(p, items, it); + + items = eina_list_append(items, it); } } } @@ -187,7 +165,7 @@ _fetch(Evry_Plugin *plugin, const char *input) (!eina_list_data_find_list(items, it))) { it->fuzzy_match = 0; - items = _add_item(p, items, it); + items = eina_list_append(items, it); } } } @@ -205,32 +183,45 @@ _fetch(Evry_Plugin *plugin, const char *input) if (it->fuzzy_match == 0) it->fuzzy_match = evry_fuzzy_match(it->label, input); - items = _add_item(p, items, it); + items = eina_list_append(items, it); } } } } - /* EINA_LIST_FOREACH(items, l, it) + items = eina_list_sort(items, -1, evry_items_sort_func); + + EINA_LIST_FOREACH(items, l, it) + { + /* remove duplicates provided by different plugins */ + if (it->id) + { + EINA_LIST_FOREACH(p->base.items, ll, it2) + { + if ((it->plugin->name != it2->plugin->name) && + (it->type == it2->type) && + (it->id == it2->id)) + continue; + } + } + + evry_item_ref(it); + EVRY_PLUGIN_ITEM_APPEND(p, it); + + if (cnt++ > MAX_ITEMS) + break; + + } + + if (items) eina_list_free(items); + if (lp) eina_list_free(lp); + + + /* EINA_LIST_FOREACH(p->base.items, l, it) * { * if(CHECK_TYPE(it, EVRY_TYPE_FILE)) * printf("%d %1.20f %s\n", it->fuzzy_match, it->usage, it->label); * } */ - - if (items) eina_list_free(items); - if (lp) eina_list_free(lp); - - EVRY_PLUGIN_ITEMS_SORT(p, evry_items_sort_func); - - EINA_LIST_FOREACH_SAFE(p->base.items, l, ll, it) - { - if (cnt++ < MAX_ITEMS) - { - evry_item_ref(it); - continue; - } - p->base.items = eina_list_remove_list(p->base.items, l); - } return 1; } diff --git a/src/modules/everything/evry_plug_view_thumb.c b/src/modules/everything/evry_plug_view_thumb.c index 6a1435a7e..ed4356b65 100644 --- a/src/modules/everything/evry_plug_view_thumb.c +++ b/src/modules/everything/evry_plug_view_thumb.c @@ -1221,13 +1221,19 @@ _cb_key_down(Evry_View *view, const Ecore_Event_Key *ev) evry_item_mark(s, sd->cur_item->item, 0); } - if(!strcmp(key, "comma")) + if (v->mode == VIEW_MODE_THUMB) { - key = "Down"; + if (!strcmp(key, "comma")) + key = "Right"; + else + key = "Left"; } else { - key = "Up"; + if (!strcmp(key, "comma")) + key = "Down"; + else + key = "Up"; } } diff --git a/src/modules/everything/evry_types.h b/src/modules/everything/evry_types.h index 98c290551..436642732 100644 --- a/src/modules/everything/evry_types.h +++ b/src/modules/everything/evry_types.h @@ -54,7 +54,7 @@ struct _Evry_Item Eina_List *items; Evas_Object *(*icon_get) (Evry_Item *it, Evas *e); - void (*free) (Evry_Item *item); + void (*free) (Evry_Item *it); /* do not set by plugin! */ Eina_Bool selected; @@ -189,7 +189,7 @@ struct _Evry_Plugin /* set theme file to fetch icons from */ const char *theme_path; - + /* not to be set by plugin! */ Plugin_Config *config; unsigned int request; diff --git a/src/modules/everything/evry_util.c b/src/modules/everything/evry_util.c index 3ab6496ff..c7264e315 100644 --- a/src/modules/everything/evry_util.c +++ b/src/modules/everything/evry_util.c @@ -860,7 +860,6 @@ _cb_free_item_changed(void *data, void *event) E_FREE(ev); } - EAPI void evry_item_changed(Evry_Item *it, int icon, int selected) {