From 249e926a61d1964e0ccc6f73772f5512d49851a5 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Fri, 28 May 2010 23:02:27 +0000 Subject: [PATCH] initial config dialog for collection suff mentioned in last commit msg SVN revision: 49263 --- src/modules/everything-apps/e_mod_main.c | 12 +- src/modules/everything-files/e_mod_main.c | 7 +- src/modules/everything-settings/e_mod_main.c | 154 +++++++++++++----- src/modules/everything-windows/e_mod_main.c | 15 +- src/modules/everything/e_mod_main.h | 1 + src/modules/everything/evry.c | 3 - src/modules/everything/evry_config.c | 102 ++++++------ src/modules/everything/evry_plug_collection.c | 26 ++- src/modules/everything/evry_plugin.c | 1 - src/modules/everything/evry_view.c | 3 + 10 files changed, 218 insertions(+), 106 deletions(-) diff --git a/src/modules/everything-apps/e_mod_main.c b/src/modules/everything-apps/e_mod_main.c index 9a1ccb3bc..a1b808c66 100644 --- a/src/modules/everything-apps/e_mod_main.c +++ b/src/modules/everything-apps/e_mod_main.c @@ -965,7 +965,8 @@ _plugins_init(const Evry_API *api) if (!evry->api_version_check(EVRY_API_VERSION)) return EINA_FALSE; - p = EVRY_PLUGIN_NEW(Plugin, N_("Applications"), NULL, EVRY_TYPE_APP, + p = EVRY_PLUGIN_NEW(Plugin, N_("Applications"), + "system-run", EVRY_TYPE_APP, _begin, _finish, _fetch, NULL); p->complete = &_complete; p->config_path = "extensions/everything-apps"; @@ -973,7 +974,8 @@ _plugins_init(const Evry_API *api) _plugins = eina_list_append(_plugins, p); - p = EVRY_PLUGIN_NEW(Plugin, N_("Exebuf"), NULL, EVRY_TYPE_APP, + p = EVRY_PLUGIN_NEW(Plugin, N_("Exebuf"), + "system-run", EVRY_TYPE_APP, _begin_exe, _finish_exe, _fetch_exe, NULL); p->complete = &_complete; p->config_path = "extensions/everything-apps"; @@ -981,14 +983,16 @@ _plugins_init(const Evry_API *api) if (evry->plugin_register(p, EVRY_PLUGIN_SUBJECT, 3)) p->config->min_query = 5; - p = EVRY_PLUGIN_NEW(Plugin, N_("Applications"), NULL, EVRY_TYPE_APP, + p = EVRY_PLUGIN_NEW(Plugin, N_("Applications"), + "system-run", EVRY_TYPE_APP, _begin_mime, _finish, _fetch, NULL); p->complete = &_complete; p->config_path = "extensions/everything-apps"; evry->plugin_register(p, EVRY_PLUGIN_OBJECT, 1); _plugins = eina_list_append(_plugins, p); - p = EVRY_PLUGIN_NEW(Plugin, N_("Open With..."), NULL, EVRY_TYPE_APP, + p = EVRY_PLUGIN_NEW(Plugin, N_("Open With..."), + "system-run", EVRY_TYPE_APP, _begin_mime, _finish_mime, _fetch_mime, NULL); p->config_path = "extensions/everything-apps"; evry->plugin_register(p, EVRY_PLUGIN_ACTION, 1); diff --git a/src/modules/everything-files/e_mod_main.c b/src/modules/everything-files/e_mod_main.c index 79128aefe..8a64c0792 100644 --- a/src/modules/everything-files/e_mod_main.c +++ b/src/modules/everything-files/e_mod_main.c @@ -649,8 +649,8 @@ _begin(Evry_Plugin *plugin, const Evry_Item *it) { /* provide subject */ EVRY_PLUGIN_INSTANCE(p, plugin); - p->min_query = plugin->config->min_query; - + p->parent = EINA_FALSE; + if (_conf->show_homedir) p->directory = eina_stringshare_add(e_user_homedir_get()); @@ -823,6 +823,9 @@ _fetch(Evry_Plugin *plugin, const char *input) if (input && !p->command) p->input = eina_stringshare_add(input); + if (!p->parent) + p->min_query = plugin->config->min_query; + if ((p->command) || (!p->min_query) || (len >= p->min_query)) _append_files(p); diff --git a/src/modules/everything-settings/e_mod_main.c b/src/modules/everything-settings/e_mod_main.c index 6221e68fa..2e91a4d01 100644 --- a/src/modules/everything-settings/e_mod_main.c +++ b/src/modules/everything-settings/e_mod_main.c @@ -6,8 +6,16 @@ #include "e_mod_main.h" #include "evry_api.h" +typedef struct _Plugin Plugin; typedef struct _Settings_Item Settings_Item; +struct _Plugin +{ + Evry_Plugin base; + Eina_List *items; + Eina_List *categories; +}; + struct _Settings_Item { Evry_Item base; @@ -16,22 +24,27 @@ struct _Settings_Item E_Configure_It *eci; }; - static const Evry_API *evry = NULL; static Evry_Module *evry_module = NULL; static Evry_Plugin *p; static Evry_Action *act; -static Eina_List *items = NULL; +static Evry_Type E_SETTINGS; static void -_finish(Evry_Plugin *p) +_finish(Evry_Plugin *plugin) { - Evry_Item *it; - + Settings_Item *it; + GET_PLUGIN(p, plugin); + EVRY_PLUGIN_ITEMS_CLEAR(p); - EINA_LIST_FREE(items, it) - evry->item_free(it); + EINA_LIST_FREE(p->items, it) + EVRY_ITEM_FREE(it); + + EINA_LIST_FREE(p->categories, it) + EVRY_ITEM_FREE(it); + + E_FREE(p); } static Evas_Object * @@ -40,50 +53,110 @@ _icon_get(Evry_Item *item, Evas *e) Evas_Object *o; Settings_Item *it = (Settings_Item *) item; - if (it->eci->icon && + if (it->eci && it->eci->icon && ((o = evry->icon_theme_get(it->eci->icon, e)) || (o = e_util_icon_add(it->eci->icon, e)))) return o; + if (it->ecat->icon && + ((o = evry->icon_theme_get(it->ecat->icon, e)) || + (o = e_util_icon_add(it->ecat->icon, e)))) + return o; + return NULL; } static Evry_Plugin * -_begin(Evry_Plugin *p, const Evry_Item *item __UNUSED__) +_browse(Evry_Plugin *plugin, const Evry_Item *item) { - Settings_Item *it; - Eina_List *l, *ll; - E_Configure_Cat *ecat; - E_Configure_It *eci; + Plugin *p; + Eina_List *l; + Settings_Item *it, *it2; - EINA_LIST_FOREACH(e_configure_registry, l, ecat) - { - if ((ecat->pri < 0) || (!ecat->items)) continue; - if (!strcmp(ecat->cat, "system")) continue; + if (!CHECK_TYPE(item, E_SETTINGS)) + return NULL; - EINA_LIST_FOREACH(ecat->items, ll, eci) - { - if (eci->pri < 0) continue; - - it = EVRY_ITEM_NEW(Settings_Item, p, eci->label, _icon_get, NULL); - it->eci = eci; - it->ecat = ecat; - EVRY_ITEM_DETAIL_SET(it, ecat->label); + it = (Settings_Item *) item; + + EVRY_PLUGIN_INSTANCE(p, plugin); - items = eina_list_append(items, it); + GET_PLUGIN(parent, item->plugin); + + EINA_LIST_FOREACH(parent->items, l, it2) + { + if (it2->ecat == it->ecat) + { + EVRY_ITEM_REF(it2); + p->items = eina_list_append(p->items, it2); } } - return p; + + return EVRY_PLUGIN(p); +} + +static Evry_Plugin * +_begin(Evry_Plugin *plugin, const Evry_Item *item __UNUSED__) +{ + Plugin *p; + + EVRY_PLUGIN_INSTANCE(p, plugin); + + return EVRY_PLUGIN(p); } static int -_fetch(Evry_Plugin *p, const char *input) +_fetch(Evry_Plugin *plugin, const char *input) { - EVRY_PLUGIN_ITEMS_CLEAR(p); - - if (!input) return 0; + int len = input ? strlen(input) : 0; - return EVRY_PLUGIN_ITEMS_ADD(p, items, input, 1, 1); + GET_PLUGIN(p, plugin); + + EVRY_PLUGIN_ITEMS_CLEAR(p); + + if (len < plugin->config->min_query) + return 0; + + if (!p->categories && !p->items) + { + Settings_Item *it; + Eina_List *l, *ll; + E_Configure_Cat *ecat; + E_Configure_It *eci; + + EINA_LIST_FOREACH(e_configure_registry, l, ecat) + { + if ((ecat->pri < 0) || (!ecat->items)) continue; + if (!strcmp(ecat->cat, "system")) continue; + + it = EVRY_ITEM_NEW(Settings_Item, p, ecat->label, _icon_get, NULL); + it->ecat = ecat; + EVRY_ITEM(it)->browseable = EINA_TRUE; + p->categories = eina_list_append(p->categories, it); + + EINA_LIST_FOREACH(ecat->items, ll, eci) + { + if (eci->pri < 0) continue; + + it = EVRY_ITEM_NEW(Settings_Item, p, eci->label, _icon_get, NULL); + it->eci = eci; + it->ecat = ecat; + EVRY_ITEM_DETAIL_SET(it, ecat->label); + + p->items = eina_list_append(p->items, it); + } + } + } + + EVRY_PLUGIN_ITEMS_ADD(p, p->categories, input, 1, 1); + + if (input || !p->categories) + return EVRY_PLUGIN_ITEMS_ADD(p, p->items, input, 1, 1); +} + +static int +_action_check(Evry_Action *act, const Evry_Item *item) +{ + return !!(((Settings_Item*)item)->eci); } static int @@ -112,16 +185,19 @@ _plugins_init(const Evry_API *_api) if (!evry->api_version_check(EVRY_API_VERSION)) return EINA_FALSE; - p = EVRY_PLUGIN_NEW(Evry_Plugin, N_("Settings"), "preferences-desktop", - evry->type_register("E_SETTINGS"), + E_SETTINGS = evry->type_register("E_SETTINGS"); + + p = EVRY_PLUGIN_NEW(Evry_Plugin, N_("Settings"), + "preferences-desktop", E_SETTINGS, _begin, _finish, _fetch, NULL); - + p->browse = &_browse; evry->plugin_register(p, EVRY_PLUGIN_SUBJECT, 10); - act = EVRY_ACTION_NEW(N_("Show Dialog"), - evry->type_register("E_SETTINGS"), 0, - "preferences-advanced", _action, NULL); + act = EVRY_ACTION_NEW(N_("Show Dialog"), E_SETTINGS, 0, + "preferences-advanced", _action, _action_check); + /* p->actions = eina_list_append(p->actions, act); */ + evry->action_register(act, 0); return EINA_TRUE; @@ -134,7 +210,7 @@ _plugins_shutdown(void) EVRY_PLUGIN_FREE(p); - evry->action_free(act); + EVRY_ACTION_FREE(act); evry_module->active = EINA_FALSE; } diff --git a/src/modules/everything-windows/e_mod_main.c b/src/modules/everything-windows/e_mod_main.c index 1c09f8635..7722954d2 100644 --- a/src/modules/everything-windows/e_mod_main.c +++ b/src/modules/everything-windows/e_mod_main.c @@ -131,8 +131,17 @@ _get_borderlist(Plugin *p) _border_item_add(p, bd); } +static Evry_Plugin * +_begin(Evry_Plugin *plugin, const Evry_Item *item __UNUSED__) +{ + Plugin *p; + EVRY_PLUGIN_INSTANCE(p, plugin); + + return EVRY_PLUGIN(p); +} + static void -_cleanup(Evry_Plugin *plugin) +_finish(Evry_Plugin *plugin) { Ecore_Event_Handler *h; Border_Item *bi; @@ -148,6 +157,8 @@ _cleanup(Evry_Plugin *plugin) EINA_LIST_FREE(p->handlers, h) ecore_event_handler_del(h); + + E_FREE(p); } static int @@ -402,7 +413,7 @@ _plugins_init(const Evry_API *_api) _plug = EVRY_PLUGIN_NEW(Plugin, N_("Windows"), "preferences-system-windows", EVRY_TYPE_BORDER, - NULL, _cleanup, _fetch, NULL); + _begin, _finish, _fetch, NULL); _plug->transient = EINA_TRUE; if (evry->plugin_register(_plug, EVRY_PLUGIN_SUBJECT, 2)) { diff --git a/src/modules/everything/e_mod_main.h b/src/modules/everything/e_mod_main.h index 842c79336..50349abbf 100644 --- a/src/modules/everything/e_mod_main.h +++ b/src/modules/everything/e_mod_main.h @@ -374,6 +374,7 @@ EAPI void *e_modapi_init (E_Module *m); EAPI int e_modapi_shutdown (E_Module *m); EAPI int e_modapi_save (E_Module *m); EAPI E_Config_Dialog *evry_config_dialog(E_Container *con, const char *params); +EAPI E_Config_Dialog *evry_collection_conf_dialog(E_Container *con, const char *params); EAPI extern E_Module_Api e_modapi; diff --git a/src/modules/everything/evry.c b/src/modules/everything/evry.c index f0ada2bbe..69a81bb25 100644 --- a/src/modules/everything/evry.c +++ b/src/modules/everything/evry.c @@ -1714,8 +1714,6 @@ evry_browse_item(Evry_Item *it) { if ((p->browse) && (pp = p->browse(p, it))) { - printf("append %s\n", pp->name); - plugins = eina_list_append(plugins, pp); } } @@ -1724,7 +1722,6 @@ evry_browse_item(Evry_Item *it) if ((!(plugins) && (it->plugin->browse)) && (pp = it->plugin->browse(it->plugin, it))) { - printf("append 2%s\n", pp->name); plugins = eina_list_append(plugins, pp); } diff --git a/src/modules/everything/evry_config.c b/src/modules/everything/evry_config.c index ed1be595b..61c0cdf52 100644 --- a/src/modules/everything/evry_config.c +++ b/src/modules/everything/evry_config.c @@ -33,6 +33,8 @@ struct _Plugin_Page int enabled; int min_query; Plugin_Config *cur; + + Eina_Bool collection; }; struct _E_Config_Dialog_Data @@ -228,30 +230,31 @@ _fill_list(Eina_List *plugins, Evas_Object *obj, int enabled __UNUSED__) } static void -_plugin_move(Eina_List *plugins, Evas_Object *list, int dir) +_plugin_move(Plugin_Page *page, int dir) { + Evas_Object *list; int sel; - Eina_List *l1, *l2; + Eina_List *plugins, *l1, *l2; - sel = e_widget_ilist_selected_get(list); + sel = e_widget_ilist_selected_get(page->list); - if ((sel >= 1 && dir > 0) || (sel >= 2 && dir < 0)) + if ((page->collection) || (sel >= 1 && dir > 0) || (sel >= 2 && dir < 0)) { Plugin_Config *pc; int prio = 0; - l1 = eina_list_nth_list(plugins, sel); - l2 = eina_list_nth_list(plugins, sel + dir); + l1 = eina_list_nth_list(page->configs, sel); + l2 = eina_list_nth_list(page->configs, sel + dir); if (!l1 || !l2) return; pc = l1->data; l1->data = l2->data; l2->data = pc; - _fill_list(plugins, list, 0); - e_widget_ilist_selected_set(list, sel + dir); + _fill_list(page->configs, page->list, 0); + e_widget_ilist_selected_set(page->list, sel + dir); - EINA_LIST_FOREACH(plugins, l1, pc) + EINA_LIST_FOREACH(page->configs, l1, pc) pc->priority = prio++; } } @@ -259,13 +262,13 @@ _plugin_move(Eina_List *plugins, Evas_Object *list, int dir) static void _plugin_move_up_cb(void *data, void *data2) { - _plugin_move(data2, data, -1); + _plugin_move(data, -1); } static void _plugin_move_down_cb(void *data, void *data2) { - _plugin_move(data2, data, 1); + _plugin_move(data, 1); } static void @@ -340,12 +343,14 @@ static void _plugin_config_cb(void *data, void *data2) { Plugin_Page *page = data; - if (!page->cur->plugin) - return; + Evry_Plugin *p = page->cur->plugin; + + if (!p) return; + printf(" %s\n", p->name); - e_configure_registry_call(page->cur->plugin->config_path, + e_configure_registry_call(p->config_path, e_container_current_get(e_manager_current_get()), - NULL); + p->name); } static Evas_Object * @@ -362,12 +367,12 @@ _create_plugin_page(E_Config_Dialog_Data *cfdata, Evas *e, Plugin_Page *page) o = e_widget_button_add(e, _("Move Up"), NULL, _plugin_move_up_cb, - page->list, page->configs); + page, NULL); e_widget_framelist_object_append(of, o); o = e_widget_button_add(e, _("Move Down"), NULL, _plugin_move_down_cb, - page->list, page->configs); + page, NULL); e_widget_framelist_object_append(of, o); ob = e_widget_table_add(e, 0); e_widget_table_object_append(ob, of, 0, 0, 1, 3, 1, 1, 1, 0); @@ -597,36 +602,40 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *e, E_Config_Dialog_Data *cfdat /***************************************************************************/ -#if 0 static void *_cat_create_data(E_Config_Dialog *cfd); static void _cat_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static Evas_Object *_cat_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); static int _cat_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); -static E_Config_Dialog * -evry_categories_conf_dialog(E_Container *con, const char *params) +EAPI E_Config_Dialog * +evry_collection_conf_dialog(E_Container *con, const char *params) { E_Config_Dialog *cfd = NULL; E_Config_Dialog_View *v = NULL; - char buf[4096]; + Evry_Plugin *p; + char title[4096]; - if (e_config_dialog_find(_config_path, _config_path)) + if (!(p = evry_plugin_find(params))) + return NULL; + + if (e_config_dialog_find(p->config_path, p->config_path)) return NULL; v = E_NEW(E_Config_Dialog_View, 1); if (!v) return NULL; - v->create_cfdata = _create_data; - v->free_cfdata = _free_data; - v->basic.create_widgets = _basic_create_widgets; - v->basic.apply_cfdata = _basic_apply; + v->create_cfdata = _cat_create_data; + v->free_cfdata = _cat_free_data; + v->basic.create_widgets = _cat_basic_create_widgets; + v->basic.apply_cfdata = _cat_basic_apply; - snprintf(buf, sizeof(buf), "%s/e-module.edj", _conf->module->dir); + snprintf(title, sizeof(title), "%s: %s", _("Everything Collection"), p->name); + + cfd = e_config_dialog_new(con, title, p->config_path, p->config_path, + EVRY_ITEM(p)->icon, 0, v, p); - cfd = e_config_dialog_new(con, _("Everything Categories"), - _config_path, _config_path, buf, 0, v, NULL); - - _conf->cfd = cfd; + /* FIXME free dialogs on shutdown + _conf->cfd = cfd; */ return cfd; } @@ -634,15 +643,11 @@ static void * _cat_create_data(E_Config_Dialog *cfd) { E_Config_Dialog_Data *cfdata = NULL; + Evry_Plugin *p = cfd->data; + cfdata = E_NEW(E_Config_Dialog_Data, 1); - - cfdata->page[0].configs = eina_list_clone(_conf->plugins); - - /* #define CP(_name) cfdata->_name = strdup(_conf->_name); - * #define C(_name) cfdata->_name = _conf->_name; - * - * #undef CP - * #undef C */ + cfdata->page[0].collection = EINA_TRUE; + cfdata->page[0].configs = eina_list_clone(p->config->plugins); return cfdata; } @@ -651,7 +656,7 @@ _cat_free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { if (cfdata->page[0].configs) eina_list_free(cfdata->page[0].configs); - _conf->cfd = NULL; + /* _conf->cfd = NULL; */ E_FREE(cfdata); } @@ -660,8 +665,12 @@ _cat_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { int i = 0; Plugin_Config *pc; + Evry_Plugin *p = cfd->data; - _conf->plugins = eina_list_clone(cfdata->page[0].configs); + if (p->config->plugins) + eina_list_free(p->config->plugins); + + p->config->plugins = eina_list_clone(cfdata->page[0].configs); pc = cfdata->page[i].cur; @@ -683,16 +692,6 @@ _cat_basic_apply(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) pc->min_query = cfdata->page[i].min_query; } - /* #define CP(_name) \ - * if (_conf->_name) \ - * eina_stringshare_del(_conf->_name); \ - * _conf->_name = eina_stringshare_add(cfdata->_name); - * #define C(_name) _conf->_name = cfdata->_name; - * - * #undef CP - * #undef C */ - - e_config_domain_save(_config_domain, _conf_edd, _conf); e_config_save_queue(); return 1; } @@ -738,4 +737,3 @@ _cat_basic_create_widgets(E_Config_Dialog *cfd, Evas *e, E_Config_Dialog_Data *c return otb; } -#endif diff --git a/src/modules/everything/evry_plug_collection.c b/src/modules/everything/evry_plug_collection.c index a9ea37680..6ffeb2188 100644 --- a/src/modules/everything/evry_plug_collection.c +++ b/src/modules/everything/evry_plug_collection.c @@ -50,8 +50,8 @@ _begin(Evry_Plugin *plugin, const Evry_Item *item) Evry_Plugin *pp; Plugin_Config *pc; Evry_Item *it; - Plugin *p; Eina_List *l; + Plugin *p; EVRY_PLUGIN_INSTANCE(p, plugin); @@ -103,9 +103,14 @@ evry_plug_collection_init(void) Evry_Plugin *p; Plugin_Config *pc, *pcc; Eina_List *l; + char path[4096]; + char title[4096]; COLLECTION_PLUGIN = evry_type_register("COLLECTION_PLUGIN"); + e_configure_registry_category_add + ("extensions", 80, _("Extensions"), NULL, "preferences-extensions"); + EINA_LIST_FOREACH(evry_conf->collections, l, pc) { p = EVRY_PLUGIN_NEW(Evry_Plugin, N_(pc->name), @@ -118,6 +123,16 @@ evry_plug_collection_init(void) { p->config->aggregate = EINA_FALSE; } + + snprintf(path, sizeof(path), "extensions/everything-%s", p->name); + + snprintf(title, sizeof(title), "Everything %s", p->name); + + e_configure_registry_item_add + (path, 110, title, NULL, NULL/*icon*/, evry_collection_conf_dialog); + + p->config_path = eina_stringshare_add(path); + plugins = eina_list_append(plugins, p); } @@ -128,7 +143,12 @@ void evry_plug_collection_shutdown(void) { Evry_Plugin *p; - + EINA_LIST_FREE(plugins, p) - EVRY_PLUGIN_FREE(p); + { + e_configure_registry_item_del(p->config_path); + eina_stringshare_del(p->config_path); + EVRY_PLUGIN_FREE(p); + } + } diff --git a/src/modules/everything/evry_plugin.c b/src/modules/everything/evry_plugin.c index d07e848b9..94d9db55e 100644 --- a/src/modules/everything/evry_plugin.c +++ b/src/modules/everything/evry_plugin.c @@ -226,7 +226,6 @@ evry_plugin_find(const char *name) EINA_LIST_FOREACH(evry_conf->conf_subjects, l, pc) { - if (!pc->enabled) continue; if (!pc->plugin) continue; if (pc->name == n) break; diff --git a/src/modules/everything/evry_view.c b/src/modules/everything/evry_view.c index 05bdecfff..458a51d1b 100644 --- a/src/modules/everything/evry_view.c +++ b/src/modules/everything/evry_view.c @@ -983,6 +983,9 @@ _view_update(Evry_View *view) } else { + if (v_it->selected && v_it->frame) + edje_object_signal_emit + (v_it->frame,"e,state,unselected", "e"); v_it->selected = EINA_FALSE; } break;