From: Enlightenment S. <no-...@en...> - 2009-08-25 19:19:11
|
Log: 'everything' - fix action interceptor code Author: jeffdameth Date: 2009-08-25 12:18:58 -0700 (Tue, 25 Aug 2009) New Revision: 41981 Modified: trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_plug_actions.c trunk/e/src/modules/everything/sources/evry_plug_apps.c Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-08-25 17:52:11 UTC (rev 41980) +++ trunk/e/src/modules/everything/evry.c 2009-08-25 19:18:58 UTC (rev 41981) @@ -1007,6 +1007,7 @@ return 1; } +/* find plugins that provide the second item required for an action */ static int _evry_selector_objects_get(Evry_Action *act) { @@ -1014,27 +1015,29 @@ Evry_Plugin *p, *plugin; Evry_Selector *sel = selectors[2]; Evry_Item *it; + /* required type */ const char *type_in = act->type_in2; - + while (sel->state) _evry_state_pop(sel); it = selectors[0]->state->sel_item; - + EINA_LIST_FOREACH(sel->plugins, l, plugin) { + /* plugin doesnt provide reuired type */ if ((plugin->type_out != type_in) && - (plugin != sel->aggregator)) continue; - + (plugin != sel->aggregator)) + continue; + if (plugin->begin) { - if ((act->type_out) && - (act->type_out == plugin->type_in) && - (!act->intercept || act->intercept(act)) && - (p = plugin->begin(plugin, it))) + /* plugins' begin method might require an item */ + /* like tracker searches files that match mimetype + * of an application (item1) */ + if (((p = plugin->begin(plugin, it))) || + ((p = plugin->begin(plugin, NULL)))) plugins = eina_list_append(plugins, p); - else if ((p = plugin->begin(plugin, NULL))) - plugins = eina_list_append(plugins, p); } else plugins = eina_list_append(plugins, plugin); @@ -1472,8 +1475,6 @@ act->item2 = it_object; act->action(act); - - if (act->cleanup) act->cleanup(act); } else { Modified: trunk/e/src/modules/everything/evry_plug_actions.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_actions.c 2009-08-25 17:52:11 UTC (rev 41980) +++ trunk/e/src/modules/everything/evry_plug_actions.c 2009-08-25 19:18:58 UTC (rev 41981) @@ -8,13 +8,14 @@ _cleanup(Evry_Plugin *p) { Evry_Item *it; + Evry_Action *act; Evry_Selector *sel = selectors[1]; EINA_LIST_FREE(p->items, it) evry_item_free(it); - if (sel->actions) eina_list_free(sel->actions); - sel->actions = NULL; + EINA_LIST_FREE(sel->actions, act) + if (act->cleanup) act->cleanup(act); } static Evry_Plugin * @@ -38,6 +39,10 @@ (!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); } } Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-25 17:52:11 UTC (rev 41980) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-25 19:18:58 UTC (rev 41981) @@ -735,17 +735,17 @@ static int _exec_border_action(Evry_Action *act) { + ITEM_APP(app, act->item1); + return _app_action(act->item1, act->item2); } static int _exec_border_intercept(Evry_Action *act) { - /* FIXME */ - if (!act || !act->item1) return 0; Evry_Item_App *app = E_NEW(Evry_Item_App, 1); E_Border *bd = act->item1->data; - + app->desktop = bd->desktop; act->item1 = EVRY_ITEM(app); |
From: Enlightenment S. <no-...@en...> - 2009-08-25 20:52:56
|
Log: 'everything' module: - thumnails for selector - cleanups Author: jeffdameth Date: 2009-08-25 13:52:40 -0700 (Tue, 25 Aug 2009) New Revision: 41982 Modified: trunk/e/src/modules/everything/e_mod_main.h trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/sources/evry_plug_apps.c Modified: trunk/e/src/modules/everything/e_mod_main.h =================================================================== --- trunk/e/src/modules/everything/e_mod_main.h 2009-08-25 19:18:58 UTC (rev 41981) +++ trunk/e/src/modules/everything/e_mod_main.h 2009-08-25 20:52:40 UTC (rev 41982) @@ -59,7 +59,10 @@ /* all plugins that belong to this selector*/ Eina_List *plugins; - Evry_View *view; + Evry_View *view; + + Evas_Object *o_thumb; + Eina_Bool do_thumb; }; struct _Tab_View Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-08-25 19:18:58 UTC (rev 41981) +++ trunk/e/src/modules/everything/evry.c 2009-08-25 20:52:40 UTC (rev 41982) @@ -58,6 +58,7 @@ static int _evry_selector_subjects_get(const char *plugin_name); static int _evry_selector_actions_get(Evry_Item *it); static int _evry_selector_objects_get(Evry_Action *act); +static void _evry_selector_thumb_gen(void *data, Evas_Object *obj, void *event_info); static int _evry_browse_item(Evry_Selector *sel); static void _evry_browse_back(Evry_Selector *sel); @@ -92,6 +93,7 @@ static Ecore_Timer *update_timer = NULL; static Evry_Plugin *action_selector = NULL; static Evry_Selector *selector = NULL; +static const char *thumb_types = NULL; Evry_Selector **selectors; @@ -100,6 +102,7 @@ evry_init(void) { action_selector = evry_plug_actions_new(); + thumb_types = eina_stringshare_add("FILE"); return 1; } @@ -109,7 +112,7 @@ evry_hide(); evry_plug_actions_free(action_selector); - + eina_stringshare_del(thumb_types); return 1; } @@ -421,7 +424,7 @@ unsigned int m_cnt = 0; unsigned int m_min[MAX_WORDS]; unsigned int m_len = 0; - + if (!match || !str) return 0; /* remove white spaces at the beginning */ @@ -442,7 +445,7 @@ /* with less than 3 chars match must be a prefix */ if (m_len < 3) m_len = 0; - + next = str; m = match; @@ -738,6 +741,7 @@ e_object_del(E_OBJECT(win->popup)); E_FREE(win); } + static Evry_Selector * _evry_selector_new(int type) { @@ -775,9 +779,14 @@ static void _evry_selector_free(Evry_Selector *sel) { + if (sel->do_thumb) + e_thumb_icon_end(sel->o_thumb); + if (sel->o_thumb) + evas_object_del(sel->o_thumb); if (sel->o_icon) evas_object_del(sel->o_icon); - evas_object_del(sel->o_main); + if (sel->o_main) + evas_object_del(sel->o_main); if (list->visible && (sel == selector)) _evry_view_clear(sel->state); @@ -788,6 +797,7 @@ evry_plug_aggregator_free(sel->aggregator); if (sel->plugins) eina_list_free(sel->plugins); + E_FREE(sel); } @@ -831,6 +841,56 @@ } static void +_evry_selector_thumb_gen(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Coord w, h; + Evry_Selector *sel = data; + + if (sel->o_icon) + evas_object_del(sel->o_icon); + sel->o_icon = NULL; + + e_icon_size_get(sel->o_thumb, &w, &h); + edje_extern_object_aspect_set(sel->o_thumb, EDJE_ASPECT_CONTROL_BOTH, w, h); + edje_object_part_swallow(sel->o_main, "e.swallow.thumb", sel->o_thumb); + evas_object_show(sel->o_thumb); + edje_object_signal_emit(sel->o_main, "e,action,thumb,show", "e"); + sel->do_thumb = EINA_FALSE; +} + +static int +_evry_selector_thumb(Evry_Selector *sel, const Evry_Item *it) +{ + Evas_Coord w, h; + + if (sel->do_thumb) + e_thumb_icon_end(sel->o_thumb); + + if (sel->o_thumb) + evas_object_del(sel->o_thumb); + + if (it->plugin->type_out != thumb_types) return 0; + + ITEM_FILE(file, it); + + if (!file->uri || !file->mime) return 0; + + if (!strncmp(file->mime, "image/", 6)) + { + sel->o_thumb = e_thumb_icon_add(win->popup->evas); + evas_object_smart_callback_add(sel->o_thumb, "e_thumb_gen", _evry_selector_thumb_gen, sel); + edje_object_part_geometry_get(sel->o_main, "e.swallow.thumb", NULL, NULL, &w, &h); + e_thumb_icon_file_set(sel->o_thumb, file->uri, NULL); + e_thumb_icon_size_set(sel->o_thumb, w, h); + e_thumb_icon_begin(sel->o_thumb); + sel->do_thumb = EINA_TRUE; + return 1; + } + + return 0; +} + +static void _evry_selector_icon_set(Evry_Selector *sel) { Evry_State *s = sel->state; @@ -851,16 +911,21 @@ if (it && it->plugin && it->plugin->icon_get) { - o = it->plugin->icon_get(it->plugin, it, win->popup->evas); - if (o) + if (!_evry_selector_thumb(sel, it)) { - edje_object_part_swallow(sel->o_main, "e.swallow.icons", o); - evas_object_show(o); - sel->o_icon = o; + o = it->plugin->icon_get(it->plugin, it, win->popup->evas); + if (o) + { + edje_object_part_swallow(sel->o_main, "e.swallow.icons", o); + evas_object_show(o); + sel->o_icon = o; + } } - else - sel->o_icon = NULL; } + else if (it) + { + _evry_selector_thumb(sel, it); + } if (!sel->o_icon && s->plugin && s->plugin->icon) { @@ -1017,19 +1082,19 @@ Evry_Item *it; /* required type */ const char *type_in = act->type_in2; - + while (sel->state) _evry_state_pop(sel); it = selectors[0]->state->sel_item; - + EINA_LIST_FOREACH(sel->plugins, l, plugin) { /* plugin doesnt provide reuired type */ if ((plugin->type_out != type_in) && (plugin != sel->aggregator)) continue; - + if (plugin->begin) { /* plugins' begin method might require an item */ @@ -1140,7 +1205,7 @@ _evry_view_hide(s->view); view = s->view->id; } - + _evry_state_new(sel, plugins); _evry_matches_update(sel); _evry_selector_update(sel); Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-25 19:18:58 UTC (rev 41981) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-25 20:52:40 UTC (rev 41982) @@ -735,7 +735,7 @@ static int _exec_border_action(Evry_Action *act) { - ITEM_APP(app, act->item1); + /* ITEM_APP(app, act->item1); */ return _app_action(act->item1, act->item2); } |
From: Enlightenment S. <no-...@en...> - 2009-08-30 08:51:30
|
Log: 'everything' - added history that should adapt sort list sorting to usage - conf dialog: moved plugi?\206?\179 types to separate pages - fixed bug from shared hash of apps plugins Author: jeffdameth Date: 2009-08-30 01:51:15 -0700 (Sun, 30 Aug 2009) New Revision: 42095 Modified: trunk/e/src/modules/everything/Evry.h trunk/e/src/modules/everything/e_mod_main.c trunk/e/src/modules/everything/e_mod_main.h trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_config.c trunk/e/src/modules/everything/evry_plug_aggregator.c trunk/e/src/modules/everything/evry_view_plugin_tabs.c trunk/e/src/modules/everything/sources/evry_plug_apps.c trunk/e/src/modules/everything/sources/evry_plug_border.c trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c trunk/e/src/modules/everything/sources/evry_plug_tracker.c Modified: trunk/e/src/modules/everything/Evry.h =================================================================== --- trunk/e/src/modules/everything/Evry.h 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/Evry.h 2009-08-30 08:51:15 UTC (rev 42095) @@ -88,6 +88,7 @@ Evry_Plugin *plugin; int ref; void (*free) (Evry_Item *item); + double usage; }; struct _Evry_Item_App @@ -136,7 +137,8 @@ Evas_Object *(*icon_get) (Evry_Plugin *p, const Evry_Item *it, Evas *e); /* provide more information for a candidate */ /* int (*candidate_info) (Evas *evas, Evry_Item *item); */ - + const char *(*item_id) (Evry_Plugin *p, const Evry_Item *it); + /* optional: default action for this plugins items */ int (*action) (Evry_Plugin *p, const Evry_Item *item); Modified: trunk/e/src/modules/everything/e_mod_main.c =================================================================== --- trunk/e/src/modules/everything/e_mod_main.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/e_mod_main.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -9,13 +9,18 @@ #include "e_mod_main.h" -#define CONFIG_VERSION 3 +#define CONFIG_VERSION 5 +#define HISTORY_VERSION 1 /* actual module specifics */ -static void _e_mod_action_exebuf_cb(E_Object *obj, const char *params); +static void _e_mod_action_cb(E_Object *obj, const char *params); static int _e_mod_run_defer_cb(void *data); static void _e_mod_run_cb(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_mod_menu_add(void *data, E_Menu *m); +static void _config_init(void); +static void _config_free(void); +static void _history_init(void); +static void _history_free(void); static E_Int_Menu_Augmentation *maug = NULL; static E_Action *act = NULL; @@ -23,8 +28,13 @@ static Eina_Array *plugins = NULL; static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_item_edd = NULL; +static E_Config_DD *hist_entry_edd = NULL; +static E_Config_DD *hist_item_edd = NULL; +static E_Config_DD *hist_edd = NULL; + Config *evry_conf = NULL; +History *evry_hist = NULL; /* module setup */ EAPI E_Module_Api e_modapi = @@ -33,7 +43,6 @@ "Everything" }; - static Eina_Bool list_cb(Eina_Module *m, void *data) { if (eina_module_load(m)) @@ -50,67 +59,18 @@ char *file; E_Action *act; - snprintf(buf, sizeof(buf), "%s/.e/e/config/%s/module.everything", - e_user_homedir_get(), e_config_profile_get()); - ecore_file_mkdir(buf); + /* snprintf(buf, sizeof(buf), "%s/.e/e/config/%s/module.everything", + * e_user_homedir_get(), e_config_profile_get()); + * ecore_file_mkdir(buf); */ - conf_item_edd = E_CONFIG_DD_NEW("Plugin_Config", Plugin_Config); -#undef T -#undef D -#define T Plugin_Config -#define D conf_item_edd - E_CONFIG_VAL(D, T, name, STR); - E_CONFIG_VAL(D, T, trigger, STR); - E_CONFIG_VAL(D, T, min_query, INT); - E_CONFIG_VAL(D, T, loaded, INT); - E_CONFIG_VAL(D, T, enabled, INT); - E_CONFIG_VAL(D, T, priority, INT); - conf_edd = E_CONFIG_DD_NEW("Config", Config); -#undef T -#undef D -#define T Config -#define D conf_edd - E_CONFIG_VAL(D, T, version, INT); - E_CONFIG_VAL(D, T, width, INT); - E_CONFIG_VAL(D, T, height, INT); - E_CONFIG_VAL(D, T, rel_x, DOUBLE); - E_CONFIG_VAL(D, T, rel_y, DOUBLE); - E_CONFIG_VAL(D, T, scroll_animate, INT); - E_CONFIG_VAL(D, T, scroll_speed, DOUBLE); - E_CONFIG_VAL(D, T, hide_input, INT); - E_CONFIG_VAL(D, T, hide_list, INT); - E_CONFIG_VAL(D, T, quick_nav, INT); - E_CONFIG_LIST(D, T, conf_subjects, conf_item_edd); - E_CONFIG_LIST(D, T, conf_actions, conf_item_edd); - E_CONFIG_LIST(D, T, conf_objects, conf_item_edd); - E_CONFIG_LIST(D, T, conf_views, conf_item_edd); -#undef T -#undef D - evry_conf = e_config_domain_load("module.everything", conf_edd); - - if (!evry_conf || (evry_conf->version != CONFIG_VERSION)) - { - evry_conf = E_NEW(Config, 1); - evry_conf->version = CONFIG_VERSION; - evry_conf->rel_x = 50.0; - evry_conf->rel_y = 50.0; - evry_conf->width = 400; - evry_conf->height = 350; - evry_conf->scroll_animate = 0; - evry_conf->scroll_speed = 0.08; - evry_conf->hide_input = 0; - evry_conf->hide_list = 1; - evry_conf->quick_nav = 1; - evry_conf->conf_subjects = NULL; - evry_conf->conf_actions = NULL; - evry_conf->conf_objects = NULL; - evry_conf->conf_views = NULL; - } - + _config_init(); + _history_init(); + /* search for plugins */ eina_module_init(); - snprintf(dir, sizeof(dir), "%s/enlightenment/everything_plugins", e_prefix_lib_get()); + snprintf(dir, sizeof(dir), "%s/enlightenment/everything_plugins", + e_prefix_lib_get()); files = ecore_file_ls(dir); EINA_LIST_FREE(files, file) @@ -127,20 +87,23 @@ act = e_action_add("everything"); if (act) { - act->func.go = _e_mod_action_exebuf_cb; + act->func.go = _e_mod_action_cb; + e_action_predef_name_set(_("Everything"), + _("Show Everything Dialog"), + "everything", "", NULL, 0); } - e_action_predef_name_set(_("Everything"), _("Show Everything Dialog"), - "everything", "", NULL, 0); + maug = e_int_menus_menu_augmentation_add("main/1", + _e_mod_menu_add, + NULL, NULL, NULL); - maug = e_int_menus_menu_augmentation_add("main/1", _e_mod_menu_add, NULL, NULL, NULL); - e_configure_registry_category_add("extensions", 80, _("Extensions"), NULL, "preferences-extensions"); - e_configure_registry_item_add("extensions/run_everything", 40, _("Run Everything"), - NULL, "system-run", evry_config_dialog); - + e_configure_registry_item_add("extensions/run_everything", 40, + _("Run Everything"), + NULL, "system-run", + evry_config_dialog); evry_init(); e_module_delayed_set(m, 1); @@ -152,7 +115,7 @@ e_modapi_shutdown(E_Module *m __UNUSED__) { E_Config_Dialog *cfd; - + evry_shutdown(); /* remove module-supplied menu additions */ @@ -183,17 +146,15 @@ e_configure_registry_item_del("extensions/run_everything"); e_configure_registry_category_del("extensions"); - if (evry_conf->plugins) eina_list_free(evry_conf->plugins); - if (evry_conf->actions) eina_list_free(evry_conf->actions); - if (evry_conf->conf_subjects) eina_list_free(evry_conf->conf_subjects); - if (evry_conf->conf_actions) eina_list_free(evry_conf->conf_actions); - if (evry_conf->conf_objects) eina_list_free(evry_conf->conf_objects); + _config_free(); + _history_free(); - E_FREE(evry_conf); - /* Clean EET */ E_CONFIG_DD_FREE(conf_item_edd); E_CONFIG_DD_FREE(conf_edd); + E_CONFIG_DD_FREE(hist_item_edd); + E_CONFIG_DD_FREE(hist_entry_edd); + E_CONFIG_DD_FREE(hist_edd); return 1; } @@ -201,12 +162,200 @@ e_modapi_save(E_Module *m __UNUSED__) { e_config_domain_save("module.everything", conf_edd, evry_conf); + return 1; } +void +evry_save_history(void) +{ + e_config_domain_save("module.everything.history", hist_edd, evry_hist); +} + + +static void +_config_init() +{ +#undef T +#undef D +#define T Plugin_Config +#define D conf_item_edd + conf_item_edd = E_CONFIG_DD_NEW("Plugin_Config", Plugin_Config); + E_CONFIG_VAL(D, T, name, STR); + E_CONFIG_VAL(D, T, trigger, STR); + E_CONFIG_VAL(D, T, min_query, INT); + E_CONFIG_VAL(D, T, loaded, INT); + E_CONFIG_VAL(D, T, enabled, INT); + E_CONFIG_VAL(D, T, priority, INT); +#undef T +#undef D + +#define T Config +#define D conf_edd + conf_edd = E_CONFIG_DD_NEW("Config", Config); + E_CONFIG_VAL(D, T, version, INT); + E_CONFIG_VAL(D, T, width, INT); + E_CONFIG_VAL(D, T, height, INT); + E_CONFIG_VAL(D, T, rel_x, DOUBLE); + E_CONFIG_VAL(D, T, rel_y, DOUBLE); + E_CONFIG_VAL(D, T, scroll_animate, INT); + E_CONFIG_VAL(D, T, scroll_speed, DOUBLE); + E_CONFIG_VAL(D, T, hide_input, INT); + E_CONFIG_VAL(D, T, hide_list, INT); + E_CONFIG_VAL(D, T, quick_nav, INT); + E_CONFIG_VAL(D, T, cmd_terminal, STR); + E_CONFIG_LIST(D, T, conf_subjects, conf_item_edd); + E_CONFIG_LIST(D, T, conf_actions, conf_item_edd); + E_CONFIG_LIST(D, T, conf_objects, conf_item_edd); + E_CONFIG_LIST(D, T, conf_views, conf_item_edd); +#undef T +#undef D + evry_conf = e_config_domain_load("module.everything", conf_edd); + + if (evry_conf && evry_conf->version != CONFIG_VERSION) + { + _config_free(); + evry_conf = NULL; + } + + if (!evry_conf) + { + evry_conf = E_NEW(Config, 1); + evry_conf->version = CONFIG_VERSION; + evry_conf->rel_x = 50.0; + evry_conf->rel_y = 50.0; + evry_conf->width = 400; + evry_conf->height = 350; + evry_conf->scroll_animate = 0; + evry_conf->scroll_speed = 0.08; + evry_conf->hide_input = 0; + evry_conf->hide_list = 1; + evry_conf->quick_nav = 1; + evry_conf->conf_subjects = NULL; + evry_conf->conf_actions = NULL; + evry_conf->conf_objects = NULL; + evry_conf->conf_views = NULL; + evry_conf->cmd_terminal = eina_stringshare_add("/usr/bin/xterm"); + } +} + + +static void +_config_free(void) +{ + Plugin_Config *pc; + + /* free config */ + if (evry_conf->cmd_terminal) + eina_stringshare_del(evry_conf->cmd_terminal); + EINA_LIST_FREE(evry_conf->conf_subjects, pc) + { + if (pc->name) eina_stringshare_del(pc->name); + if (pc->trigger) eina_stringshare_del(pc->trigger); + E_FREE(pc); + } + EINA_LIST_FREE(evry_conf->conf_actions, pc) + { + if (pc->name) eina_stringshare_del(pc->name); + if (pc->trigger) eina_stringshare_del(pc->trigger); + E_FREE(pc); + } + EINA_LIST_FREE(evry_conf->conf_objects, pc) + { + if (pc->name) eina_stringshare_del(pc->name); + if (pc->trigger) eina_stringshare_del(pc->trigger); + E_FREE(pc); + } + E_FREE(evry_conf); +} + + +static void +_history_init(void) +{ +#undef T +#undef D +#define T History_Item +#define D hist_item_edd + hist_item_edd = E_CONFIG_DD_NEW("History_Item", History_Item); + E_CONFIG_VAL(D, T, plugin, STR); + E_CONFIG_VAL(D, T, context, STR); + E_CONFIG_VAL(D, T, input, STR); + E_CONFIG_VAL(D, T, last_used, DOUBLE); + E_CONFIG_VAL(D, T, count, INT); +#undef T +#undef D + +#define T History_Entry +#define D hist_entry_edd + hist_entry_edd = E_CONFIG_DD_NEW("History_Entry", History_Entry); + E_CONFIG_LIST(D, T, items, hist_item_edd); +#undef T +#undef D + +#define T History +#define D hist_edd + hist_edd = E_CONFIG_DD_NEW("History_Item", History); + E_CONFIG_VAL(D, T, version, INT); + E_CONFIG_HASH(D, T, subjects, hist_entry_edd); + E_CONFIG_HASH(D, T, actions, hist_entry_edd); +#undef T +#undef D + evry_hist = e_config_domain_load("module.everything.history", hist_edd); + + if (evry_hist && evry_hist->version != HISTORY_VERSION) + { + _history_free(); + evry_hist = NULL; + } + + if (!evry_hist) + { + evry_hist = E_NEW(History, 1); + evry_hist->version = HISTORY_VERSION; + + } + if (!evry_hist->subjects) + evry_hist->subjects = eina_hash_string_superfast_new(NULL); + if (!evry_hist->actions) + evry_hist->actions = eina_hash_string_superfast_new(NULL); + +} + +static Eina_Bool +_hist_free_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata) +{ + History_Entry *he = data; + History_Item *hi; + + EINA_LIST_FREE(he->items, hi) + { + if (hi->input) + eina_stringshare_del(hi->input); + if (hi->plugin) + eina_stringshare_del(hi->plugin); + if (hi->context) + eina_stringshare_del(hi->context); + E_FREE(hi); + } + + E_FREE(he); + return 1; +} + +static void +_history_free(void) +{ + eina_hash_foreach(evry_hist->subjects, _hist_free_cb, NULL); + eina_hash_foreach(evry_hist->actions, _hist_free_cb, NULL); + + E_FREE(evry_hist); +} + + /* action callback */ static void -_e_mod_action_exebuf_cb(E_Object *obj, const char *params) +_e_mod_action_cb(E_Object *obj, const char *params) { E_Zone *zone = NULL; @@ -317,23 +466,6 @@ if (p->trigger) eina_stringshare_del(p->trigger); if (p->icon) eina_stringshare_del(p->icon); - if (p->config) - { - if (p->type == type_subject) - evry_conf->conf_subjects = eina_list_remove(evry_conf->conf_subjects, p->config); - else if (p->type == type_action) - evry_conf->conf_actions = eina_list_remove(evry_conf->conf_actions, p->config); - else if (p->type == type_object) - evry_conf->conf_objects = eina_list_remove(evry_conf->conf_objects, p->config); - - if (p->config->name) - eina_stringshare_del(p->config->name); - if (p->config->trigger) - eina_stringshare_del(p->config->trigger); - - E_FREE(p->config); - } - if (free_pointer) E_FREE(p); } @@ -380,7 +512,6 @@ { Eina_List *l, *confs = NULL; Plugin_Config *pc; - Eina_Bool found = 0; evry_conf->plugins = eina_list_append(evry_conf->plugins, p); @@ -392,15 +523,10 @@ confs = evry_conf->conf_objects; EINA_LIST_FOREACH(confs, l, pc) - { - if (pc->name && p->name && !strcmp(pc->name, p->name)) - { - found = 1; - break; - } - } + if (pc->name && p->name && !strcmp(pc->name, p->name)) + break; - if (!found) + if (!pc) { pc = E_NEW(Plugin_Config, 1); pc->name = eina_stringshare_add(p->name); @@ -414,7 +540,6 @@ * pc->trigger = eina_stringshare_add(plugin->trigger); */ p->config = pc; - evry_conf->plugins = eina_list_sort(evry_conf->plugins, eina_list_count(evry_conf->plugins), _evry_cb_plugin_sort); @@ -434,7 +559,6 @@ e_action_predef_name_set(_("Everything"), buf, "everything", p->name, NULL, 1); } - /* TODO sorting, initialization, etc */ } void Modified: trunk/e/src/modules/everything/e_mod_main.h =================================================================== --- trunk/e/src/modules/everything/e_mod_main.h 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/e_mod_main.h 2009-08-30 08:51:15 UTC (rev 42095) @@ -7,6 +7,9 @@ typedef struct _Config Config; typedef struct _Evry_Selector Evry_Selector; typedef struct _Tab_View Tab_View; +typedef struct _History History; +typedef struct _History_Entry History_Entry; +typedef struct _History_Item History_Item; struct _Config { @@ -29,17 +32,38 @@ int hide_list; int quick_nav; - - Eina_Hash *key_bindings; - - /**/ + Eina_List *plugins; Eina_List *actions; Eina_List *views; - Eina_Hash *history; + const char *cmd_terminal; }; + + +struct _History_Item +{ + const char *plugin; + const char *context; + const char *input; + double last_used; + int count; +}; + +struct _History_Entry +{ + Eina_List *items; +}; + +struct _History +{ + int version; + Eina_Hash *subjects; + Eina_Hash *actions; +}; + + struct _Evry_Selector { Evas_Object *o_main; @@ -64,6 +88,8 @@ Evas_Object *o_thumb; Eina_Bool do_thumb; + + Eina_Hash *history; }; struct _Tab_View @@ -93,6 +119,7 @@ int evry_shutdown(void); int evry_show(E_Zone *zone, const char *params); void evry_hide(void); +void evry_save_history(void); Evry_Plugin *evry_plug_aggregator_new(Evry_Selector *selector); void evry_plug_aggregator_free(Evry_Plugin *plugin); @@ -104,6 +131,7 @@ EAPI void evry_tab_view_free(Tab_View *v); extern Config *evry_conf; +extern History *evry_hist; extern Evry_Selector **selectors; extern Evry_Plugin *action_selector; #endif Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/evry.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -81,7 +81,9 @@ static int _evry_cb_key_down(void *data, int type, void *event); static int _evry_cb_selection_notify(void *data, int type, void *event); +static void _evry_history_item_add(Eina_Hash *hist, Evry_State *s); + /* local subsystem globals */ static Evry_Window *win = NULL; static Evry_List_Window *list = NULL; @@ -163,7 +165,7 @@ if (!evry_conf->hide_input) edje_object_signal_emit(list->o_main, "e,state,entry_show", "e"); - + handlers = eina_list_append (handlers, ecore_event_handler_add (ECORE_EVENT_KEY_DOWN, _evry_cb_key_down, NULL)); @@ -180,6 +182,12 @@ e_popup_show(win->popup); e_popup_show(list->popup); + if (!evry_conf->hide_input) + { + edje_object_part_text_set(win->o_main, "e.text.label", "Search:"); + edje_object_part_text_set(list->o_main, "e.text.label", "Search:"); + } + return 1; error: @@ -393,7 +401,7 @@ } /* update aggregator */ - if (eina_list_count(s->cur_plugins) > 1) + if (eina_list_count(s->cur_plugins) > 0) { agg->fetch(agg, s->input); @@ -447,12 +455,7 @@ return NULL; } list_win->popup = popup; - - /* evas_event_freeze(popup->evas); - * evas_event_feed_mouse_in(popup->evas, ecore_x_current_time_get(), NULL); - * evas_event_feed_mouse_move(popup->evas, -1000000, -1000000, - * ecore_x_current_time_get(), NULL); */ - + o = edje_object_add(popup->evas); list_win->o_main = o; e_theme_edje_object_set(o, "base/theme/everything", @@ -470,9 +473,6 @@ edje_object_size_min_calc(o, &mw, &mh); - printf("list min size %d %d - %d\n", mw, mh, atoi(offset_y)); - - if (mh == 0) mh = 200; if (mw == 0) mw = win->popup->w / 2; @@ -486,9 +486,7 @@ evas_object_resize(o, list_win->popup->w, list_win->popup->h); evas_object_show(o); e_popup_edje_bg_object_set(popup, o); - - /* evas_event_thaw(popup->evas); */ - + return list_win; } @@ -609,12 +607,22 @@ evas_object_show(o); if (type == type_subject) - edje_object_part_swallow(win->o_main, "e.swallow.subject_selector", o); + { + sel->history = evry_hist->subjects; + edje_object_part_swallow(win->o_main, "e.swallow.subject_selector", o); + } else if (type == type_action) - edje_object_part_swallow(win->o_main, "e.swallow.action_selector", o); + { + sel->history = evry_hist->actions; + edje_object_part_swallow(win->o_main, "e.swallow.action_selector", o); + } + else if (type == type_object) - edje_object_part_swallow(win->o_main, "e.swallow.object_selector", o); - + { + sel->history = evry_hist->subjects; + edje_object_part_swallow(win->o_main, "e.swallow.object_selector", o); + } + p = evry_plug_aggregator_new(sel); sel->plugins = eina_list_append(sel->plugins, p); @@ -1052,6 +1060,8 @@ if (!plugins) return 1; + _evry_history_item_add(sel->history, s); + if (s->view) { _evry_view_hide(s->view); @@ -1353,6 +1363,102 @@ } static void +_evry_history_item_add(Eina_Hash *hist, Evry_State *s) +{ + History_Entry *he; + History_Item *hi; + Evry_Item *it; + Eina_List *l; + const char *id; + + if (!s) return; + + it = s->cur_item; + if (!it) return; + + if (it->plugin->item_id) + id = it->plugin->item_id(it->plugin, it); + else + id = it->label; + + he = eina_hash_find(hist, id); + if (he) + { + /* found history entry */ + EINA_LIST_FOREACH(he->items, l, hi) + if (hi->plugin == it->plugin->name) break; + + if (hi) + { + /* found history item */ + if (hi->input) + { + if (!s->input || !strncmp (hi->input, s->input, strlen(s->input))) + { + /* s->input matches hi->input and is equal or shorter */ + hi->count++; + hi->last_used /= 1000.0; + hi->last_used += ecore_time_get(); + } + else if (s->input) + { + if (!strncmp (hi->input, s->input, strlen(hi->input))) + { + /* s->input matches hi->input but is longer */ + eina_stringshare_del(hi->input); + hi->input = eina_stringshare_add(s->input); + } + else + { + /* s->input is different from hi->input + -> create new item */ + hi = NULL; + } + } + } + else + { + /* remember input for item */ + hi->count++; + hi->last_used /= 2.0; + hi->last_used += ecore_time_get(); + + if (s->input) + hi->input = eina_stringshare_add(s->input); + } + } + + if (!hi) + { + hi = E_NEW(History_Item, 1); + hi->plugin = eina_stringshare_ref(it->plugin->name); + hi->last_used = ecore_time_get(); + hi->count = 1; + if (s->input) + hi->input = eina_stringshare_add(s->input); + + he->items = eina_list_append(he->items, hi); + } + } + else + { + he = E_NEW(History_Entry, 1); + hi = E_NEW(History_Item, 1); + hi->plugin = eina_stringshare_ref(it->plugin->name); + hi->last_used = ecore_time_get(); + hi->count = 1; + if (s->input) + hi->input = eina_stringshare_add(s->input); + + he->items = eina_list_append(he->items, hi); + eina_hash_add(hist, id, he); + } + evry_save_history(); + +} + + +static void _evry_plugin_action(Evry_Selector *sel, int finished) { Evry_State *s_subject, *s_action, *s_object; @@ -1361,7 +1467,8 @@ s_action = selectors[1]->state; s_object = NULL; - if (!s_subject || !s_action) return; + if (!s_subject || !s_action) + return; if (update_timer) { @@ -1372,7 +1479,8 @@ update_timer = NULL; } - if (!s_subject->cur_item || !s_action->cur_item) return; + if (!s_subject->cur_item || !s_action->cur_item) + return; if (s_action->cur_item->plugin == action_selector) { @@ -1382,7 +1490,8 @@ if (selectors[2] == selector) it_object = selector->state->cur_item; - if (act->type_in2 && !it_object) return; + if (act->type_in2 && !it_object) + return; act->item2 = it_object; @@ -1397,6 +1506,11 @@ } else return; + _evry_history_item_add(evry_hist->subjects, s_subject); + _evry_history_item_add(evry_hist->actions, s_action); + _evry_history_item_add(evry_hist->subjects, s_object); + + /* let subject and object plugin know that an action was performed */ if (s_subject->plugin->action) s_subject->plugin->action(s_subject->plugin, s_subject->cur_item); @@ -1591,7 +1705,7 @@ } } - if (eina_list_count(s->cur_plugins) > 1) + if (eina_list_count(s->cur_plugins) > 0) { sel->aggregator->fetch(sel->aggregator, s->input); s->cur_plugins = eina_list_prepend(s->cur_plugins, sel->aggregator); Modified: trunk/e/src/modules/everything/evry_config.c =================================================================== --- trunk/e/src/modules/everything/evry_config.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/evry_config.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -21,6 +21,8 @@ int width, height; int scroll_animate; + char *cmd_terminal; + Evas_Object *l_subject; Evas_Object *l_action; Evas_Object *l_object; @@ -73,6 +75,9 @@ cfdata->p_action = eina_list_append(cfdata->p_action, p); else if (p->type == type_object) cfdata->p_object = eina_list_append(cfdata->p_object, p); + + if (evry_conf->cmd_terminal) + cfdata->cmd_terminal = strdup(evry_conf->cmd_terminal); } static void * @@ -91,7 +96,7 @@ if (cfdata->p_subject) eina_list_free(cfdata->p_subject); if (cfdata->p_action) eina_list_free(cfdata->p_action); if (cfdata->p_object) eina_list_free(cfdata->p_object); - + E_FREE(cfdata->cmd_terminal); E_FREE(cfdata); } @@ -116,6 +121,10 @@ eina_list_count(evry_conf->plugins), _evry_cb_plugin_sort); + if (evry_conf->cmd_terminal) + eina_stringshare_del(evry_conf->cmd_terminal); + evry_conf->cmd_terminal = eina_stringshare_add(cfdata->cmd_terminal); + e_config_save_queue(); return 1; } @@ -209,9 +218,15 @@ ob = e_widget_check_add(evas, _("Quick Navigation (ALT + h,j,k,l,n,p,m,i)"), &(cfdata->quick_nav)); e_widget_framelist_object_append(of, ob); + + ob = e_widget_label_add(evas, _("Terminal Command")); + e_widget_framelist_object_append(of, ob); + ob = e_widget_entry_add(evas, &(cfdata->cmd_terminal), NULL, NULL, NULL); + e_widget_framelist_object_append(of, ob); + e_widget_list_object_append(o, of, 1, 1, 0.5); - + /* ob = e_widget_label_add(evas, _("Popup Width")); * e_widget_framelist_object_append(of, ob); * ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), @@ -235,10 +250,10 @@ e_widget_toolbook_page_append(otb, NULL, _("General Settings"), - o, 0, 0, 0, 0, 0.5, 0.0); + o, 1, 0, 1, 0, 0.5, 0.0); ob = e_widget_list_add(evas, 1, 1); - of = e_widget_framelist_add(evas, _("Subject Plugins"), 0); + of = e_widget_framelist_add(evas, _("Active Plugins"), 0); o = e_widget_ilist_add(evas, 24, 24, NULL); cfdata->l_subject = o; /* e_widget_on_change_hook_set(ol, _avail_list_cb_change, cfdata); */ @@ -255,8 +270,12 @@ cfdata->p_subject); e_widget_framelist_object_append(of, o); e_widget_list_object_append(ob, of, 1, 1, 0.5); + e_widget_toolbook_page_append(otb, NULL, _("Subject Plugins"), + of, 1, 0, 1, 0, 0.5, 0.0); - of = e_widget_framelist_add(evas, _("Action Plugins"), 0); + + ob = e_widget_list_add(evas, 1, 1); + of = e_widget_framelist_add(evas, _("Active Plugins"), 0); o = e_widget_ilist_add(evas, 24, 24, NULL); cfdata->l_action = o; _fill_list(cfdata->p_action, o, 0); @@ -272,8 +291,11 @@ cfdata->p_action); e_widget_framelist_object_append(of, o); e_widget_list_object_append(ob, of, 1, 1, 0.5); + e_widget_toolbook_page_append(otb, NULL, _("Action Plugins"), + of, 1, 0, 1, 0, 0.5, 0.0); - of = e_widget_framelist_add(evas, _("Object Plugins"), 0); + ob = e_widget_list_add(evas, 1, 1); + of = e_widget_framelist_add(evas, _("Active Plugins"), 0); o = e_widget_ilist_add(evas, 24, 24, NULL); cfdata->l_object = o; _fill_list(cfdata->p_object, o, 0); @@ -290,9 +312,10 @@ e_widget_framelist_object_append(of, o); e_widget_list_object_append(ob, of, 1, 1, 0.5); - e_widget_toolbook_page_append(otb, NULL, _("Plugins"), - ob, 0, 0, 0, 0, 0.5, 0.0); - e_widget_toolbook_page_show(otb, 1); + e_widget_toolbook_page_append(otb, NULL, _("Object Plugins"), + ob, 1, 0, 1, 0, 0.5, 0.0); + e_widget_toolbook_page_show(otb, 0); + return otb; } Modified: trunk/e/src/modules/everything/evry_plug_aggregator.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -15,6 +15,13 @@ const Evry_Item *it1 = data1; const Evry_Item *it2 = data2; + if (it1->usage && it2->usage) + return (it2->usage - it1->usage); + if (it1->usage && !it2->usage) + return -1; + if (it2->usage && !it1->usage) + return 1; + if ((it1->plugin == action_selector) || (it2->plugin == action_selector)) { @@ -26,7 +33,7 @@ - it2->plugin->config->priority); else return (it1->plugin->config->priority - - (it1->plugin->config->priority + it2->priority)); + (it2->plugin->config->priority + it2->priority)); } return -1; @@ -38,6 +45,13 @@ const Evry_Item *it1 = data1; const Evry_Item *it2 = data2; + if (it1->usage && it2->usage) + return (it2->usage - it1->usage); + if (it1->usage && !it2->usage) + return -1; + if (it2->usage && !it1->usage) + return 1; + if ((it1->plugin == action_selector) || (it2->plugin == action_selector)) { @@ -87,6 +101,9 @@ Evry_Item *it; int cnt = 0; Eina_List *items = NULL; + History_Entry *he; + History_Item *hi; + const char *id; s = p->selector->state; @@ -115,11 +132,11 @@ } } - if (!input[0] || eina_list_count(items) < 20) + if (!input[0] || eina_list_count(items) < 50) { EINA_LIST_FOREACH(s->cur_plugins, l, pp) { - for (cnt = 0, ll = pp->items; ll && cnt < 15; ll = ll->next, cnt++) + for (cnt = 0, ll = pp->items; ll && cnt < 50; ll = ll->next, cnt++) { if (!items || !eina_list_data_find_list(items, ll->data)) { @@ -134,7 +151,34 @@ } if (items) eina_list_free(items); + + EINA_LIST_FOREACH(EVRY_PLUGIN(p)->items, l, it) + { + cnt = 1; + if (it->usage) continue; + if (it->plugin->item_id) + id = it->plugin->item_id(it->plugin, it); + else + id = it->label; + + if ((he = eina_hash_find(p->selector->history, id))) + { + EINA_LIST_FOREACH(he->items, ll, hi) + { + if ((hi->plugin == it->plugin->name) && + ((!input[0]) || (!input[0] && !hi->input) || + (!strncmp(input, hi->input, strlen(input))) || + (!strncmp(input, hi->input, strlen(hi->input))))) + { + cnt++; + it->usage += hi->last_used; + } + } + it->usage /= (double)cnt; + } + } + if (input[0]) { EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort); Modified: trunk/e/src/modules/everything/evry_view_plugin_tabs.c =================================================================== --- trunk/e/src/modules/everything/evry_view_plugin_tabs.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/evry_view_plugin_tabs.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -104,9 +104,13 @@ evas_object_show(o); e_box_pack_end(v->o_tabs, o); - e_box_pack_options_set(o, 1, 1, 1, 0, 0.0, 0.5, - (tab->mw < tab->cw ? tab->cw : tab->mw), 10, - (w ? w/3 : 150), 9999); + if (eina_list_count(s->cur_plugins) == 2) + e_box_pack_options_set(o, 1, 1, 0, 0, 0.0, 0.5, + 120, 10, 120, 9999); + else + e_box_pack_options_set(o, 1, 1, 1, 0, 0.0, 0.5, + (tab->mw < tab->cw ? tab->cw : tab->mw), 10, + (w ? w/3 : 120), 9999); if (s->plugin == p) edje_object_signal_emit(o, "e,state,selected", "e"); else Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -11,6 +11,7 @@ Eina_List *apps_mime; Eina_List *apps_all; const Evry_Item *candidate; + Eina_Hash *added; }; /* taken from exebuf module */ @@ -84,12 +85,19 @@ p->apps_mime = eina_list_prepend(p->apps_mime, desktop); } + p->added = added; + if (!p->added) + p->added = eina_hash_string_small_new(_hash_free); + added = p->added; + return plugin; } static Evry_Plugin * _begin(Evry_Plugin *plugin, const Evry_Item *item) { + PLUGIN(p, plugin); + /* taken from exebuf module */ char *path, *pp, *last; E_Exe_List *el; @@ -128,7 +136,7 @@ exe_scan_idler = ecore_idler_add(_scan_idler, NULL); - added = eina_hash_string_small_new(_hash_free); + p->added = eina_hash_string_small_new(_hash_free); return plugin; } @@ -153,7 +161,12 @@ Efreet_Desktop *desktop; char *str; + /* TODO popup end func !!! + - cleanup hash for open-with plugin */ eina_hash_free(added); + added = NULL; + + eina_hash_free(p->added); EVRY_PLUGIN_ITEMS_CLEAR(p); @@ -209,7 +222,7 @@ char buf[1024]; char *tmp; - if ((app = eina_hash_find(added, file))) + if ((app = eina_hash_find(p->added, file))) { if (!eina_list_data_find_list(EVRY_PLUGIN(p)->items, app)) { @@ -245,7 +258,7 @@ if (!exe) return 0; - if ((app = eina_hash_find(added, exe)) && + if ((app = eina_hash_find(p->added, exe)) && (!desktop || (desktop == app->desktop))) { if (!eina_list_data_find_list(EVRY_PLUGIN(p)->items, app)) @@ -270,7 +283,7 @@ app->desktop = desktop; if (file) app->file = eina_stringshare_add(file); - eina_hash_add(added, exe, app); + eina_hash_add(p->added, exe, app); if (desktop) { @@ -279,13 +292,13 @@ if (tmp && strcmp(exe, tmp)) { evry_item_ref(EVRY_ITEM(app)); - eina_hash_add(added, tmp, app); + eina_hash_add(p->added, tmp, app); } } if (file && strcmp(exe, file)) { evry_item_ref(EVRY_ITEM(app)); - eina_hash_add(added, file, app); + eina_hash_add(p->added, file, app); } EVRY_ITEM(app)->fuzzy_match = match; @@ -454,7 +467,8 @@ if (!plugin->items) return 0; - EVRY_PLUGIN_ITEMS_SORT(plugin, _cb_sort); + if (plugin->type != type_action || input) + EVRY_PLUGIN_ITEMS_SORT(plugin, _cb_sort); EINA_LIST_FOREACH(plugin->items, l, it) it->priority = prio++; Modified: trunk/e/src/modules/everything/sources/evry_plug_border.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -235,12 +235,27 @@ return o; } +static const char * +_item_id(Evry_Plugin *p, const Evry_Item *it) +{ + E_Border *bd = it->data; + if (bd->client.icccm.class) + return (bd->client.icccm.class); + if (bd->client.icccm.name) + return (bd->client.icccm.name); + else + return NULL; +} + + static Eina_Bool _init(void) { plugin = evry_plugin_new(NULL, "Windows", type_subject, NULL, "BORDER", 0, NULL, NULL, _begin, _cleanup, _fetch, NULL, _item_icon_get, NULL, NULL); + plugin->item_id = &_item_id; + evry_plugin_register(plugin, 2); return EINA_TRUE; Modified: trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -448,6 +448,14 @@ return ret; } +static const char * +_item_id(Evry_Plugin *p, const Evry_Item *item) +{ + ITEM_FILE(file, item); + + return file->uri; +} + static Eina_Bool _init(void) { @@ -459,6 +467,9 @@ _begin, _cleanup, _fetch, NULL, _icon_get, NULL, NULL); + p1->item_id = &_item_id; + p1->item_id = &_item_id; + evry_plugin_register(p1, 3); evry_plugin_register(p2, 1); Modified: trunk/e/src/modules/everything/sources/evry_plug_tracker.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_tracker.c 2009-08-30 07:36:02 UTC (rev 42094) +++ trunk/e/src/modules/everything/sources/evry_plug_tracker.c 2009-08-30 08:51:15 UTC (rev 42095) @@ -1,6 +1,5 @@ -#include "Evry.h" +#include "e_mod_main.h" - /* TODO check if trackerd is running and version */ typedef struct _Plugin Plugin; @@ -21,8 +20,8 @@ static E_DBus_Connection *conn = NULL; static Eina_List *plugins = NULL; static int _prio = 5; +static int active = 0; - static Evry_Plugin * _begin(Evry_Plugin *plugin, const Evry_Item *it) { @@ -170,6 +169,7 @@ if (dbus_error_is_set(error)) { _cleanup(EVRY_PLUGIN(p)); + active = 0; printf("Error: %s - %s\n", error->name, error->message); return; } @@ -253,6 +253,47 @@ evry_plugin_async_update(EVRY_PLUGIN(p), EVRY_ASYNC_UPDATE_ADD); } +static void +_dbus_cb_version(void *data, DBusMessage *msg, DBusError *error) +{ + DBusMessageIter iter; + int version = 0; + + if (dbus_error_is_set(error)) + { + printf("Error: %s - %s\n", error->name, error->message); + return; + } + + dbus_message_iter_init(msg, &iter); + + if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32) + dbus_message_iter_get_basic(&iter, &version); + + printf("tracker version %d\n", version); + + if (version < 690) + active = 0; + else + active = 2; +} + +static void +_get_version(void) +{ + DBusMessage *msg; + + msg = dbus_message_new_method_call("org.freedesktop.Tracker", + "/org/freedesktop/Tracker", + "org.freedesktop.Tracker", + "GetVersion"); + + e_dbus_message_send(conn, msg, _dbus_cb_version, -1, NULL); + dbus_message_unref(msg); + + active = 1; +} + static int _fetch(Evry_Plugin *plugin, const char *input) { @@ -305,6 +346,13 @@ return 0; } + + if (!active) + _get_version(); + + if (active != 2) + return 0; + p->active++; msg = dbus_message_new_method_call("org.freedesktop.Tracker", @@ -377,72 +425,9 @@ evry_plugin_register(EVRY_PLUGIN(p), _prio++); } -static void -_dbus_cb_version(void *data, DBusMessage *msg, DBusError *error) -{ - DBusMessageIter iter; - Plugin *p; - int version = 0; - if (dbus_error_is_set(error)) - { - printf("Error: %s - %s\n", error->name, error->message); - e_dbus_connection_close(conn); - EINA_LIST_FREE(plugins, p) - { - if (p->condition[0]) free(p->condition); - EVRY_PLUGIN_FREE(p); - } - return; - } - - dbus_message_iter_init(msg, &iter); - - if (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_INT32) - dbus_message_iter_get_basic(&iter, &version); - - printf("tracker version %d\n", version); - - if (version < 690) - { - e_dbus_connection_close(conn); - - EINA_LIST_FREE(plugins, p) - { - if (p->condition[0]) free(p->condition); - - EVRY_PLUGIN_FREE(p); - } - } -} - - -static void -_get_version(void) -{ - DBusMessage *msg; - - msg = dbus_message_new_method_call("org.freedesktop.Tracker", - "/org/freedesktop/Tracker", - "org.freedesktop.Tracker", - "GetVersion"); - - e_dbus_message_send(conn, msg, _dbus_cb_version, -1, NULL); - dbus_message_unref(msg); -} - - -/* static Evry_Plugin * - * _begin_subject(Evry_Plugin *plugin, const Evry_Item *it) - * { - * if (!conn) return NULL; - * - * return plugin; - * } */ - - static Eina_Bool _init(void) { |
From: Enlightenment S. <no-...@en...> - 2009-08-30 11:07:34
|
Log: 'everything' only show items in aggregator that match input or are in history when more than one plugin is active Author: jeffdameth Date: 2009-08-30 04:07:10 -0700 (Sun, 30 Aug 2009) New Revision: 42096 Modified: trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_plug_aggregator.c trunk/e/src/modules/everything/sources/evry_plug_apps.c trunk/e/src/modules/everything/sources/evry_plug_border.c trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-08-30 08:51:15 UTC (rev 42095) +++ trunk/e/src/modules/everything/evry.c 2009-08-30 11:07:10 UTC (rev 42096) @@ -279,6 +279,7 @@ it->free = cb_free; it->ref = 1; + it->usage = -1; #ifdef CHECK_REFS item_cnt++; @@ -403,8 +404,6 @@ /* update aggregator */ if (eina_list_count(s->cur_plugins) > 0) { - agg->fetch(agg, s->input); - /* add aggregator */ if (!(s->cur_plugins->data == agg)) { @@ -413,6 +412,7 @@ if (s->plugin_auto_selected) _evry_plugin_select(s, agg); } + agg->fetch(agg, s->input); } else { @@ -1707,8 +1707,8 @@ if (eina_list_count(s->cur_plugins) > 0) { + s->cur_plugins = eina_list_prepend(s->cur_plugins, sel->aggregator); sel->aggregator->fetch(sel->aggregator, s->input); - s->cur_plugins = eina_list_prepend(s->cur_plugins, sel->aggregator); if (s->plugin_auto_selected) _evry_plugin_select(s, NULL); } Modified: trunk/e/src/modules/everything/evry_plug_aggregator.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-08-30 08:51:15 UTC (rev 42095) +++ trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-08-30 11:07:10 UTC (rev 42096) @@ -21,7 +21,7 @@ return -1; if (it2->usage && !it1->usage) return 1; - + if ((it1->plugin == action_selector) || (it2->plugin == action_selector)) { @@ -35,7 +35,7 @@ return (it1->plugin->config->priority - (it2->plugin->config->priority + it2->priority)); } - + return -1; } @@ -65,7 +65,7 @@ return (it1->plugin->config->priority - (it1->plugin->config->priority + it2->priority)); } - + if ((it1->plugin == it2->plugin) && (it1->priority - it2->priority)) return (it1->priority - it2->priority); @@ -88,7 +88,7 @@ if (it1->priority - it2->priority) return (it1->priority - it2->priority); - return strcasecmp(it1->label, it2->label); + return strcasecmp(it1->label, it2->label); } static int @@ -97,7 +97,7 @@ Plugin *p = (Plugin *) plugin; Evry_Plugin *pp; Evry_State *s; - Eina_List *l, *ll; + Eina_List *l, *ll, *lll, *lp; Evry_Item *it; int cnt = 0; Eina_List *items = NULL; @@ -105,17 +105,16 @@ History_Item *hi; const char *id; - s = p->selector->state; - EVRY_PLUGIN_ITEMS_FREE(p); - EINA_LIST_FOREACH(s->cur_plugins, l, pp) - cnt += eina_list_count(pp->items); + s = p->selector->state; + /* first is aggregator itself */ + lp = s->cur_plugins->next; if (input[0]) { - EINA_LIST_FOREACH(s->cur_plugins, l, pp) + EINA_LIST_FOREACH(lp, l, pp) { EINA_LIST_FOREACH(pp->items, ll, it) { @@ -132,53 +131,92 @@ } } - if (!input[0] || eina_list_count(items) < 50) + /* always append items of action selector */ + if (!input[0] && (p->selector == selectors[1])) { - EINA_LIST_FOREACH(s->cur_plugins, l, pp) + EINA_LIST_FOREACH(lp, l, pp) { - for (cnt = 0, ll = pp->items; ll && cnt < 50; ll = ll->next, cnt++) + for (cnt = 0, ll = pp->items; ll && cnt < 50; ll = ll->next, cnt++) { - if (!items || !eina_list_data_find_list(items, ll->data)) - { - it = ll->data; + if (!items || !eina_list_data_find_list(items, ll->data)) + { + it = ll->data; - evry_item_ref(it); - it->fuzzy_match = 0; - EVRY_PLUGIN_ITEM_APPEND(p, it); - } + evry_item_ref(it); + it->fuzzy_match = 0; + EVRY_PLUGIN_ITEM_APPEND(p, it); + } } } } - if (items) eina_list_free(items); - - EINA_LIST_FOREACH(EVRY_PLUGIN(p)->items, l, it) + EINA_LIST_FOREACH(lp, l, pp) { - cnt = 1; - if (it->usage) continue; + EINA_LIST_FOREACH(pp->items, ll, it) + { + cnt = 1; + if (it->usage == 0) + continue; - if (it->plugin->item_id) - id = it->plugin->item_id(it->plugin, it); - else - id = it->label; + if ((it->usage > 0) && (!eina_list_data_find_list(items, it))) + { + evry_item_ref(it); + it->fuzzy_match = 0; + items = eina_list_append(items, it); + EVRY_PLUGIN_ITEM_APPEND(p, it); + continue; + } - if ((he = eina_hash_find(p->selector->history, id))) - { - EINA_LIST_FOREACH(he->items, ll, hi) + if (it->plugin->item_id) + id = it->plugin->item_id(it->plugin, it); + else + id = it->label; + + if ((he = eina_hash_find(p->selector->history, id))) { - if ((hi->plugin == it->plugin->name) && - ((!input[0]) || (!input[0] && !hi->input) || - (!strncmp(input, hi->input, strlen(input))) || - (!strncmp(input, hi->input, strlen(hi->input))))) + EINA_LIST_FOREACH(he->items, lll, hi) { - cnt++; - it->usage += hi->last_used; + if ((hi->plugin == it->plugin->name) && + ((!input[0]) || (!input[0] && !hi->input) || + (!strncmp(input, hi->input, strlen(input))) || + (!strncmp(input, hi->input, strlen(hi->input))))) + { + cnt++; + it->usage += hi->last_used; + } } + it->usage /= (double)cnt; + + if (!eina_list_data_find_list(items, it)) + { + evry_item_ref(it); + it->fuzzy_match = 0; + items = eina_list_append(items, it); + EVRY_PLUGIN_ITEM_APPEND(p, it); + } } - it->usage /= (double)cnt; + else it->usage = 0; } } - + + /* NOTE this is kind of weird. list_count returns 2 even if there is + only one item in list */ + if (eina_list_count(lp) == 2) + { + pp = lp->data; + EINA_LIST_FOREACH(pp->items, l, it) + { + if (!eina_list_data_find_list(items, it)) + { + evry_item_ref(it); + it->fuzzy_match = 0; + EVRY_PLUGIN_ITEM_APPEND(p, it); + } + } + } + + if (items) eina_list_free(items); + if (input[0]) { EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort); @@ -187,7 +225,7 @@ { EVRY_PLUGIN_ITEMS_SORT(p, _cb_sort_recent); } - + return 1; } Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-30 08:51:15 UTC (rev 42095) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-08-30 11:07:10 UTC (rev 42096) @@ -163,11 +163,13 @@ /* TODO popup end func !!! - cleanup hash for open-with plugin */ - eina_hash_free(added); + if (added) + eina_hash_free(added); added = NULL; - - eina_hash_free(p->added); + if (p->added) + eina_hash_free(p->added); + EVRY_PLUGIN_ITEMS_CLEAR(p); EINA_LIST_FREE(p->apps_all, desktop) Modified: trunk/e/src/modules/everything/sources/evry_plug_border.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 08:51:15 UTC (rev 42095) +++ trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 11:07:10 UTC (rev 42096) @@ -53,7 +53,7 @@ { Ecore_Event_Handler *h; - eina_hash_free(border_hash); + if (border_hash) eina_hash_free(border_hash); border_hash = NULL; EVRY_PLUGIN_ITEMS_CLEAR(p); Modified: trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-08-30 08:51:15 UTC (rev 42095) +++ trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-08-30 11:07:10 UTC (rev 42096) @@ -452,7 +452,7 @@ _item_id(Evry_Plugin *p, const Evry_Item *item) { ITEM_FILE(file, item); - + return file->uri; } |
From: Enlightenment S. <no-...@en...> - 2009-08-30 14:01:35
|
Log: 'everyting' reduce size of history by jsut storing the previous folder as context for files Author: jeffdameth Date: 2009-08-30 06:35:06 -0700 (Sun, 30 Aug 2009) New Revision: 42098 Modified: trunk/e/src/modules/everything/Evry.h trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/evry_plug_aggregator.c trunk/e/src/modules/everything/sources/evry_plug_border.c trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c trunk/e/src/modules/everything/sources/evry_plug_tracker.c Modified: trunk/e/src/modules/everything/Evry.h =================================================================== --- trunk/e/src/modules/everything/Evry.h 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/Evry.h 2009-08-30 13:35:06 UTC (rev 42098) @@ -83,6 +83,10 @@ /* store value of fuzzy match with input */ int fuzzy_match; + /* optional: plugin can set id to identify it in + history otherwise label is used */ + const char *id; + /* do not set by plugin! */ Evry_Item *next; Evry_Plugin *plugin; @@ -137,8 +141,7 @@ Evas_Object *(*icon_get) (Evry_Plugin *p, const Evry_Item *it, Evas *e); /* provide more information for a candidate */ /* int (*candidate_info) (Evas *evas, Evry_Item *item); */ - const char *(*item_id) (Evry_Plugin *p, const Evry_Item *it); - + /* optional: default action for this plugins items */ int (*action) (Evry_Plugin *p, const Evry_Item *item); Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/evry.c 2009-08-30 13:35:06 UTC (rev 42098) @@ -309,6 +309,7 @@ #endif if (it->label) eina_stringshare_del(it->label); + if (it->id) eina_stringshare_del(it->id); if (it->free) it->free(it); Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/evry_history.c 2009-08-30 13:35:06 UTC (rev 42098) @@ -1,6 +1,6 @@ #include "e_mod_main.h" -#define HISTORY_VERSION 2 +#define HISTORY_VERSION 1 static E_Config_DD *hist_entry_edd = NULL; static E_Config_DD *hist_item_edd = NULL; @@ -122,8 +122,8 @@ it = s->cur_item; if (!it) return; - if (it->plugin->item_id) - id = it->plugin->item_id(it->plugin, it); + if (it->id) + id = it->id; else id = it->label; @@ -210,8 +210,8 @@ Eina_List *l; int cnt = 1; - if (it->plugin->item_id) - id = it->plugin->item_id(it->plugin, it); + if (it->id) + id = it->id; else id = it->label; Modified: trunk/e/src/modules/everything/evry_plug_aggregator.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-08-30 13:35:06 UTC (rev 42098) @@ -128,8 +128,10 @@ } } - /* always append items of action selector */ - if (!input[0] && (p->selector == selectors[1])) + /* always append items of action or object selector */ + if (!input[0] && + ((p->selector == selectors[1]) || + (p->selector == selectors[2]))) { EINA_LIST_FOREACH(lp, l, pp) { Modified: trunk/e/src/modules/everything/sources/evry_plug_border.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 13:35:06 UTC (rev 42098) @@ -91,6 +91,11 @@ it->data = bd; it->fuzzy_match = match; it->priority = *prio; + if (bd->client.icccm.class) + it->id = eina_stringshare_add(bd->client.icccm.class); + if (bd->client.icccm.name) + it->id = eina_stringshare_add(bd->client.icccm.name); + *prio += 1; eina_hash_add(border_hash, &bd, it); @@ -235,17 +240,6 @@ return o; } -static const char * -_item_id(Evry_Plugin *p, const Evry_Item *it) -{ - E_Border *bd = it->data; - if (bd->client.icccm.class) - return (bd->client.icccm.class); - if (bd->client.icccm.name) - return (bd->client.icccm.name); - else - return NULL; -} static Eina_Bool @@ -254,8 +248,6 @@ plugin = evry_plugin_new(NULL, "Windows", type_subject, NULL, "BORDER", 0, NULL, NULL, _begin, _cleanup, _fetch, NULL, _item_icon_get, NULL, NULL); - plugin->item_id = &_item_id; - evry_plugin_register(plugin, 2); return EINA_TRUE; Modified: trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-08-30 13:35:06 UTC (rev 42098) @@ -123,7 +123,7 @@ snprintf(buf, sizeof(buf), "%s/%s", p->directory, filename); file->uri = strdup(buf); - + if (ecore_file_is_dir(file->uri)) EVRY_ITEM(file)->browseable = EINA_TRUE; @@ -151,6 +151,21 @@ return 0; } +static const char * +_item_id(const char *uri) +{ + const char *s1, *s2, *s3; + s1 = s2 = s3 = uri; + + while (s1 && ++s1 && (s1 = strchr(s1, '/'))) + { + s3 = s2; + s2 = s1; + } + + return s3; +} + static void _scan_end_func(void *data) { @@ -179,6 +194,7 @@ filename = item->data; uri = (char *) file->uri; file->uri = eina_stringshare_add(uri); + item->id = eina_stringshare_add(_item_id(uri)); item->label = eina_stringshare_add(filename); free(filename); free(uri); @@ -448,14 +464,6 @@ return ret; } -static const char * -_item_id(Evry_Plugin *p, const Evry_Item *item) -{ - ITEM_FILE(file, item); - - return file->uri; -} - static Eina_Bool _init(void) { @@ -466,9 +474,6 @@ p2 = evry_plugin_new(NULL, "Files", type_object, "FILE", "FILE", 0, NULL, NULL, _begin, _cleanup, _fetch, NULL, _icon_get, NULL, NULL); - - p1->item_id = &_item_id; - p1->item_id = &_item_id; evry_plugin_register(p1, 3); evry_plugin_register(p2, 1); Modified: trunk/e/src/modules/everything/sources/evry_plug_tracker.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_tracker.c 2009-08-30 12:01:50 UTC (rev 42097) +++ trunk/e/src/modules/everything/sources/evry_plug_tracker.c 2009-08-30 13:35:06 UTC (rev 42098) @@ -82,6 +82,22 @@ E_FREE(file); } + +static const char * +_item_id(const char *uri) +{ + const char *s1, *s2, *s3; + s1 = s2 = s3 = uri; + + while (s1 && ++s1 && (s1 = strchr(s1, '/'))) + { + s3 = s2; + s2 = s1; + } + + return s3; +} + static Evry_Item_File * _item_add(Plugin *p, char *path, char *mime, int prio) { @@ -103,10 +119,9 @@ if (!file) return NULL; evry_item_new(EVRY_ITEM(file), EVRY_PLUGIN(p), filename, _item_free); + EVRY_ITEM(file)->id = eina_stringshare_add(_item_id(path)); file->uri = eina_stringshare_add(path); - /* EVRY_ITEM(file)->priority = prio; */ - if (folder) { EVRY_ITEM(file)->browseable = EINA_TRUE; |
From: Enlightenment S. <no-...@en...> - 2009-08-30 14:54:41
|
Log: 'everything' - identify border items as transient to be removed from history on shutdown - history_add function cleanup Author: jeffdameth Date: 2009-08-30 07:54:25 -0700 (Sun, 30 Aug 2009) New Revision: 42103 Modified: trunk/e/src/modules/everything/Evry.h trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/sources/evry_plug_border.c Modified: trunk/e/src/modules/everything/Evry.h =================================================================== --- trunk/e/src/modules/everything/Evry.h 2009-08-30 14:04:34 UTC (rev 42102) +++ trunk/e/src/modules/everything/Evry.h 2009-08-30 14:54:25 UTC (rev 42103) @@ -73,8 +73,7 @@ /* item can be browsed, e.g. folders */ Eina_Bool browseable; - /* these are only for internally use by plugins */ - /* used e.g. as pointer for item data (Efreet_Desktop) */ + /* for internally use by plugins */ void *data; /* priority hints for sorting */ @@ -83,9 +82,13 @@ /* store value of fuzzy match with input */ int fuzzy_match; - /* optional: plugin can set id to identify it in - history otherwise label is used */ + /* optional: plugin can set id to identify + * it in history otherwise label is used */ const char *id; + + /* if transient item is removed from history + * on shutdown */ + Eina_Bool transient; /* do not set by plugin! */ Evry_Item *next; Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2009-08-30 14:04:34 UTC (rev 42102) +++ trunk/e/src/modules/everything/evry_history.c 2009-08-30 14:54:25 UTC (rev 42103) @@ -60,9 +60,61 @@ return 1; } +static Eina_Bool +_hist_cleanup_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata) +{ + History_Entry *he = data; + History_Item *hi; + Eina_List *l, *ll, *keys = fdata; + + EINA_LIST_FOREACH_SAFE(he->items, l, ll, hi) + { + /* item is transient */ + if (!hi->count) + { + if (hi->input) + eina_stringshare_del(hi->input); + if (hi->plugin) + eina_stringshare_del(hi->plugin); + if (hi->context) + eina_stringshare_del(hi->context); + E_FREE(hi); + + he->items = eina_list_remove_list(he->items, l); + } + } + + if (!he->items) + { + E_FREE(he); + keys = eina_list_append(keys, key); + } + + return 1; +} + void evry_history_free(void) { + Eina_List *keys = NULL; + char *key; + + evry_hist = e_config_domain_load("module.everything.history", hist_edd); + if (evry_hist) + { + keys = eina_list_append(keys, NULL); + eina_hash_foreach(evry_hist->subjects, _hist_cleanup_cb, keys); + EINA_LIST_FREE(keys, key) + if (key) eina_hash_del_by_key(evry_hist->subjects, key); + + keys = eina_list_append(keys, NULL); + eina_hash_foreach(evry_hist->actions, _hist_cleanup_cb, keys); + EINA_LIST_FREE(keys, key) + if (key) eina_hash_del_by_key(evry_hist->subjects, key); + + evry_history_unload(); + } + E_CONFIG_DD_FREE(hist_item_edd); E_CONFIG_DD_FREE(hist_entry_edd); E_CONFIG_DD_FREE(hist_edd); @@ -77,6 +129,9 @@ { eina_hash_foreach(evry_hist->subjects, _hist_free_cb, NULL); eina_hash_foreach(evry_hist->actions, _hist_free_cb, NULL); + eina_hash_free(evry_hist->subjects); + eina_hash_free(evry_hist->actions); + E_FREE(evry_hist); evry_hist = NULL; } @@ -112,7 +167,7 @@ evry_history_add(Eina_Hash *hist, Evry_State *s) { History_Entry *he; - History_Item *hi; + History_Item *hi = NULL; Evry_Item *it; Eina_List *l; const char *id; @@ -128,8 +183,13 @@ id = it->label; he = eina_hash_find(hist, id); - if (he) + if (!he) { + he = E_NEW(History_Entry, 1); + eina_hash_add(hist, id, he); + } + else + { /* found history entry */ EINA_LIST_FOREACH(he->items, l, hi) if (hi->plugin == it->plugin->name) break; @@ -165,7 +225,8 @@ else { /* remember input for item */ - hi->count++; + if (!it->transient) + hi->count++; hi->last_used /= 2.0; hi->last_used += ecore_time_get(); @@ -173,31 +234,19 @@ hi->input = eina_stringshare_add(s->input); } } + } - if (!hi) - { - hi = E_NEW(History_Item, 1); - hi->plugin = eina_stringshare_ref(it->plugin->name); - hi->last_used = ecore_time_get(); - hi->count = 1; - if (s->input) - hi->input = eina_stringshare_add(s->input); - - he->items = eina_list_append(he->items, hi); - } - } - else - { - he = E_NEW(History_Entry, 1); + if (!hi) + { hi = E_NEW(History_Item, 1); hi->plugin = eina_stringshare_ref(it->plugin->name); hi->last_used = ecore_time_get(); - hi->count = 1; + if (!it->transient) + hi->count = 1; if (s->input) hi->input = eina_stringshare_add(s->input); he->items = eina_list_append(he->items, hi); - eina_hash_add(hist, id, he); } } Modified: trunk/e/src/modules/everything/sources/evry_plug_border.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 14:04:34 UTC (rev 42102) +++ trunk/e/src/modules/everything/sources/evry_plug_border.c 2009-08-30 14:54:25 UTC (rev 42103) @@ -91,11 +91,9 @@ it->data = bd; it->fuzzy_match = match; it->priority = *prio; - if (bd->client.icccm.class) - it->id = eina_stringshare_add(bd->client.icccm.class); - if (bd->client.icccm.name) - it->id = eina_stringshare_add(bd->client.icccm.name); - + it->transient = EINA_TRUE; + it->id = eina_stringshare_add(e_util_winid_str_get(bd->win)); + *prio += 1; eina_hash_add(border_hash, &bd, it); |
From: Enlightenment S. <no-...@en...> - 2009-09-02 19:43:27
|
Log: 'everything' - added sudo app action and config option - remove unused item after seven days from history Author: jeffdameth Date: 2009-09-02 12:43:16 -0700 (Wed, 02 Sep 2009) New Revision: 42189 Modified: trunk/e/src/modules/everything/e_mod_main.c trunk/e/src/modules/everything/e_mod_main.h trunk/e/src/modules/everything/evry_config.c trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/sources/evry_plug_apps.c Modified: trunk/e/src/modules/everything/e_mod_main.c =================================================================== --- trunk/e/src/modules/everything/e_mod_main.c 2009-09-02 19:06:16 UTC (rev 42188) +++ trunk/e/src/modules/everything/e_mod_main.c 2009-09-02 19:43:16 UTC (rev 42189) @@ -9,7 +9,7 @@ #include "e_mod_main.h" -#define CONFIG_VERSION 5 +#define CONFIG_VERSION 6 /* actual module specifics */ static void _e_mod_action_cb(E_Object *obj, const char *params); @@ -187,6 +187,7 @@ E_CONFIG_VAL(D, T, hide_list, INT); E_CONFIG_VAL(D, T, quick_nav, INT); E_CONFIG_VAL(D, T, cmd_terminal, STR); + E_CONFIG_VAL(D, T, cmd_sudo, STR); E_CONFIG_LIST(D, T, conf_subjects, conf_item_edd); E_CONFIG_LIST(D, T, conf_actions, conf_item_edd); E_CONFIG_LIST(D, T, conf_objects, conf_item_edd); @@ -219,6 +220,7 @@ evry_conf->conf_objects = NULL; evry_conf->conf_views = NULL; evry_conf->cmd_terminal = eina_stringshare_add("/usr/bin/xterm"); + evry_conf->cmd_sudo = eina_stringshare_add("/usr/bin/gksudo --preserve-env"); } } Modified: trunk/e/src/modules/everything/e_mod_main.h =================================================================== --- trunk/e/src/modules/everything/e_mod_main.h 2009-09-02 19:06:16 UTC (rev 42188) +++ trunk/e/src/modules/everything/e_mod_main.h 2009-09-02 19:43:16 UTC (rev 42189) @@ -34,6 +34,7 @@ int quick_nav; const char *cmd_terminal; + const char *cmd_sudo; /* not saved data */ Eina_List *plugins; @@ -51,6 +52,7 @@ const char *context; const char *input; double last_used; + double usage; int count; int transient; }; Modified: trunk/e/src/modules/everything/evry_config.c =================================================================== --- trunk/e/src/modules/everything/evry_config.c 2009-09-02 19:06:16 UTC (rev 42188) +++ trunk/e/src/modules/everything/evry_config.c 2009-09-02 19:43:16 UTC (rev 42189) @@ -22,6 +22,7 @@ int scroll_animate; char *cmd_terminal; + char *cmd_sudo; Evas_Object *l_subject; Evas_Object *l_action; @@ -78,6 +79,9 @@ if (evry_conf->cmd_terminal) cfdata->cmd_terminal = strdup(evry_conf->cmd_terminal); + + if (evry_conf->cmd_sudo) + cfdata->cmd_sudo = strdup(evry_conf->cmd_sudo); } static void * @@ -97,6 +101,7 @@ if (cfdata->p_action) eina_list_free(cfdata->p_action); if (cfdata->p_object) eina_list_free(cfdata->p_object); E_FREE(cfdata->cmd_terminal); + E_FREE(cfdata->cmd_sudo); E_FREE(cfdata); } @@ -124,6 +129,9 @@ if (evry_conf->cmd_terminal) eina_stringshare_del(evry_conf->cmd_terminal); evry_conf->cmd_terminal = eina_stringshare_add(cfdata->cmd_terminal); + if (evry_conf->cmd_sudo) + eina_stringshare_del(evry_conf->cmd_sudo); + evry_conf->cmd_sudo = eina_stringshare_add(cfdata->cmd_sudo); e_config_save_queue(); return 1; @@ -223,7 +231,12 @@ e_widget_framelist_object_append(of, ob); ob = e_widget_entry_add(evas, &(cfdata->cmd_terminal), NULL, NULL, NULL); e_widget_framelist_object_append(of, ob); - + + ob = e_widget_label_add(evas, _("Sudo GUI")); + e_widget_framelist_object_append(of, ob); + ob = e_widget_entry_add(evas, &(cfdata->cmd_sudo), NULL, NULL, NULL); + e_widget_framelist_object_append(of, ob); + e_widget_list_object_append(o, of, 1, 1, 0.5); Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2009-09-02 19:06:16 UTC (rev 42188) +++ trunk/e/src/modules/everything/evry_history.c 2009-09-02 19:43:16 UTC (rev 42189) @@ -1,9 +1,11 @@ #include "e_mod_main.h" -#define HISTORY_VERSION 6 +#define HISTORY_VERSION 7 -#define TIME_NOW (1.0 - (evry_hist->begin / ecore_time_get())) / 1000000000000.0 +#define SEVEN_DAYS 604800 +#define TIME_FACTOR(_now) (1.0 - (evry_hist->begin / _now)) / 1000000000000000.0 + typedef struct _Cleanup_Data Cleanup_Data; struct _Cleanup_Data @@ -27,11 +29,12 @@ hist_item_edd = E_CONFIG_DD_NEW("History_Item", History_Item); #define T History_Item #define D hist_item_edd - E_CONFIG_VAL(D, T, plugin, STR); - E_CONFIG_VAL(D, T, context, STR); - E_CONFIG_VAL(D, T, input, STR); + E_CONFIG_VAL(D, T, plugin, STR); + E_CONFIG_VAL(D, T, context, STR); + E_CONFIG_VAL(D, T, input, STR); E_CONFIG_VAL(D, T, last_used, DOUBLE); - E_CONFIG_VAL(D, T, count, INT); + E_CONFIG_VAL(D, T, usage, DOUBLE); + E_CONFIG_VAL(D, T, count, INT); E_CONFIG_VAL(D, T, transient, INT); #undef T #undef D @@ -44,10 +47,10 @@ hist_edd = E_CONFIG_DD_NEW("History", History); #define T History #define D hist_edd - E_CONFIG_VAL(D, T, version, INT); + E_CONFIG_VAL(D, T, version, INT); + E_CONFIG_VAL(D, T, begin, DOUBLE); E_CONFIG_HASH(D, T, subjects, hist_entry_edd); E_CONFIG_HASH(D, T, actions, hist_entry_edd); - E_CONFIG_VAL(D, T, begin, DOUBLE); #undef T #undef D } @@ -83,6 +86,12 @@ EINA_LIST_FOREACH_SAFE(he->items, l, ll, hi) { + if (hi->last_used < d->time - SEVEN_DAYS) + { + hi->count--; + hi->last_used = d->time - SEVEN_DAYS/2; + } + /* item is transient or too old */ if (!hi->count || hi->transient) { @@ -117,7 +126,7 @@ if (evry_hist) { d = E_NEW(Cleanup_Data, 1); - /* d->time = ecore_time_get() - SOME_YEARS; */ + d->time = ecore_time_get(); if (evry_hist->subjects) { @@ -193,17 +202,14 @@ Evry_Item *it; Eina_List *l; const char *id; - + if (!s) return; it = s->cur_item; if (!it) return; - if (it->id) - id = it->id; - else - id = it->label; - + id = (it->id ? it->id : it->label); + he = eina_hash_find(hist, id); if (!he) { @@ -212,73 +218,33 @@ } else { - /* found history entry */ EINA_LIST_FOREACH(he->items, l, hi) if (hi->plugin == it->plugin->name) break; - - if (hi) - { - /* found history item */ - if (hi->input) - { - if (!s->input || !strncmp (hi->input, s->input, strlen(s->input))) - { - /* s->input matches hi->input and is equal or shorter */ - hi->last_used = TIME_NOW; - hi->count++; - hi->transient = it->transient; - if (it->transient) - hi->count++; - - } - else if (s->input) - { - if (!strncmp (hi->input, s->input, strlen(hi->input))) - { - /* s->input matches hi->input but is longer */ - eina_stringshare_del(hi->input); - hi->input = eina_stringshare_add(s->input); - } - else - { - /* s->input is different from hi->input - -> create new item */ - hi = NULL; - } - } - } - else - { - /* remember input for item */ - hi->count++; - - if (it->transient) - hi->count++; - - /* hi->last_used /= 2.0; */ - hi->last_used = TIME_NOW; - - if (s->input) - hi->input = eina_stringshare_add(s->input); - } - } } if (!hi) { hi = E_NEW(History_Item, 1); hi->plugin = eina_stringshare_ref(it->plugin->name); - hi->last_used = TIME_NOW; + he->items = eina_list_append(he->items, hi); + } - hi->count = 1; - if (it->transient) - hi->count++; + if (hi) + { + hi->last_used = ecore_time_get(); + hi->usage /= 4.0; + hi->usage += TIME_FACTOR(hi->last_used); + hi->transient = it->transient; + hi->count += (hi->transient ? 2:1); if (s->input) - hi->input = eina_stringshare_add(s->input); + { + if (hi->input) + eina_stringshare_del(hi->input); - he->items = eina_list_append(he->items, hi); - } + hi->input = eina_stringshare_add(s->input); + } + } } int @@ -286,18 +252,11 @@ { History_Entry *he; History_Item *hi; - const char *id; Eina_List *l; - int cnt; - - if (it->id) - id = it->id; - else - id = it->label; - it->usage = 0; + it->usage = 0.0; - if (!(he = eina_hash_find(hist, id))) + if (!(he = eina_hash_find(hist, (it->id ? it->id : it->label)))) return 0; EINA_LIST_FOREACH(he->items, l, hi) @@ -305,28 +264,26 @@ if (hi->plugin != it->plugin->name) continue; - cnt = 0; - if (!input || !hi->input) { - cnt = hi->count; + it->usage = hi->usage * hi->count; } else { /* higher priority for exact matches */ if (!strncmp(input, hi->input, strlen(input))) { - cnt += hi->count*2; + it->usage += hi->usage * hi->count; } if (!strncmp(input, hi->input, strlen(hi->input))) { - cnt += hi->count*2; + it->usage += hi->usage * hi->count; } } - it->usage += (cnt * hi->last_used); } - if (it->usage) return 1; + if (it->usage > 0.0) + return 1; return 0; } Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-09-02 19:06:16 UTC (rev 42188) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-09-02 19:43:16 UTC (rev 42189) @@ -1,4 +1,4 @@ -#include "Evry.h" +#include "e_mod_main.h" #define TERM_ACTION_CMD "/usr/bin/xterm -hold -e '%s'" @@ -35,6 +35,7 @@ static Evry_Action *act2 = NULL; static Evry_Action *act3 = NULL; static Evry_Action *act4 = NULL; +static Evry_Action *act5 = NULL; static Eina_List *exe_path = NULL; static Ecore_Idler *exe_scan_idler = NULL; @@ -89,7 +90,7 @@ if (!p->added) p->added = eina_hash_string_small_new(_hash_free); added = p->added; - + return plugin; } @@ -97,7 +98,7 @@ _begin(Evry_Plugin *plugin, const Evry_Item *item) { PLUGIN(p, plugin); - + /* taken from exebuf module */ char *path, *pp, *last; E_Exe_List *el; @@ -209,7 +210,7 @@ efreet_desktop_free(desktop); } -static int +static Evry_Item_App * _item_add(Plugin *p, Efreet_Desktop *desktop, char *file, int match) { Evry_Item_App *app; @@ -232,7 +233,7 @@ EVRY_ITEM(app)->plugin = EVRY_PLUGIN(p); EVRY_PLUGIN_ITEM_APPEND(p, app); } - return 1; + return app; } len = strlen(file); @@ -258,7 +259,7 @@ else exe = file; - if (!exe) return 0; + if (!exe) return NULL; if ((app = eina_hash_find(p->added, exe)) && (!desktop || (desktop == app->desktop))) @@ -269,7 +270,7 @@ EVRY_ITEM(app)->plugin = EVRY_PLUGIN(p); EVRY_PLUGIN_ITEM_APPEND(p, app); } - return 1; + return app; } if (desktop && !already_refd) @@ -306,7 +307,7 @@ EVRY_ITEM(app)->fuzzy_match = match; EVRY_PLUGIN_ITEM_APPEND(p, app); - return 1; + return app; } static void @@ -456,14 +457,32 @@ if (input && len > 2) { char *space; - + Evry_Item_App *app; + char buf[256]; if ((space = strchr(input, ' '))) len = (space - input); EINA_LIST_FOREACH(exe_list, l, file) { if (!strncmp(file, input, len)) - _item_add(p, NULL, file, 100); + /* && (!space || (strlen(file) == len))) */ + { + app = _item_add(p, NULL, file, 100); + + if (app) + { + eina_stringshare_del(EVRY_ITEM(app)->label); + if (!space) + EVRY_ITEM(app)->label = eina_stringshare_add(file); + else + { + snprintf(buf, sizeof(buf), "%s%s", file, space); + EVRY_ITEM(app)->label = eina_stringshare_add(buf); + eina_stringshare_del(app->file); + app->file = eina_stringshare_add(buf); + } + } + } } } @@ -514,7 +533,6 @@ return evry_util_exec_app(act->item1, act->item2); } -/* TODO config option for terminal and shell! */ static int _exec_term_action(Evry_Action *act) { @@ -524,7 +542,11 @@ int ret; tmp = E_NEW(Evry_Item_App, 1); - snprintf(buf, sizeof(buf), TERM_ACTION_CMD, app->file); + snprintf(buf, sizeof(buf), "%s%s %s", + evry_conf->cmd_terminal, + (strcmp(evry_conf->cmd_terminal, "/usr/bin/xterm") ? "" : " -hold -e"), + app->file); + tmp->file = buf; ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL); @@ -545,6 +567,27 @@ } static int +_exec_sudo_action(Evry_Action *act) +{ + ITEM_APP(app, act->item1); + Evry_Item_App *tmp; + char buf[1024]; + int ret; + + tmp = E_NEW(Evry_Item_App, 1); + snprintf(buf, sizeof(buf), "%s %s", + evry_conf->cmd_sudo, + (app->desktop ? app->desktop->exec : app->file)); + + tmp->file = buf; + ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL); + + E_FREE(tmp); + + return ret; +} + +static int _open_with_action(Evry_Plugin *plugin, const Evry_Item *it) { PLUGIN(p, plugin); @@ -555,8 +598,6 @@ return 0; } - - static int _edit_app_check_item(Evry_Action *act __UNUSED__, const Evry_Item *it) { @@ -678,7 +719,7 @@ "everything-launch", _exec_app_action, _exec_app_check_item, NULL, NULL,NULL); - + act1 = evry_action_new("Open File...", "APPLICATION", "FILE", "APPLICATION", "document-open", _exec_app_action, _exec_app_check_item, @@ -693,22 +734,23 @@ "everything-launch", _edit_app_action, _edit_app_check_item, NULL, NULL, NULL); - + act4 = evry_action_new("New Application Entry", "APPLICATION", NULL, NULL, "everything-launch", _new_app_action, _new_app_check_item, NULL, NULL, NULL); - evry_action_register(act, 0); + act5 = evry_action_new("Run with Sudo", "APPLICATION", NULL, NULL, + "system-run", + _exec_sudo_action, NULL, NULL, NULL, NULL); + + evry_action_register(act, 0); evry_action_register(act1, 1); evry_action_register(act2, 2); evry_action_register(act3, 3); evry_action_register(act4, 4); + evry_action_register(act5, 5); - - - - /* taken from e_exebuf.c */ exelist_exe_edd = E_CONFIG_DD_NEW("E_Exe", E_Exe); #undef T @@ -738,6 +780,7 @@ evry_action_free(act2); evry_action_free(act3); evry_action_free(act4); + evry_action_free(act5); E_CONFIG_DD_FREE(exelist_edd); E_CONFIG_DD_FREE(exelist_exe_edd); |
From: Enlightenment S. <no-...@en...> - 2009-09-03 14:21:39
|
Log: 'everything' - remember context of action. e.g. which app was used for opening a file with a specific mimetype Author: jeffdameth Date: 2009-09-03 07:21:27 -0700 (Thu, 03 Sep 2009) New Revision: 42205 Modified: trunk/e/src/modules/everything/Evry.h trunk/e/src/modules/everything/e_mod_main.h trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/evry_plug_aggregator.c trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c Modified: trunk/e/src/modules/everything/Evry.h =================================================================== --- trunk/e/src/modules/everything/Evry.h 2009-09-03 13:33:35 UTC (rev 42204) +++ trunk/e/src/modules/everything/Evry.h 2009-09-03 14:21:27 UTC (rev 42205) @@ -70,6 +70,10 @@ const char *label; const char *icon; + /* context provided by item. e.g. to remember which action + * was performed on a file with a specific mimetype */ + const char *context; + /* item can be browsed, e.g. folders */ Eina_Bool browseable; Modified: trunk/e/src/modules/everything/e_mod_main.h =================================================================== --- trunk/e/src/modules/everything/e_mod_main.h 2009-09-03 13:33:35 UTC (rev 42204) +++ trunk/e/src/modules/everything/e_mod_main.h 2009-09-03 14:21:27 UTC (rev 42205) @@ -140,8 +140,8 @@ void evry_history_free(void); void evry_history_load(void); void evry_history_unload(void); -void evry_history_add(Eina_Hash *hist, Evry_State *s); -EAPI int evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input); +void evry_history_add(Eina_Hash *hist, Evry_State *s, const char *ctxt); +int evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input, const char *ctxt); EAPI int evry_browse_item(Evry_Selector *sel); void evry_browse_back(Evry_Selector *sel); Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-09-03 13:33:35 UTC (rev 42204) +++ trunk/e/src/modules/everything/evry.c 2009-09-03 14:21:27 UTC (rev 42205) @@ -306,7 +306,8 @@ if (it->label) eina_stringshare_del(it->label); if (it->id) eina_stringshare_del(it->id); - + if (it->context) eina_stringshare_del(it->context); + if (it->free) it->free(it); else @@ -1080,7 +1081,7 @@ if (!plugins) return 1; - evry_history_add(sel->history, s); + evry_history_add(sel->history, s, NULL); if (s->view) { @@ -1440,9 +1441,9 @@ } else return; - evry_history_add(evry_hist->subjects, s_subject); - evry_history_add(evry_hist->actions, s_action); - evry_history_add(evry_hist->subjects, s_object); + evry_history_add(evry_hist->subjects, s_subject, NULL); + evry_history_add(evry_hist->actions, s_action, s_subject->cur_item->context); + evry_history_add(evry_hist->subjects, s_object, s_action->cur_item->context); /* let subject and object plugin know that an action was performed */ if (s_subject->plugin->action) Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2009-09-03 13:33:35 UTC (rev 42204) +++ trunk/e/src/modules/everything/evry_history.c 2009-09-03 14:21:27 UTC (rev 42205) @@ -195,7 +195,7 @@ } void -evry_history_add(Eina_Hash *hist, Evry_State *s) +evry_history_add(Eina_Hash *hist, Evry_State *s, const char *ctxt) { History_Entry *he; History_Item *hi = NULL; @@ -219,7 +219,9 @@ else { EINA_LIST_FOREACH(he->items, l, hi) - if (hi->plugin == it->plugin->name) break; + if ((hi->plugin == it->plugin->name) && + (ctxt == hi->context)) + break; } if (!hi) @@ -236,7 +238,9 @@ hi->usage += TIME_FACTOR(hi->last_used); hi->transient = it->transient; hi->count += (hi->transient ? 2:1); - + if (ctxt && !hi->context) + hi->context = eina_stringshare_ref(ctxt); + if (s->input) { if (hi->input) @@ -248,7 +252,7 @@ } int -evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input) +evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input, const char *ctxt) { History_Entry *he; History_Item *hi; @@ -266,7 +270,7 @@ if (!input || !hi->input) { - it->usage = hi->usage * hi->count; + it->usage += hi->usage * hi->count; } else { @@ -280,6 +284,11 @@ it->usage += hi->usage * hi->count; } } + if (hi->context && ctxt) + { + if (hi->context == ctxt) + it->usage += hi->usage * hi->count * 2; + } } if (it->usage > 0.0) Modified: trunk/e/src/modules/everything/evry_plug_aggregator.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-09-03 13:33:35 UTC (rev 42204) +++ trunk/e/src/modules/everything/evry_plug_aggregator.c 2009-09-03 14:21:27 UTC (rev 42205) @@ -99,13 +99,25 @@ Evry_State *s; Eina_List *l, *ll, *lp; Evry_Item *it; - int cnt = 0; + int i, cnt = 0; Eina_List *items = NULL; - + const char *context = NULL; + EVRY_PLUGIN_ITEMS_FREE(p); s = p->selector->state; + for (i = 1; i < 3; i++) + { + Evry_Item *item; + if (p->selector == selectors[i]) + { + item = selectors[i-1]->state->cur_item; + context = item->context; + } + } + + /* first is aggregator itself */ lp = s->cur_plugins->next; @@ -153,7 +165,7 @@ { EINA_LIST_FOREACH(pp->items, ll, it) { - if (evry_history_item_usage_set(p->selector->history, it, input) && + if (evry_history_item_usage_set(p->selector->history, it, input, context) && (!eina_list_data_find_list(items, it))) { evry_item_ref(it); Modified: trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-09-03 13:33:35 UTC (rev 42204) +++ trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-09-03 14:21:27 UTC (rev 42205) @@ -50,7 +50,8 @@ if ((mime = efreet_mime_type_get(file->uri))) { file->mime = eina_stringshare_add(mime); - + EVRY_ITEM(file)->context = eina_stringshare_ref(file->mime); + if ((!strcmp(mime, "inode/directory")) || (!strcmp(mime, "inode/mount-point"))) EVRY_ITEM(file)->browseable = EINA_TRUE; @@ -202,8 +203,11 @@ p->files = eina_list_append(p->files, file); if (item->browseable) - file->mime = eina_stringshare_ref(mime_folder); - + { + file->mime = eina_stringshare_ref(mime_folder); + EVRY_ITEM(file)->context = eina_stringshare_ref(file->mime); + } + if (p->command || cnt >= MAX_ITEMS) continue; cnt += _append_file(p, file); } |
From: Enlightenment S. <no-...@en...> - 2009-09-18 06:33:40
|
Log: everything: - added config for popup position - make 'open term here' action work with other terminal Author: jeffdameth Date: 2009-09-17 23:33:33 -0700 (Thu, 17 Sep 2009) New Revision: 42554 Modified: trunk/e/src/modules/everything/e_mod_main.c trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_config.c trunk/e/src/modules/everything/sources/evry_plug_apps.c trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c Modified: trunk/e/src/modules/everything/e_mod_main.c =================================================================== --- trunk/e/src/modules/everything/e_mod_main.c 2009-09-17 22:39:18 UTC (rev 42553) +++ trunk/e/src/modules/everything/e_mod_main.c 2009-09-18 06:33:33 UTC (rev 42554) @@ -222,6 +222,14 @@ evry_conf->cmd_terminal = eina_stringshare_add("/usr/bin/xterm"); evry_conf->cmd_sudo = eina_stringshare_add("/usr/bin/gksudo --preserve-env"); } + + if ((evry_conf->rel_x > 1.0) || + (evry_conf->rel_x < 0.0)) + evry_conf->rel_x = 0.5; + + if ((evry_conf->rel_y > 1.0) || + (evry_conf->rel_y < 0.0)) + evry_conf->rel_y = 0.3; } Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2009-09-17 22:39:18 UTC (rev 42553) +++ trunk/e/src/modules/everything/evry.c 2009-09-18 06:33:33 UTC (rev 42554) @@ -171,8 +171,8 @@ (ECORE_X_EVENT_SELECTION_NOTIFY, _evry_cb_selection_notify, win)); - e_popup_move(win->popup, win->popup->x, win->popup->y - list->popup->h/2); - e_popup_move(list->popup, list->popup->x, list->popup->y - list->popup->h/2); + /* e_popup_move(win->popup, win->popup->x, win->popup->y - list->popup->h/2); + * e_popup_move(list->popup, list->popup->x, list->popup->y - list->popup->h/2); */ e_popup_layer_set(list->popup, 255); e_popup_layer_set(win->popup, 255); @@ -583,8 +583,8 @@ if (evry_conf->width > mw) mw = evry_conf->width; - x = (zone->w / 2) - (mw / 2); - y = (zone->h / 2) - (mh / 2); + x = (zone->w * evry_conf->rel_x) - (mw / 2); + y = (zone->h * evry_conf->rel_y) - (mh / 2); e_popup_move_resize(popup, x, y, mw, mh); Modified: trunk/e/src/modules/everything/evry_config.c =================================================================== --- trunk/e/src/modules/everything/evry_config.c 2009-09-17 22:39:18 UTC (rev 42553) +++ trunk/e/src/modules/everything/evry_config.c 2009-09-18 06:33:33 UTC (rev 42554) @@ -19,6 +19,7 @@ int quick_nav; int width, height; + double rel_x, rel_y; int scroll_animate; char *cmd_terminal; @@ -68,6 +69,8 @@ cfdata->hide_list = evry_conf->hide_list; cfdata->hide_input = evry_conf->hide_input; cfdata->quick_nav = evry_conf->quick_nav; + cfdata->rel_x = evry_conf->rel_x; + cfdata->rel_y = evry_conf->rel_y; EINA_LIST_FOREACH(evry_conf->plugins, l, p) if (p->type == type_subject) @@ -122,6 +125,9 @@ evry_conf->hide_input = cfdata->hide_input; evry_conf->hide_list = cfdata->hide_list; evry_conf->quick_nav = cfdata->quick_nav; + evry_conf->rel_x = cfdata->rel_x; + evry_conf->rel_y = cfdata->rel_y; + evry_conf->plugins = eina_list_sort(evry_conf->plugins, eina_list_count(evry_conf->plugins), _evry_cb_plugin_sort); @@ -205,7 +211,7 @@ } static Evas_Object * -_basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Data *cfdata) +_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) { Evas_Object *o, *of, *ob, *otb; @@ -239,8 +245,11 @@ e_widget_list_object_append(o, of, 1, 1, 0.5); + e_widget_toolbook_page_append(otb, NULL, _("General Settings"), + o, 1, 0, 1, 0, 0.5, 0.0); - of = e_widget_framelist_add(evas, _("Size"), 0); + o = e_widget_list_add(evas, 0, 0); + of = e_widget_framelist_add(evas, _("Popup Size"), 0); ob = e_widget_label_add(evas, _("Popup Width")); e_widget_framelist_object_append(of, ob); ob = e_widget_slider_add(evas, 1, 0, _("%1.0f"), @@ -256,14 +265,29 @@ e_widget_framelist_object_append(of, ob); e_widget_list_object_append(o, of, 1, 1, 0.5); + of = e_widget_framelist_add(evas, _("Popup Align"), 0); + ob = e_widget_label_add(evas, _("Vertical")); + e_widget_framelist_object_append(of, ob); + ob = e_widget_slider_add(evas, 1, 0, _("%1.2f"), + 0.0, 1.0, 0.01, 0, + &(cfdata->rel_y), NULL, 200); + e_widget_framelist_object_append(of, ob); + + ob = e_widget_label_add(evas, _("Horizontal")); + e_widget_framelist_object_append(of, ob); + ob = e_widget_slider_add(evas, 1, 0, _("%1.2f"), + 0.0, 1.0, 0.01, 0, + &(cfdata->rel_x), NULL, 200); + e_widget_framelist_object_append(of, ob); + e_widget_list_object_append(o, of, 1, 1, 0.5); + /* of = e_widget_framelist_add(evas, _("Scroll Settings"), 0); * ob = e_widget_check_add(evas, _("Scroll Animate"), * &(cfdata->scroll_animate)); * e_widget_framelist_object_append(of, ob); * e_widget_list_object_append(o, of, 1, 1, 0.5); */ - - e_widget_toolbook_page_append(otb, NULL, _("General Settings"), + e_widget_toolbook_page_append(otb, NULL, _("Position / Size"), o, 1, 0, 1, 0, 0.5, 0.0); ob = e_widget_list_add(evas, 1, 1); @@ -331,5 +355,10 @@ e_widget_toolbook_page_show(otb, 0); + /* e_widget_size_min_set(otb, 350, 350); */ + e_widget_size_min_resize(otb); + + e_dialog_resizable_set(cfd->dia, 1); + return otb; } Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-09-17 22:39:18 UTC (rev 42553) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2009-09-18 06:33:33 UTC (rev 42554) @@ -513,7 +513,7 @@ static int _exec_app_check_item(Evry_Action *act __UNUSED__, const Evry_Item *it) { - ITEM_APP(app, it); + /* ITEM_APP(app, it); */ /* if (app->desktop) * return 1; */ @@ -538,18 +538,19 @@ Evry_Item_App *tmp; char buf[1024]; int ret; - + char *escaped = ecore_file_escape_name(app->file); + tmp = E_NEW(Evry_Item_App, 1); - snprintf(buf, sizeof(buf), "%s%s %s", + snprintf(buf, sizeof(buf), "%s -hold -e %s", evry_conf->cmd_terminal, - (strcmp(evry_conf->cmd_terminal, "/usr/bin/xterm") ? "" : " -hold -e"), - app->file); + (escaped ? escaped : app->file)); tmp->file = buf; ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL); E_FREE(tmp); - + E_FREE(escaped); + return ret; } Modified: trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-09-17 22:39:18 UTC (rev 42553) +++ trunk/e/src/modules/everything/sources/evry_plug_dir_browse.c 2009-09-18 06:33:33 UTC (rev 42554) @@ -1,7 +1,7 @@ -#include "Evry.h" +#include "e_mod_main.h" #define MAX_ITEMS 100 -#define TERM_ACTION_DIR "/usr/bin/xterm -e \'cd %s && /bin/bash\'" +#define TERM_ACTION_DIR "%s" typedef struct _Plugin Plugin; typedef struct _Data Data; @@ -438,33 +438,29 @@ { ITEM_FILE(file, act->item1); Evry_Item_App *tmp; - char buf[1024]; - char *dir, *path; + char cwd[4096]; + char *dir; int ret = 0; if (act->item1->browseable) - { - path = ecore_file_escape_name(file->uri); - } + dir = strdup(file->uri); else - { - dir = ecore_file_dir_get(file->uri); - if (!dir) return 0; - path = ecore_file_escape_name(dir); + dir = ecore_file_dir_get(file->uri); - free(dir); - } - - if (path) + if (dir) { + getcwd(cwd, sizeof(cwd)); + chdir(dir); + tmp = E_NEW(Evry_Item_App, 1); - snprintf(buf, sizeof(buf), TERM_ACTION_DIR, path); - tmp->file = buf; + tmp->file = evry_conf->cmd_terminal; + ret = evry_util_exec_app(EVRY_ITEM(tmp), NULL); E_FREE(tmp); - free(path); + E_FREE(dir); + chdir(cwd); } - + return ret; } |
From: Enlightenment S. <no-...@en...> - 2010-03-06 14:09:14
|
Log: 'evrything' cleanups Author: jeffdameth Date: 2010-03-06 06:09:05 -0800 (Sat, 06 Mar 2010) New Revision: 46907 Modified: trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/sources/evry_plug_apps.c Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2010-03-06 11:53:14 UTC (rev 46906) +++ trunk/e/src/modules/everything/evry_history.c 2010-03-06 14:09:05 UTC (rev 46907) @@ -214,7 +214,7 @@ if (!it) return; id = (it->id ? it->id : it->label); - + he = eina_hash_find(hist, id); if (!he) { @@ -264,7 +264,7 @@ Eina_List *l; it->usage = 0.0; - + if (!(he = eina_hash_find(hist, (it->id ? it->id : it->label)))) return 0; Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2010-03-06 11:53:14 UTC (rev 46906) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2010-03-06 14:09:05 UTC (rev 46907) @@ -780,6 +780,7 @@ evry_action_register(act4, 4); evry_action_register(act5, 5); + /* Eina_List *l, *ll; const char *file, *name; History_Entry *he; @@ -787,7 +788,7 @@ name = EVRY_PLUGIN(p1)->name; double t; int found = 0; - /* + evry_history_load(); EINA_LIST_FOREACH(e_exehist_list_get(), l, file) |
From: Enlightenment S. <no-...@en...> - 2010-04-04 14:11:42
|
Log: 'everything' - make upadte of action selector async - added action selector as subjects plugin for actions without object like restart, shutdown, etc Author: jeffdameth Date: 2010-04-04 07:11:35 -0700 (Sun, 04 Apr 2010) New Revision: 47748 Modified: trunk/e/src/modules/everything/Evry.h trunk/e/src/modules/everything/e_mod_main.h trunk/e/src/modules/everything/evry.c trunk/e/src/modules/everything/evry_plug_actions.c trunk/e/src/modules/everything/evry_plug_aggregator.c trunk/e/src/modules/everything/sources/evry_plug_border.c Modified: trunk/e/src/modules/everything/Evry.h =================================================================== --- trunk/e/src/modules/everything/Evry.h 2010-04-04 14:04:30 UTC (rev 47747) +++ trunk/e/src/modules/everything/Evry.h 2010-04-04 14:11:35 UTC (rev 47748) @@ -240,13 +240,14 @@ int (*check_item) (Evry_Action *act, const Evry_Item *it); int (*intercept) (Evry_Action *act); void (*cleanup) (Evry_Action *act); + Eina_List *(*actions) (Evry_Action *act); Evas_Object *(*icon_get) (Evry_Action *act, Evas *e); /* use icon name from theme */ const char *icon; void *data; - + int priority; }; Modified: trunk/e/src/modules/everything/e_mod_main.h =================================================================== --- trunk/e/src/modules/everything/e_mod_main.h 2010-04-04 14:04:30 UTC (rev 47747) +++ trunk/e/src/modules/everything/e_mod_main.h 2010-04-04 14:11:35 UTC (rev 47748) @@ -93,8 +93,10 @@ /* provides collection of items from other plugins */ Evry_Plugin *aggregator; + Evry_Plugin *actions; + /* */ - Eina_List *actions; + Eina_List *cur_actions; /* all plugins that belong to this selector*/ Eina_List *plugins; @@ -105,6 +107,8 @@ Eina_Bool do_thumb; Eina_Hash *history; + + Ecore_Timer *update_timer; }; struct _Tab_View @@ -141,7 +145,7 @@ EAPI Evry_Plugin *evry_plug_aggregator_new(Evry_Selector *selector); EAPI void evry_plug_aggregator_free(Evry_Plugin *plugin); -EAPI Evry_Plugin *evry_plug_actions_new(void); +EAPI Evry_Plugin *evry_plug_actions_new(int type); EAPI void evry_plug_actions_free(Evry_Plugin *plugin); void evry_history_init(void); @@ -157,5 +161,5 @@ EAPI extern Config *evry_conf; EAPI extern History *evry_hist; extern Evry_Selector **selectors; -extern Evry_Plugin *action_selector; +extern const char *action_selector; #endif Modified: trunk/e/src/modules/everything/evry.c =================================================================== --- trunk/e/src/modules/everything/evry.c 2010-04-04 14:04:30 UTC (rev 47747) +++ trunk/e/src/modules/everything/evry.c 2010-04-04 14:11:35 UTC (rev 47748) @@ -38,11 +38,11 @@ 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); @@ -84,19 +84,18 @@ 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; } @@ -106,8 +105,8 @@ { evry_hide(); - evry_plug_actions_free(action_selector); eina_stringshare_del(thumb_types); + eina_stringshare_del(action_selector); return 1; } @@ -147,7 +146,8 @@ _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) { @@ -216,10 +216,6 @@ _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]); @@ -660,14 +656,15 @@ 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; @@ -709,8 +706,14 @@ 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); } @@ -853,6 +856,31 @@ } } +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) { @@ -905,17 +933,10 @@ 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); } } @@ -974,8 +995,8 @@ 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) { @@ -1175,7 +1196,7 @@ { Evry_State *s = selector->state; - if (update_timer) + if (selector->update_timer) { if ((selector == selectors[0]) || (selector == selectors[1])) @@ -1184,8 +1205,8 @@ _evry_selector_update(selector); } - ecore_timer_del(update_timer); - update_timer = NULL; + /* ecore_timer_del(update_timer); + * update_timer = NULL; */ } if (selector == selectors[0]) @@ -1199,7 +1220,7 @@ 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)) { @@ -1272,7 +1293,7 @@ { if (!strcmp(key, "u")) { - if (!_evry_clear(s)) + if (!_evry_clear(selector)) evry_browse_back(selector); } else if (!strcmp(key, "1")) @@ -1307,11 +1328,11 @@ _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))) @@ -1327,15 +1348,15 @@ (_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); } } @@ -1346,8 +1367,9 @@ } 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); @@ -1361,7 +1383,7 @@ s->input[pos] = 0; if ((pos == 0) || !isspace(val)) - _evry_update(s, 1); + _evry_update(sel, 1); return 1; } @@ -1387,45 +1409,54 @@ } 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; @@ -1445,19 +1476,17 @@ 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; @@ -1703,6 +1732,10 @@ 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); } @@ -1775,6 +1808,7 @@ _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; @@ -1793,7 +1827,7 @@ text_data = ev->data; strncat(s->input, text_data->text, (INPUTLEN - strlen(s->input)) - 1); - _evry_update(s, 1); + _evry_update(selector, 1); } } Modified: trunk/e/src/modules/everything/evry_plug_actions.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_actions.c 2010-04-04 14:04:30 UTC (rev 47747) +++ trunk/e/src/modules/everything/evry_plug_actions.c 2010-04-04 14:11:35 UTC (rev 47748) @@ -8,11 +8,16 @@ _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); } @@ -21,19 +26,30 @@ { 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; @@ -41,12 +57,12 @@ 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; } @@ -80,12 +96,17 @@ 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); @@ -125,11 +146,11 @@ } 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); Modified: trunk/e/src/modules/everything/evry_plug_aggregator.c =================================================================== --- trunk/e/src/modules/everything/evry_plug_aggregator.c 2010-04-04 14:04:30 UTC (rev 47747) +++ trunk/e/src/modules/everything/evry_plug_aggregator.c 2010-04-04 14:11:35 UTC (rev 47748) @@ -9,6 +9,12 @@ Evry_Selector *selector; }; +inline static int +_is_action(const Evry_Item *it) +{ + return (it->plugin->name == action_selector); +} + static int _cb_sort_recent(const void *data1, const void *data2) { @@ -22,17 +28,15 @@ if (it2->usage && !it1->usage) return 1; - if ((it1->plugin == action_selector) || - (it2->plugin == action_selector)) + if (_is_action(it1) || _is_action(it2)) { - if ((it1->plugin == action_selector) && - (it2->plugin == action_selector)) + if (_is_action(it1) && _is_action(it2)) return (it1->priority - it2->priority); - else if (it1->plugin == action_selector) - return ((it1->plugin->config->priority + it1->priority) - - it2->plugin->config->priority); + else if (_is_action(it1)) + return ((it1->plugin->config->priority + it1->priority) - + (it2->plugin->config->priority)); else - return (it1->plugin->config->priority - + return ((it1->plugin->config->priority) - (it2->plugin->config->priority + it2->priority)); } @@ -52,13 +56,11 @@ if (it2->usage && !it1->usage) return 1; - if ((it1->plugin == action_selector) || - (it2->plugin == action_selector)) + if (_is_action(it1) || _is_action(it2)) { - if ((it1->plugin == action_selector) && - (it2->plugin == action_selector)) + if (_is_action(it1) && _is_action(it2)) return (it1->priority - it2->priority); - else if (it1->plugin == action_selector) + else if (_is_action(it1)) return ((it1->plugin->config->priority + it1->priority) - it2->plugin->config->priority); else Modified: trunk/e/src/modules/everything/sources/evry_plug_border.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_border.c 2010-04-04 14:04:30 UTC (rev 47747) +++ trunk/e/src/modules/everything/sources/evry_plug_border.c 2010-04-04 14:11:35 UTC (rev 47748) @@ -8,23 +8,15 @@ static int _cb_border_remove(void *data, int type, void *event) { - Evry_Plugin *p = data; - E_Event_Border_Remove *ev; - Eina_List *l; + E_Event_Border_Remove *ev = event; Evry_Item *it; + Evry_Plugin *p = data; - ev = event; - it = eina_hash_find(border_hash, &(ev->border)); - printf("border del cb\n"); - if (!it) return 1; - printf("border del cb %s\n", it->label); - eina_hash_del_by_key(border_hash, &(ev->border)); - p->items = eina_list_remove(p->items, it); evry_item_free(it); evry_plugin_async_update(p, EVRY_ASYNC_UPDATE_ADD); |
From: Enlightenment S. <no-...@en...> - 2010-04-09 04:14:16
|
Log: 'everything' - open with..: find also text/plain apps for text/* files - stricter matching of history items. no more 'Open Terminal' everywhere - defer popup creation Author: jeffdameth Date: 2010-04-08 21:14:09 -0700 (Thu, 08 Apr 2010) New Revision: 47865 Modified: trunk/e/src/modules/everything/e_mod_main.c trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/sources/evry_plug_apps.c Modified: trunk/e/src/modules/everything/e_mod_main.c =================================================================== --- trunk/e/src/modules/everything/e_mod_main.c 2010-04-09 03:54:00 UTC (rev 47864) +++ trunk/e/src/modules/everything/e_mod_main.c 2010-04-09 04:14:09 UTC (rev 47865) @@ -310,6 +310,17 @@ /* action callback */ + +static int +_e_mod_run_defer_cb(void *data) +{ + E_Zone *zone; + + zone = data; + if (zone) evry_show(zone, NULL); + return 0; +} + static void _e_mod_action_cb(E_Object *obj, const char *params) { @@ -331,22 +342,13 @@ if (!zone) return; if (params && params[0]) + evry_show(zone, params); else - evry_show(zone, NULL); + ecore_idle_enterer_add(_e_mod_run_defer_cb, zone); } /* menu item callback(s) */ -static int -_e_mod_run_defer_cb(void *data) -{ - E_Zone *zone; - - zone = data; - if (zone) evry_show(zone, NULL); - return 0; -} - static void _e_mod_run_cb(void *data __UNUSED__, E_Menu *m, E_Menu_Item *mi __UNUSED__) { Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2010-04-09 03:54:00 UTC (rev 47864) +++ trunk/e/src/modules/everything/evry_history.c 2010-04-09 04:14:09 UTC (rev 47865) @@ -245,7 +245,7 @@ hi->count += (hi->transient ? 2:1); if (ctxt && !hi->context) hi->context = eina_stringshare_ref(ctxt); - + if (s->input) { if (hi->input) @@ -272,6 +272,9 @@ { if (hi->plugin != it->plugin->name) continue; + if (ctxt != hi->context) + continue; + if (evry_conf->history_sort_mode == 0) { @@ -291,11 +294,10 @@ it->usage += hi->usage * hi->count; } } - if (hi->context && ctxt) - { - if (hi->context == ctxt) - it->usage += hi->usage * hi->count * 2; - } + + if (ctxt && hi->context && + (hi->context == ctxt)) + it->usage += hi->usage * hi->count * 10; } else if (evry_conf->history_sort_mode == 1) { Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2010-04-09 03:54:00 UTC (rev 47864) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2010-04-09 04:14:09 UTC (rev 47865) @@ -78,6 +78,22 @@ p->candidate = item; p->apps_mime = efreet_util_desktop_mime_list(mime); + + if (strcmp(mime, "text/plain") && + !strncmp(mime, "text/", 5)) + { + Eina_List *tmp; + tmp = efreet_util_desktop_mime_list("text/plain"); + + EINA_LIST_FREE(tmp, desktop) + { + if (!eina_list_data_find_list(p->apps_mime, desktop)) + p->apps_mime = eina_list_append(p->apps_mime, desktop); + else + efreet_desktop_free(desktop); + } + } + desktop = e_exehist_mime_desktop_get(mime); if (desktop) p->apps_mime = eina_list_prepend(p->apps_mime, desktop); |
From: Enlightenment S. <no-...@en...> - 2010-04-09 14:41:45
|
Log: 'everything' apps: use own history for sorting apps Author: jeffdameth Date: 2010-04-09 07:41:37 -0700 (Fri, 09 Apr 2010) New Revision: 47873 Modified: trunk/e/src/modules/everything/e_mod_main.h trunk/e/src/modules/everything/evry_history.c trunk/e/src/modules/everything/sources/evry_plug_apps.c Modified: trunk/e/src/modules/everything/e_mod_main.h =================================================================== --- trunk/e/src/modules/everything/e_mod_main.h 2010-04-09 13:45:25 UTC (rev 47872) +++ trunk/e/src/modules/everything/e_mod_main.h 2010-04-09 14:41:37 UTC (rev 47873) @@ -153,7 +153,7 @@ EAPI void evry_history_load(void); EAPI void evry_history_unload(void); EAPI void evry_history_add(Eina_Hash *hist, Evry_State *s, const char *ctxt); -int evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input, const char *ctxt); +EAPI int evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input, const char *ctxt); EAPI int evry_browse_item(Evry_Selector *sel); void evry_browse_back(Evry_Selector *sel); Modified: trunk/e/src/modules/everything/evry_history.c =================================================================== --- trunk/e/src/modules/everything/evry_history.c 2010-04-09 13:45:25 UTC (rev 47872) +++ trunk/e/src/modules/everything/evry_history.c 2010-04-09 14:41:37 UTC (rev 47873) @@ -256,7 +256,7 @@ } } -int +EAPI int evry_history_item_usage_set(Eina_Hash *hist, Evry_Item *it, const char *input, const char *ctxt) { History_Entry *he; Modified: trunk/e/src/modules/everything/sources/evry_plug_apps.c =================================================================== --- trunk/e/src/modules/everything/sources/evry_plug_apps.c 2010-04-09 13:45:25 UTC (rev 47872) +++ trunk/e/src/modules/everything/sources/evry_plug_apps.c 2010-04-09 14:41:37 UTC (rev 47873) @@ -49,7 +49,6 @@ static void _hash_free(void *data) { ITEM_APP(app, data); - evry_item_free(EVRY_ITEM(app)); } @@ -64,7 +63,7 @@ if (!item) return 0; ITEM_FILE(file, item); - Efreet_Desktop *desktop; + Efreet_Desktop *d, *d2; if (!file->path) return NULL; @@ -85,19 +84,27 @@ Eina_List *tmp; tmp = efreet_util_desktop_mime_list("text/plain"); - EINA_LIST_FREE(tmp, desktop) + EINA_LIST_FREE(tmp, d) { - if (!eina_list_data_find_list(p->apps_mime, desktop)) - p->apps_mime = eina_list_append(p->apps_mime, desktop); + if (!eina_list_data_find_list(p->apps_mime, d)) + p->apps_mime = eina_list_append(p->apps_mime, d); else - efreet_desktop_free(desktop); + efreet_desktop_free(d); } } - desktop = e_exehist_mime_desktop_get(mime); - if (desktop) - p->apps_mime = eina_list_prepend(p->apps_mime, desktop); - + d = e_exehist_mime_desktop_get(mime); + if (d) + { + if (d2 = eina_list_data_find(p->apps_mime, d)) + { + p->apps_mime = eina_list_remove(p->apps_mime, d2); + efreet_desktop_free(d2); + } + + p->apps_mime = eina_list_prepend(p->apps_mime, d); + } + p->added = eina_hash_string_small_new(_hash_free); return plugin; @@ -217,7 +224,7 @@ Efreet_Desktop *d2; int already_refd = 0; char *exe; - + if (file) { Eina_List *l; @@ -357,41 +364,27 @@ { const Evry_Item *it1 = data1; const Evry_Item *it2 = data2; - const char *e1, *e2; - double t1, t2; - ITEM_APP(app1, it1); - ITEM_APP(app2, it2); - - if (app1->desktop) - e1 = app1->desktop->exec; - else - e1 = app1->file; - - if (app2->desktop) - e2 = app2->desktop->exec; - else - e2 = app2->file; - - t1 = e_exehist_newest_run_get(e1); - t2 = e_exehist_newest_run_get(e2); - - if (it1->fuzzy_match && !it2->fuzzy_match) + if (it1->usage && it2->usage) + return (it1->usage > it2->usage ? -1 : 1); + if (it1->usage && !it2->usage) return -1; - - if (!it1->fuzzy_match && it2->fuzzy_match) + if (it2->usage && !it1->usage) return 1; - t1 = t1 / (double)it1->fuzzy_match; - t2 = t2 / (double)it2->fuzzy_match; + if (it1->fuzzy_match || it2->fuzzy_match) + { + if (it1->fuzzy_match && !it2->fuzzy_match) + return -1; - if ((int)(t2 - t1)) - return (int)(t2 - t1); + if (!it1->fuzzy_match && it2->fuzzy_match) + return 1; - if (it1->fuzzy_match - it2->fuzzy_match) - return (it1->fuzzy_match - it2->fuzzy_match); - - else return 0; + if (it1->fuzzy_match - it2->fuzzy_match) + return (it1->fuzzy_match - it2->fuzzy_match); + } + + return 0; } static Eina_Bool @@ -403,12 +396,12 @@ Efreet_Desktop *d; Eina_List *l; Evry_Item_App *app; - + EINA_LIST_FOREACH(he->items, l, hi) { if (hi->plugin != p->base.name) continue; - + if ((d = efreet_util_desktop_exec_find(key))) { app = _item_add(p, d, NULL, 1); @@ -421,7 +414,11 @@ } if (app && app->desktop) - p->apps_hist = eina_list_append(p->apps_hist, app->desktop); + { + p->apps_hist = eina_list_append(p->apps_hist, app->desktop); + } + + if (app) break; } return EINA_TRUE; } @@ -511,12 +508,20 @@ if (!plugin->items) return 0; + if (plugin->type == type_action) + { + EINA_LIST_FOREACH(plugin->items, l, it) + evry_history_item_usage_set(evry_hist->actions, it, input, NULL); + } + else + { + EINA_LIST_FOREACH(plugin->items, l, it) + evry_history_item_usage_set(evry_hist->subjects, it, input, NULL); + } + if (plugin->type != type_action || input) EVRY_PLUGIN_ITEMS_SORT(plugin, _cb_sort); - EINA_LIST_FOREACH(plugin->items, l, it) - it->priority = prio++; - return 1; } |