diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index e7ecc29..802f96c 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -25,6 +25,7 @@ ephoto_SOURCES = \ ephoto_config.c \ ephoto_cropper.c \ ephoto_editor.c \ + ephoto_file.c \ ephoto_filters.c \ ephoto_hsv.c \ ephoto_ipc.c \ diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h index f7ad4ae..a76ac92 100644 --- a/src/bin/ephoto.h +++ b/src/bin/ephoto.h @@ -72,6 +72,7 @@ void ephoto_single_browser_entries_set(Evas_Object *obj, Eina_List *entries); void ephoto_single_browser_entry_set(Evas_Object *obj, Ephoto_Entry *entry); void ephoto_single_browser_path_pending_set(Evas_Object *obj, const char *path); +void ephoto_single_browser_path_pending_unset(Evas_Object *obj); void ephoto_single_browser_path_created(Evas_Object *obj, Ephoto_Entry *entry); void ephoto_single_browser_image_data_update(Evas_Object *main, Evas_Object *image, Eina_Bool finished, unsigned int *image_data, int w, @@ -131,6 +132,22 @@ void ephoto_filter_black_and_white(Evas_Object *main, Evas_Object *image); void ephoto_filter_old_photo(Evas_Object *main, Evas_Object *image); void ephoto_filter_histogram_eq(Evas_Object *main, Evas_Object *image); +/*file functions*/ +void ephoto_file_save_image(Ephoto *ephoto, Ephoto_Entry *entry, + Evas_Object *image); +void ephoto_file_save_image_as(Ephoto *ephoto, Ephoto_Entry *entry, + Evas_Object *image); +void ephoto_file_upload_image(Ephoto *ephoto, Ephoto_Entry *entry); +void ephoto_file_new_dir(Ephoto *ephoto, const char *path); +void ephoto_file_rename(Ephoto *ephoto, const char *path); +void ephoto_file_move(Ephoto *ephoto, Eina_List *files, const char *path); +void ephoto_file_copy(Ephoto *ephoto, Eina_List *files, const char *path); +void ephoto_file_paste(Ephoto *ephoto, Eina_List *files, Eina_Bool copy, + const char *path); +void ephoto_file_delete(Ephoto *ephoto, Eina_List *files, + Eina_File_Type type); +void ephoto_file_empty_trash(Ephoto *ephoto, Eina_List *files); + /*data types and structures*/ enum _Ephoto_State @@ -208,6 +225,13 @@ struct _Ephoto Eina_List *thumbs; Ecore_File_Monitor *monitor; + Ecore_Idler *file_idler; + Eina_List *file_idler_pos; + Eina_List *upload_handlers; + Ecore_Con_Url *url_up; + char *url_ret; + char *upload_error; + int file_errors; const char *top_directory; diff --git a/src/bin/ephoto_file.c b/src/bin/ephoto_file.c new file mode 100644 index 0000000..1e399bb --- /dev/null +++ b/src/bin/ephoto_file.c @@ -0,0 +1,1762 @@ +#include "ephoto.h" + +static void +_complete_ok(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); +} + +static void +_complete(Ephoto *ephoto, const char *title, const char *text) +{ + Evas_Object *popup, *box, *label, *ic, *button; + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + elm_object_part_text_set(popup, "title,text", title); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + label = elm_label_add(box); + elm_object_text_set(label, text); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, label); + evas_object_show(label); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Ok")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _complete_ok, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + evas_object_data_set(popup, "ephoto", ephoto); + elm_object_part_content_set(popup, "default", box); + evas_object_show(popup); +} + +static void +_prompt_cancel(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); +} + +static Evas_Object * +_prompt(Ephoto *ephoto, const char *title, const char *text) +{ + Evas_Object *popup, *box, *label; + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + elm_object_part_text_set(popup, "title,text", title); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + label = elm_label_add(box); + elm_object_text_set(label, text); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, label); + evas_object_show(label); + + evas_object_data_set(popup, "ephoto", ephoto); + elm_object_part_content_set(popup, "default", box); + + return popup; +} + +static void +_save_image_as_overwrite(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + const char *file = evas_object_data_get(popup, "file"); + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Ephoto_Entry *entry = evas_object_data_get(popup, "entry"); + Evas_Object *image = evas_object_data_get(popup, "image"); + Eina_Bool success; + + if (ecore_file_exists(file)) + { + success = ecore_file_unlink(file); + if (!success) + { + _complete(ephoto, _("Save Failed"), + _("Error: Image could not be saved here!")); + ephoto_single_browser_entry_set(ephoto->single_browser, entry); + evas_object_del(popup); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + return; + } + } + ephoto_single_browser_path_pending_set(ephoto->single_browser, file); + success = + evas_object_image_save(elm_image_object_get(image), file, + NULL, NULL); + if (!success) + { + _complete(ephoto, _("Save Failed"), + _("Error: Image could not be saved here!")); + ephoto_single_browser_path_pending_unset(ephoto->single_browser); + } + else + { + char *dir = ecore_file_dir_get(file); + if (strcmp(dir, ephoto->config->directory)) + { + ephoto_thumb_browser_fsel_clear(ephoto); + ephoto_directory_set(ephoto, dir, NULL, EINA_FALSE, EINA_FALSE); + ephoto_thumb_browser_top_dir_set(ephoto, + ephoto->config->directory); + free(dir); + } + } + evas_object_del(popup); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); +} + +static void +_upload_entry_anchor_bt(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + char buf[PATH_MAX]; + Evas_Object *av = data; + const char *link = evas_object_data_get(av, "link"); + + elm_entry_anchor_hover_end(av); + snprintf(buf, PATH_MAX, "xdg-open %s", link); + ecore_exe_run(buf, NULL); +} + +static void +_upload_entry_anchor(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *av = data; + Evas_Object *button; + Elm_Entry_Anchor_Hover_Info *ei = event_info; + + button = elm_button_add(obj); + elm_object_text_set(button, _("Open Link In Browser")); + elm_object_part_content_set(ei->hover, "middle", button); + evas_object_smart_callback_add(button, "clicked", _upload_entry_anchor_bt, + av); + evas_object_show(button); +} + +static void +_upload_image_url_copy(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *entry = data; + + elm_entry_select_all(entry); + elm_entry_selection_copy(entry); + elm_entry_select_none(entry); +} + +static Eina_Bool +_upload_image_complete_cb(void *data, int ev_type EINA_UNUSED, void *event) +{ + Evas_Object *ppopup = data; + Ephoto *ephoto = evas_object_data_get(ppopup, "ephoto"); + Ecore_Con_Event_Url_Complete *ev = event; + Ecore_Event_Handler *handler; + Evas_Object *popup, *box, *hbox, *label, *entry, *ic, *button; + + if (ev->url_con != ephoto->url_up) + return ECORE_CALLBACK_RENEW; + + evas_object_del(ppopup); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + elm_object_part_text_set(popup, "title,text", _("Image Uploaded")); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + label = elm_label_add(box); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, label); + evas_object_show(label); + + hbox = elm_box_add(box); + elm_box_horizontal_set(hbox, EINA_TRUE); + evas_object_size_hint_weight_set(hbox, EVAS_HINT_FILL, 0.0); + evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, hbox); + evas_object_show(hbox); + + entry = elm_entry_add(hbox); + elm_entry_anchor_hover_style_set(entry, "popout"); + elm_entry_anchor_hover_parent_set(entry, ephoto->pager); + elm_entry_editable_set(entry, EINA_TRUE); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(entry, "anchor,hover,opened", + _upload_entry_anchor, entry); + elm_box_pack_end(hbox, entry); + evas_object_show(entry); + + ic = elm_icon_add(hbox); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); + elm_icon_standard_set(ic, "edit-copy"); + + button = elm_button_add(hbox); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _upload_image_url_copy, + entry); + elm_box_pack_end(hbox, button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Ok")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + evas_object_data_set(popup, "ephoto", ephoto); + elm_object_part_content_set(popup, "default", box); + evas_object_show(popup); + + EINA_LIST_FREE(ephoto->upload_handlers, + handler) ecore_event_handler_del(handler); + + if (!ephoto->url_ret || ev->status != 200) + { + elm_object_text_set(label, + _("There was an error uploading your image!")); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_object_text_set(entry, ephoto->upload_error); + evas_object_show(popup); + ecore_con_url_free(ephoto->url_up); + ephoto->url_up = NULL; + free(ephoto->upload_error); + ephoto->upload_error = NULL; + return EINA_FALSE; + } + else + { + char buf[PATH_MAX], link[PATH_MAX]; + + snprintf(buf, PATH_MAX, "%s", + ephoto->url_ret, ephoto->url_ret); + snprintf(link, PATH_MAX, "%s", ephoto->url_ret); + evas_object_data_set(entry, "link", strdup(link)); + elm_object_text_set(label, + _("Your image was uploaded to the following link:")); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_object_text_set(entry, buf); + evas_object_show(popup); + ecore_con_url_free(ephoto->url_up); + ephoto->url_up = NULL; + free(ephoto->url_ret); + ephoto->url_ret = NULL; + return ECORE_CALLBACK_RENEW; + } +} + +static Eina_Bool +_upload_image_xml_parse(void *data, Eina_Simple_XML_Type type, + const char *content, unsigned offset EINA_UNUSED, + unsigned length EINA_UNUSED) +{ + Ephoto *ephoto = data; + char *linkf, *linkl; + + if (type == EINA_SIMPLE_XML_OPEN) + { + if (!strncmp("link>", content, strlen("link>"))) + { + linkf = strchr(content, '>') + 1; + linkl = strtok(linkf, "<"); + ephoto->url_ret = strdup(linkl); + } + } + return EINA_TRUE; +} + +static Eina_Bool +_upload_image_cb(void *data, int ev_type EINA_UNUSED, void *event) +{ + Ephoto *ephoto = data; + Ecore_Con_Event_Url_Data *ev = event; + const char *string = (const char *) ev->data; + + if (ev->url_con != ephoto->url_up) + return EINA_TRUE; + eina_simple_xml_parse(string, strlen(string) + 1, EINA_TRUE, + _upload_image_xml_parse, ephoto); + if (!ephoto->url_ret) + ephoto->upload_error = strdup(string); + + return EINA_FALSE; +} + +static void +_new_dir_confirm(void *data, Evas_Object *obj EINA_UNUSED, + void *event_data EINA_UNUSED) +{ + Evas_Object *popup = data; + Evas_Object *entry = evas_object_data_get(popup, "entry"); + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + const char *file = evas_object_data_get(popup, "file"); + const char *text = elm_object_text_get(entry); + char new_file_name[PATH_MAX]; + int ret; + + snprintf(new_file_name, PATH_MAX, "%s/%s", file, text); + ret = ecore_file_mkdir(new_file_name); + if (!ret) + { + _complete(ephoto, _("Error"), + _("There was an error creating this directory.")); + } + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); +} + +static void +_new_dir_cancel(void *data, Evas_Object *obj EINA_UNUSED, + void *event_data EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); +} + +static void +_new_dir(Ephoto *ephoto, const char *file) +{ + Evas_Object *popup, *box, *entry, *button, *ic; + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + elm_object_part_text_set(popup, "title,text", _("New Directory")); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "file", file); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + entry = elm_entry_add(box); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_TRUE); + elm_object_text_set(entry, _("New Directory")); + elm_entry_select_all(entry); + elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, entry); + evas_object_show(entry); + evas_object_data_set(popup, "entry", entry); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Save")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _new_dir_confirm, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Cancel")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _new_dir_cancel, popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + elm_object_part_content_set(popup, "default", box); + evas_object_show(popup); +} + +static void +_rename_confirm(void *data, Evas_Object *obj EINA_UNUSED, + void *event_data EINA_UNUSED) +{ + Evas_Object *popup = data; + Evas_Object *entry = evas_object_data_get(popup, "entry"); + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + const char *file = evas_object_data_get(popup, "file"); + const char *text = elm_object_text_get(entry); + char *escaped = ecore_file_escape_name(text); + char new_file_name[PATH_MAX], dir[PATH_MAX]; + int ret; + + if (!escaped) + { + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + return; + } + snprintf(dir, PATH_MAX, "%s", file); + if (ecore_file_is_dir(file)) + snprintf(new_file_name, PATH_MAX, "%s/%s", ecore_file_dir_get(dir), text); + else + snprintf(new_file_name, PATH_MAX, "%s/%s.%s", ecore_file_dir_get(dir), escaped, + strrchr(dir, '.')+1); + ret = ecore_file_mv(file, new_file_name); + if (!ret) + { + if (ecore_file_is_dir(new_file_name)) + _complete(ephoto, _("Error"), + _("There was an error renaming this directory.")); + else + _complete(ephoto, _("Error"), + _("There was an error renaming this file.")); + } + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + free(escaped); +} + +static void +_rename_cancel(void *data, Evas_Object *obj EINA_UNUSED, + void *event_data EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); +} + +static void +_rename_file(Ephoto *ephoto, const char *file) +{ + Evas_Object *popup, *box, *entry, *button, *ic; + char buf[PATH_MAX], *bn, *string; + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + if (ecore_file_is_dir(file)) + elm_object_part_text_set(popup, "title, text", _("Rename Directory")); + else + elm_object_part_text_set(popup, "title,text", _("Rename File")); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "file", file); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + snprintf(buf, PATH_MAX, "%s", file); + bn = basename(buf); + string = ecore_file_strip_ext(bn); + + entry = elm_entry_add(box); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_TRUE); + elm_object_text_set(entry, string); + elm_entry_select_all(entry); + elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, entry); + evas_object_show(entry); + evas_object_data_set(popup, "entry", entry); + + free(string); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Rename")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _rename_confirm, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Cancel")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _rename_cancel, popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + elm_object_part_content_set(popup, "default", box); + evas_object_show(popup); +} + +static Evas_Object * +_processing(Ephoto *ephoto, const char *title, const char *text) +{ + Evas_Object *popup, *box, *label, *pb; + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + elm_object_part_text_set(popup, "title,text", title); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + + box = elm_box_add(popup); + elm_box_horizontal_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + label = elm_label_add(box); + elm_object_text_set(label, text); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(box, label); + evas_object_show(label); + + pb = elm_progressbar_add(box); + evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); + elm_object_style_set(pb, "wheel"); + elm_progressbar_pulse_set(pb, EINA_TRUE); + elm_box_pack_end(box, pb); + evas_object_show(pb); + elm_progressbar_pulse(pb, EINA_TRUE); + + evas_object_data_set(popup, "ephoto", ephoto); + elm_object_part_content_set(popup, "default", box); + return popup; +} + +static Eina_Bool +_move_idler_cb(void *data) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + const char *destination = evas_object_data_get(popup, "destination"); + const char *file; + int i; + + if (!ephoto->file_idler_pos) + ephoto->file_idler_pos = eina_list_nth(ephoto->file_idler_pos, 0); + if (!ephoto->file_idler_pos) + { + ecore_idler_del(ephoto->file_idler); + ephoto->file_idler = NULL; + eina_list_free(ephoto->file_idler_pos); + ephoto->file_idler_pos = NULL; + if (ephoto->file_errors > 0) + { + char msg[PATH_MAX]; + + snprintf(msg, PATH_MAX, "%s %d %s.", + _("There was an error moving"), ephoto->file_errors, + ngettext("file", "files", ephoto->file_errors)); + _complete(ephoto, _("Error"), msg); + } + ephoto->file_errors = 0; + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + return EINA_FALSE; + } + for (i = 0; i < 5; i++) + { + file = eina_list_data_get(ephoto->file_idler_pos); + if (!file) + break; + if (ecore_file_exists(file) && ecore_file_is_dir(destination) && + evas_object_image_extension_can_load_get(file)) + { + char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; + int ret; + + snprintf(fp, PATH_MAX, "%s", file); + snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); + if (ecore_file_exists(dest)) + { + snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, + basename(fp)); + if (ecore_file_exists(extra)) + { + int count; + + for (count = 2; ecore_file_exists(extra); count++) + { + memset(extra, 0, sizeof(extra)); + snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", + destination, count, basename(fp)); + } + } + ret = ecore_file_mv(file, extra); + } + else + ret = ecore_file_mv(file, dest); + if (!ret) + ephoto->file_errors++; + } + ephoto->file_idler_pos = eina_list_next(ephoto->file_idler_pos); + } + return EINA_TRUE; +} + +static void +_move_files(Ephoto *ephoto, Eina_List *files, + const char *destination) +{ + Evas_Object *popup = _processing(ephoto, _("Moving Files"), + _("Please wait while your files are moved.")); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "destination", destination); + evas_object_show(popup); + + ephoto->file_idler_pos = eina_list_clone(files); + eina_list_free(files); + if (!ephoto->file_idler) + ephoto->file_idler = ecore_idler_add(_move_idler_cb, popup); +} + +static Eina_Bool +_copy_idler_cb(void *data) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + const char *destination = evas_object_data_get(popup, "destination"); + const char *file; + int i; + + if (!ephoto->file_idler_pos) + ephoto->file_idler_pos = eina_list_nth(ephoto->file_idler_pos, 0); + if (!ephoto->file_idler_pos) + { + ecore_idler_del(ephoto->file_idler); + ephoto->file_idler = NULL; + eina_list_free(ephoto->file_idler_pos); + ephoto->file_idler_pos = NULL; + if (ephoto->file_errors > 0) + { + char msg[PATH_MAX]; + + snprintf(msg, PATH_MAX, "%s %d %s.", + _("There was an error copying"), ephoto->file_errors, + ngettext("file", "files", ephoto->file_errors)); + _complete(ephoto, _("Error"), msg); + } + ephoto->file_errors = 0; + if (strcmp(destination, ephoto->config->directory)) + { + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + + return EINA_FALSE; + } + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + + return EINA_FALSE; + } + for (i = 0; i < 5; i++) + { + file = eina_list_data_get(ephoto->file_idler_pos); + if (!file) + break; + if (ecore_file_exists(file) && ecore_file_is_dir(destination) && + evas_object_image_extension_can_load_get(file)) + { + char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; + int ret; + + snprintf(fp, PATH_MAX, "%s", file); + snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); + if (ecore_file_exists(dest)) + { + snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, + basename(fp)); + if (ecore_file_exists(extra)) + { + int count; + + for (count = 2; ecore_file_exists(extra); count++) + { + memset(extra, 0, PATH_MAX); + snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", + destination, count, basename(fp)); + } + } + ret = ecore_file_cp(file, extra); + } + else + ret = ecore_file_cp(file, dest); + if (!ret) + ephoto->file_errors++; + } + ephoto->file_idler_pos = eina_list_next(ephoto->file_idler_pos); + } + return EINA_TRUE; +} + +static void +_copy_files(Ephoto *ephoto, Eina_List *files, + const char *destination) +{ + Evas_Object *popup = _processing(ephoto, _("Copying Files"), + _("Please wait while your files are copied.")); + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "destination", destination); + evas_object_show(popup); + + ephoto->file_idler_pos = eina_list_clone(files); + eina_list_free(files); + if (!ephoto->file_idler) + ephoto->file_idler = ecore_idler_add(_copy_idler_cb, popup); +} + +static Eina_Bool +_delete_idler_cb(void *data) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + const char *file; + char destination[PATH_MAX]; + int i; + + snprintf(destination, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); + if (!ecore_file_exists(destination)) + ecore_file_mkpath(destination); + + if (!ephoto->file_idler_pos) + ephoto->file_idler_pos = eina_list_nth(ephoto->file_idler_pos, 0); + if (!ephoto->file_idler_pos) + { + ecore_idler_del(ephoto->file_idler); + ephoto->file_idler = NULL; + eina_list_free(ephoto->file_idler_pos); + ephoto->file_idler_pos = NULL; + if (ephoto->file_errors > 0) + { + char msg[PATH_MAX]; + + snprintf(msg, PATH_MAX, "%s %d %s.", + _("There was an error deleting"), ephoto->file_errors, + ngettext("file", "files", ephoto->file_errors)); + _complete(ephoto, _("Error"), msg); + } + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + + return EINA_FALSE; + } + for (i = 0; i < 5; i++) + { + file = eina_list_data_get(ephoto->file_idler_pos); + if (!file) + break; + if (ecore_file_exists(file) && ecore_file_is_dir(destination)) + { + char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; + int ret; + + snprintf(fp, PATH_MAX, "%s", file); + snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); + if (ecore_file_exists(dest)) + { + snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, + basename(fp)); + if (ecore_file_exists(extra)) + { + int count; + + for (count = 2; ecore_file_exists(extra); count++) + { + memset(extra, 0, sizeof(extra)); + snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", + destination, count, basename(fp)); + } + } + ret = ecore_file_mv(file, extra); + } + else + ret = ecore_file_mv(file, dest); + if (!ret) + ephoto->file_errors++; + } + ephoto->file_idler_pos = eina_list_next(ephoto->file_idler_pos); + } + return EINA_TRUE; +} + +static void +_delete_files(Ephoto *ephoto, Eina_List *files) +{ + Evas_Object *popup = _processing(ephoto, _("Deleting Files"), + _("Please wait while your files are deleted.")); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "files", files); + evas_object_show(popup); + + ephoto->file_idler_pos = eina_list_clone(files); + eina_list_free(files); + if (!ephoto->file_idler) + ephoto->file_idler = ecore_idler_add(_delete_idler_cb, popup); +} + +static Eina_Bool +_delete_dir_idler_cb(void *data) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Eina_List *files = evas_object_data_get(popup, "files"); + const char *dir = eina_list_data_get(files); + char destination[PATH_MAX]; + + snprintf(destination, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); + + if (!ecore_file_exists(destination)) + ecore_file_mkpath(destination); + + if (dir) + { + char fp[PATH_MAX], dest[PATH_MAX], extra[PATH_MAX]; + int ret; + + snprintf(fp, PATH_MAX, "%s", dir); + snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); + if (ecore_file_exists(dir) && ecore_file_is_dir(destination)) + { + if (ecore_file_exists(dest)) + { + snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, + basename(fp)); + if (ecore_file_exists(extra)) + { + int count; + for (count = 2; ecore_file_exists(extra); count++) + { + memset(extra, 0, sizeof(extra)); + snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", + destination, count, basename(fp)); + } + } + ret = ecore_file_mv(dir, extra); + } + else + ret = ecore_file_mv(dir, dest); + if (!ret) + ephoto->file_errors++; + } + } + if (!dir || ephoto->file_errors > 0) + { + char msg[PATH_MAX]; + + snprintf(msg, PATH_MAX, "%s.", + _("There was an error deleting this directory")); + _complete(ephoto, _("Error"), msg); + } + ecore_idler_del(ephoto->file_idler); + ephoto->file_idler = NULL; + eina_list_free(ephoto->file_idler_pos); + + ephoto->file_errors = 0; + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + + return EINA_FALSE; +} + +static void +_delete_dir(Ephoto *ephoto, Eina_List *files) +{ + Evas_Object *popup = _processing(ephoto, _("Deleting Directory"), + _("Please wait while your directory is deleted.")); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "files", files); + evas_object_show(popup); + + ephoto->file_idler_pos = NULL; + if (!ephoto->file_idler) + ephoto->file_idler = ecore_idler_add(_delete_dir_idler_cb, popup); +} + +static Eina_Bool +_empty_trash_idler_cb(void *data) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + const char *file; + char trash[PATH_MAX]; + int i = 0; + + snprintf(trash, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); + + if (!ephoto->file_idler_pos) + ephoto->file_idler_pos = eina_list_nth(ephoto->file_idler_pos, 0); + if (!ephoto->file_idler_pos) + { + ecore_idler_del(ephoto->file_idler); + ephoto->file_idler = NULL; + eina_list_free(ephoto->file_idler_pos); + ephoto->file_idler_pos = NULL; + if (ephoto->file_errors > 0) + { + char msg[PATH_MAX]; + + snprintf(msg, PATH_MAX, "%s %d %s.", + _("There was an error deleting"), ephoto->file_errors, + ngettext("file", "files", ephoto->file_errors)); + _complete(ephoto, _("Error"), msg); + } + ephoto->file_errors = 0; + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + + return EINA_FALSE; + } + for (i = 0; i < 5; i++) + { + file = eina_list_data_get(ephoto->file_idler_pos); + if (!file) + break; + if (ecore_file_exists(file)) + { + int ret; + + if (ecore_file_is_dir(file)) + ret = ecore_file_recursive_rm(file); + else + ret = ecore_file_unlink(file); + if (!ret) + ephoto->file_errors++; + } + ephoto->file_idler_pos = eina_list_next(ephoto->file_idler_pos); + } + return EINA_TRUE; +} + +static void +_empty_trash(Ephoto *ephoto, Eina_List *files) +{ + Evas_Object *popup = _processing(ephoto, _("Emptying Trash"), + _("Please wait while your files are deleted.")); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_show(popup); + + ephoto->file_idler_pos = eina_list_clone(files); + eina_list_free(files); + if (!ephoto->file_idler) + ephoto->file_idler = ecore_idler_add(_empty_trash_idler_cb, popup); +} + +static void +_prompt_upload_apply(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *ppopup = data; + Evas_Object *popup; + Ephoto *ephoto = evas_object_data_get(ppopup, "ephoto"); + Ephoto_Entry *entry = evas_object_data_get(ppopup, "entry"); + char buf[PATH_MAX]; + FILE *f; + unsigned char *fdata; + int fsize; + + evas_object_del(ppopup); + popup = _processing(ephoto, _("Upload Image"), + ("Please wait while your image is uploaded.")); + + f = fopen(entry->path, "rb"); + fseek(f, 0, SEEK_END); + fsize = ftell(f); + rewind(f); + fdata = malloc(fsize); + fread(fdata, fsize, 1, f); + fclose(f); + + snprintf(buf, PATH_MAX, "image=%s", fdata); + + ephoto->upload_handlers = + eina_list_append(ephoto->upload_handlers, + ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, + _upload_image_cb, ephoto)); + ephoto->upload_handlers = + eina_list_append(ephoto->upload_handlers, + ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE, + _upload_image_complete_cb, popup)); + + ephoto->url_up = ecore_con_url_new("https://api.imgur.com/3/image.xml"); + ecore_con_url_additional_header_add(ephoto->url_up, "Authorization", + "Client-ID 67aecc7e6662370"); + ecore_con_url_http_version_set(ephoto->url_up, ECORE_CON_URL_HTTP_VERSION_1_0); + ecore_con_url_post(ephoto->url_up, fdata, fsize, NULL); +} + +static void +_prompt_save_image_apply(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Ephoto_Entry *entry = evas_object_data_get(popup, "entry"); + Evas_Object *image = evas_object_data_get(popup, "image"); + Eina_Bool success; + + if (ecore_file_exists(entry->path)) + { + success = ecore_file_unlink(entry->path); + if (!success) + { + _complete(ephoto, _("Save Failed"), + _("Error: Image could not be saved here!")); + ephoto_single_browser_entry_set(ephoto->single_browser, entry); + evas_object_del(popup); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + return; + } + } + success = + evas_object_image_save(elm_image_object_get(image), entry->path, + NULL, NULL); + if (!success) + _complete(ephoto, _("Save Failed"), + _("Error: Image could not be saved here!")); + ephoto_single_browser_entry_set(ephoto->single_browser, entry); + evas_object_del(popup); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); +} + +static void +_prompt_save_image_as_apply(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + const char *selected = event_info; + Evas_Object *opopup = data; + Ephoto *ephoto = evas_object_data_get(opopup, "ephoto"); + Ephoto_Entry *entry = evas_object_data_get(opopup, "entry"); + + if (selected) + { + Evas_Object *image = evas_object_data_get(opopup, "image"); + Eina_Bool success; + + char buf[PATH_MAX]; + const char *ex, *ext; + + ex = strrchr(selected, '.'); + if (!ex) + { + snprintf(buf, PATH_MAX, "%s.jpg", selected); + } + else + { + ext = eina_stringshare_add((strrchr(selected, '.')+1)); + if (!_ephoto_file_image_can_save(ext)) + { + if (ext) + eina_stringshare_del(ext); + snprintf(buf, PATH_MAX, "%s.jpg", selected); + } + else + { + if (ext) + eina_stringshare_del(ext); + snprintf(buf, PATH_MAX, "%s", selected); + } + } + if (ecore_file_exists(buf)) + { + Evas_Object *popup, *ic, *button; + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = _prompt(ephoto, _("Overwrite Image"), + _("Are you sure you want to overwrite this image?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", + _save_image_as_overwrite, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", + _prompt_cancel, popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "file", strdup(buf)); + evas_object_data_set(popup, "image", image); + evas_object_data_set(popup, "entry", entry); + evas_object_show(popup); + } + else + { + ephoto_single_browser_path_pending_set + (ephoto->single_browser, buf); + success = + evas_object_image_save(elm_image_object_get(image), buf, + NULL, NULL); + if (!success) + { + _complete(ephoto, _("Save Failed"), + _("Error: Image could not be saved here!")); + ephoto_single_browser_path_pending_unset + (ephoto->single_browser); + } + else + { + evas_object_del(opopup); + char *dir = ecore_file_dir_get(buf); + + if (strcmp(dir, ephoto->config->directory)) + { + ephoto_thumb_browser_fsel_clear(ephoto); + ephoto_directory_set(ephoto, dir, NULL, + EINA_FALSE, EINA_FALSE); + ephoto_thumb_browser_top_dir_set(ephoto, + ephoto->config->directory); + free(dir); + } + } + } + } + evas_object_del(opopup); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); +} + +static void +_prompt_empty_apply(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Eina_List *files = evas_object_data_get(popup, "files"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + _empty_trash(ephoto, files); +} + +static void +_prompt_delete_apply(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Eina_List *files = evas_object_data_get(popup, "files"); + Eina_File_Type *type = evas_object_data_get(popup, "type"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + if (*type == EINA_FILE_DIR) + _delete_dir(ephoto, files); + else + _delete_files(ephoto, files); +} + +static void +_prompt_move_apply(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Eina_List *files = evas_object_data_get(popup, "files"); + const char *path = evas_object_data_get(popup, "path"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + _move_files(ephoto, files, path); +} + +static void +_prompt_copy_apply(void *data, Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Evas_Object *popup = data; + Ephoto *ephoto = evas_object_data_get(popup, "ephoto"); + Eina_List *files = evas_object_data_get(popup, "files"); + const char *path = evas_object_data_get(popup, "path"); + + evas_object_del(popup); + evas_object_freeze_events_set(ephoto->pager, EINA_FALSE); + elm_object_focus_set(ephoto->pager, EINA_TRUE); + _copy_files(ephoto, files, path); +} + +void +ephoto_file_save_image(Ephoto *ephoto, Ephoto_Entry *entry, Evas_Object *image) +{ + Evas_Object *popup, *ic, *button; + + if (!_ephoto_file_image_can_save(strrchr(entry->label, '.')+1)) + { + _complete(ephoto, _("Save Failed"), + _("Error: Image could not be saved here!")); + return; + } + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = _prompt(ephoto, _("Save Image"), + _("Are you sure you want to overwrite this image?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_save_image_apply, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "entry", entry); + evas_object_data_set(popup, "image", image); + evas_object_show(popup); +} + +void +ephoto_file_save_image_as(Ephoto *ephoto, Ephoto_Entry *entry, Evas_Object *image) +{ + Evas_Object *popup, *fsel, *rect, *table; + int h; + + evas_object_geometry_get(ephoto->win, 0, 0, 0, &h); + + evas_object_freeze_events_set(ephoto->pager, EINA_TRUE); + + popup = elm_popup_add(ephoto->win); + elm_popup_scrollable_set(popup, EINA_TRUE); + elm_object_part_text_set(popup, "title,text", _("Save Image As")); + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + + table = elm_table_add(popup); + evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); + + rect = elm_box_add(popup); + evas_object_size_hint_min_set(rect, 0, h / 1.5); + evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_fill_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_table_pack(table, rect, 0, 0, 1, 1); + evas_object_show(rect); + + fsel = elm_fileselector_add(table); + elm_fileselector_is_save_set(fsel, EINA_TRUE); + elm_fileselector_expandable_set(fsel, EINA_FALSE); + elm_fileselector_path_set(fsel, ephoto->config->directory); + elm_fileselector_current_name_set(fsel, entry->basename); + elm_fileselector_mime_types_filter_append(fsel, "image/*", + _("Image Files")); + evas_object_size_hint_weight_set(fsel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(fsel, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(fsel, "done", _prompt_save_image_as_apply, popup); + elm_table_pack(table, fsel, 0, 0, 1, 1); + evas_object_show(fsel); + + evas_object_show(table); + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "entry", entry); + evas_object_data_set(popup, "image", image); + elm_object_content_set(popup, table); + evas_object_show(popup); +} + +void +ephoto_file_upload_image(Ephoto *ephoto, Ephoto_Entry *entry) +{ + Evas_Object *popup, *ic, *button; + + popup = + _prompt(ephoto, _("Upload Image"), + _("Are you sure you want to upload this image publically to imgur.com?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_upload_apply, + popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "ephoto", ephoto); + evas_object_data_set(popup, "entry", entry); + + evas_object_show(popup); +} + +void +ephoto_file_new_dir(Ephoto *ephoto, const char *path) +{ + _new_dir(ephoto, path); +} + +void +ephoto_file_rename(Ephoto *ephoto, const char *path) +{ + _rename_file(ephoto, path); +} + +void +ephoto_file_move(Ephoto *ephoto, Eina_List *files, const char *path) +{ + if (ephoto->config->prompts) + { + Evas_Object *ic, *button; + Evas_Object *popup; + char move_dir[PATH_MAX]; + + snprintf(move_dir, PATH_MAX, "%s:
%s?", + _("Are you sure you want to move these files to"), path); + + popup = _prompt(ephoto, _("Move Files"), move_dir); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", + _prompt_move_apply, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "files", files); + evas_object_data_set(popup, "path", path); + + evas_object_show(popup); + } + else + _move_files(ephoto, files, path); +} + +void +ephoto_file_copy(Ephoto *ephoto, Eina_List *files, const char *path) +{ + if (eina_list_count(files) <= 0) + return; + if (ephoto->config->prompts) + { + Evas_Object *ic, *button; + Evas_Object *popup; + char copy_dir[PATH_MAX]; + + snprintf(copy_dir, PATH_MAX, "%s:
%s?", + _("Are you sure you want to copy these files to"), path); + + popup = _prompt(ephoto, _("Copy Files"), copy_dir); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", + _prompt_copy_apply, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "files", files); + evas_object_data_set(popup, "path", path); + + evas_object_show(popup); + } + else + _copy_files(ephoto, files, path); +} + +void +ephoto_file_paste(Ephoto *ephoto, Eina_List *files, Eina_Bool copy, const char *path) +{ + if (eina_list_count(files) <= 0) + return; + if (!copy) + { + if (ephoto->config->prompts) + { + Evas_Object *ic, *button; + Evas_Object *popup; + + popup = + _prompt(ephoto, _("Move Files"), + _("Are you sure you want to move these files here?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", + _prompt_move_apply, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "files", files); + evas_object_data_set(popup, "path", path); + + evas_object_show(popup); + } + else + { + _move_files(ephoto, files, path); + } + } + else + { + if (ephoto->config->prompts) + { + Evas_Object *ic, *button; + Evas_Object *popup; + + popup = + _prompt(ephoto, _("Copy Files"), + _("Are you sure you want to copy these files here?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", + _prompt_copy_apply, popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, + 1, 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + + evas_object_data_set(popup, "files", files); + evas_object_data_set(popup, "path", path); + + evas_object_show(popup); + } + else + { + _copy_files(ephoto, files, path); + } + } +} + +void +ephoto_file_delete(Ephoto *ephoto, Eina_List *files, Eina_File_Type type) +{ + if (eina_list_count(files) <= 0) + return; + + if (ephoto->config->prompts) + { + Evas_Object *ic, *button; + Evas_Object *popup; + + if (type == EINA_FILE_DIR) + popup = + _prompt(ephoto, _("Delete Directory"), + _("Are you sure you want to delete this directory?")); + else + popup = + _prompt(ephoto, _("Delete Files"), + _("Are you sure you want to delete these files?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_delete_apply, + popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + evas_object_show(button); + elm_object_part_content_set(popup, "button2", button); + + evas_object_data_set(popup, "type", &type); + evas_object_data_set(popup, "files", files); + + evas_object_show(popup); + } + else + { + if (type == EINA_FILE_DIR) + _delete_dir(ephoto, files); + else + _delete_files(ephoto, files); + } +} + +void +ephoto_file_empty_trash(Ephoto *ephoto, Eina_List *files) +{ + if (eina_list_count(files) <= 0) + return; + if (ephoto->config->prompts) + { + Evas_Object *ic, *button; + Evas_Object *popup; + + popup = + _prompt(ephoto, _("Empty Trash"), + _("Are you sure you want to empty the trash?")); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "document-save"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("Yes")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_empty_apply, + popup); + elm_object_part_content_set(popup, "button1", button); + evas_object_show(button); + + ic = elm_icon_add(popup); + elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, + 1); + elm_icon_standard_set(ic, "window-close"); + + button = elm_button_add(popup); + elm_object_text_set(button, _("No")); + elm_object_part_content_set(button, "icon", ic); + evas_object_smart_callback_add(button, "clicked", _prompt_cancel, + popup); + elm_object_part_content_set(popup, "button2", button); + evas_object_show(button); + evas_object_data_set(popup, "files", files); + + evas_object_show(popup); + } + else + { + _empty_trash(ephoto, files); + } +} + diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c index 9ca0269..34a3b86 100644 --- a/src/bin/ephoto_main.c +++ b/src/bin/ephoto_main.c @@ -163,7 +163,21 @@ _win_free(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto *ephoto = data; + Ecore_Event_Handler *handler; + if (ephoto->file_idler) + ecore_idler_del(ephoto->file_idler); + if (ephoto->file_idler_pos) + eina_list_free(ephoto->file_idler_pos); + if (ephoto->upload_handlers) + EINA_LIST_FREE(ephoto->upload_handlers, handler) + ecore_event_handler_del(handler); + if (ephoto->url_up) + ecore_con_url_free(ephoto->url_up); + if (ephoto->url_ret) + free(ephoto->url_ret); + if (ephoto->upload_error) + free(ephoto->upload_error); if (ephoto->top_directory) eina_stringshare_del(ephoto->top_directory); if (ephoto->timer.thumb_regen) diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c index f59ea77..8672532 100644 --- a/src/bin/ephoto_single_browser.c +++ b/src/bin/ephoto_single_browser.c @@ -25,16 +25,12 @@ struct _Ephoto_Single_Browser Ephoto_Entry *entry; Ephoto_Orient orient; Eina_List *handlers; - Eina_List *upload_handlers; Eina_List *entries; Eina_Bool editing:1; Eina_Bool cropping:1; unsigned int *edited_image_data; int ew; int eh; - Ecore_Con_Url *url_up; - char *url_ret; - char *upload_error; }; struct _Ephoto_Viewer @@ -1027,355 +1023,14 @@ _reset_image(void *data, Evas_Object *obj EINA_UNUSED, evas_object_show(popup); } -static void -_failed_save(Ephoto_Single_Browser *sb) -{ - Evas_Object *popup, *box, *label, *ic, *button; - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("Save Failed")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, _("Error: Image could not be saved here!")); - evas_object_size_hint_weight_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Ok")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _reset_no, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - evas_object_data_set(popup, "single_browser", sb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); -} - -static void -_save_yes(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); - Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - Eina_Bool success; - - if (ecore_file_exists(sb->entry->path)) - { - success = ecore_file_unlink(sb->entry->path); - if (!success) - { - _failed_save(sb); - ephoto_single_browser_entry_set(sb->main, sb->entry); - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } - return; - } - } - success = - evas_object_image_save(elm_image_object_get(v->image), sb->entry->path, - NULL, NULL); - if (!success) - _failed_save(sb); - ephoto_single_browser_entry_set(sb->main, sb->entry); - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } -} - -static void -_save_no(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); - - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } -} - static void _save_image(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Single_Browser *sb = data; - Evas_Object *popup, *box, *label, *ic, *button; - - if (!_ephoto_file_image_can_save(strrchr(sb->entry->label, '.')+1)) - { - _failed_save(sb); - return; - } - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("Save Image")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, - _("Are you sure you want to overwrite this image?")); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _save_yes, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _save_no, popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "single_browser", sb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); -} - -static void -_save_image_as_overwrite(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - const char *file = evas_object_data_get(popup, "file"); - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - Eina_Bool success; - if (ecore_file_exists(file)) - { - success = ecore_file_unlink(file); - if (!success) - { - _failed_save(sb); - ephoto_single_browser_entry_set(sb->main, sb->entry); - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } - return; - } - } - ephoto_single_browser_path_pending_set(sb->ephoto->single_browser, file); - success = - evas_object_image_save(elm_image_object_get(v->image), file, - NULL, NULL); - if (!success) - { - _failed_save(sb); - eina_stringshare_del(sb->pending_path); - sb->pending_path = NULL; - } - else - { - char *dir = ecore_file_dir_get(file); - if (strcmp(dir, sb->ephoto->config->directory)) - { - ephoto_thumb_browser_fsel_clear(sb->ephoto); - ephoto_directory_set(sb->ephoto, dir, NULL, EINA_FALSE, EINA_FALSE); - ephoto_thumb_browser_top_dir_set(sb->ephoto, - sb->ephoto->config->directory); - free(dir); - } - } - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } -} - -static void -_save_image_as_done(void *data, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - const char *selected = event_info; - Evas_Object *opopup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(opopup, "single_browser"); - - if (selected) - { - Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - Eina_Bool success; - - char buf[PATH_MAX]; - const char *ex, *ext; - - ex = strrchr(selected, '.'); - if (!ex) - { - snprintf(buf, PATH_MAX, "%s.jpg", selected); - } - else - { - ext = eina_stringshare_add((strrchr(selected, '.')+1)); - if (!_ephoto_file_image_can_save(ext)) - { - if (ext) - eina_stringshare_del(ext); - snprintf(buf, PATH_MAX, "%s.jpg", selected); - } - else - { - if (ext) - eina_stringshare_del(ext); - snprintf(buf, PATH_MAX, "%s", selected); - } - } - if (ecore_file_exists(buf)) - { - Evas_Object *popup, *box, *label, *ic, *button; - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", - _("Overwite Image")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, - EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, - EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, - _("Are you sure you want to overwrite this image?")); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, - EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _save_image_as_overwrite, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _save_no, popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "single_browser", sb); - evas_object_data_set(popup, "file", strdup(buf)); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); - } - else - { - ephoto_single_browser_path_pending_set(sb->ephoto-> - single_browser, buf); - success = - evas_object_image_save(elm_image_object_get(v->image), buf, - NULL, NULL); - if (!success) - { - _failed_save(sb); - eina_stringshare_del(sb->pending_path); - sb->pending_path = NULL; - } - else - { - evas_object_del(opopup); - char *dir = ecore_file_dir_get(buf); - - if (strcmp(dir, sb->ephoto->config->directory)) - { - ephoto_thumb_browser_fsel_clear(sb->ephoto); - ephoto_directory_set(sb->ephoto, dir, NULL, - EINA_FALSE, EINA_FALSE); - ephoto_thumb_browser_top_dir_set(sb->ephoto, - sb->ephoto->config->directory); - free(dir); - } - } - } - } - evas_object_del(opopup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } + ephoto_file_save_image(sb->ephoto, sb->entry, v->image); } static void @@ -1383,367 +1038,9 @@ _save_image_as(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Single_Browser *sb = data; - Evas_Object *popup, *fsel, *rect, *table; - int h; + Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - evas_object_geometry_get(sb->ephoto->win, 0, 0, 0, &h); - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_popup_scrollable_set(popup, EINA_TRUE); - elm_object_part_text_set(popup, "title,text", _("Save Image As")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - table = elm_table_add(popup); - evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL); - - rect = elm_box_add(popup); - evas_object_size_hint_min_set(rect, 0, h / 1.5); - evas_object_size_hint_weight_set(rect, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_fill_set(rect, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_table_pack(table, rect, 0, 0, 1, 1); - evas_object_show(rect); - - fsel = elm_fileselector_add(table); - elm_fileselector_is_save_set(fsel, EINA_TRUE); - elm_fileselector_expandable_set(fsel, EINA_FALSE); - elm_fileselector_path_set(fsel, sb->ephoto->config->directory); - elm_fileselector_current_name_set(fsel, sb->entry->basename); - elm_fileselector_mime_types_filter_append(fsel, "image/*", - _("Image Files")); - evas_object_size_hint_weight_set(fsel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(fsel, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(fsel, "done", _save_image_as_done, popup); - elm_table_pack(table, fsel, 0, 0, 1, 1); - evas_object_show(fsel); - - evas_object_show(table); - evas_object_data_set(popup, "single_browser", sb); - elm_object_content_set(popup, table); - evas_object_show(popup); -} - -static void -_upload_image_cancel(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); - - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } -} - -static void -_upload_entry_anchor_bt(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - char buf[PATH_MAX]; - Evas_Object *av = data; - const char *link = evas_object_data_get(av, "link"); - - elm_entry_anchor_hover_end(av); - snprintf(buf, PATH_MAX, "xdg-open %s", link); - ecore_exe_run(buf, NULL); -} - -static void -_upload_entry_anchor(void *data, Evas_Object *obj, void *event_info) -{ - Evas_Object *av = data; - Evas_Object *button; - Elm_Entry_Anchor_Hover_Info *ei = event_info; - - button = elm_button_add(obj); - elm_object_text_set(button, _("Open Link In Browser")); - elm_object_part_content_set(ei->hover, "middle", button); - evas_object_smart_callback_add(button, "clicked", _upload_entry_anchor_bt, - av); - evas_object_show(button); -} - -static void -_upload_image_url_copy(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *entry = data; - - elm_entry_select_all(entry); - elm_entry_selection_copy(entry); - elm_entry_select_none(entry); -} - -static Eina_Bool -_upload_image_complete_cb(void *data, int ev_type EINA_UNUSED, void *event) -{ - Evas_Object *ppopup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(ppopup, "single_browser"); - Ecore_Con_Event_Url_Complete *ev = event; - Ecore_Event_Handler *handler; - Evas_Object *popup, *box, *hbox, *label, *entry, *ic, *button; - - if (ev->url_con != sb->url_up) - return ECORE_CALLBACK_RENEW; - - evas_object_del(ppopup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("Image Uploaded")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - hbox = elm_box_add(box); - elm_box_horizontal_set(hbox, EINA_TRUE); - evas_object_size_hint_weight_set(hbox, EVAS_HINT_FILL, 0.0); - evas_object_size_hint_align_set(hbox, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, hbox); - evas_object_show(hbox); - - entry = elm_entry_add(hbox); - elm_entry_anchor_hover_style_set(entry, "popout"); - elm_entry_anchor_hover_parent_set(entry, sb->main); - elm_entry_editable_set(entry, EINA_TRUE); - elm_entry_scrollable_set(entry, EINA_TRUE); - elm_entry_context_menu_disabled_set(entry, EINA_TRUE); - elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_OFF); - evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_smart_callback_add(entry, "anchor,hover,opened", - _upload_entry_anchor, entry); - elm_box_pack_end(hbox, entry); - evas_object_show(entry); - - ic = elm_icon_add(hbox); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_HORIZONTAL, 1, 1); - elm_icon_standard_set(ic, "edit-copy"); - - button = elm_button_add(hbox); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _upload_image_url_copy, - entry); - elm_box_pack_end(hbox, button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Ok")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _upload_image_cancel, - popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - evas_object_data_set(popup, "single_browser", sb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); - - EINA_LIST_FREE(sb->upload_handlers, - handler) ecore_event_handler_del(handler); - - if (!sb->url_ret || ev->status != 200) - { - elm_object_text_set(label, - _("There was an error uploading your image!")); - elm_entry_single_line_set(entry, EINA_TRUE); - elm_object_text_set(entry, sb->upload_error); - evas_object_show(popup); - ecore_con_url_free(sb->url_up); - sb->url_up = NULL; - free(sb->upload_error); - sb->upload_error = NULL; - return EINA_FALSE; - } - else - { - char buf[PATH_MAX], link[PATH_MAX]; - - snprintf(buf, PATH_MAX, "
%s", - sb->url_ret, sb->url_ret); - snprintf(link, PATH_MAX, "%s", sb->url_ret); - evas_object_data_set(entry, "link", strdup(link)); - elm_object_text_set(label, - _("Your image was uploaded to the following link:")); - elm_entry_single_line_set(entry, EINA_TRUE); - elm_object_text_set(entry, buf); - evas_object_show(popup); - ecore_con_url_free(sb->url_up); - sb->url_up = NULL; - free(sb->url_ret); - sb->url_ret = NULL; - return ECORE_CALLBACK_RENEW; - } -} - -static Eina_Bool -_upload_image_xml_parse(void *data, Eina_Simple_XML_Type type, - const char *content, unsigned offset EINA_UNUSED, - unsigned length EINA_UNUSED) -{ - Ephoto_Single_Browser *sb = data; - char *linkf, *linkl; - - if (type == EINA_SIMPLE_XML_OPEN) - { - if (!strncmp("link>", content, strlen("link>"))) - { - linkf = strchr(content, '>') + 1; - linkl = strtok(linkf, "<"); - sb->url_ret = strdup(linkl); - } - } - return EINA_TRUE; -} - -static Eina_Bool -_upload_image_cb(void *data, int ev_type EINA_UNUSED, void *event) -{ - Ephoto_Single_Browser *sb = data; - Ecore_Con_Event_Url_Data *ev = event; - const char *string = (const char *) ev->data; - - if (ev->url_con != sb->url_up) - return EINA_TRUE; - eina_simple_xml_parse(string, strlen(string) + 1, EINA_TRUE, - _upload_image_xml_parse, sb); - if (!sb->url_ret) - sb->upload_error = strdup(string); - - return EINA_FALSE; -} - -static void -_upload_image_confirm(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *ppopup = data; - Evas_Object *popup, *box, *label, *pb; - Ephoto_Single_Browser *sb = evas_object_data_get(ppopup, "single_browser"); - char buf[PATH_MAX], tmp_path[PATH_MAX]; - FILE *f; - unsigned char *fdata; - int fsize; - - evas_object_del(ppopup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("Upload Image")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, _("Please wait while your image is uploaded.")); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - pb = elm_progressbar_add(box); - evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); - elm_object_style_set(pb, "wheel"); - elm_progressbar_pulse_set(pb, EINA_TRUE); - elm_box_pack_end(box, pb); - evas_object_show(pb); - elm_progressbar_pulse(pb, EINA_TRUE); - - evas_object_data_set(popup, "single_browser", sb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); - - if (sb->edited_image_data) - { - const char *ext = strrchr(sb->entry->path, '.'); - Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer"); - Eina_Bool success; - - ext++; - snprintf(tmp_path, PATH_MAX, "%s/.config/ephoto/tmp.%s", - getenv("HOME"), ext); - success = - evas_object_image_save(elm_image_object_get(v->image), tmp_path, - NULL, NULL); - if (!success) - { - _failed_save(sb); - return; - } - f = fopen(tmp_path, "rb"); - } - else - { - f = fopen(sb->entry->path, "rb"); - } - fseek(f, 0, SEEK_END); - fsize = ftell(f); - rewind(f); - fdata = malloc(fsize); - fread(fdata, fsize, 1, f); - fclose(f); - - if (sb->edited_image_data) - ecore_file_unlink(tmp_path); - - snprintf(buf, PATH_MAX, "image=%s", fdata); - - sb->upload_handlers = - eina_list_append(sb->upload_handlers, - ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, - _upload_image_cb, sb)); - sb->upload_handlers = - eina_list_append(sb->upload_handlers, - ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE, - _upload_image_complete_cb, popup)); - - sb->url_up = ecore_con_url_new("https://api.imgur.com/3/image.xml"); - ecore_con_url_additional_header_add(sb->url_up, "Authorization", - "Client-ID 67aecc7e6662370"); - ecore_con_url_http_version_set(sb->url_up, ECORE_CON_URL_HTTP_VERSION_1_0); - ecore_con_url_post(sb->url_up, fdata, fsize, NULL); + ephoto_file_save_image_as(sb->ephoto, sb->entry, v->image); } static void @@ -1751,184 +1048,8 @@ _upload_image(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Single_Browser *sb = data; - Evas_Object *popup, *box, *label, *ic, *button; - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("Upload Image")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, - _ - ("Are you sure you want to upload this image publically to imgur.com?")); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _upload_image_confirm, - popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _upload_image_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "single_browser", sb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); -} - -static void -_error_ok(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); - - evas_object_del(popup); - if (sb->event) - { - evas_object_freeze_events_set(sb->event, EINA_FALSE); - elm_object_focus_set(sb->event, EINA_TRUE); - } -} - -static void -_delete_apply(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); - char destination[PATH_MAX]; - int ret; - - snprintf(destination, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); - - if (!ecore_file_exists(destination)) - ecore_file_mkpath(destination); - - if (ecore_file_exists(sb->entry->path) && ecore_file_is_dir(destination)) - { - char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; - - snprintf(fp, PATH_MAX, "%s", sb->entry->path); - snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); - if (ecore_file_exists(dest)) - { - snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, - basename(fp)); - if (ecore_file_exists(extra)) - { - int count; - - for (count = 2; ecore_file_exists(extra); count++) - { - memset(extra, 0, sizeof(extra)); - snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", - destination, count, basename(fp)); - } - } - ret = ecore_file_mv(sb->entry->path, extra); - } - else - ret = ecore_file_mv(sb->entry->path, dest); - if (!ret) - { - Evas_Object *ppopup, *box, *label, *ic, *button; - - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - ppopup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(ppopup, "title,text", _("Error")); - elm_popup_orient_set(ppopup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(ppopup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, - EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, - EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, - _("There was an error deleting this file")); - evas_object_size_hint_weight_set(label, - EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, - EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(ppopup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, - EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(ppopup); - elm_object_text_set(button, _("Ok")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _error_ok, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - evas_object_data_set(ppopup, "single_browser", sb); - elm_object_part_content_set(ppopup, "default", box); - evas_object_show(ppopup); - } - } - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } -} - -static void -_delete_cancel(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser"); - - evas_object_del(popup); - if (sb->event) - { - elm_object_focus_set(sb->event, EINA_TRUE); - evas_object_freeze_events_set(sb->event, EINA_FALSE); - } + + ephoto_file_upload_image(sb->ephoto, sb->entry); } static void @@ -1936,59 +1057,10 @@ _delete_image(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { Ephoto_Single_Browser *sb = data; - Evas_Object *popup, *box, *label, *ic, *button; + Eina_List *files = NULL; - if (sb->event) - evas_object_freeze_events_set(sb->event, EINA_TRUE); - - popup = elm_popup_add(sb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("Delete File")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, _("Are you sure you want to delete this file?")); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _delete_apply, - popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _delete_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "single_browser", sb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); + files = eina_list_append(files, sb->entry->path); + ephoto_file_delete(sb->ephoto, files, EINA_FILE_REG); } static void @@ -2495,11 +1567,6 @@ _main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, Eina_File_Direct_Info *info; EINA_LIST_FREE(sb->handlers, handler) ecore_event_handler_del(handler); - if (sb->upload_handlers) - { - EINA_LIST_FREE(sb->upload_handlers, - handler) ecore_event_handler_del(handler); - } if (sb->entry) ephoto_entry_free_listener_del(sb->entry, _entry_free, sb); if (sb->pending_path) @@ -2513,12 +1580,6 @@ _main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, if (!strncmp(bname, "tmp", 3)) ecore_file_unlink(info->path); } - if (sb->url_up) - ecore_con_url_free(sb->url_up); - if (sb->url_ret) - free(sb->url_ret); - if (sb->upload_error) - free(sb->upload_error); free(sb); } @@ -2737,15 +1798,22 @@ ephoto_single_browser_path_pending_set(Evas_Object *obj, const char *path) { Ephoto_Single_Browser *sb = evas_object_data_get(obj, "single_browser"); + ephoto_single_browser_path_pending_unset(obj); + sb->pending_path = eina_stringshare_add(path); +} + +void +ephoto_single_browser_path_pending_unset(Evas_Object *obj) +{ + Ephoto_Single_Browser *sb = evas_object_data_get(obj, "single_browser"); + if (sb->pending_path) { eina_stringshare_del(sb->pending_path); sb->pending_path = NULL; } - sb->pending_path = eina_stringshare_add(path); } - void ephoto_single_browser_path_created(Evas_Object *obj, Ephoto_Entry *entry) { diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c index ab4e6cb..8d2948a 100644 --- a/src/bin/ephoto_thumb_browser.c +++ b/src/bin/ephoto_thumb_browser.c @@ -27,13 +27,9 @@ struct _Ephoto_Thumb_Browser Evas_Object *original_grid; Evas_Object *nolabel; Evas_Object *infolabel; - Evas_Object *bar; Evas_Object *fsel; - Evas_Object *min; - Evas_Object *max; Evas_Object *leftbox; Evas_Object *direntry; - Evas_Object *ficon; Evas_Object *search; Evas_Object *hover; Evas_Object *progress; @@ -45,11 +41,9 @@ struct _Ephoto_Thumb_Browser Eina_List *cut_items; Eina_List *copy_items; Eina_List *handlers; - Eina_List *idler_pos; Eina_List *todo_items; Eina_List *entries; Eina_List *searchentries; - Ecore_Idler *idler; Ecore_Job *change_dir_job; Ecore_Timer *click_timer; Eina_Bool thumbs_only; @@ -58,7 +52,6 @@ struct _Ephoto_Thumb_Browser double totsize_old; int totimages; int totimages_old; - int file_errors; Eina_Bool dragging; Eina_Bool searching; Eina_Bool processing; @@ -541,21 +534,14 @@ _monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, { if (!ecore_file_is_dir(path)) return; - item = elm_genlist_first_item_get(entry->genlist); - while (item) - { - e = elm_object_item_data_get(item); - if (!strcmp(e->path, path)) - return; - item = elm_genlist_item_next_get(item); - } + if (ephoto_entry_exists(entry->ephoto, path)) + return; + if (elm_genlist_item_type_get(entry->item) == ELM_GENLIST_ITEM_TREE && elm_genlist_item_expanded_get(entry->item) == EINA_TRUE) { ic = &_ephoto_dir_class; snprintf(buf, PATH_MAX, "%s", path); - if (ephoto_entry_exists(entry->ephoto, path)) - return; e = ephoto_entry_new(entry->ephoto, path, basename(buf), EINA_FILE_DIR); e->genlist = entry->genlist; @@ -593,6 +579,7 @@ _monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, if (!strcmp(e->path, path)) { elm_object_item_del(e->item); + //if (!strcmp(e->path, e->ephoto->config->directory)) break; } item = elm_genlist_item_next_get(item); @@ -1035,14 +1022,6 @@ _zoom_set(Ephoto_Thumb_Browser *tb, int zoom) zoom = ZOOM_MIN; ephoto_thumb_size_set(tb->ephoto, zoom); elm_gengrid_item_size_set(tb->grid, zoom * scale, zoom * scale); - if (zoom >= ZOOM_MAX) - elm_object_disabled_set(tb->max, EINA_TRUE); - if (zoom > ZOOM_MIN) - elm_object_disabled_set(tb->min, EINA_FALSE); - if (zoom <= ZOOM_MIN) - elm_object_disabled_set(tb->min, EINA_TRUE); - if (zoom < ZOOM_MAX) - elm_object_disabled_set(tb->max, EINA_FALSE); } static void @@ -1203,12 +1182,8 @@ _ephoto_dir_show_folders(void *data, Evas_Object *obj EINA_UNUSED, elm_table_pack(tb->table, tb->leftbox, 0, 0, 1, 1); elm_table_unpack(tb->table, tb->nolabel); elm_table_pack(tb->table, tb->nolabel, 1, 0, 4, 1); - elm_table_unpack(tb->table, tb->gridbox); elm_table_pack(tb->table, tb->gridbox, 1, 0, 4, 1); - elm_object_item_del(tb->ficon); - tb->ficon = elm_toolbar_item_prepend(tb->bar, "system-file-manager", - _("Folders"), _ephoto_dir_hide_folders, tb); tb->ephoto->config->fsel_hide = 0; } @@ -1224,874 +1199,10 @@ _ephoto_dir_hide_folders(void *data, Evas_Object *obj EINA_UNUSED, elm_table_pack(tb->table, tb->nolabel, 0, 0, 5, 1); elm_table_unpack(tb->table, tb->gridbox); elm_table_pack(tb->table, tb->gridbox, 0, 0, 5, 1); - elm_object_item_del(tb->ficon); - tb->ficon = elm_toolbar_item_prepend(tb->bar, "system-file-manager", - _("Folders"), _ephoto_dir_show_folders, tb); elm_object_focus_set(tb->main, EINA_TRUE); tb->ephoto->config->fsel_hide = 1; } -static void -_complete_ok(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); -} - -static void -_complete(Ephoto_Thumb_Browser *tb, const char *title, const char *text) -{ - Evas_Object *popup, *box, *label, *ic, *button; - - evas_object_freeze_events_set(tb->main, EINA_TRUE); - - popup = elm_popup_add(tb->ephoto->win); - elm_object_part_text_set(popup, "title,text", title); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, text); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Ok")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _complete_ok, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - evas_object_data_set(popup, "thumb_browser", tb); - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); -} - -static Evas_Object * -_processing(Ephoto_Thumb_Browser *tb, const char *title, const char *text) -{ - Evas_Object *popup, *box, *label, *pb; - - evas_object_freeze_events_set(tb->main, EINA_TRUE); - - popup = elm_popup_add(tb->ephoto->win); - elm_object_part_text_set(popup, "title,text", title); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, text); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - pb = elm_progressbar_add(box); - evas_object_size_hint_weight_set(pb, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(pb, EVAS_HINT_FILL, 0.5); - elm_object_style_set(pb, "wheel"); - elm_progressbar_pulse_set(pb, EINA_TRUE); - elm_box_pack_end(box, pb); - evas_object_show(pb); - elm_progressbar_pulse(pb, EINA_TRUE); - - evas_object_data_set(popup, "thumb_browser", tb); - elm_object_part_content_set(popup, "default", box); - return popup; -} - -static Eina_Bool -_move_idler_cb(void *data) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *destination = evas_object_data_get(popup, "destination"); - const char *file; - int i; - - if (!tb->idler_pos) - tb->idler_pos = eina_list_nth(tb->idler_pos, 0); - if (!tb->idler_pos) - { - ecore_idler_del(tb->idler); - tb->idler = NULL; - eina_list_free(tb->idler_pos); - tb->idler_pos = NULL; - if (tb->file_errors > 0) - { - char msg[PATH_MAX]; - - snprintf(msg, PATH_MAX, "%s %d %s.", - _("There was an error moving"), tb->file_errors, - ngettext("file", "files", tb->file_errors)); - _complete(tb, _("Error"), msg); - } - tb->file_errors = 0; - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - return EINA_FALSE; - } - for (i = 0; i < 5; i++) - { - file = eina_list_data_get(tb->idler_pos); - if (!file) - break; - if (ecore_file_exists(file) && ecore_file_is_dir(destination) && - evas_object_image_extension_can_load_get(file)) - { - char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; - int ret; - - snprintf(fp, PATH_MAX, "%s", file); - snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); - if (ecore_file_exists(dest)) - { - snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, - basename(fp)); - if (ecore_file_exists(extra)) - { - int count; - - for (count = 2; ecore_file_exists(extra); count++) - { - memset(extra, 0, sizeof(extra)); - snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", - destination, count, basename(fp)); - } - } - ret = ecore_file_mv(file, extra); - } - else - ret = ecore_file_mv(file, dest); - if (!ret) - tb->file_errors++; - } - tb->idler_pos = eina_list_next(tb->idler_pos); - } - return EINA_TRUE; -} - -static void -_move_files(Ephoto_Thumb_Browser *tb, Eina_List *files, - const char *destination) -{ - Evas_Object *popup = _processing(tb, _("Moving Files"), - _("Please wait while your files are moved.")); - - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_data_set(popup, "destination", destination); - evas_object_show(popup); - - tb->idler_pos = eina_list_clone(files); - eina_list_free(files); - if (!tb->idler) - tb->idler = ecore_idler_add(_move_idler_cb, popup); -} - -static Eina_Bool -_copy_idler_cb(void *data) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *destination = evas_object_data_get(popup, "destination"); - const char *file; - int i; - - if (!tb->idler_pos) - tb->idler_pos = eina_list_nth(tb->idler_pos, 0); - if (!tb->idler_pos) - { - ecore_idler_del(tb->idler); - tb->idler = NULL; - eina_list_free(tb->idler_pos); - tb->idler_pos = NULL; - if (tb->file_errors > 0) - { - char msg[PATH_MAX]; - - snprintf(msg, PATH_MAX, "%s %d %s.", - _("There was an error copying"), tb->file_errors, - ngettext("file", "files", tb->file_errors)); - _complete(tb, _("Error"), msg); - } - tb->file_errors = 0; - tb->thumbs_only = 1; - if (strcmp(destination, tb->ephoto->config->directory)) - { - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - - return EINA_FALSE; - } - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - - return EINA_FALSE; - } - for (i = 0; i < 5; i++) - { - file = eina_list_data_get(tb->idler_pos); - if (!file) - break; - if (ecore_file_exists(file) && ecore_file_is_dir(destination) && - evas_object_image_extension_can_load_get(file)) - { - char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; - int ret; - - snprintf(fp, PATH_MAX, "%s", file); - snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); - if (ecore_file_exists(dest)) - { - snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, - basename(fp)); - if (ecore_file_exists(extra)) - { - int count; - - for (count = 2; ecore_file_exists(extra); count++) - { - memset(extra, 0, PATH_MAX); - snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", - destination, count, basename(fp)); - } - } - ret = ecore_file_cp(file, extra); - } - else - ret = ecore_file_cp(file, dest); - if (!ret) - tb->file_errors++; - } - tb->idler_pos = eina_list_next(tb->idler_pos); - } - return EINA_TRUE; -} - -static void -_copy_files(Ephoto_Thumb_Browser *tb, Eina_List *files, - const char *destination) -{ - Evas_Object *popup = _processing(tb, _("Copying Files"), - _("Please wait while your files are copied.")); - - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_data_set(popup, "destination", destination); - evas_object_show(popup); - - tb->idler_pos = eina_list_clone(files); - eina_list_free(files); - if (!tb->idler) - tb->idler = ecore_idler_add(_copy_idler_cb, popup); -} - -static void -_new_dir_confirm(void *data, Evas_Object *obj EINA_UNUSED, - void *event_data EINA_UNUSED) -{ - Evas_Object *popup = data; - Evas_Object *entry = evas_object_data_get(popup, "entry"); - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *file = evas_object_data_get(popup, "file"); - const char *text = elm_object_text_get(entry); - char new_file_name[PATH_MAX]; - int ret; - - snprintf(new_file_name, PATH_MAX, "%s/%s", file, text); - ret = ecore_file_mkdir(new_file_name); - if (!ret) - { - _complete(tb, _("Error"), - _("There was an error creating this directory.")); - } - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); -} - -static void -_new_dir_cancel(void *data, Evas_Object *obj EINA_UNUSED, - void *event_data EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); -} - -static void -_new_dir(Ephoto_Thumb_Browser *tb, const char *file) -{ - Evas_Object *popup, *box, *entry, *button, *ic; - - evas_object_freeze_events_set(tb->main, EINA_TRUE); - - popup = elm_popup_add(tb->ephoto->win); - elm_object_part_text_set(popup, "title,text", _("New Directory")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_data_set(popup, "file", file); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - entry = elm_entry_add(box); - elm_entry_single_line_set(entry, EINA_TRUE); - elm_entry_scrollable_set(entry, EINA_TRUE); - elm_entry_editable_set(entry, EINA_TRUE); - elm_object_text_set(entry, _("New Directory")); - elm_entry_select_all(entry); - elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_OFF); - evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, entry); - evas_object_show(entry); - evas_object_data_set(popup, "entry", entry); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Save")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _new_dir_confirm, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Cancel")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _new_dir_cancel, popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); -} - -static void -_rename_confirm(void *data, Evas_Object *obj EINA_UNUSED, - void *event_data EINA_UNUSED) -{ - Evas_Object *popup = data; - Evas_Object *entry = evas_object_data_get(popup, "entry"); - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *file = evas_object_data_get(popup, "file"); - const char *text = elm_object_text_get(entry); - char *escaped = ecore_file_escape_name(text); - char new_file_name[PATH_MAX], dir[PATH_MAX]; - int ret; - - if (!escaped) - { - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - return; - } - snprintf(dir, PATH_MAX, "%s", file); - if (ecore_file_is_dir(file)) - snprintf(new_file_name, PATH_MAX, "%s/%s", ecore_file_dir_get(dir), text); - else - snprintf(new_file_name, PATH_MAX, "%s/%s.%s", ecore_file_dir_get(dir), escaped, - strrchr(dir, '.')+1); - ret = ecore_file_mv(file, new_file_name); - if (!ret) - { - if (ecore_file_is_dir(new_file_name)) - _complete(tb, _("Error"), - _("There was an error renaming this directory.")); - else - _complete(tb, _("Error"), - _("There was an error renaming this file.")); - } - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - free(escaped); -} - -static void -_rename_cancel(void *data, Evas_Object *obj EINA_UNUSED, - void *event_data EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); -} - -static void -_rename_file(Ephoto_Thumb_Browser *tb, const char *file) -{ - Evas_Object *popup, *box, *entry, *button, *ic; - char buf[PATH_MAX], *bn, *string; - - evas_object_freeze_events_set(tb->main, EINA_TRUE); - - popup = elm_popup_add(tb->ephoto->win); - if (ecore_file_is_dir(file)) - elm_object_part_text_set(popup, "title, text", _("Rename Directory")); - else - elm_object_part_text_set(popup, "title,text", _("Rename File")); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_data_set(popup, "file", file); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - snprintf(buf, PATH_MAX, "%s", file); - bn = basename(buf); - string = ecore_file_strip_ext(bn); - - entry = elm_entry_add(box); - elm_entry_single_line_set(entry, EINA_TRUE); - elm_entry_scrollable_set(entry, EINA_TRUE); - elm_entry_editable_set(entry, EINA_TRUE); - elm_object_text_set(entry, string); - elm_entry_select_all(entry); - elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_OFF); - evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, entry); - evas_object_show(entry); - evas_object_data_set(popup, "entry", entry); - - free(string); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Rename")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _rename_confirm, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Cancel")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _rename_cancel, popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - elm_object_part_content_set(popup, "default", box); - evas_object_show(popup); -} - -static Eina_Bool -_delete_idler_cb(void *data) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *file; - char destination[PATH_MAX]; - int i; - - snprintf(destination, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); - - if (!ecore_file_exists(destination)) - ecore_file_mkpath(destination); - - if (!tb->idler_pos) - tb->idler_pos = eina_list_nth(tb->idler_pos, 0); - if (!tb->idler_pos) - { - ecore_idler_del(tb->idler); - tb->idler = NULL; - eina_list_free(tb->idler_pos); - tb->idler_pos = NULL; - if (tb->file_errors > 0) - { - char msg[PATH_MAX]; - - snprintf(msg, PATH_MAX, "%s %d %s.", - _("There was an error deleting"), tb->file_errors, - ngettext("file", "files", tb->file_errors)); - _complete(tb, _("Error"), msg); - } - ephoto_title_set(tb->ephoto, tb->ephoto->config->directory); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - - return EINA_FALSE; - } - for (i = 0; i < 5; i++) - { - file = eina_list_data_get(tb->idler_pos); - if (!file) - break; - if (ecore_file_exists(file) && ecore_file_is_dir(destination)) - { - char dest[PATH_MAX], fp[PATH_MAX], extra[PATH_MAX]; - int ret; - - snprintf(fp, PATH_MAX, "%s", file); - snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); - if (ecore_file_exists(dest)) - { - snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, - basename(fp)); - if (ecore_file_exists(extra)) - { - int count; - - for (count = 2; ecore_file_exists(extra); count++) - { - memset(extra, 0, sizeof(extra)); - snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", - destination, count, basename(fp)); - } - } - ret = ecore_file_mv(file, extra); - } - else - ret = ecore_file_mv(file, dest); - if (!ret) - tb->file_errors++; - } - tb->idler_pos = eina_list_next(tb->idler_pos); - } - return EINA_TRUE; -} - -static void -_delete_files(Ephoto_Thumb_Browser *tb, Eina_List *files) -{ - Evas_Object *popup = _processing(tb, _("Deleting Files"), - _("Please wait while your files are deleted.")); - - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_data_set(popup, "files", files); - evas_object_show(popup); - - tb->idler_pos = eina_list_clone(files); - eina_list_free(files); - if (!tb->idler) - tb->idler = ecore_idler_add(_delete_idler_cb, popup); -} - -static Eina_Bool -_delete_dir_idler_cb(void *data) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *dir = evas_object_data_get(popup, "path"); - char destination[PATH_MAX]; - - snprintf(destination, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); - - if (!ecore_file_exists(destination)) - ecore_file_mkpath(destination); - - if (dir) - { - char fp[PATH_MAX], dest[PATH_MAX], extra[PATH_MAX]; - int ret; - - snprintf(fp, PATH_MAX, "%s", dir); - snprintf(dest, PATH_MAX, "%s/%s", destination, basename(fp)); - if (ecore_file_exists(dir) && ecore_file_is_dir(destination)) - { - if (ecore_file_exists(dest)) - { - snprintf(extra, PATH_MAX, "%s/CopyOf%s", destination, - basename(fp)); - if (ecore_file_exists(extra)) - { - int count; - for (count = 2; ecore_file_exists(extra); count++) - { - memset(extra, 0, sizeof(extra)); - snprintf(extra, PATH_MAX, "%s/Copy%dOf%s", - destination, count, basename(fp)); - } - } - ret = ecore_file_mv(dir, extra); - } - else - ret = ecore_file_mv(dir, dest); - if (!ret) - tb->file_errors++; - } - } - if (!dir || tb->file_errors > 0) - { - char msg[PATH_MAX]; - - snprintf(msg, PATH_MAX, "%s.", - _("There was an error deleting this directory")); - _complete(tb, _("Error"), msg); - } - ecore_idler_del(tb->idler); - tb->idler = NULL; - eina_list_free(tb->idler_pos); - - tb->file_errors = 0; - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - - return EINA_FALSE; -} - -static void -_delete_dir(Ephoto_Thumb_Browser *tb, const char *path) -{ - Evas_Object *popup = _processing(tb, _("Deleting Directory"), - _("Please wait while your directory is deleted.")); - - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_data_set(popup, "path", path); - evas_object_show(popup); - - tb->idler_pos = NULL; - if (!tb->idler) - tb->idler = ecore_idler_add(_delete_dir_idler_cb, popup); -} - -static Eina_Bool -_empty_trash_idler_cb(void *data) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *file; - char trash[PATH_MAX]; - int i = 0; - - snprintf(trash, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); - - if (!tb->idler_pos) - tb->idler_pos = eina_list_nth(tb->idler_pos, 0); - if (!tb->idler_pos) - { - ecore_idler_del(tb->idler); - tb->idler = NULL; - eina_list_free(tb->idler_pos); - tb->idler_pos = NULL; - if (tb->file_errors > 0) - { - char msg[PATH_MAX]; - - snprintf(msg, PATH_MAX, "%s %d %s.", - _("There was an error deleting"), tb->file_errors, - ngettext("file", "files", tb->file_errors)); - _complete(tb, _("Error"), msg); - } - tb->file_errors = 0; - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - - return EINA_FALSE; - } - for (i = 0; i < 5; i++) - { - file = eina_list_data_get(tb->idler_pos); - if (!file) - break; - if (ecore_file_exists(file)) - { - int ret; - - if (ecore_file_is_dir(file)) - ret = ecore_file_recursive_rm(file); - else - ret = ecore_file_unlink(file); - if (!ret) - tb->file_errors++; - } - tb->idler_pos = eina_list_next(tb->idler_pos); - } - return EINA_TRUE; -} - -static void -_empty_trash(Ephoto_Thumb_Browser *tb, Eina_List *files) -{ - Evas_Object *popup = _processing(tb, _("Emptying Trash"), - _("Please wait while your files are deleted.")); - - evas_object_data_set(popup, "thumb_browser", tb); - evas_object_show(popup); - - tb->idler_pos = eina_list_clone(files); - eina_list_free(files); - if (!tb->idler) - tb->idler = ecore_idler_add(_empty_trash_idler_cb, popup); -} - -static void -_prompt_empty_apply(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - Eina_List *files = evas_object_data_get(popup, "files"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - _empty_trash(tb, files); -} - -static void -_prompt_delete_apply(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - Eina_List *files = evas_object_data_get(popup, "files"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - _delete_files(tb, files); -} - -static void -_prompt_delete_dir_apply(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - const char *path = evas_object_data_get(popup, "path"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - _delete_dir(tb, path); -} - -static void -_prompt_move_apply(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - Eina_List *files = evas_object_data_get(popup, "files"); - const char *path = evas_object_data_get(popup, "path"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - _move_files(tb, files, path); -} - -static void -_prompt_copy_apply(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - Eina_List *files = evas_object_data_get(popup, "files"); - const char *path = evas_object_data_get(popup, "path"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); - _copy_files(tb, files, path); -} - -static void -_prompt_cancel(void *data, Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) -{ - Evas_Object *popup = data; - Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser"); - - evas_object_del(popup); - evas_object_freeze_events_set(tb->main, EINA_FALSE); - elm_object_focus_set(tb->main, EINA_TRUE); -} - -static Evas_Object * -_prompt(Ephoto_Thumb_Browser *tb, const char *title, const char *text) -{ - Evas_Object *popup, *box, *label; - - evas_object_freeze_events_set(tb->main, EINA_TRUE); - - popup = elm_popup_add(tb->ephoto->win); - elm_object_part_text_set(popup, "title,text", title); - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - - box = elm_box_add(popup); - elm_box_horizontal_set(box, EINA_FALSE); - evas_object_size_hint_weight_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(box); - - label = elm_label_add(box); - elm_object_text_set(label, text); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(box, label); - evas_object_show(label); - - evas_object_data_set(popup, "thumb_browser", tb); - elm_object_part_content_set(popup, "default", box); - - return popup; -} - static char * _drag_data_extract(char **drag_data) { @@ -2174,61 +1285,10 @@ _drop_dropcb(void *data EINA_UNUSED, Evas_Object *obj, Elm_Object_Item *it, } free(dd); - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - char drop_dir[PATH_MAX]; - - snprintf(drop_dir, PATH_MAX, "%s:
%s?", - _("Are you sure you want to drop these files in"), path); - - popup = _prompt(tb, _("Drop Files"), drop_dir); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - if (tb->ephoto->config->move_drop) - evas_object_smart_callback_add(button, "clicked", - _prompt_move_apply, popup); - else - evas_object_smart_callback_add(button, "clicked", - _prompt_copy_apply, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "files", files); - evas_object_data_set(popup, "path", path); - - evas_object_show(popup); - } + if (tb->ephoto->config->move_drop) + ephoto_file_move(tb->ephoto, files, path); else - { - if (tb->ephoto->config->move_drop) - _move_files(tb, files, path); - else - _copy_files(tb, files, path); - } + ephoto_file_copy(tb->ephoto, files, path); if (tb->dir_current) elm_genlist_item_selected_set(tb->dir_current, EINA_TRUE); return EINA_TRUE; @@ -2444,7 +1504,7 @@ _fsel_menu_new_dir_cb(void *data, Evas_Object *obj EINA_UNUSED, path = tb->ephoto->config->directory; if (!path) return; - _new_dir(tb, path); + ephoto_file_new_dir(tb->ephoto, path); } static void @@ -2560,107 +1620,13 @@ _fsel_menu_paste_cb(void *data, Evas_Object *obj EINA_UNUSED, if (eina_list_count(tb->cut_items) > 0) { - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Move Files"), - _("Are you sure you want to move these files here?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _prompt_move_apply, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "files", - eina_list_clone(tb->cut_items)); - evas_object_data_set(popup, "path", path); - - evas_object_show(popup); - } - else - { - _move_files(tb, eina_list_clone(tb->cut_items), - path); - } + ephoto_file_paste(tb->ephoto, eina_list_clone(tb->cut_items), EINA_FALSE, path); eina_list_free(tb->cut_items); tb->cut_items = NULL; } else if (eina_list_count(tb->copy_items) > 0) { - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Paste Files"), - _("Are you sure you want to paste these files here?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _prompt_copy_apply, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "files", - eina_list_clone(tb->copy_items)); - evas_object_data_set(popup, "path", path); - - evas_object_show(popup); - } - else - { - _copy_files(tb, eina_list_clone(tb->copy_items), - path); - } + ephoto_file_paste(tb->ephoto, eina_list_clone(tb->copy_items), EINA_TRUE, path); eina_list_free(tb->copy_items); tb->copy_items = NULL; } @@ -2674,111 +1640,17 @@ _grid_menu_paste_cb(void *data, Evas_Object *obj EINA_UNUSED, if (eina_list_count(tb->cut_items) > 0) { - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Move Files"), - _("Are you sure you want to move these files here?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _prompt_move_apply, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "files", - eina_list_clone(tb->cut_items)); - evas_object_data_set(popup, "path", - tb->ephoto->config->directory); - - evas_object_show(popup); - } - else - { - _move_files(tb, eina_list_clone(tb->cut_items), - tb->ephoto->config->directory); - } - eina_list_free(tb->cut_items); - tb->cut_items = NULL; + ephoto_file_paste(tb->ephoto, eina_list_clone(tb->cut_items), EINA_FALSE, + tb->ephoto->config->directory); + eina_list_free(tb->cut_items); + tb->cut_items = NULL; } else if (eina_list_count(tb->copy_items) > 0) { - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Paste Files"), - _("Are you sure you want to paste these files here?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _prompt_copy_apply, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, - 1, 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - - evas_object_data_set(popup, "files", - eina_list_clone(tb->copy_items)); - evas_object_data_set(popup, "path", - tb->ephoto->config->directory); - - evas_object_show(popup); - } - else - { - _copy_files(tb, eina_list_clone(tb->copy_items), - tb->ephoto->config->directory); - } - eina_list_free(tb->copy_items); - tb->copy_items = NULL; + ephoto_file_paste(tb->ephoto, eina_list_clone(tb->copy_items), EINA_TRUE, + tb->ephoto->config->directory); + eina_list_free(tb->copy_items); + tb->copy_items = NULL; } } @@ -2797,7 +1669,7 @@ _fsel_menu_rename_cb(void *data, Evas_Object *obj EINA_UNUSED, path = entry->path; if (!path) return; - _rename_file(tb, path); + ephoto_file_rename(tb->ephoto, path); } static void @@ -2809,7 +1681,7 @@ _grid_menu_rename_cb(void *data, Evas_Object *obj EINA_UNUSED, Ephoto_Entry *file; file = elm_object_item_data_get(item); - _rename_file(tb, file->path); + ephoto_file_rename(tb->ephoto, file->path); evas_object_data_del(item, "thumb_browser"); } @@ -2820,6 +1692,7 @@ _fsel_menu_delete_cb(void *data, Evas_Object *obj EINA_UNUSED, Ephoto_Thumb_Browser *tb = data; Elm_Object_Item *item = elm_genlist_selected_item_get(tb->fsel); Ephoto_Entry *entry; + Eina_List *files = NULL; const char *path; if (!item) @@ -2828,51 +1701,8 @@ _fsel_menu_delete_cb(void *data, Evas_Object *obj EINA_UNUSED, path = entry->path; if (!path) return; - - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Delete Directory"), - _("Are you sure you want to delete this directory?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", - _prompt_delete_dir_apply, popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - evas_object_data_set(popup, "path", path); - - evas_object_show(popup); - } - else - { - _delete_dir(tb, path); - } + files = eina_list_append(files, path); + ephoto_file_delete(tb->ephoto, files, EINA_FILE_DIR); } static void @@ -2895,50 +1725,7 @@ _grid_menu_delete_cb(void *data, Evas_Object *obj EINA_UNUSED, if (ecore_file_exists(file->path)) paths = eina_list_append(paths, strdup(file->path)); } - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Delete Files"), - _("Are you sure you want to delete these files?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_delete_apply, - popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - evas_object_data_set(popup, "files", paths); - - evas_object_show(popup); - } - else - { - _delete_files(tb, paths); - } + ephoto_file_delete(tb->ephoto, paths, EINA_FILE_REG); eina_list_free(selection); } @@ -2966,50 +1753,7 @@ _grid_menu_empty_cb(void *data, Evas_Object *obj EINA_UNUSED, } if (eina_list_count(paths) <= 0) return; - if (tb->ephoto->config->prompts) - { - Evas_Object *ic, *button; - Evas_Object *popup; - - popup = - _prompt(tb, _("Empty Trash"), - _("Are you sure you want to empty the trash?")); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "document-save"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("Yes")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_empty_apply, - popup); - elm_object_part_content_set(popup, "button1", button); - evas_object_show(button); - - ic = elm_icon_add(popup); - elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, - 1); - elm_icon_standard_set(ic, "window-close"); - - button = elm_button_add(popup); - elm_object_text_set(button, _("No")); - elm_object_part_content_set(button, "icon", ic); - evas_object_smart_callback_add(button, "clicked", _prompt_cancel, - popup); - elm_object_part_content_set(popup, "button2", button); - evas_object_show(button); - evas_object_data_set(popup, "files", paths); - - evas_object_show(popup); - } - else - { - _empty_trash(tb, paths); - } + ephoto_file_empty_trash(tb->ephoto, paths); } static void @@ -3040,7 +1784,7 @@ _fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED, { Ephoto_Thumb_Browser *tb = data; Evas_Object *menu; - Elm_Object_Item *item; + Elm_Object_Item *item, *menu_it; Evas_Event_Mouse_Up *info = event_info; char trash[PATH_MAX]; int x, y; @@ -3085,11 +1829,18 @@ _fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED, return; snprintf(trash, PATH_MAX, "%s/.config/ephoto/trash", getenv("HOME")); + menu = elm_menu_add(tb->main); + elm_menu_move(menu, x, y); + menu_it = elm_menu_item_add(menu, NULL, "document-properties", _("View"), + NULL, NULL); + elm_menu_item_add(menu, menu_it, "system-file-manager", _("Hide Folders"), + _ephoto_dir_hide_folders, tb); + elm_menu_item_add(menu, menu_it, "media-playback-start", _("Slideshow"), + _slideshow, tb); + elm_menu_item_separator_add(menu, NULL); if (item && strncmp(tb->ephoto->config->directory, trash, strlen(trash))) { elm_genlist_item_selected_set(item, EINA_TRUE); - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); elm_menu_item_add(menu, NULL, "folder-new", _("New Folder"), _fsel_menu_new_dir_cb, tb); if (tb->cut_items || tb->copy_items) @@ -3099,25 +1850,15 @@ _fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED, _fsel_menu_rename_cb, tb); elm_menu_item_add(menu, NULL, "edit-delete", _("Delete"), _fsel_menu_delete_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); } else if (item && !strncmp(tb->ephoto->config->directory, trash, strlen(trash))) { - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); elm_menu_item_add(menu, NULL, "edit-delete", _("Empty Trash"), _grid_menu_empty_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); } else { - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); if (strncmp(tb->ephoto->config->directory, trash, strlen(trash))) elm_menu_item_add(menu, NULL, "folder-new", _("New Folder"), _fsel_menu_new_dir_cb, tb); @@ -3127,10 +1868,13 @@ _fsel_mouse_up_cb(void *data, Evas *e EINA_UNUSED, if (!strncmp(tb->ephoto->config->directory, trash, strlen(trash))) elm_menu_item_add(menu, NULL, "edit-delete", _("Empty Trash"), _grid_menu_empty_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); } + elm_menu_item_separator_add(menu, NULL); + elm_menu_item_add(menu, NULL, "preferences-system", _("Settings"), + _settings, tb); + evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, + tb); + evas_object_show(menu); } static void @@ -3138,9 +1882,11 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) { Ephoto_Thumb_Browser *tb = data; - Evas_Object *menu; + Evas_Object *menu, *menu_it; Elm_Object_Item *item; Evas_Event_Mouse_Up *info = event_info; + Eina_Bool ctrl = evas_key_modifier_is_set(info->modifiers, "Control"); + Eina_Bool shift = evas_key_modifier_is_set(info->modifiers, "Shift"); char trash[PATH_MAX]; const Eina_List *selected = elm_gengrid_selected_items_get(tb->grid); int x, y; @@ -3150,11 +1896,11 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, if (info->button == 1 && item) { - if (evas_key_modifier_is_set(info->modifiers, "Control")) + if (ctrl) { tb->last_sel = item; } - else if (evas_key_modifier_is_set(info->modifiers, "Shift")) + else if (shift) { if (tb->last_sel) { @@ -3224,10 +1970,27 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, if (item) elm_gengrid_item_selected_set(item, EINA_TRUE); + menu = elm_menu_add(tb->main); + elm_menu_move(menu, x, y); + menu_it = elm_menu_item_add(menu, NULL, "document-properties", _("View"), + NULL, NULL); + if (!tb->ephoto->config->fsel_hide) + elm_menu_item_add(menu, menu_it, "system-file-manager", _("Hide Folders"), + _ephoto_dir_hide_folders, tb); + else + elm_menu_item_add(menu, menu_it, "system-file-manager", _("Show Folders"), + _ephoto_dir_show_folders, tb); + elm_menu_item_add(menu, menu_it, "zoom-in", _("Zoom In"), + _zoom_in, tb); + elm_menu_item_add(menu, menu_it, "zoom-out", _("Zoom Out"), + _zoom_out, tb); + elm_menu_item_add(menu, menu_it, "media-playback-start", _("Slideshow"), + _slideshow, tb); + elm_menu_item_separator_add(menu, NULL); if (eina_list_count(selected) > 0 || item) { - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); + elm_menu_item_add(menu, NULL, "system-search", _("Search"), + _search, tb); elm_menu_item_add(menu, NULL, "edit-select-all", _("Select All"), _grid_menu_select_all_cb, tb); elm_menu_item_add(menu, NULL, "edit-clear", _("Select None"), @@ -3251,14 +2014,11 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, else elm_menu_item_add(menu, NULL, "edit-delete", _("Empty Trash"), _grid_menu_empty_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); } else if (tb->cut_items || tb->copy_items) { - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); + elm_menu_item_add(menu, NULL, "system-search", _("Search"), + _search, tb); elm_menu_item_add(menu, NULL, "edit-select-all", _("Select All"), _grid_menu_select_all_cb, tb); elm_menu_item_add(menu, NULL, "edit-paste", _("Paste"), @@ -3266,31 +2026,47 @@ _grid_mouse_up_cb(void *data, Evas *e EINA_UNUSED, if (!strcmp(tb->ephoto->config->directory, trash)) elm_menu_item_add(menu, NULL, "edit-delete", _("Empty Trash"), _grid_menu_empty_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); } else if (!strcmp(tb->ephoto->config->directory, trash)) { - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); + elm_menu_item_add(menu, NULL, "system-search", _("Search"), + _search, tb); elm_menu_item_add(menu, NULL, "edit-select-all", _("Select All"), _grid_menu_select_all_cb, tb); elm_menu_item_add(menu, NULL, "edit-delete", _("Empty Trash"), _grid_menu_empty_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); } else if (elm_gengrid_first_item_get(tb->grid)) { - menu = elm_menu_add(tb->main); - elm_menu_move(menu, x, y); + elm_menu_item_add(menu, NULL, "system-search", _("Search"), + _search, tb); elm_menu_item_add(menu, NULL, "edit-select-all", _("Select All"), _grid_menu_select_all_cb, tb); - evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, - tb); - evas_object_show(menu); + } + elm_menu_item_separator_add(menu, NULL); + elm_menu_item_add(menu, NULL, "preferences-system", _("Settings"), + _settings, tb); + evas_object_smart_callback_add(menu, "dismissed", _menu_dismissed_cb, + tb); + evas_object_show(menu); +} + +static void +_grid_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, + void *event_info) +{ + Ephoto_Thumb_Browser *tb = data; + Evas_Event_Mouse_Wheel *ev = event_info; + Eina_Bool ctrl = evas_key_modifier_is_set(ev->modifiers, "Control"); + + printf("No\n"); + + if (ctrl) + { + if (ev->z > 0) + _zoom_out(tb, NULL, NULL); + else + _zoom_in(tb, NULL, NULL); } } @@ -3504,16 +2280,6 @@ _main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, eio_file_cancel(tb->ls); return; } - if (tb->idler) - { - ecore_idler_del(tb->idler); - tb->idler = NULL; - } - if (tb->idler_pos) - { - eina_list_free(tb->idler_pos); - tb->idler_pos = NULL; - } if (tb->cut_items) eina_list_free(tb->cut_items); else if (tb->copy_items) @@ -3620,17 +2386,9 @@ _top_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, { if (!ecore_file_is_dir(path)) return; - item = elm_genlist_first_item_get(tb->fsel); - while (item) - { - e = elm_object_item_data_get(item); - if (!strcmp(e->path, path)) - return; - item = elm_genlist_item_next_get(item); - } - snprintf(buf, PATH_MAX, "%s", path); if (ephoto_entry_exists(tb->ephoto, path)) return; + snprintf(buf, PATH_MAX, "%s", path); e = ephoto_entry_new(tb->ephoto, path, basename(buf), EINA_FILE_DIR); e->genlist = tb->fsel; @@ -3650,7 +2408,10 @@ _top_monitor_cb(void *data, Ecore_File_Monitor *em EINA_UNUSED, e = elm_object_item_data_get(item); if (!strcmp(e->path, path)) { - elm_object_item_del(e->item); + if (!strcmp(path, tb->ephoto->config->directory)) + _ephoto_dir_go_up(tb, NULL, NULL); + else + elm_object_item_del(e->item); break; } item = elm_genlist_item_next_get(item); @@ -3868,41 +2629,6 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) tb); evas_object_data_set(tb->main, "thumb_browser", tb); - tb->bar = elm_toolbar_add(tb->ephoto->win); - elm_toolbar_horizontal_set(tb->bar, EINA_TRUE); - elm_toolbar_homogeneous_set(tb->bar, EINA_TRUE); - elm_toolbar_shrink_mode_set(tb->bar, ELM_TOOLBAR_SHRINK_NONE); - elm_toolbar_select_mode_set(tb->bar, ELM_OBJECT_SELECT_MODE_NONE); - elm_object_tree_focus_allow_set(tb->bar, EINA_FALSE); - elm_toolbar_icon_order_lookup_set(tb->bar, ELM_ICON_LOOKUP_FDO_THEME); - evas_object_size_hint_weight_set(tb->bar, EVAS_HINT_EXPAND, 0.0); - evas_object_size_hint_align_set(tb->bar, EVAS_HINT_FILL, EVAS_HINT_FILL); - - if (!tb->ephoto->config->fsel_hide) - tb->ficon = elm_toolbar_item_prepend(tb->bar, "system-file-manager", - _("Folders"), _ephoto_dir_hide_folders, tb); - else - tb->ficon = elm_toolbar_item_prepend(tb->bar, "system-file-manager", - _("Folders"), _ephoto_dir_show_folders, tb); - icon = - elm_toolbar_item_append(tb->bar, "zoom-in", _("Zoom In"), _zoom_in, tb); - tb->max = elm_object_item_widget_get(icon); - icon = - elm_toolbar_item_append(tb->bar, "zoom-out", _("Zoom Out"), _zoom_out, - tb); - tb->min = elm_object_item_widget_get(icon); - evas_object_data_set(tb->max, "min", tb->min); - evas_object_data_set(tb->min, "max", tb->max); - elm_toolbar_item_append(tb->bar, "system-search", _("Search"), - _search, tb); - elm_toolbar_item_append(tb->bar, "media-playback-start", _("Slideshow"), - _slideshow, tb); - elm_toolbar_item_append(tb->bar, "preferences-system", _("Settings"), - _settings, tb); - - elm_box_pack_end(tb->main, tb->bar); - evas_object_show(tb->bar); - tb->table = elm_table_add(tb->main); evas_object_size_hint_weight_set(tb->table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -4044,6 +2770,8 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object *parent) _ephoto_thumb_activated, tb); evas_object_event_callback_add(tb->grid, EVAS_CALLBACK_MOUSE_UP, _grid_mouse_up_cb, tb); + evas_object_event_callback_add(tb->grid, EVAS_CALLBACK_MOUSE_WHEEL, + _grid_mouse_wheel, tb); elm_drag_item_container_add(tb->grid, ANIM_TIME, DRAG_TIMEOUT, _dnd_item_get, _dnd_item_data_get); evas_object_data_set(tb->grid, "thumb_browser", tb);