Enlightenment CVS committal Author : devilhorns Project : e_modules Module : slideshow
Dir : e_modules/slideshow Modified Files: e_mod_main.h e_mod_main.c e_mod_config.c Log Message: Modified patch from Joao Vale: -Searches for backgrounds in specified directory and all sub-dirs. -Optionally randomize the order of backgrounds. =================================================================== RCS file: /cvs/e/e_modules/slideshow/e_mod_main.h,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- e_mod_main.h 6 Jun 2006 15:31:43 -0000 1.17 +++ e_mod_main.h 28 Jul 2006 00:02:17 -0000 1.18 @@ -20,6 +20,7 @@ const char *id; int disable_timer; + int random_order; double poll_time; const char *dir; }; =================================================================== RCS file: /cvs/e/e_modules/slideshow/e_mod_main.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -3 -r1.34 -r1.35 --- e_mod_main.c 18 Jul 2006 00:01:37 -0000 1.34 +++ e_mod_main.c 28 Jul 2006 00:02:17 -0000 1.35 @@ -8,509 +8,556 @@ struct _Instance { - E_Gadcon_Client *gcc; - Evas_Object *slide_obj; - Slideshow *slide; - Ecore_Timer *check_timer; - Ecore_List *bg_list; - const char *display; - int index, bg_id, bg_count; + E_Gadcon_Client *gcc; + Evas_Object *slide_obj; + Slideshow *slide; + Ecore_Timer *check_timer; + Ecore_List *bg_list; + const char *display; + + int index, bg_id, bg_count; }; struct _Slideshow { - Instance *inst; - Evas_Object *slide_obj; - Evas_Object *bg_obj; - Evas_Object *img_obj; + Instance *inst; + Evas_Object *slide_obj; + Evas_Object *bg_obj; + Evas_Object *img_obj; }; -static E_Gadcon_Client *_gc_init (E_Gadcon * gc, const char *name, - const char *id, const char *style); -static void _gc_shutdown (E_Gadcon_Client * gcc); -static void _gc_orient (E_Gadcon_Client * gcc); -static char *_gc_label (void); -static Evas_Object *_gc_icon (Evas * evas); - -static void _slide_cb_mouse_down (void *data, Evas * e, Evas_Object * obj, - void *event_info); -static void _slide_menu_cb_configure (void *data, E_Menu * m, - E_Menu_Item * mi); -static void _slide_menu_cb_post (void *data, E_Menu * m); -static Config_Item *_slide_config_item_get (const char *id); -static Slideshow *_slide_new (Evas * evas); -static void _slide_free (Slideshow * ss); -static int _slide_cb_check (void *data); -static void _slide_get_bg_count (void *data); -static void _slide_set_bg (void *data, const char *bg); -static void _slide_set_preview (void *data); +static E_Gadcon_Client *_gc_init (E_Gadcon *gc, const char *name, const char *id, const char *style); +static void _gc_shutdown (E_Gadcon_Client *gcc); +static void _gc_orient (E_Gadcon_Client *gcc); +static char *_gc_label (void); +static Evas_Object *_gc_icon (Evas *evas); + +static void _slide_cb_mouse_down (void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _slide_menu_cb_configure (void *data, E_Menu *m, E_Menu_Item *mi); +static void _slide_menu_cb_post (void *data, E_Menu *m); +static Config_Item *_slide_config_item_get (const char *id); +static Slideshow *_slide_new (Evas *evas); +static void _slide_free (Slideshow *ss); +static int _slide_cb_check (void *data); +static void _slide_get_bg_count (void *data); +static void _slide_set_bg (void *data, const char *bg); +static void _slide_set_preview (void *data); +static void _slide_get_bg_subdirs (void *data, char *localPath); static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_item_edd = NULL; Config *slide_config = NULL; -static const E_Gadcon_Client_Class _gc_class = { - GADCON_CLIENT_CLASS_VERSION, - "slideshow", {_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon} +static const E_Gadcon_Client_Class _gc_class = +{ + GADCON_CLIENT_CLASS_VERSION, + "slideshow", {_gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon} }; static E_Gadcon_Client * -_gc_init (E_Gadcon * gc, const char *name, const char *id, const char *style) +_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) { - Evas_Object *o; - E_Gadcon_Client *gcc; - Instance *inst; - Config_Item *ci; - Slideshow *slide; - - inst = E_NEW (Instance, 1); - - ci = _slide_config_item_get (id); - if (!ci->id) - ci->id = evas_stringshare_add (id); - - slide = _slide_new (gc->evas); - slide->inst = inst; - inst->slide = slide; - - o = slide->slide_obj; - gcc = e_gadcon_client_new (gc, name, id, style, o); - gcc->data = inst; - inst->gcc = gcc; - inst->slide_obj = o; - - evas_object_event_callback_add (o, EVAS_CALLBACK_MOUSE_DOWN, - _slide_cb_mouse_down, inst); - slide_config->instances = evas_list_append (slide_config->instances, inst); - - if (!ci->disable_timer) - inst->check_timer = - ecore_timer_add (ci->poll_time, _slide_cb_check, inst); - else - { - _slide_get_bg_count (inst); - inst->index = 0; - _slide_set_preview (inst); - } - return gcc; + Evas_Object *o; + E_Gadcon_Client *gcc; + Instance *inst; + Config_Item *ci; + Slideshow *slide; + + inst = E_NEW(Instance, 1); + + ci = _slide_config_item_get(id); + if (!ci->id) + ci->id = evas_stringshare_add(id); + + slide = _slide_new(gc->evas); + slide->inst = inst; + inst->slide = slide; + + o = slide->slide_obj; + gcc = e_gadcon_client_new(gc, name, id, style, o); + gcc->data = inst; + inst->gcc = gcc; + inst->slide_obj = o; + + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _slide_cb_mouse_down, inst); + slide_config->instances = evas_list_append(slide_config->instances, inst); + + if (!ci->disable_timer) + inst->check_timer = + ecore_timer_add(ci->poll_time, _slide_cb_check, inst); + else + { + _slide_get_bg_count(inst); + if(ci->random_order) + { + srand(time(NULL)); + inst->index = (rand() % (inst->bg_count+1)); + } + else + inst->index = 0; + + _slide_set_preview(inst); + } + return gcc; } static void -_gc_shutdown (E_Gadcon_Client * gcc) +_gc_shutdown(E_Gadcon_Client *gcc) { - Instance *inst; - Slideshow *slide; + Instance *inst; + Slideshow *slide; - inst = gcc->data; - slide = inst->slide; + inst = gcc->data; + slide = inst->slide; - if (inst->bg_list) - ecore_list_destroy (inst->bg_list); - if (inst->display) - evas_stringshare_del (inst->display); - if (inst->check_timer) - ecore_timer_del (inst->check_timer); + if (inst->bg_list) + ecore_list_destroy(inst->bg_list); + if (inst->display) + evas_stringshare_del(inst->display); + if (inst->check_timer) + ecore_timer_del(inst->check_timer); - slide_config->instances = evas_list_remove (slide_config->instances, inst); + slide_config->instances = evas_list_remove(slide_config->instances, inst); - evas_object_event_callback_del (slide->slide_obj, EVAS_CALLBACK_MOUSE_DOWN, - _slide_cb_mouse_down); + evas_object_event_callback_del(slide->slide_obj, EVAS_CALLBACK_MOUSE_DOWN, _slide_cb_mouse_down); - _slide_free (slide); - free (inst); + _slide_free(slide); + E_FREE(inst); } static void -_gc_orient (E_Gadcon_Client * gcc) +_gc_orient(E_Gadcon_Client *gcc) { - e_gadcon_client_aspect_set (gcc, 16, 16); - e_gadcon_client_min_size_set (gcc, 16, 16); + e_gadcon_client_aspect_set(gcc, 16, 16); + e_gadcon_client_min_size_set(gcc, 16, 16); } static char * -_gc_label (void) +_gc_label(void) { - return D_ ("Slideshow"); + return D_ ("Slideshow"); } static Evas_Object * -_gc_icon (Evas * evas) +_gc_icon(Evas *evas) { - Evas_Object *o; - char buf[4096]; + Evas_Object *o; + char buf[4096]; - o = edje_object_add (evas); - snprintf (buf, sizeof (buf), "%s/module.eap", - e_module_dir_get (slide_config->module)); - edje_object_file_set (o, buf, "icon"); - return o; + o = edje_object_add(evas); + snprintf(buf, sizeof (buf), "%s/module.eap", e_module_dir_get (slide_config->module)); + edje_object_file_set(o, buf, "icon"); + return o; } static void -_slide_cb_mouse_down (void *data, Evas * e, Evas_Object * obj, - void *event_info) +_slide_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { - Instance *inst; - Evas_Event_Mouse_Down *ev; + Instance *inst; + Evas_Event_Mouse_Down *ev; - inst = data; - ev = event_info; - if ((ev->button == 3) && (!slide_config->menu)) - { - E_Menu *mn; - E_Menu_Item *mi; - int x, y, w, h; - - mn = e_menu_new (); - e_menu_post_deactivate_callback_set (mn, _slide_menu_cb_post, inst); - slide_config->menu = mn; - - mi = e_menu_item_new (mn); - e_menu_item_label_set (mi, _("Configuration")); - e_util_menu_item_edje_icon_set (mi, "enlightenment/configuration"); - e_menu_item_callback_set (mi, _slide_menu_cb_configure, inst); - - mi = e_menu_item_new (mn); - e_menu_item_separator_set (mi, 1); - - e_gadcon_client_util_menu_items_append (inst->gcc, mn, 0); - e_gadcon_canvas_zone_geometry_get (inst->gcc->gadcon, &x, &y, &w, &h); - e_menu_activate_mouse (mn, - e_util_zone_current_get (e_manager_current_get - ()), x + ev->output.x, - y + ev->output.y, 1, 1, - E_MENU_POP_DIRECTION_DOWN, ev->timestamp); - evas_event_feed_mouse_up (inst->gcc->gadcon->evas, ev->button, - EVAS_BUTTON_NONE, ev->timestamp, NULL); - } - else if (ev->button == 2) - { - Config_Item *ci; - - ci = _slide_config_item_get (inst->gcc->id); - if (ci->disable_timer) - return; - if (inst->check_timer) - ecore_timer_del (inst->check_timer); - else - inst->check_timer = - ecore_timer_add (ci->poll_time, _slide_cb_check, inst); - } - else if (ev->button == 1) - _slide_cb_check (inst); + inst = data; + ev = event_info; + if ((ev->button == 3) && (!slide_config->menu)) + { + E_Menu *mn; + E_Menu_Item *mi; + int x, y, w, h; + + mn = e_menu_new(); + e_menu_post_deactivate_callback_set(mn, _slide_menu_cb_post, inst); + slide_config->menu = mn; + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, D_("Configuration")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/configuration"); + e_menu_item_callback_set(mi, _slide_menu_cb_configure, inst); + + mi = e_menu_item_new(mn); + e_menu_item_separator_set(mi, 1); + + e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0); + e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &x, &y, &w, &h); + e_menu_activate_mouse(mn, + e_util_zone_current_get(e_manager_current_get()), + x + ev->output.x, y + ev->output.y, 1, 1, + E_MENU_POP_DIRECTION_DOWN, ev->timestamp); + evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, + EVAS_BUTTON_NONE, ev->timestamp, NULL); + } + else if (ev->button == 2) + { + Config_Item *ci; + + ci = _slide_config_item_get(inst->gcc->id); + if (ci->disable_timer) + return; + if (inst->check_timer) + ecore_timer_del(inst->check_timer); + else + inst->check_timer = ecore_timer_add(ci->poll_time, _slide_cb_check, inst); + } + else if (ev->button == 1) + _slide_cb_check(inst); } static void -_slide_menu_cb_post (void *data, E_Menu * m) +_slide_menu_cb_post(void *data, E_Menu *m) { - if (!slide_config->menu) - return; - e_object_del (E_OBJECT (slide_config->menu)); - slide_config->menu = NULL; + if (!slide_config->menu) + return; + e_object_del(E_OBJECT(slide_config->menu)); + slide_config->menu = NULL; } static void -_slide_menu_cb_configure (void *data, E_Menu * m, E_Menu_Item * mi) +_slide_menu_cb_configure(void *data, E_Menu *m, E_Menu_Item *mi) { - Instance *inst; - Config_Item *ci; + Instance *inst; + Config_Item *ci; - inst = data; - ci = _slide_config_item_get (inst->gcc->id); - _config_slideshow_module (ci); + inst = data; + ci = _slide_config_item_get(inst->gcc->id); + _config_slideshow_module(ci); } void -_slide_config_updated (const char *id) +_slide_config_updated(const char *id) { - Evas_List *l; - Config_Item *ci; + Evas_List *l; + Config_Item *ci; - if (!slide_config) - return; - ci = _slide_config_item_get (id); - for (l = slide_config->instances; l; l = l->next) - { - Instance *inst; - - inst = l->data; - if (!inst->gcc->id) - continue; - if (!strcmp (inst->gcc->id, ci->id)) - { - if (inst->check_timer) - ecore_timer_del (inst->check_timer); - if ((ci->disable_timer) || (ci->poll_time == 0)) - break; - inst->check_timer = - ecore_timer_add (ci->poll_time, _slide_cb_check, inst); - break; - } - } + if (!slide_config) + return; + ci = _slide_config_item_get(id); + for (l = slide_config->instances; l; l = l->next) + { + Instance *inst; + + inst = l->data; + if (!inst->gcc->id) + continue; + if (!strcmp(inst->gcc->id, ci->id)) + { + if (inst->check_timer) + ecore_timer_del(inst->check_timer); + if ((ci->disable_timer) || (ci->poll_time == 0)) + break; + inst->check_timer = ecore_timer_add(ci->poll_time, _slide_cb_check, inst); + break; + } + } } static Config_Item * -_slide_config_item_get (const char *id) +_slide_config_item_get(const char *id) +{ + Evas_List *l; + Config_Item *ci; + char buf[4096]; + + for (l = slide_config->items; l; l = l->next) + { + ci = l->data; + if (!ci->id) continue; + if (!strcmp(ci->id, id)) return ci; + } + + snprintf(buf, sizeof (buf), "%s/.e/e/backgrounds", e_user_homedir_get()); + + ci = E_NEW(Config_Item, 1); + ci->id = evas_stringshare_add(id); + ci->poll_time = 60.0; + ci->disable_timer = 0; + ci->dir = evas_stringshare_add(buf); + + slide_config->items = evas_list_append(slide_config->items, ci); + return ci; +} + +EAPI E_Module_Api e_modapi = { - Evas_List *l; - Config_Item *ci; - char buf[4096]; - - for (l = slide_config->items; l; l = l->next) - { - ci = l->data; - if (!ci->id) - continue; - if (!strcmp (ci->id, id)) - return ci; - } - - snprintf (buf, sizeof (buf), "%s/.e/e/backgrounds", e_user_homedir_get ()); - - ci = E_NEW (Config_Item, 1); - ci->id = evas_stringshare_add (id); - ci->poll_time = 60.0; - ci->disable_timer = 0; - ci->dir = evas_stringshare_add (buf); - - slide_config->items = evas_list_append (slide_config->items, ci); - return ci; -} - -EAPI E_Module_Api e_modapi = { - E_MODULE_API_VERSION, - "Slideshow" + E_MODULE_API_VERSION, "Slideshow" }; EAPI void * -e_modapi_init (E_Module * m) +e_modapi_init(E_Module *m) { - bindtextdomain (PACKAGE, LOCALEDIR); - bind_textdomain_codeset (PACKAGE, "UTF-8"); + bindtextdomain(PACKAGE, LOCALEDIR); + bind_textdomain_codeset(PACKAGE, "UTF-8"); - conf_item_edd = E_CONFIG_DD_NEW ("Slideshow_Config_Item", Config_Item); + conf_item_edd = E_CONFIG_DD_NEW("Slideshow_Config_Item", Config_Item); #undef T #undef D #define T Config_Item #define D conf_item_edd - E_CONFIG_VAL (D, T, id, STR); - E_CONFIG_VAL (D, T, dir, STR); - E_CONFIG_VAL (D, T, poll_time, DOUBLE); - E_CONFIG_VAL (D, T, disable_timer, INT); + E_CONFIG_VAL(D, T, id, STR); + E_CONFIG_VAL(D, T, dir, STR); + E_CONFIG_VAL(D, T, poll_time, DOUBLE); + E_CONFIG_VAL(D, T, disable_timer, INT); + E_CONFIG_VAL(D, T, random_order, INT); - conf_edd = E_CONFIG_DD_NEW ("Slideshow_Config", Config); + conf_edd = E_CONFIG_DD_NEW("Slideshow_Config", Config); #undef T #undef D #define T Config #define D conf_edd - E_CONFIG_LIST (D, T, items, conf_item_edd); + E_CONFIG_LIST(D, T, items, conf_item_edd); - slide_config = e_config_domain_load ("module.slideshow", conf_edd); - if (!slide_config) - { - Config_Item *ci; - char buf[4096]; - - snprintf (buf, sizeof (buf), "%s/.e/e/backgrounds", - e_user_homedir_get ()); - slide_config = E_NEW (Config, 1); - ci = E_NEW (Config_Item, 1); - - ci->id = evas_stringshare_add ("0"); - ci->dir = evas_stringshare_add (buf); - ci->poll_time = 60.0; - ci->disable_timer = 0; - slide_config->items = evas_list_append (slide_config->items, ci); - } - slide_config->module = m; - e_gadcon_provider_register (&_gc_class); - return m; + slide_config = e_config_domain_load("module.slideshow", conf_edd); + if (!slide_config) + { + Config_Item *ci; + char buf[4096]; + + snprintf(buf, sizeof (buf), "%s/.e/e/backgrounds", e_user_homedir_get()); + slide_config = E_NEW(Config, 1); + ci = E_NEW(Config_Item, 1); + + ci->id = evas_stringshare_add("0"); + ci->dir = evas_stringshare_add(buf); + ci->poll_time = 60.0; + ci->disable_timer = 0; + ci->random_order = 0; + slide_config->items = evas_list_append(slide_config->items, ci); + } + slide_config->module = m; + e_gadcon_provider_register(&_gc_class); + return m; } EAPI int -e_modapi_shutdown (E_Module * m) +e_modapi_shutdown(E_Module *m) { - slide_config->module = NULL; - e_gadcon_provider_unregister (&_gc_class); + slide_config->module = NULL; + e_gadcon_provider_unregister(&_gc_class); - if (slide_config->config_dialog) - e_object_del (E_OBJECT (slide_config->config_dialog)); - if (slide_config->menu) - { - e_menu_post_deactivate_callback_set (slide_config->menu, NULL, NULL); - e_object_del (E_OBJECT (slide_config->menu)); - slide_config->menu = NULL; - } - while (slide_config->items) - { - Config_Item *ci; - - ci = slide_config->items->data; - slide_config->items = - evas_list_remove_list (slide_config->items, slide_config->items); - if (ci->id) - evas_stringshare_del (ci->id); - if (ci->dir) - evas_stringshare_del (ci->dir); - free (ci); - } - free (slide_config); - slide_config = NULL; - E_CONFIG_DD_FREE (conf_item_edd); - E_CONFIG_DD_FREE (conf_edd); - return 1; + if (slide_config->config_dialog) + e_object_del(E_OBJECT(slide_config->config_dialog)); + if (slide_config->menu) + { + e_menu_post_deactivate_callback_set(slide_config->menu, NULL, NULL); + e_object_del(E_OBJECT(slide_config->menu)); + slide_config->menu = NULL; + } + while (slide_config->items) + { + Config_Item *ci; + + ci = slide_config->items->data; + slide_config->items = evas_list_remove_list(slide_config->items, slide_config->items); + if (ci->id) evas_stringshare_del(ci->id); + if (ci->dir) evas_stringshare_del(ci->dir); + E_FREE(ci); + } + E_FREE(slide_config); + slide_config = NULL; + E_CONFIG_DD_FREE(conf_item_edd); + E_CONFIG_DD_FREE(conf_edd); + return 1; } EAPI int -e_modapi_save (E_Module * m) +e_modapi_save(E_Module *m) { - Evas_List *l; + Evas_List *l; - for (l = slide_config->instances; l; l = l->next) - { - Instance *inst; - Config_Item *ci; - - inst = l->data; - ci = _slide_config_item_get (inst->gcc->id); - if (ci->id) - evas_stringshare_del (ci->id); - ci->id = evas_stringshare_add (inst->gcc->id); - } - e_config_domain_save ("module.slideshow", conf_edd, slide_config); - return 1; + for(l = slide_config->instances; l; l = l->next) + { + Instance *inst; + Config_Item *ci; + + inst = l->data; + ci = _slide_config_item_get(inst->gcc->id); + if (ci->id) evas_stringshare_del(ci->id); + ci->id = evas_stringshare_add(inst->gcc->id); + } + e_config_domain_save("module.slideshow", conf_edd, slide_config); + return 1; } EAPI int -e_modapi_about (E_Module * m) +e_modapi_about(E_Module *m) { - e_module_dialog_show (m, D_ ("Enlightenment Slide Show Module"), - D_ - ("This module is VERY simple and is used to cycle desktop backgrounds")); - return 1; + e_module_dialog_show(m, D_ ("Enlightenment Slide Show Module"), + D_("This module is VERY simple and is used to cycle desktop backgrounds")); + return 1; } static Slideshow * -_slide_new (Evas * evas) +_slide_new(Evas *evas) { - Slideshow *ss; - char buf[4096]; + Slideshow *ss; + char buf[4096]; - ss = E_NEW (Slideshow, 1); - snprintf (buf, sizeof (buf), "%s/slideshow.edj", - e_module_dir_get (slide_config->module)); - ss->img_obj = e_livethumb_add (evas); - e_livethumb_vsize_set (ss->img_obj, 16, 16); - evas_object_show (ss->img_obj); - - ss->slide_obj = edje_object_add (evas); - if (!e_theme_edje_object_set - (ss->slide_obj, "base/theme/modules/slideshow", - "modules/slideshow/main")) - edje_object_file_set (ss->slide_obj, buf, "modules/slideshow/main"); - evas_object_show (ss->slide_obj); + ss = E_NEW(Slideshow, 1); + snprintf(buf, sizeof (buf), "%s/slideshow.edj", e_module_dir_get (slide_config->module)); + ss->img_obj = e_livethumb_add(evas); + e_livethumb_vsize_set(ss->img_obj, 16, 16); + evas_object_show(ss->img_obj); + + ss->slide_obj = edje_object_add(evas); + if (!e_theme_edje_object_set + (ss->slide_obj, "base/theme/modules/slideshow", + "modules/slideshow/main")) + edje_object_file_set(ss->slide_obj, buf, "modules/slideshow/main"); + evas_object_show(ss->slide_obj); - edje_object_part_swallow (ss->slide_obj, "item", ss->img_obj); - return ss; + edje_object_part_swallow(ss->slide_obj, "item", ss->img_obj); + return ss; } static void -_slide_free (Slideshow * ss) +_slide_free(Slideshow *ss) { - evas_object_del (ss->img_obj); - evas_object_del (ss->bg_obj); - evas_object_del (ss->slide_obj); - free (ss); + evas_object_del(ss->img_obj); + evas_object_del(ss->bg_obj); + evas_object_del(ss->slide_obj); + E_FREE(ss); } static int -_slide_cb_check (void *data) +_slide_cb_check(void *data) { - Instance *inst; - Config_Item *ci; - char *bg; - - inst = data; - ci = _slide_config_item_get (inst->gcc->id); - - _slide_get_bg_count (inst); - - if (inst->index > inst->bg_count) - inst->index = 0; - if (inst->index <= inst->bg_count) - { - bg = ecore_list_goto_index (inst->bg_list, inst->index); - if (bg == NULL) - { - inst->index = 0; - bg = ecore_list_goto_index (inst->bg_list, inst->index); - } - if (bg != NULL) - { - _slide_set_bg (inst, bg); - inst->index++; - _slide_set_preview (inst); - } - } - return 1; + Instance *inst; + Config_Item *ci; + char *bg; + + inst = data; + ci = _slide_config_item_get(inst->gcc->id); + + _slide_get_bg_count(inst); + + if (inst->index > inst->bg_count) inst->index = 0; + if (inst->index <= inst->bg_count) + { + bg = ecore_list_goto_index(inst->bg_list, inst->index); + if (bg == NULL) + { + inst->index = 0; + bg = ecore_list_goto_index(inst->bg_list, inst->index); + } + if (bg != NULL) + { + _slide_set_bg(inst, bg); + if(ci->random_order) + { + srand(time(NULL)); + inst->index = (rand() % (inst->bg_count+1)); + } + else + inst->index++; + _slide_set_preview(inst); + } + } + return 1; +} + +static void +_slide_get_bg_subdirs(void *data, char *localPath) +{ + Ecore_List *dirListing; + char fullPath[4096]; + char itemFullPath[4096]; + char itemLocalPath[4096]; + char *item; + Instance *inst; + Config_Item *ci; + + inst = data; + ci = _slide_config_item_get(inst->gcc->id); + if(!ci->dir) + return; + + snprintf(fullPath, sizeof(fullPath), "%s/%s", ci->dir, localPath); + dirListing = ecore_file_ls(fullPath); + + while((item = ecore_list_next(dirListing)) != NULL) + { + snprintf(itemFullPath, sizeof(itemFullPath), "%s/%s", fullPath, item); + snprintf(itemLocalPath, sizeof(itemLocalPath), "%s/%s", localPath, item); + + if(ecore_file_is_dir(itemFullPath)) + _slide_get_bg_subdirs(inst, itemLocalPath); + else + ecore_list_append(inst->bg_list, strdup(itemLocalPath)); + } + + ecore_list_destroy(dirListing); } static void -_slide_get_bg_count (void *data) +_slide_get_bg_count(void *data) { - Instance *inst; - Config_Item *ci; - char *item; - - inst = data; - ci = _slide_config_item_get (inst->gcc->id); - if (!ci->dir) - return; - - inst->bg_count = 0; - if (inst->bg_list) - ecore_list_destroy (inst->bg_list); - inst->bg_list = ecore_file_ls (ci->dir); - ecore_list_goto_first (inst->bg_list); - while ((item = (char *) ecore_list_next (inst->bg_list)) != NULL) - inst->bg_count++; + Instance *inst; + Config_Item *ci; + char *item; + Ecore_List *dirListing; + char itemFullPath[4096]; + + inst = data; + ci = _slide_config_item_get(inst->gcc->id); + if (!ci->dir) return; + + inst->bg_count = 0; + if (inst->bg_list) ecore_list_destroy(inst->bg_list); + + inst->bg_list = ecore_list_new(); + ecore_list_set_free_cb(inst->bg_list, free); + + dirListing = ecore_file_ls(ci->dir); + + while((item = ecore_list_next(dirListing)) != NULL) + { + snprintf(itemFullPath, sizeof(itemFullPath), "%s/%s", ci->dir, item); + + if(ecore_file_is_dir(itemFullPath)) + _slide_get_bg_subdirs(inst, item); + else + ecore_list_append(inst->bg_list, strdup(item)); + } + + ecore_list_destroy(dirListing); + + inst->bg_list = ecore_file_ls(ci->dir); + ecore_list_goto_first(inst->bg_list); + while ((item = (char *)ecore_list_next(inst->bg_list)) != NULL) + inst->bg_count++; } static void -_slide_set_bg (void *data, const char *bg) +_slide_set_bg(void *data, const char *bg) { - Instance *inst; - Config_Item *ci; - char buf[4096]; - - inst = data; - ci = _slide_config_item_get (inst->gcc->id); - snprintf (buf, sizeof (buf), "enlightenment_remote -default-bg-set %s/%s", - ci->dir, bg); - system (buf); + Instance *inst; + Config_Item *ci; + char buf[4096]; + + inst = data; + ci = _slide_config_item_get(inst->gcc->id); + snprintf (buf, sizeof (buf), "enlightenment_remote -default-bg-set %s/%s", + ci->dir, bg); + system(buf); } static void -_slide_set_preview (void *data) +_slide_set_preview(void *data) { - Instance *inst; - Config_Item *ci; - Slideshow *ss; - char buf[4096]; - char *bg; - - inst = data; - ci = _slide_config_item_get (inst->gcc->id); - ss = inst->slide; - - bg = ecore_list_goto_index (inst->bg_list, inst->index); - snprintf (buf, sizeof (buf), "%s/%s", ci->dir, bg); - if (!e_util_edje_collection_exists (buf, "desktop/background")) - return; - if (ss->bg_obj) - evas_object_del (ss->bg_obj); - ss->bg_obj = edje_object_add (e_livethumb_evas_get (ss->img_obj)); - edje_object_file_set (ss->bg_obj, buf, "desktop/background"); - e_livethumb_thumb_set (ss->img_obj, ss->bg_obj); + Instance *inst; + Config_Item *ci; + Slideshow *ss; + char buf[4096]; + char *bg; + + inst = data; + ci = _slide_config_item_get(inst->gcc->id); + ss = inst->slide; + + bg = ecore_list_goto_index(inst->bg_list, inst->index); + snprintf(buf, sizeof (buf), "%s/%s", ci->dir, bg); + if (!e_util_edje_collection_exists (buf, "desktop/background")) return; + if (ss->bg_obj) evas_object_del(ss->bg_obj); + ss->bg_obj = edje_object_add(e_livethumb_evas_get (ss->img_obj)); + edje_object_file_set(ss->bg_obj, buf, "desktop/background"); + e_livethumb_thumb_set(ss->img_obj, ss->bg_obj); } =================================================================== RCS file: /cvs/e/e_modules/slideshow/e_mod_config.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- e_mod_config.c 18 Jul 2006 00:01:37 -0000 1.26 +++ e_mod_config.c 28 Jul 2006 00:02:17 -0000 1.27 @@ -4,6 +4,7 @@ struct _E_Config_Dialog_Data { int disable_timer; + int random_order; double poll_time; char *dir; }; @@ -46,6 +47,7 @@ cfdata->poll_time = ci->poll_time; cfdata->disable_timer = ci->disable_timer; + cfdata->random_order = ci->random_order; if (ci->dir) cfdata->dir = strdup (ci->dir); else @@ -91,8 +93,8 @@ e_widget_check_add (evas, D_ ("Disable Timer"), &(cfdata->disable_timer)); e_widget_framelist_object_append (of, ob); ob = - e_widget_slider_add (evas, 1, 0, D_ ("%3.0f seconds"), 5.0, 60.0, 1.0, 0, - &(cfdata->poll_time), NULL, 200); + e_widget_slider_add (evas, 1, 0, D_ ("%3.0f seconds"), 5.0, 300.0, 1.0, 0, + &(cfdata->poll_time), NULL, 200); e_widget_framelist_object_append (of, ob); e_widget_list_object_append (o, of, 1, 1, 0.5); @@ -105,6 +107,11 @@ e_widget_framelist_object_append (of, ot); e_widget_list_object_append (o, of, 1, 1, 0.5); + of = e_widget_framelist_add (evas, D_ ("Extra"), 0); + ob = e_widget_check_add (evas, D_ ("Randomize order"), &(cfdata->random_order)); + e_widget_framelist_object_append (of, ob); + e_widget_list_object_append (o, of, 1, 1, 0.5); + return o; } @@ -117,6 +124,7 @@ ci = cfd->data; ci->poll_time = cfdata->poll_time; ci->disable_timer = cfdata->disable_timer; +ci->random_order = cfdata->random_order; if (ci->dir) evas_stringshare_del (ci->dir); ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs