From d104992051c696c6f514aa672124ce3ed0768cad Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 12 Aug 2006 12:49:52 +0000 Subject: [PATCH] * border property patch - dont generate on moves * entry dialog becomes object - supports initial text contents of the entry * fm2 gets menu patch (heavily worked so its safe) so u can delete and rename files (and dirs) that you have permission to do so with. * picutre importing disables or enables the scale and encoding stuff depending on what is selected * more widgets support enable/disable * importer detects duaplicate destination target filenames and tries alternate names. * fsel widget displays extensions by default. * test filemanager menu gone * pants on! SVN revision: 24589 --- TODO | 11 +- data/themes/default_slider.edc | 96 +++++++ src/bin/e_border.c | 17 +- src/bin/e_entry_dialog.c | 53 ++-- src/bin/e_entry_dialog.h | 48 ++-- src/bin/e_fm.c | 320 +++++++++++++++++++++++- src/bin/e_fm.h | 1 + src/bin/e_int_config_wallpaper_import.c | 63 ++++- src/bin/e_int_menus.c | 18 -- src/bin/e_widget_framelist.c | 14 ++ src/bin/e_widget_frametable.c | 14 ++ src/bin/e_widget_fsel.c | 2 +- src/bin/e_widget_slider.c | 16 ++ src/modules/ibar/e_mod_config.c | 2 +- 14 files changed, 583 insertions(+), 92 deletions(-) diff --git a/TODO b/TODO index 1b5f1854d..922369ab7 100644 --- a/TODO +++ b/TODO @@ -34,9 +34,6 @@ Some of the things (in very short form) that need to be done to E17... ESSENTIAL FEATURES ------------------------------------------------------------------------------- -* fm2 needs to have right mouse menu on files for rename and delete -* wallpaper select needs to see if target .edj name exists - if so - find - a new target name * fsel needs "add" button for favorites to add whataver directory is selected if any dir is selected (create symlink) * fsel needs to clear the entry when entering a new dir @@ -71,9 +68,9 @@ Some of the things (in very short form) that need to be done to E17... * Dragging a non-eap icon from a border to the ibar should automatically create the icon and add that (instead of warning the user that this can't be done) -* new fm code relays-out a dir every time the queue is processed - maybe try +* new fm code re-lays-out a dir every time the queue is processed - maybe try to speed this up -* new fm code's file scannign isnt insanely fast - icon size calcs etc. speed +* new fm code's file scanning isn't insanely fast - icon size calcs etc. speed up for special cases like list view? ]]] @@ -82,10 +79,6 @@ Some of the things (in very short form) that need to be done to E17... CLEANUPS ------------------------------------------------------------------------------- -* bg import dialog and code needs a big workover - needs a few more options on - import like quality (lossy low, medium, high, perfect), when scaling do you - stretch, scale retaining aspect within the screen or extend beyond screen - boundaries (so nothing is left blank) etc. * bg needs a gradient dialog that can take a set of pre-drawn png's and edc recipies and use colored rects and overlayed png's recolored with color options to create vertical, horizontal, radial etc. gradients quickly and diff --git a/data/themes/default_slider.edc b/data/themes/default_slider.edc index 63a550305..036621fd4 100644 --- a/data/themes/default_slider.edc +++ b/data/themes/default_slider.edc @@ -42,6 +42,7 @@ group { part { name: "sld_runner"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; max: 2 99999; @@ -63,6 +64,7 @@ group { part { name: "label_under"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; visible: 0; @@ -95,6 +97,7 @@ group { name: "label"; type: TEXT; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; visible: 0; @@ -124,6 +127,7 @@ group { part { name: "label_over"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; visible: 0; @@ -257,6 +261,7 @@ group { part { name: "slider_glow"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; min: 32 32; @@ -278,6 +283,33 @@ group { color: 255 255 255 255; } } + part { + name: "clip"; + type: RECT; + description { + state: "default" 0.0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 255 255 255 128; + } + } + part { + name: "catch"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 0; + color: 0 0 0 0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } } programs { program { @@ -368,6 +400,22 @@ group { target: "label"; target: "label_over"; } + program { + name: "disable"; + signal: "disabled"; + source: ""; + action: STATE_SET "disabled" 0.0; + target: "clip"; + target: "catch"; + } + program { + name: "enable"; + signal: "enabled"; + source: ""; + action: STATE_SET "default" 0.0; + target: "clip"; + target: "catch"; + } } } @@ -404,6 +452,7 @@ group { part { name: "sld_runner"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; max: 99999 2; @@ -425,6 +474,7 @@ group { part { name: "label_under"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; visible: 0; @@ -457,6 +507,7 @@ group { name: "label"; type: TEXT; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; visible: 0; @@ -487,6 +538,7 @@ group { part { name: "label_over"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; visible: 0; @@ -572,6 +624,7 @@ group { part { name: "slider_img"; mouse_events: 0; + clip_to: "clip"; description { state: "default" 0.0; min: 32 32; @@ -641,6 +694,33 @@ group { color: 255 255 255 255; } } + part { + name: "clip"; + type: RECT; + description { + state: "default" 0.0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 255 255 255 128; + } + } + part { + name: "catch"; + type: RECT; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 0; + color: 0 0 0 0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } } programs { program { @@ -731,5 +811,21 @@ group { target: "label"; target: "label_over"; } + program { + name: "disable"; + signal: "disabled"; + source: ""; + action: STATE_SET "disabled" 0.0; + target: "clip"; + target: "catch"; + } + program { + name: "enable"; + signal: "enabled"; + source: ""; + action: STATE_SET "default" 0.0; + target: "clip"; + target: "catch"; + } } } diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 333f257eb..670de831d 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -4663,10 +4663,12 @@ _e_border_cb_grab_replay(void *data, int type, void *event) static void _e_border_eval(E_Border *bd) -{ +{ E_Event_Border_Property *event; int change_urgent = 0; int rem_change = 0; + int send_event = 1; + /* fetch any info queued to be fetched */ if (bd->client.icccm.fetch.client_leader) @@ -5834,6 +5836,7 @@ _e_border_eval(E_Border *bd) e_container_shape_move(bd->shape, bd->x, bd->y); bd->changes.pos = 0; rem_change = 1; + send_event = 0; } else if (bd->changes.size) { @@ -6223,11 +6226,13 @@ _e_border_eval(E_Border *bd) if ((bd->remember) && (rem_change)) e_remember_update(bd->remember, bd); - - event = calloc(1, sizeof(E_Event_Border_Property)); - event->border = bd; - e_object_ref(E_OBJECT(bd)); - ecore_event_add(E_EVENT_BORDER_PROPERTY, event, _e_border_event_border_property_free, NULL); + if(send_event) + { + event = calloc(1, sizeof(E_Event_Border_Property)); + event->border = bd; + e_object_ref(E_OBJECT(bd)); + ecore_event_add(E_EVENT_BORDER_PROPERTY, event, _e_border_event_border_property_free, NULL); + } } static void diff --git a/src/bin/e_entry_dialog.c b/src/bin/e_entry_dialog.c index 8229b489b..f7878be52 100644 --- a/src/bin/e_entry_dialog.c +++ b/src/bin/e_entry_dialog.c @@ -1,32 +1,16 @@ #include "e.h" -typedef struct _E_Entry_Dialog E_Entry_Dialog; -struct _E_Entry_Dialog -{ - struct - { - void *data; - void (*func)(char *text, void *data); - } ok; - struct - { - void *data; - void (*func)(void *data); - } cancel; - E_Dialog *dia; - Evas_Object *entry; - char *text; -}; - /* Private function definitions */ -static void _e_entry_dialog_delete(E_Win *win); +static void _e_entry_dialog_free(E_Entry_Dialog *dia); static void _e_entry_dialog_ok(void *data, E_Dialog *dia); static void _e_entry_dialog_cancel(void *data, E_Dialog *dia); +static void _e_entry_dialog_delete(E_Win *win); /* Externally accesible functions */ -EAPI void -e_entry_dialog_show(const char *title, const char *icon, const char *text, - const char *button_text, const char *button2_text, +EAPI E_Entry_Dialog * +e_entry_dialog_show(const char *title, const char *icon, const char *text, + const char *initial_text, + const char *button_text, const char *button2_text, void (*func)(char *text, void *data), void (*func2)(void *data), void *data) { @@ -34,12 +18,13 @@ e_entry_dialog_show(const char *title, const char *icon, const char *text, E_Dialog *dia; Evas_Object *o, *ob; int w, h; - - ed = E_NEW(E_Entry_Dialog, 1); + + ed = E_OBJECT_ALLOC(E_Entry_Dialog, E_ENTRY_DIALOG_TYPE, _e_entry_dialog_free); ed->ok.func = func; ed->ok.data = data; ed->cancel.func = func2; ed->cancel.data = data; + ed->text = strdup(initial_text); dia = e_dialog_new(e_container_current_get(e_manager_current_get())); if (!dia) @@ -72,17 +57,27 @@ e_entry_dialog_show(const char *title, const char *icon, const char *text, e_win_centered_set(dia->win, 1); e_dialog_show(dia); + return ed; } /* Private Function Bodies */ +static void +_e_entry_dialog_free(E_Entry_Dialog *ed) +{ + e_object_del(E_OBJECT(ed->dia)); + free(ed); +} + static void _e_entry_dialog_ok(void *data, E_Dialog *dia) { E_Entry_Dialog *ed; ed = data; + e_object_ref(E_OBJECT(ed)); if (ed->ok.func) ed->ok.func(ed->text, ed->ok.data); - _e_entry_dialog_delete(ed->dia->win); + e_object_del(E_OBJECT(ed)); + e_object_unref(E_OBJECT(ed)); } static void @@ -91,8 +86,10 @@ _e_entry_dialog_cancel(void *data, E_Dialog *dia) E_Entry_Dialog *ed; ed = data; + e_object_ref(E_OBJECT(ed)); if (ed->cancel.func) ed->cancel.func(ed->cancel.data); - _e_entry_dialog_delete(ed->dia->win); + e_object_del(E_OBJECT(ed)); + e_object_unref(E_OBJECT(ed)); } static void @@ -103,7 +100,5 @@ _e_entry_dialog_delete(E_Win *win) dia = win->data; ed = dia->data; - - e_object_del(E_OBJECT(dia)); - free(ed); + e_object_del(E_OBJECT(ed)); } diff --git a/src/bin/e_entry_dialog.h b/src/bin/e_entry_dialog.h index 3c03b1770..cae08b091 100644 --- a/src/bin/e_entry_dialog.h +++ b/src/bin/e_entry_dialog.h @@ -1,24 +1,42 @@ -#ifdef E_TYPEDEF +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS + +typedef struct _E_Entry_Dialog E_Entry_Dialog; #else #ifndef E_ENTRY_DIALOG_H #define E_ENTRY_DIALOG_H -/* - * @title - dialog title - * @icon - dialog icon - * @text - the text shown in the dialog - * @button_text - "Ok" button text - * @button2_text - "Cancel" button text - * @func - the function to call if ok is pressed - * @func2 - the function to call if cancel is pressed - * @data - the pointer passed to func -*/ +#define E_ENTRY_DIALOG_TYPE 0xE0b01025 -EAPI void e_entry_dialog_show(const char *title, const char *icon, const char *text, - const char *button_text, const char *button2_text, - void (*func)(char *text, void *data), - void (*func2)(void *data), void *data); +struct _E_Entry_Dialog +{ + E_Object e_obj_inherit; + + E_Dialog *dia; + Evas_Object *entry; + char *text; + struct { + void (*func) (char *text, void *data); + void *data; + } ok; + struct { + void (*func) (void *data); + void *data; + } cancel; +}; + +EAPI E_Entry_Dialog *e_entry_dialog_show(const char *title, + const char *icon, + const char *text, + const char *initial_text, + const char *button_text, + const char *button2_text, + void (*func) (char *text, void *data), + void (*func2) (void *data), + void *data); #endif #endif diff --git a/src/bin/e_fm.c b/src/bin/e_fm.c index c5ebcd6c6..5f68820be 100644 --- a/src/bin/e_fm.c +++ b/src/bin/e_fm.c @@ -72,6 +72,9 @@ struct _E_Fm2_Icon Evas_Object *obj, *obj_icon; int saved_x, saved_y; int saved_rel; + E_Menu *menu; + E_Entry_Dialog *entry_dialog; + E_Dialog *dialog; E_Fm2_Icon_Info info; @@ -137,6 +140,17 @@ static void _e_fm2_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) static void _e_fm2_smart_clip_set(Evas_Object *obj, Evas_Object * clip); static void _e_fm2_smart_clip_unset(Evas_Object *obj); +static void _e_fm2_menu_action_display(E_Fm2_Icon *ic, Evas_Object *obj, unsigned int timestamp); +static void _e_fm2_menu_post_cb(void *data, E_Menu *m); +static void _e_fm2_file_rename(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm2_file_rename_delete_cb(void *obj); +static void _e_fm2_file_rename_yes_cb(char *text, void *data); +static void _e_fm2_file_rename_no_cb(char *text, void *data); +static void _e_fm2_file_delete(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_fm2_file_delete_delete_cb(void *obj); +static void _e_fm2_file_delete_yes_cb(void *data, E_Dialog *dialog); +static void _e_fm2_file_delete_no_cb(void *data, E_Dialog *dialog); + static char *_meta_path = NULL; static Evas_Smart *_e_fm2_smart = NULL; @@ -228,10 +242,6 @@ e_fm2_path_set(Evas_Object *obj, char *dev, char *path) sd->config->theme.fixed = 0; } - _e_fm2_scan_stop(obj); - _e_fm2_queue_free(obj); - _e_fm2_regions_free(obj); - _e_fm2_icons_free(obj); if (sd->dev) evas_stringshare_del(sd->dev); if (sd->path) evas_stringshare_del(sd->path); if (sd->realpath) evas_stringshare_del(sd->realpath); @@ -239,6 +249,12 @@ e_fm2_path_set(Evas_Object *obj, char *dev, char *path) if (dev) sd->dev = evas_stringshare_add(dev); sd->path = evas_stringshare_add(path); sd->realpath = _e_fm2_dev_path_map(sd->dev, sd->path); + + _e_fm2_scan_stop(obj); + _e_fm2_queue_free(obj); + _e_fm2_regions_free(obj); + _e_fm2_icons_free(obj); + _e_fm2_scan_start(obj); evas_object_smart_callback_call(obj, "dir_changed", NULL); sd->tmp.iter = 0; @@ -259,6 +275,26 @@ e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path) if (path) *path = sd->path; } +EAPI void +e_fm2_refresh(Evas_Object *obj) +{ + E_Fm2_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; // safety + if (!evas_object_type_get(obj)) return; // safety + if (strcmp(evas_object_type_get(obj), "e_fm")) return; // safety + + _e_fm2_scan_stop(obj); + _e_fm2_queue_free(obj); + _e_fm2_regions_free(obj); + _e_fm2_icons_free(obj); + + _e_fm2_scan_start(obj); +// evas_object_smart_callback_call(obj, "dir_changed", NULL); + sd->tmp.iter = 0; +} + EAPI int e_fm2_has_parent_get(Evas_Object *obj) { @@ -1248,6 +1284,22 @@ _e_fm2_icon_free(E_Fm2_Icon *ic) { /* free icon, object data etc. etc. */ _e_fm2_icon_unrealize(ic); + if (ic->menu) + { + e_menu_post_deactivate_callback_set(ic->menu, NULL, NULL); + e_object_del(E_OBJECT(ic->menu)); + ic->menu = NULL; + } + if (ic->dialog) + { + e_object_del(E_OBJECT(ic->dialog)); + ic->dialog = NULL; + } + if (ic->entry_dialog) + { + e_object_del(E_OBJECT(ic->entry_dialog)); + ic->entry_dialog = NULL; + } if (ic->info.file) evas_stringshare_del(ic->info.file); if (ic->info.mime) evas_stringshare_del(ic->info.mime); if (ic->info.label) evas_stringshare_del(ic->info.label); @@ -1809,6 +1861,15 @@ _e_fm2_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_inf } else if (ev->button == 3) { + char buf[4096]; + + snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->info.file); + if (ecore_file_can_write(buf)) + { + _e_fm2_menu_action_display(ic, obj, ev->timestamp); + evas_event_feed_mouse_up(evas_object_evas_get(obj), ev->button, + EVAS_BUTTON_NONE, ev->timestamp, NULL); + } } } @@ -1821,13 +1882,13 @@ _e_fm2_cb_icon_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info) ic = data; ev = event_info; } - + static void _e_fm2_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info) { Evas_Event_Mouse_Move *ev; E_Fm2_Icon *ic; - + ic = data; ev = event_info; } @@ -2227,3 +2288,250 @@ _e_fm2_smart_clip_unset(Evas_Object *obj) if (!sd) return; evas_object_clip_unset(sd->clip); } + +static void +_e_fm2_menu_action_display(E_Fm2_Icon *ic, Evas_Object *obj, unsigned int timestamp) +{ + E_Fm2_Smart_Data *sd; + E_Menu *mn; + E_Menu_Item *mi; + E_Manager *man; + E_Container *con; + E_Zone *zone; + int x, y; + + sd = ic->sd; + + mn = e_menu_new(); + e_menu_category_set(mn, "fileman/action"); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Delete")); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/delete"), + "fileman/button/delete"); + e_menu_item_callback_set(mi, _e_fm2_file_delete, ic); + + mi = e_menu_item_new(mn); + e_menu_item_label_set(mi, _("Rename")); + e_menu_item_icon_edje_set(mi, + (char *)e_theme_edje_file_get("base/theme/fileman", + "fileman/button/rename"), + "fileman/button/rename"); + e_menu_item_callback_set(mi, _e_fm2_file_rename, ic); + + man = e_manager_current_get(); + if (!man) + { + e_object_del(E_OBJECT(mn)); + return; + } + con = e_container_current_get(man); + if (!con) + { + e_object_del(E_OBJECT(mn)); + return; + } + ecore_x_pointer_xy_get(con->win, &x, &y); + zone = e_util_zone_current_get(man); + if (!zone) + { + e_object_del(E_OBJECT(mn)); + return; + } + ic->menu = mn; + e_menu_post_deactivate_callback_set(mn, _e_fm2_menu_post_cb, ic); + e_menu_activate_mouse(mn, zone, + x, y, 1, 1, + E_MENU_POP_DIRECTION_DOWN, timestamp); +} + +static void +_e_fm2_menu_post_cb(void *data, E_Menu *m) +{ + E_Fm2_Icon *ic; + + ic = data; + ic->menu = NULL; +} + +static void +_e_fm2_file_rename(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Fm2_Icon *ic; + E_Manager *man; + E_Container *con; + char *old_path; + char text[PATH_MAX + 256]; + + ic = data; + if (ic->entry_dialog) return; + + man = e_manager_current_get(); + if (!man) return; + con = e_container_current_get(man); + if (!con) return; + + snprintf(text, PATH_MAX + 256, + _("Rename %s to"), + ic->info.file); + ic->entry_dialog = e_entry_dialog_show(_("Rename File"), "enlightenment/e", + text, ic->info.file, NULL, NULL, + _e_fm2_file_rename_yes_cb, + _e_fm2_file_rename_no_cb, ic); + E_OBJECT(ic->entry_dialog)->data = ic; + e_object_del_attach_func_set(E_OBJECT(ic->entry_dialog), _e_fm2_file_rename_delete_cb); +} + +static void +_e_fm2_file_rename_delete_cb(void *obj) +{ + E_Fm2_Icon *ic; + + ic = E_OBJECT(obj)->data; + ic->entry_dialog = NULL; +} + +static void +_e_fm2_file_rename_yes_cb(char *text, void *data) +{ + E_Fm2_Icon *ic; + E_Dialog *dialog; + E_Manager *man; + E_Container *con; + char newpath[PATH_MAX]; + char oldpath[PATH_MAX]; + char error[PATH_MAX + 256]; + + ic = data; + ic->dialog = NULL; + if ((text) && (strcmp(text, ic->info.file))) + { + snprintf(newpath, PATH_MAX, "%s/%s", ic->sd->realpath, text); + snprintf(oldpath, PATH_MAX, "%s/%s", ic->sd->realpath, ic->info.file); + + if (!ecore_file_mv(oldpath, newpath)) + { + man = e_manager_current_get(); + if (!man) return; + con = e_container_current_get(man); + if (!con) return; + + dialog = e_dialog_new(con); + e_dialog_button_add(dialog, _("OK"), NULL, NULL, NULL); + e_dialog_button_focus_num(dialog, 1); + e_dialog_title_set(dialog, _("Error")); + snprintf(error, PATH_MAX + 256, + _("Could not rename from %s to %s"), + ic->info.file, text); + e_dialog_text_set(dialog, error); + e_win_centered_set(dialog->win, 1); + e_dialog_show(dialog); + return; + } + e_fm2_refresh(ic->sd->obj); + } +} + +static void +_e_fm2_file_rename_no_cb(char *text, void *data) +{ + E_Fm2_Icon *ic; + + ic = data; + ic->dialog = NULL; +} + +static void +_e_fm2_file_delete(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Manager *man; + E_Container *con; + E_Dialog *dialog; + E_Fm2_Icon *ic; + char text[PATH_MAX + 256]; + + man = e_manager_current_get(); + if (!man) return; + con = e_container_current_get(man); + if (!con) return; + + ic = data; + if (ic->dialog) return; + dialog = e_dialog_new(con); + ic->dialog = dialog; + E_OBJECT(dialog)->data = ic; + e_object_del_attach_func_set(E_OBJECT(dialog), _e_fm2_file_delete_delete_cb); + e_dialog_button_add(dialog, _("Yes"), NULL, _e_fm2_file_delete_yes_cb, ic); + e_dialog_button_add(dialog, _("No"), NULL, _e_fm2_file_delete_no_cb, ic); + e_dialog_button_focus_num(dialog, 1); + e_dialog_title_set(dialog, _("Confirm Delete")); + snprintf(text, PATH_MAX + 256, + _("Are you sure you want to delete
" + "%s/%s ?"), + ic->sd->realpath, ic->info.file); + e_dialog_text_set(dialog, text); + e_win_centered_set(dialog->win, 1); + e_dialog_show(dialog); +} + +static void +_e_fm2_file_delete_delete_cb(void *obj) +{ + E_Fm2_Icon *ic; + + ic = E_OBJECT(obj)->data; + ic->dialog = NULL; +} + +static void +_e_fm2_file_delete_yes_cb(void *data, E_Dialog *dialog) +{ + E_Manager *man; + E_Container *con; + E_Fm2_Icon *ic; + Evas_Object *obj; + char path[PATH_MAX]; + int ret; + + ic = data; + ic->dialog = NULL; + + snprintf(path, PATH_MAX, "%s/%s", ic->sd->realpath, ic->info.file); + + if (!(ecore_file_recursive_rm(path))) + { + char text[PATH_MAX + 256]; + + man = e_manager_current_get(); + if (!man) return; + con = e_container_current_get(man); + if (!con) return; + + e_object_del(E_OBJECT(dialog)); + dialog = e_dialog_new(con); + e_dialog_button_add(dialog, _("OK"), NULL, NULL, NULL); + e_dialog_button_focus_num(dialog, 1); + e_dialog_title_set(dialog, _("Error")); + snprintf(text, PATH_MAX + 256, + _("Could not delete
%s"), path); + e_dialog_text_set(dialog, text); + e_win_centered_set(dialog->win, 1); + e_dialog_show(dialog); + e_object_del(E_OBJECT(dialog)); + return; + } + e_object_del(E_OBJECT(dialog)); + e_fm2_refresh(ic->sd->obj); +} + +static void +_e_fm2_file_delete_no_cb(void *data, E_Dialog *dialog) +{ + E_Fm2_Icon *ic; + + ic = data; + ic->dialog = NULL; + e_object_del(E_OBJECT(dialog)); +} diff --git a/src/bin/e_fm.h b/src/bin/e_fm.h index fcde284fc..86fe8e5c7 100644 --- a/src/bin/e_fm.h +++ b/src/bin/e_fm.h @@ -100,6 +100,7 @@ EAPI int e_fm2_shutdown(void); EAPI Evas_Object *e_fm2_add(Evas *evas); EAPI void e_fm2_path_set(Evas_Object *obj, char *dev, char *path); EAPI void e_fm2_path_get(Evas_Object *obj, const char **dev, const char **path); +EAPI void e_fm2_refresh(Evas_Object *obj); EAPI const char *e_fm2_real_path_get(Evas_Object *obj); EAPI int e_fm2_has_parent_get(Evas_Object *obj); EAPI void e_fm2_parent_go(Evas_Object *obj); diff --git a/src/bin/e_int_config_wallpaper_import.c b/src/bin/e_int_config_wallpaper_import.c index 785ba0808..d0e8453a0 100644 --- a/src/bin/e_int_config_wallpaper_import.c +++ b/src/bin/e_int_config_wallpaper_import.c @@ -21,6 +21,16 @@ struct _Import Evas_Object *ok_obj; Evas_Object *close_obj; + + Evas_Object *fill_stretch_obj; + Evas_Object *fill_center_obj; + Evas_Object *fill_tile_obj; + Evas_Object *fill_within_obj; + Evas_Object *fill_fill_obj; + Evas_Object *perfect_obj; + Evas_Object *quality_obj; + Evas_Object *frame_fill_obj; + Evas_Object *frame_quality_obj; E_Win *win; @@ -40,6 +50,7 @@ struct _E_Config_Dialog_Data static Ecore_Event_Handler *_import_edje_cc_exit_handler = NULL; +static void _import_opt_disabled_set(Import *import, int disabled); static void _import_cb_sel_change(void *data, Evas_Object *obj); static void _import_edj_gen(Import *import); static int _import_cb_edje_cc_exit(void *data, int type, void *event); @@ -101,7 +112,7 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) import->box_obj = o; edje_object_part_swallow(import->bg_obj, "buttons_swallow", o); - o = evas_object_rectangle_add(evas); + o = evas_object_rectangle_add(evas); import->event_obj = o; mask = 0; evas_object_key_grab(o, "Tab", mask, ~mask, 0); @@ -129,23 +140,32 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) ot = e_widget_table_add(evas, 0); of = e_widget_frametable_add(evas, _("Fill and Stretch Options"), 1); + import->frame_fill_obj = of; rg = e_widget_radio_group_new(&cfdata->method); ord = e_widget_radio_icon_add(evas, _("Stretch"), "enlightenment/wallpaper_stretch", 24, 24, IMPORT_STRETCH, rg); + import->fill_stretch_obj = ord; e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0); ord = e_widget_radio_icon_add(evas, _("Center"), "enlightenment/wallpaper_center", 24, 24, IMPORT_CENTER, rg); + import->fill_center_obj = ord; e_widget_frametable_object_append(of, ord, 1, 0, 1, 1, 1, 0, 1, 0); ord = e_widget_radio_icon_add(evas, _("Tile"), "enlightenment/wallpaper_tile", 24, 24, IMPORT_TILE, rg); + import->fill_tile_obj = ord; e_widget_frametable_object_append(of, ord, 2, 0, 1, 1, 1, 0, 1, 0); ord = e_widget_radio_icon_add(evas, _("Within"), "enlightenment/wallpaper_scale_aspect_in", 24, 24, IMPORT_SCALE_ASPECT_IN, rg); + import->fill_within_obj = ord; e_widget_frametable_object_append(of, ord, 3, 0, 1, 1, 1, 0, 1, 0); ord = e_widget_radio_icon_add(evas, _("Fill"), "enlightenment/wallpaper_scale_aspect_out", 24, 24, IMPORT_SCALE_ASPECT_OUT, rg); + import->fill_fill_obj = ord; e_widget_frametable_object_append(of, ord, 4, 0, 1, 1, 1, 0, 1, 0); e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 0); of = e_widget_frametable_add(evas, _("File Quality"), 0); + import->frame_quality_obj = of; ord = e_widget_slider_add(evas, 1, 0, _("%3.0f%%"), 0.0, 100.0, 1.0, 0, &(cfdata->quality), NULL, 150); + import->quality_obj = ord; e_widget_frametable_object_append(of, ord, 0, 0, 1, 1, 1, 0, 1, 0); ord = e_widget_check_add(evas, _("Perfect"), &(cfdata->perfect)); + import->perfect_obj = ord; e_widget_frametable_object_append(of, ord, 1, 0, 1, 1, 0, 0, 0, 0); e_widget_table_object_append(ot, of, 0, 1, 1, 1, 1, 1, 1, 0); @@ -180,6 +200,8 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) e_widget_focus_set(import->box_obj, 1); win->data = import; + + _import_opt_disabled_set(import, 1); return win; } @@ -200,18 +222,35 @@ e_int_config_wallpaper_del(E_Win *win) if (import) free(import); } +static void +_import_opt_disabled_set(Import *import, int disabled) +{ + e_widget_disabled_set(import->fill_stretch_obj, disabled); + e_widget_disabled_set(import->fill_center_obj, disabled); + e_widget_disabled_set(import->fill_tile_obj, disabled); + e_widget_disabled_set(import->fill_within_obj, disabled); + e_widget_disabled_set(import->fill_fill_obj, disabled); + e_widget_disabled_set(import->perfect_obj, disabled); + e_widget_disabled_set(import->quality_obj, disabled); + e_widget_disabled_set(import->frame_fill_obj, disabled); + e_widget_disabled_set(import->frame_quality_obj, disabled); +} + static void _import_cb_sel_change(void *data, Evas_Object *obj) { Import *import; - const char *path; + const char *path, *p = NULL; import = data; path = e_widget_fsel_selection_path_get(import->fsel_obj); E_FREE(import->cfdata->file); if (path) import->cfdata->file = strdup(path); - /* FIXME: based on selection - disable or enable the scale options ie .edj files - * do not use the options */ + if (path) p = strrchr(path, '.'); + if ((!p) || (!strcasecmp(p, ".edj"))) + _import_opt_disabled_set(import, 1); + else + _import_opt_disabled_set(import, 0); } static void @@ -219,7 +258,7 @@ _import_edj_gen(Import *import) { Evas *evas; Evas_Object *img; - int fd; + int fd, num = 1; int w = 0, h = 0; const char *file; char buf[4096], cmd[4096], tmpn[4096], ipart[4096], enc[128]; @@ -237,6 +276,11 @@ _import_edj_gen(Import *import) return; } snprintf(buf, sizeof(buf), "%s/.e/e/backgrounds/%s.edj", homedir, fstrip); + while (ecore_file_exists(buf)) + { + snprintf(buf, sizeof(buf), "%s/.e/e/backgrounds/%s-%i.edj", homedir, fstrip, num); + num++; + } free(fstrip); free(homedir); strcpy(tmpn, "/tmp/e_bgdlg_new.edc-tmp-XXXXXX"); @@ -367,8 +411,13 @@ _import_cb_edje_cc_exit(void *data, int type, void *event) ev = event; import = data; if (ev->exe != import->exe) return 1; - - /* FIXME - error code - handle */ + + if (ev->exit_code != 0) + { + e_util_dialog_show(_("Picture Import Error"), + _("Enlightenment was unable to import the picture
" + "due to conversion errors.")); + } e_int_config_wallpaper_update(import->parent, import->fdest); diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 09392a749..01a37d874 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -32,7 +32,6 @@ static void _e_int_menus_apps_start (void *data, E_Menu *m); static void _e_int_menus_apps_del_hook (void *obj); static void _e_int_menus_apps_free_hook (void *obj); static void _e_int_menus_apps_run (void *data, E_Menu *m, E_Menu_Item *mi); -static void _e_int_menus_main_fm(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_int_menus_config_pre_cb (void *data, E_Menu *m); static void _e_int_menus_config_free_hook (void *obj); static void _e_int_menus_config_item_cb (void *data, E_Menu *m, E_Menu_Item *mi); @@ -385,15 +384,6 @@ _e_int_menus_main_showhide(void *data, E_Menu *m, E_Menu_Item *mi) if (act) act->func.go(E_OBJECT(m->zone), NULL); } -static void -_e_int_menus_main_fm(void *data, E_Menu *m, E_Menu_Item *mi) -{ - E_Fileman *fileman; - - fileman = e_fileman_new (m->zone->container); - e_fileman_show (fileman); -} - static void _e_int_menus_main_restart(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -632,14 +622,6 @@ _e_int_menus_config_pre_cb(void *data, E_Menu *m) e_util_menu_item_edje_icon_set(mi, "enlightenment/e"); e_menu_item_callback_set(mi, _e_int_menus_eapedit_item_cb, NULL); - mi = e_menu_item_new(m); - e_menu_item_separator_set(mi, 1); - - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Test Filemanager")); - e_util_menu_item_edje_icon_set(mi, "enlightenment/fileman"); - e_menu_item_callback_set(mi, _e_int_menus_main_fm, NULL); - l = evas_hash_find(_e_int_menus_augmentation, "config"); if (l) { diff --git a/src/bin/e_widget_framelist.c b/src/bin/e_widget_framelist.c index 2c25ef9e4..cfd6f8571 100644 --- a/src/bin/e_widget_framelist.c +++ b/src/bin/e_widget_framelist.c @@ -10,6 +10,7 @@ struct _E_Widget_Data }; static void _e_wid_del_hook(Evas_Object *obj); +static void _e_wid_disable_hook(Evas_Object *obj); /* local subsystem functions */ @@ -24,6 +25,7 @@ e_widget_framelist_add(Evas *evas, char *label, int horiz) obj = e_widget_add(evas); e_widget_del_hook_set(obj, _e_wid_del_hook); + e_widget_disable_hook_set(obj, _e_wid_disable_hook); wd = calloc(1, sizeof(E_Widget_Data)); e_widget_data_set(obj, wd); @@ -94,3 +96,15 @@ _e_wid_del_hook(Evas_Object *obj) wd = e_widget_data_get(obj); free(wd); } + +static void +_e_wid_disable_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + if (e_widget_disabled_get(obj)) + edje_object_signal_emit(wd->o_frame, "disabled", ""); + else + edje_object_signal_emit(wd->o_frame, "enabled", ""); +} diff --git a/src/bin/e_widget_frametable.c b/src/bin/e_widget_frametable.c index 666aa8908..603d3db44 100644 --- a/src/bin/e_widget_frametable.c +++ b/src/bin/e_widget_frametable.c @@ -10,6 +10,7 @@ struct _E_Widget_Data }; static void _e_wid_del_hook(Evas_Object *obj); +static void _e_wid_disable_hook(Evas_Object *obj); /* local subsystem functions */ @@ -24,6 +25,7 @@ e_widget_frametable_add(Evas *evas, char *label, int homogenous) obj = e_widget_add(evas); e_widget_del_hook_set(obj, _e_wid_del_hook); + e_widget_disable_hook_set(obj, _e_wid_disable_hook); wd = calloc(1, sizeof(E_Widget_Data)); e_widget_data_set(obj, wd); @@ -83,3 +85,15 @@ _e_wid_del_hook(Evas_Object *obj) wd = e_widget_data_get(obj); free(wd); } + +static void +_e_wid_disable_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + if (e_widget_disabled_get(obj)) + edje_object_signal_emit(wd->o_frame, "disabled", ""); + else + edje_object_signal_emit(wd->o_frame, "enabled", ""); +} diff --git a/src/bin/e_widget_fsel.c b/src/bin/e_widget_fsel.c index e393601b7..12b0c22ae 100644 --- a/src/bin/e_widget_fsel.c +++ b/src/bin/e_widget_fsel.c @@ -255,7 +255,7 @@ e_widget_fsel_add(Evas *evas, char *dev, char *path, char *selected, char *filte fmc.icon.list.h = 24; fmc.icon.fixed.w = 1; fmc.icon.fixed.h = 1; - fmc.icon.extension.show = 0; + fmc.icon.extension.show = 1; fmc.list.sort.no_case = 1; fmc.list.sort.dirs.first = 1; fmc.list.sort.dirs.last = 0; diff --git a/src/bin/e_widget_slider.c b/src/bin/e_widget_slider.c index a744962bc..d4d874e86 100644 --- a/src/bin/e_widget_slider.c +++ b/src/bin/e_widget_slider.c @@ -15,6 +15,7 @@ static void _e_wid_del_hook(Evas_Object *obj); static void _e_wid_focus_hook(Evas_Object *obj); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_wid_cb_changed(void *data, Evas_Object *obj, void *event_info); +static void _e_wid_disable_hook(Evas_Object *obj); /* externally accessible functions */ EAPI Evas_Object * @@ -28,6 +29,7 @@ e_widget_slider_add(Evas *evas, int horiz, int rev, char *fmt, double min, doubl e_widget_del_hook_set(obj, _e_wid_del_hook); e_widget_focus_hook_set(obj, _e_wid_focus_hook); + e_widget_disable_hook_set(obj, _e_wid_disable_hook); wd = calloc(1, sizeof(E_Widget_Data)); e_widget_data_set(obj, wd); wd->o_widget = obj; @@ -189,3 +191,17 @@ _e_wid_cb_changed(void *data, Evas_Object *obj, void *event_info) else if (wd->ival) *(wd->ival) = e_slider_value_get(wd->o_slider); e_widget_change(wd->o_widget); } + +static void +_e_wid_disable_hook(Evas_Object *obj) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + if (e_widget_disabled_get(obj)) + edje_object_signal_emit(e_slider_edje_object_get(wd->o_slider), + "disabled", ""); + else + edje_object_signal_emit(e_slider_edje_object_get(wd->o_slider), + "enabled", ""); +} diff --git a/src/modules/ibar/e_mod_config.c b/src/modules/ibar/e_mod_config.c index ac231fae4..08faaec6e 100644 --- a/src/modules/ibar/e_mod_config.c +++ b/src/modules/ibar/e_mod_config.c @@ -156,7 +156,7 @@ _cb_add(void *data, void *data2) cfdata = data; e_entry_dialog_show(_("Create new ibar source"), "enlightenment/e", - _("Enter a name for this new source"), NULL, NULL, + _("Enter a name for this new source"), "", NULL, NULL, _cb_entry_ok, NULL, cfdata); }