diff --git a/ecdb/trunk/src/ecdb_burn_data_gui.c b/ecdb/trunk/src/ecdb_burn_data_gui.c index 07ae954..19386a2 100644 --- a/ecdb/trunk/src/ecdb_burn_data_gui.c +++ b/ecdb/trunk/src/ecdb_burn_data_gui.c @@ -242,6 +242,9 @@ ecdb_burn_data_page_show(void) evas_object_move(b, x, y); evas_object_resize(b, w, h); edje_object_part_swallow(swallow, "ecdb/burn_data/filelist", b); + + b = edje_object_part_swallow_get(swallow, "ecdb/burn_data/filelist"); + ecdb_widget_focus_callback_add(b, "ecdb/burn_data/filelist"); } else if (edje_object_part_swallow_get(gui, "action_area") != swallow) diff --git a/ecdb/trunk/src/ecdb_filelist_custom.c b/ecdb/trunk/src/ecdb_filelist_custom.c index fdd9c38..c0eb96b 100644 --- a/ecdb/trunk/src/ecdb_filelist_custom.c +++ b/ecdb/trunk/src/ecdb_filelist_custom.c @@ -4,6 +4,8 @@ static void free_file(void *data); static void ecdb_custom_filelist_cb_clicked(Ewl_Widget *w, void *ev, void *data); +static void ecdb_custom_filelist_cb_key_down(Ewl_Widget *w, void *ev, + void *data); static Ewl_Widget *ecdb_custom_filelist_view_widget_fetch(void *data, unsigned int row, unsigned int column, void *private_data); @@ -35,6 +37,8 @@ ecdb_custom_filelist_new(void) ewl_callback_del_type(EWL_FILELIST(ret)->controller, EWL_CALLBACK_CLICKED); ewl_callback_prepend(EWL_FILELIST(ret)->controller, EWL_CALLBACK_CLICKED, ecdb_custom_filelist_cb_clicked, ret); + ewl_callback_append(EWL_FILELIST(ret)->controller, EWL_CALLBACK_KEY_DOWN, + ecdb_custom_filelist_cb_key_down, ret); return ret; } @@ -275,48 +279,58 @@ ecdb_custom_filelist_model_data_fetch(void *data, unsigned int row, return ret; } +static void +ecdb_custom_filelist_cb_key_down(Ewl_Widget *w, void *ev, void *data) +{ + Ewl_Event_Key_Down *kd; + Ewl_Filelist *fl; + char *file; + int i; + Ecdb_Source *parent, *child; + + kd = ev; + fl = data; + + if (!ewl_mvc_selected_count_get(EWL_MVC(w))) + { + return; + } + + if (!strcmp(kd->base.keyname, "Delete")) + { + file = ecdb_custom_filelist_selected_file_get(fl); + parent = ewl_widget_data_get(EWL_WIDGET(fl), "source"); + + for (i = 0; (child = parent->children[i]); i++) + { + if (!strcmp(child->dst, file)) + { + ecdb_source_child_remove(parent, child); + ecdb_custom_filelist_directory_set(fl, parent); + break; + } + } + } +} + static void ecdb_custom_filelist_cb_clicked(Ewl_Widget *w, void *ev, void *data) { Ewl_Event_Mouse_Down *md; char *file; int i = 0; - Ewl_Widget *c; Ewl_Filelist *fl; Ecdb_Source *parent, *child; md = ev; fl = data; - if (!ewl_mvc_selected_count_get(EWL_MVC(fl->controller))) - { - return; - } - - if (md->clicks != 2) + if ((!ewl_mvc_selected_count_get(EWL_MVC(w))) || (md->clicks != 2)) { ewl_filelist_selected_files_change_notify(fl); return; } - c = ewl_container_child_at_recursive_get(EWL_CONTAINER(fl), md->base.x, - md->base.y); - - while (c && c->parent) - { - if (!ewl_widget_internal_is(c)) - { - i = 1; - break; - } - c = c->parent; - } - - if (!i) - { - return; - } - file = ecdb_custom_filelist_selected_file_get(fl); parent = ewl_widget_data_get(EWL_WIDGET(fl), "source"); diff --git a/ecdb/trunk/src/ecdb_widgets.c b/ecdb/trunk/src/ecdb_widgets.c index 4501b91..704b055 100644 --- a/ecdb/trunk/src/ecdb_widgets.c +++ b/ecdb/trunk/src/ecdb_widgets.c @@ -2,14 +2,14 @@ #include "ecdb.h" static void -_widget_focus_handle(void *data, Evas_Object *o, const char *emission, - const char *source) +_widget_focus_handle(void *data, Evas_Object *o) { static char *old_source; const char *name; Evas_Object *eo; name = data; + printf("part name: %s\n", name); // Some widgets aren't named (such as when in combo), so check if (!name) return; @@ -27,8 +27,28 @@ _widget_focus_handle(void *data, Evas_Object *o, const char *emission, } // Send focus to the freshly clicked widget - eo = evas_object_name_find(ecore_evas_get(em->main_win_ee), name); - evas_object_focus_set(eo, 1); + evas_object_focus_set(o, 1); +} + +static void +_mouse_down_edje(void *data, Evas_Object *o, const char *emission, + const char *source) +{ + _widget_focus_handle(data, o); +} + +static void +_mouse_down_evas(void *data, Evas *e __UNUSED__, Evas_Object *eo, + void *ev_data __UNUSED__) +{ + _widget_focus_handle(data, eo); +} + +void +ecdb_widget_focus_callback_add(Evas_Object *o, const char *name) +{ + evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, + _mouse_down_evas, (void *)name); } Evas_Object * @@ -39,7 +59,7 @@ ecdb_widget_add(Evas_Object *parent, const char *name) o = edje_object_add(evas_object_evas_get(parent)); edje_object_signal_callback_add(o, "mouse,down,*", "*", - _widget_focus_handle, + _mouse_down_edje, (void *)name); if (name) diff --git a/ecdb/trunk/src/ecdb_widgets.h b/ecdb/trunk/src/ecdb_widgets.h index 8f17b1f..443588e 100644 --- a/ecdb/trunk/src/ecdb_widgets.h +++ b/ecdb/trunk/src/ecdb_widgets.h @@ -2,6 +2,8 @@ #ifndef ECDB_WIDGETS_H #define ECDB_WIDGETS_H +void ecdb_widget_focus_callback_add(Evas_Object *o, const char *name); + Evas_Object *ecdb_button_add(Evas_Object *parent, const char *name); void ecdb_button_label_set(Evas_Object *b, const char *label); void ecdb_button_icon_set(Evas_Object *b, const char *group);