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);