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