diff --git a/configure.ac b/configure.ac index 5f14a83..7ffc67b 100644 --- a/configure.ac +++ b/configure.ac @@ -192,18 +192,18 @@ AC_ARG_ENABLE([libexif], AC_MSG_CHECKING([whether ethumb is built]) AC_MSG_RESULT([${_ephoto_enable_libexif}]) -have_libexif="no" +have_libexif="No" if test "x${_ephoto_enable_libexif}" = "xyes" ; then PKG_CHECK_MODULES(EXIF, libexif, [ - have_libexif="yes" + have_libexif="Yes" AC_DEFINE(HAVE_LIBEXIF, 1, [have libexif support]) ],[ - have_libexif="no" + have_libexif="No" ]) fi -AM_CONDITIONAL(BUILD_LIBEXIF, test $have_libexif = yes) +AM_CONDITIONAL(BUILD_LIBEXIF, test $have_libexif = Yes) AC_OUTPUT([ Makefile diff --git a/data/images/preferences.png b/data/images/preferences.png new file mode 100644 index 0000000..809ddca Binary files /dev/null and b/data/images/preferences.png differ diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 49ec7ac..6962709 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -9,6 +9,7 @@ ephoto_SOURCES = \ ephoto.c \ ephoto.h \ ephoto_config.c \ + ephoto_preferences.c \ ephoto_flow_browser.c \ ephoto_main.c \ ephoto_slideshow.c \ diff --git a/src/bin/ephoto.c b/src/bin/ephoto.c index bb10f29..a211a24 100644 --- a/src/bin/ephoto.c +++ b/src/bin/ephoto.c @@ -54,17 +54,23 @@ main(int argc, char **argv) } else if (ecore_file_is_dir(argv[1])) { - ephoto_create_main_window(argv[1], NULL); + char *real; + + real = ecore_file_realpath(argv[1]); + ephoto_create_main_window(real, NULL); + free(real); } else if (ecore_file_exists(argv[1])) { - char *directory; + char *directory, *real; const char *image; image = eina_stringshare_add(argv[1]); directory = ecore_file_dir_get(argv[1]); - ephoto_create_main_window(directory, image); + real = ecore_file_realpath(directory); + ephoto_create_main_window(real, image); free(directory); + free(real); } else { diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index 505fa04..b831edc 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -37,6 +37,9 @@ Eina_Bool ephoto_config_init(Ephoto *em); void ephoto_config_save(Ephoto *em, Eina_Bool instant); void ephoto_config_free(Ephoto *em); +/* Preferences */ +void ephoto_show_preferences(Ephoto *em); + /*Ephoto Flow Browser*/ Evas_Object *ephoto_create_flow_browser(Evas_Object *parent); void ephoto_flow_browser_image_set(Evas_Object *obj, const char *current_image); @@ -52,7 +55,7 @@ void ephoto_hide_slideshow(void); void ephoto_delete_slideshow(void); /*Ephoto Thumb Browser*/ -Evas_Object *ephoto_create_thumb_browser(Evas_Object *parent, const char *directory); +Evas_Object *ephoto_create_thumb_browser(Evas_Object *parent); void ephoto_populate_thumbnails(Evas_Object *obj); /* smart callbacks called: * "selected" - an item in the thumb browser is selected. The selected file is passed as event_info argument. @@ -80,6 +83,12 @@ struct _Ephoto_Config int config_version; int thumb_size; + + int remember_directory; + const char *directory; + + double slideshow_timeout; + const char *slideshow_transition; }; /*Ephoto Main Structure*/ @@ -92,9 +101,9 @@ struct _Ephoto Evas_Object *flow_browser; Evas_Object *slideshow; Evas_Object *thumb_browser; + Evas_Object *prefs_win; Eina_List *images; Ephoto_State state; - const char *cur_directory; Ephoto_Config *config; diff --git a/src/bin/ephoto_config.c b/src/bin/ephoto_config.c index 4db7e7b..186f135 100644 --- a/src/bin/ephoto_config.c +++ b/src/bin/ephoto_config.c @@ -1,6 +1,6 @@ #include "ephoto.h" -#define CONFIG_VERSION 1 +#define CONFIG_VERSION 2 static int _ephoto_config_load(Ephoto *em); static Eina_Bool _ephoto_on_config_save(void *data); @@ -10,7 +10,7 @@ ephoto_config_init(Ephoto *em) { Eet_Data_Descriptor_Class eddc; - if (!eet_eina_file_data_descriptor_class_set(&eddc, sizeof (eddc), "Ephoto_Config", sizeof(Ephoto_Config))) + if (!eet_eina_stream_data_descriptor_class_set(&eddc, sizeof (eddc), "Ephoto_Config", sizeof(Ephoto_Config))) { ERR("Unable to create the config data descriptor!"); return EINA_FALSE; @@ -24,6 +24,10 @@ ephoto_config_init(Ephoto *em) #define C_VAL(edd, type, member, dtype) EET_DATA_DESCRIPTOR_ADD_BASIC(edd, type, #member, member, dtype) C_VAL(D, T, config_version, EET_T_INT); C_VAL(D, T, thumb_size, EET_T_INT); + C_VAL(D, T, remember_directory, EET_T_INT); + C_VAL(D, T, directory, EET_T_STRING); + C_VAL(D, T, slideshow_timeout, EET_T_DOUBLE); + C_VAL(D, T, slideshow_transition, EET_T_STRING); switch (_ephoto_config_load(em)) { @@ -31,8 +35,18 @@ ephoto_config_init(Ephoto *em) /* Start a new config */ em->config->config_version = CONFIG_VERSION; em->config->thumb_size = 256; + em->config->remember_directory = 1; + em->config->slideshow_timeout = 4.0; + em->config->slideshow_transition = "fade"; break; case -1: + if (em->config->config_version < 2) + { + em->config->remember_directory = 1; + em->config->slideshow_timeout = 4.0; + em->config->slideshow_transition = "fade"; + } + /* Incremental additions */ em->config->config_version = CONFIG_VERSION; break; @@ -47,7 +61,10 @@ void ephoto_config_save(Ephoto *em, Eina_Bool instant) { if (em->config_save) + { ecore_timer_del(em->config_save); + em->config_save = NULL; + } if (instant) _ephoto_on_config_save(em); diff --git a/src/bin/ephoto_flow_browser.c b/src/bin/ephoto_flow_browser.c index 3904a60..0682785 100644 --- a/src/bin/ephoto_flow_browser.c +++ b/src/bin/ephoto_flow_browser.c @@ -304,7 +304,7 @@ _ephoto_go_back(void *data, Evas_Object *obj, void *event_info) evas_object_smart_callback_call(ef->flow_browser, "delete,request", NULL); /* elm_toolbar_item_unselect_all(ef->toolbar); */ - /* em->thumb_browser = ephoto_create_thumb_browser(em->layout, ecore_file_dir_get(ef->cur_image)); */ + /* em->thumb_browser = ephoto_create_thumb_browser(em->layout); */ /* elm_layout_content_set(em->layout, "ephoto.content.swallow", em->thumb_browser); */ } diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 1fa8918..732f3f8 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -7,23 +7,17 @@ Ephoto *em; static void _ephoto_delete_main_window(void *data, Evas_Object *obj, void *event_info); static void _ephoto_flow_browser_delete_cb(void *data, Evas_Object *obj, void *event_info); static void _ephoto_thumb_browser_selected_cb(void *data, Evas_Object *obj, void *event_info); -static void _ephoto_thumb_browser_directory_changed_cb(void *data, Evas_Object *obj, void *event_info); /* Objects Callbacks */ static void _ephoto_flow_browser_delete_cb(void *data, Evas_Object *obj, void *event_info) { - em->thumb_browser = ephoto_create_thumb_browser(em->layout, em->cur_directory); + em->thumb_browser = ephoto_create_thumb_browser(em->layout); elm_layout_content_set(em->layout, "ephoto.content.swallow", em->thumb_browser); evas_object_smart_callback_add(em->thumb_browser, "selected", _ephoto_thumb_browser_selected_cb, NULL); - evas_object_smart_callback_add(em->thumb_browser, - "directory,changed", - _ephoto_thumb_browser_directory_changed_cb, - NULL); - em->state = EPHOTO_STATE_THUMB; } @@ -42,19 +36,12 @@ _ephoto_thumb_browser_selected_cb(void *data, Evas_Object *obj, void *event_info em->state = EPHOTO_STATE_FLOW; } -static void -_ephoto_thumb_browser_directory_changed_cb(void *data, Evas_Object *obj, void *event_info) -{ - const char *dir = event_info; - - eina_stringshare_del(em->cur_directory); - em->cur_directory = eina_stringshare_add(dir); -} - /*Create the main ephoto window*/ void ephoto_create_main_window(const char *directory, const char *image) { + char current_directory[PATH_MAX]; + em = calloc(1, sizeof(Ephoto)); if (!ephoto_config_init(em)) _ephoto_delete_main_window(NULL, NULL, NULL); @@ -89,11 +76,36 @@ ephoto_create_main_window(const char *directory, const char *image) evas_object_show(em->layout); + /* Prepare the slideshow beforehand, in order + * to obtain the list of transitions */ + ephoto_create_slideshow(); + + if (!directory) + { + getcwd(current_directory, PATH_MAX); + } + + if (!em->config->directory) + { + if (directory) + em->config->directory = eina_stringshare_add(directory); + else + em->config->directory = eina_stringshare_add(current_directory); + } + else if (directory || !em->config->remember_directory) + { + if (directory) + eina_stringshare_replace(&em->config->directory, + directory); + else + eina_stringshare_replace(&em->config->directory, + current_directory); + } + if (image) { em->flow_browser = ephoto_create_flow_browser(em->layout); ephoto_flow_browser_image_set(em->flow_browser, image); - em->cur_directory = eina_stringshare_add(ecore_file_dir_get(image)); eina_stringshare_del(image); elm_layout_content_set(em->layout, "ephoto.content.swallow", em->flow_browser); evas_object_smart_callback_add(em->flow_browser, @@ -104,18 +116,13 @@ ephoto_create_main_window(const char *directory, const char *image) } else { - em->thumb_browser = ephoto_create_thumb_browser(em->layout, directory); - em->cur_directory = eina_stringshare_add(directory); + em->thumb_browser = ephoto_create_thumb_browser(em->layout); evas_object_show(em->thumb_browser); elm_layout_content_set(em->layout, "ephoto.content.swallow", em->thumb_browser); evas_object_smart_callback_add(em->thumb_browser, "selected", _ephoto_thumb_browser_selected_cb, NULL); - evas_object_smart_callback_add(em->thumb_browser, - "directory,changed", - _ephoto_thumb_browser_directory_changed_cb, - NULL); em->state = EPHOTO_STATE_THUMB; } diff --git a/src/bin/ephoto_preferences.c b/src/bin/ephoto_preferences.c new file mode 100644 index 0000000..8b70952 --- /dev/null +++ b/src/bin/ephoto_preferences.c @@ -0,0 +1,153 @@ +#include "ephoto.h" + +static void _ephoto_preferences_pager_switch(void *data, Evas_Object *obj, void *event_info); +static void _ephoto_preferences_hide(void *data, Evas_Object *obj, void *event_info); +static void _ephoto_preferences_item_change(void *data, Evas_Object *obj, void *event_info); +static void _ephoto_preferences_slideshow_transition(void *data, Evas_Object *obj, void *event_info); + +void +ephoto_show_preferences(Ephoto *em) +{ + if (!em->prefs_win) + { + Evas_Object *o, *tb, *box, *pager, *pg1, *pg2, *pg3; + const Eina_List *transitions, *l; + const char *transition; + + em->prefs_win = o = elm_win_inwin_add(em->win); + elm_object_style_set(o, "minimal"); + + box = elm_box_add(em->prefs_win); + evas_object_show(box); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_inwin_content_set(o, box); + + tb = elm_toolbar_add(box); + elm_toolbar_homogenous_set(tb, EINA_FALSE); + evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, 0.5); + + elm_box_pack_end(box, tb); + evas_object_show(tb); + + pager = elm_pager_add(box); + + pg1 = elm_box_add(pager); + evas_object_size_hint_weight_set(pg1, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(pg1); + elm_pager_content_push(pager, pg1); + elm_toolbar_item_add(tb, NULL, "General", _ephoto_preferences_pager_switch, pg1); + + o = elm_check_add(pg1); + elm_check_label_set(o, "Remember last used directory"); + elm_check_state_set(o, em->config->remember_directory); + evas_object_data_set(o, "config", "remember_directory"); + evas_object_smart_callback_add(o, "changed", + _ephoto_preferences_item_change, em); + elm_box_pack_end(pg1, o); + evas_object_show(o); + + elm_box_pack_end(box, pager); + evas_object_show(pager); + + pg2 = elm_table_add(pager); + evas_object_size_hint_weight_set(pg2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(pg2); + elm_pager_content_push(pager, pg2); + elm_toolbar_item_add(tb, NULL, "Slideshow", _ephoto_preferences_pager_switch, pg2); + + o = elm_label_add(pg2); + elm_label_label_set(o, "Delay:"); + evas_object_show(o); + elm_table_pack(pg2, o, 0, 0, 1, 1); + + o = elm_spinner_add(pg2); + elm_spinner_label_format_set(o, "%1.1f seconds"); + elm_spinner_step_set(o, 0.1); + elm_spinner_min_max_set(o, 1.0, 10.0); + elm_spinner_value_set(o, em->config->slideshow_timeout); + evas_object_data_set(o, "config", "slideshow_timeout"); + evas_object_smart_callback_add(o, "delay,changed", + _ephoto_preferences_item_change, em); + evas_object_show(o); + elm_table_pack(pg2, o, 1, 0, 1, 1); + + o = elm_label_add(pg2); + elm_label_label_set(o, "Transition:"); + evas_object_show(o); + elm_table_pack(pg2, o, 0, 1, 1, 1); + + /* XXX: The page cannot be the parent, since + * the items will be clipped to it */ + o = elm_hoversel_add(em->win); + elm_hoversel_label_set(o, em->config->slideshow_transition); + transitions = elm_slideshow_transitions_get(em->slideshow); + EINA_LIST_FOREACH(transitions, l, transition) + { + elm_hoversel_item_add(o, transition, NULL, ELM_ICON_NONE, _ephoto_preferences_slideshow_transition, em); + } + evas_object_show(o); + elm_table_pack(pg2, o, 1, 1, 1, 1); + + pg3 = elm_box_add(pager); + evas_object_size_hint_weight_set(pg3, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(pg3); + elm_pager_content_push(pager, pg3); + elm_toolbar_item_add(tb, NULL, "External Editor", _ephoto_preferences_pager_switch, pg3); + + o = elm_button_add(box); + elm_button_label_set(o, "Close"); + evas_object_size_hint_align_set(o, 1.0, 0.5); + evas_object_smart_callback_add(o, "clicked", _ephoto_preferences_hide, em); + elm_box_pack_end(box, o); + evas_object_show(o); + + elm_toolbar_item_select_first(tb); + elm_pager_content_promote(pager, pg1); + } + + elm_win_inwin_activate(em->prefs_win); +} + +static void +_ephoto_preferences_pager_switch(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *o = data; + /* XXX: Useful function, but not currently exported as public */ + Evas_Object *pager = elm_widget_parent_get(o); + + elm_pager_content_promote(pager, o); +} + +static void +_ephoto_preferences_item_change(void *data, Evas_Object *obj, void *event_info) +{ + Ephoto *em = data; + const char *key = evas_object_data_get(obj, "config"); + + if (!strcmp(key, "remember_directory")) + em->config->remember_directory = elm_check_state_get(obj); + else if (!strcmp(key, "slideshow_timeout")) + em->config->slideshow_timeout = elm_spinner_value_get(obj); + + ephoto_config_save(em, EINA_FALSE); +} + +static void +_ephoto_preferences_slideshow_transition(void *data, Evas_Object *obj, void *event_info) +{ + Ephoto *em = data; + Elm_Hoversel_Item *it = event_info; + const char *transition = elm_hoversel_item_label_get(it); + + elm_hoversel_label_set(obj, transition); + em->config->slideshow_transition = transition; + ephoto_config_save(em, EINA_FALSE); +} + +static void +_ephoto_preferences_hide(void *data, Evas_Object *obj, void *event_info) +{ + Ephoto *em = data; + + evas_object_hide(em->prefs_win); +} diff --git a/src/bin/ephoto_slideshow.c b/src/bin/ephoto_slideshow.c index 8538efa..6f8e642 100644 --- a/src/bin/ephoto_slideshow.c +++ b/src/bin/ephoto_slideshow.c @@ -14,7 +14,6 @@ ephoto_create_slideshow(void) em->slideshow = elm_slideshow_add(em->win); elm_slideshow_loop_set(em->slideshow, EINA_TRUE); elm_slideshow_layout_set(em->slideshow, "fullscreen"); - elm_slideshow_transition_set(em->slideshow, "fade"); evas_object_size_hint_weight_set(em->slideshow, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(em->slideshow, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_event_callback_add(em->slideshow, EVAS_CALLBACK_MOUSE_DOWN, @@ -29,7 +28,8 @@ ephoto_show_slideshow(int view, const char *current_image) const char *image; int x, y, w, h; - ephoto_create_slideshow(); + elm_slideshow_transition_set(em->slideshow, em->config->slideshow_transition); + elm_slideshow_timeout_set(em->slideshow, em->config->slideshow_timeout); return_view = view; cur_image = current_image; @@ -48,14 +48,13 @@ ephoto_show_slideshow(int view, const char *current_image) } evas_object_show(em->slideshow); elm_win_resize_object_add(em->win, em->slideshow); - elm_slideshow_timeout_set(em->slideshow, 4); } /*Hide the slideshow object*/ void ephoto_hide_slideshow(void) { - ephoto_delete_slideshow(); + evas_object_hide(em->slideshow); // FIXME /* if (return_view == 0) diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index e2171d0..0dd4143 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -20,7 +20,6 @@ struct _Ephoto_Thumb_Browser Evas_Object *fsel_win; Elm_Gengrid_Item_Class eg; Ethumb_Client *ec; - const char *current_directory; Eio_File *list; }; @@ -42,14 +41,14 @@ static void _ephoto_thumb_clicked(void *data, Evas_Object *obj, void *event_info static void _ephoto_view_large(void *data, Evas_Object *obj, void *event_info); static void _ephoto_change_directory(void *data, Evas_Object *obj, void *event_info); static void _ephoto_view_slideshow(void *data, Evas_Object *obj, void *event_info); +static void _ephoto_preferences(void *data, Evas_Object *obj, void *event_info); static void _ephoto_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _ephoto_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); /*Create the thumbnail browser object*/ Evas_Object * -ephoto_create_thumb_browser(Evas_Object *parent, const char *directory) +ephoto_create_thumb_browser(Evas_Object *parent) { Evas_Object *o; - char buf[PATH_MAX]; Ephoto_Thumb_Browser *tb; tb = calloc(1, sizeof(Ephoto_Thumb_Browser)); @@ -67,16 +66,6 @@ ephoto_create_thumb_browser(Evas_Object *parent, const char *directory) evas_object_size_hint_fill_set(tb->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(tb->layout); - if (!directory) - { - getcwd(buf, PATH_MAX); - tb->current_directory = eina_stringshare_add(buf); - } - else - { - tb->current_directory = eina_stringshare_add(directory); - } - tb->thbox = elm_box_add(tb->layout); elm_box_horizontal_set(tb->thbox, EINA_TRUE); evas_object_size_hint_weight_set(tb->thbox, EVAS_HINT_EXPAND, EVAS_HINT_FILL); @@ -84,7 +73,7 @@ ephoto_create_thumb_browser(Evas_Object *parent, const char *directory) elm_layout_content_set(tb->layout, "ephoto.location.swallow", tb->thbox); tb->dir_label = elm_label_add(tb->thbox); - elm_label_label_set(tb->dir_label, tb->current_directory); + elm_label_label_set(tb->dir_label, em->config->directory); evas_object_size_hint_weight_set(tb->dir_label, EVAS_HINT_EXPAND, 0.0); evas_object_size_hint_align_set(tb->dir_label, 0.01, 0.5); elm_box_pack_end(tb->thbox, tb->dir_label); @@ -139,6 +128,10 @@ ephoto_create_thumb_browser(Evas_Object *parent, const char *directory) elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/play_slideshow.png", NULL); elm_toolbar_item_add(tb->toolbar, o, "Play Slideshow", _ephoto_view_slideshow, tb); + o = elm_icon_add(tb->toolbar); + elm_icon_file_set(o, PACKAGE_DATA_DIR "/images/preferences.png", NULL); + elm_toolbar_item_add(tb->toolbar, o, "Preferences", _ephoto_preferences, tb); + tb->eg.item_style = "ephoto"; tb->eg.func.label_get = _ephoto_get_label; tb->eg.func.icon_get = _ephoto_get_icon; @@ -156,7 +149,10 @@ static void _ephoto_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { - Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser"); + char *buffer; + int length; + + /* Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser"); */ /* evas_object_show(tb->toolbar); */ /* evas_object_show(tb->thumb_browser); */ @@ -164,18 +160,10 @@ _ephoto_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) /* evas_object_show(tb->thumb_slider); */ /* evas_object_show(tb->thbox); */ - if (tb->current_directory) - { - char *buffer; - int length; - - length = strlen(tb->current_directory) + strlen("Ephoto - ") + 1; - buffer = alloca(length); - snprintf(buffer, length, "Ephoto - %s", tb->current_directory); - elm_win_title_set(em->win, buffer); - } else { - elm_win_title_set(em->win, "Ephoto"); - } + length = strlen(em->config->directory) + strlen("Ephoto - ") + 1; + buffer = alloca(length); + snprintf(buffer, length, "Ephoto - %s", em->config->directory); + elm_win_title_set(em->win, buffer); } /* Use ecore thread facility to avoid lock completly */ @@ -243,12 +231,10 @@ ephoto_populate_thumbnails(Evas_Object *obj) { Ephoto_Thumb_Browser *tb = evas_object_data_get(obj, "thumb_browser"); - if (!tb->current_directory) return ; - if (!efreet_mime_init()) fprintf(stderr, "Could not init efreet_mime!\n"); - tb->list = eio_file_ls(tb->current_directory, + tb->list = eio_file_ls(em->config->directory, _ephoto_populate_filter, _ephoto_populate_main, _ephoto_populate_end, @@ -399,8 +385,7 @@ _ephoto_thumb_clicked(void *data, Evas_Object *obj, void *event_info) static void _ephoto_fileselector_shown(void *data, Evas *e, Evas_Object *obj, void *event_info) { - Ephoto_Thumb_Browser *tb = data; - elm_fileselector_path_set(obj, tb->current_directory); + elm_fileselector_path_set(obj, em->config->directory); evas_render(em->e); } @@ -416,8 +401,11 @@ _ephoto_directory_chosen(void *data, Evas_Object *obj, void *event_info) directory = elm_fileselector_selected_get(obj); - if ((directory) && (eina_stringshare_replace(&tb->current_directory, directory))) + if ((directory) && (eina_stringshare_replace(&em->config->directory, directory))) { + char *buffer; + int length; + l = elm_gengrid_items_get(tb->thumb_browser); EINA_LIST_FOREACH(l, iter, item) { @@ -430,23 +418,15 @@ _ephoto_directory_chosen(void *data, Evas_Object *obj, void *event_info) eina_list_free(em->images); em->images = NULL; ephoto_populate_thumbnails(tb->layout); - elm_label_label_set(tb->dir_label, tb->current_directory); + elm_label_label_set(tb->dir_label, em->config->directory); - if (tb->current_directory) - { - char *buffer; - int length; - - length = strlen(tb->current_directory) + strlen("Ephoto - ") + 1; - buffer = alloca(length); - snprintf(buffer, length, "Ephoto - %s", tb->current_directory); - elm_win_title_set(em->win, buffer); - } else { - elm_win_title_set(em->win, "Ephoto"); - } + length = strlen(em->config->directory) + strlen("Ephoto - ") + 1; + buffer = alloca(length); + snprintf(buffer, length, "Ephoto - %s", em->config->directory); + elm_win_title_set(em->win, buffer); } - evas_object_smart_callback_call(tb->layout, "directory,changed", (char *)tb->current_directory); + evas_object_smart_callback_call(tb->layout, "directory,changed", (char *) em->config->directory); evas_object_del(tb->fsel_win); elm_toolbar_item_unselect_all(tb->toolbar); @@ -495,7 +475,7 @@ _ephoto_change_directory(void *data, Evas_Object *obj, void *event_info) fsel = elm_fileselector_add(tb->fsel_win); elm_fileselector_folder_only_set(fsel, EINA_TRUE); elm_fileselector_buttons_ok_cancel_set(fsel, EINA_TRUE); - elm_fileselector_path_set(fsel, tb->current_directory); + elm_fileselector_path_set(fsel, em->config->directory); evas_object_event_callback_add(fsel, EVAS_CALLBACK_SHOW, _ephoto_fileselector_shown, tb); evas_object_smart_callback_add(fsel, "done", @@ -519,6 +499,16 @@ _ephoto_view_slideshow(void *data, Evas_Object *obj, void *event_info) elm_toolbar_item_unselect_all(tb->toolbar); } +/* Show the preferences window */ +static void +_ephoto_preferences(void *data, Evas_Object *obj, void *event_info) +{ + Ephoto_Thumb_Browser *tb = data; + + ephoto_show_preferences(em); + elm_toolbar_item_unselect_all(tb->toolbar); +} + /*Destroy the thumbnail browser object itself*/ static void _ephoto_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) @@ -536,6 +526,5 @@ _ephoto_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) eina_stringshare_del(etd->file); free(etd); } - eina_stringshare_del(tb->current_directory); ethumb_client_disconnect(tb->ec); }