diff --git a/src/bin/e_eap_editor.c b/src/bin/e_eap_editor.c index 70d49b8a0..0ce503f2d 100644 --- a/src/bin/e_eap_editor.c +++ b/src/bin/e_eap_editor.c @@ -44,6 +44,7 @@ static int _e_eap_edit_advanced_apply_data(E_Config_Dialog *cfd, void static Evas_Object *_e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data); static Evas_Object *_e_eap_edit_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data); static void _e_eap_edit_select_cb(Evas_Object *obj, char *file, void *data); +static void _e_eap_edit_hilite_cb(Evas_Object *obj, char *file, void *data); #define IFDUP(src, dst) if (src) dst = strdup(src); else dst = NULL @@ -242,6 +243,7 @@ _e_eap_edit_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, void *data) editor->img_widget = e_widget_iconsel_add(evas, editor->img, 48, 48, &(cfdata->image)); e_widget_iconsel_select_callback_add(editor->img_widget, _e_eap_edit_select_cb, editor); + e_widget_iconsel_hilite_callback_add(editor->img_widget, _e_eap_edit_hilite_cb, editor); e_widget_frametable_object_append(o, editor->img_widget, 0, 0, 1, 1, 1, 1, 1, 1); @@ -400,3 +402,13 @@ _e_eap_edit_select_cb(Evas_Object *obj, char *file, void *data) printf("selected: %s\n", file); } + +void +_e_eap_edit_hilite_cb(Evas_Object *obj, char *file, void *data) +{ + E_App_Edit *editor; + +// editor = data; + printf("hilited: %s\n", file); + +} diff --git a/src/bin/e_file_dialog.c b/src/bin/e_file_dialog.c index 2df53e80e..c015c1a1d 100644 --- a/src/bin/e_file_dialog.c +++ b/src/bin/e_file_dialog.c @@ -10,6 +10,7 @@ static void _e_file_dialog_button1_click(void *data, E_Dialog *dia); static void _e_file_dialog_button2_click(void *data, E_Dialog *dia); static void _e_file_dialog_free(E_File_Dialog *dia); static void _e_file_dialog_file_select_cb(Evas_Object *obj, char *file, void *data); +static void _e_file_dialog_file_hilite_cb(Evas_Object *obj, char *file, void *data); E_File_Dialog * e_file_dialog_new(E_Container *con) @@ -41,6 +42,7 @@ e_file_dialog_new(E_Container *con) dia->con = con; dia->file = NULL; dia->select_func = NULL; + dia->hilite_func = NULL; dia->select_data = NULL; evas = dia->dia->win->evas; @@ -55,6 +57,7 @@ e_file_dialog_new(E_Container *con) fm = e_widget_fileman_add(evas, &(dia->file)); e_widget_fileman_select_callback_add(fm, _e_file_dialog_file_select_cb, dia); + e_widget_fileman_hilite_callback_add(fm, _e_file_dialog_file_hilite_cb, dia); e_widget_list_object_append(ol, fm, 1, 1, 0.0); e_widget_min_size_get(ol, &w, &h); @@ -86,6 +89,13 @@ e_file_dialog_select_callback_add(E_File_Dialog *dia, void (*func)(E_File_Dialog dia->select_data = data; } +void +e_file_dialog_hilite_callback_add(E_File_Dialog *dia, void (*func)(E_File_Dialog *dia, char *file, void *data), void *data) +{ + dia->hilite_func = func; + dia->hilite_data = data; +} + /* local subsystem functions */ static void @@ -96,7 +106,7 @@ _e_file_dialog_button1_click(void *data, E_Dialog *edia) dia = data; if(dia->select_func && dia->file) dia->select_func(dia, dia->file, dia->select_data); - _e_file_dialog_free(dia); + _e_file_dialog_free(dia); } static void @@ -114,14 +124,26 @@ _e_file_dialog_file_select_cb(Evas_Object *obj, char *file, void *data) if(dia->select_func) dia->select_func(dia, file, dia->select_data); - printf("e_file_dialog: %s\n", file); + printf("e_file_dialog (select) : %s\n", file); } +static void +_e_file_dialog_file_hilite_cb(Evas_Object *obj, char *file, void *data) +{ + E_File_Dialog *dia; + + dia = data; + if(dia->hilite_func) + dia->hilite_func(dia, file, dia->hilite_data); + + printf("e_file_dialog (hilite) : %s\n", file); +} + static void _e_file_dialog_free(E_File_Dialog *dia) { e_object_unref(E_OBJECT(dia->dia)); E_FREE(dia->file); - free(dia); + //free(dia); } diff --git a/src/bin/e_file_dialog.h b/src/bin/e_file_dialog.h index a65d26695..855d4c6e9 100644 --- a/src/bin/e_file_dialog.h +++ b/src/bin/e_file_dialog.h @@ -22,12 +22,15 @@ struct _E_File_Dialog void (*select_func)(E_File_Dialog *dia, char *file, void *data); void *select_data; + void (*hilite_func)(E_File_Dialog *dia, char *file, void *data); + void *hilite_data; }; EAPI E_File_Dialog *e_file_dialog_new (E_Container *con); EAPI void e_file_dialog_show (E_File_Dialog *dia); EAPI void e_file_dialog_title_set (E_File_Dialog *dia, const char *title); EAPI void e_file_dialog_select_callback_add(E_File_Dialog *dia, void (*func)(E_File_Dialog *dia, char *file, void *data), void *data); +EAPI void e_file_dialog_hilite_callback_add(E_File_Dialog *dia, void (*func)(E_File_Dialog *dia, char *file, void *data), void *data); #endif #endif diff --git a/src/bin/e_file_selector.c b/src/bin/e_file_selector.c index 03eae6499..32a5c153c 100644 --- a/src/bin/e_file_selector.c +++ b/src/bin/e_file_selector.c @@ -25,6 +25,7 @@ struct _E_Smart_Data Evas_Coord x, y, w, h; /* coords */ void (*func) (Evas_Object *obj, char *file, void *data); /* selection cb */ + void (*func_hilite) (Evas_Object *obj, char *file, void *data); /* selection cb */ void *func_data; /* selection cb data */ }; @@ -40,6 +41,7 @@ static void _e_smart_clip_set(Evas_Object *obj, Evas_Object * clip); static void _e_smart_clip_unset(Evas_Object *obj); static void _e_smart_init(void); static void _e_file_selector_selected_cb(Evas_Object *obj, char *file, void *data); +static void _e_file_selector_hilited_cb(Evas_Object *obj, char *file, void *data); static void _e_file_selector_scroll_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y); static void _e_file_selector_scroll_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); static void _e_file_selector_scroll_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); @@ -80,10 +82,11 @@ e_file_selector_view_get(Evas_Object *obj) } void -e_file_selector_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void *data) +e_file_selector_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void (*func_hilite) (Evas_Object *obj, char *file, void *data), void *data) { API_ENTRY return; sd->func = func; + sd->func_hilite = func_hilite; sd->func_data = data; } @@ -128,6 +131,7 @@ _e_smart_add(Evas_Object *obj) sd->h = 0; sd->parent = obj; sd->func = NULL; + sd->func_hilite = NULL; sd->func_data = NULL; sd->view = E_FILE_SELECTOR_ICONVIEW; @@ -143,7 +147,7 @@ _e_smart_add(Evas_Object *obj) e_fm_dir_set(sd->files, home); E_FREE(home); - e_fm_selector_enable(sd->files, _e_file_selector_selected_cb, sd); + e_fm_selector_enable(sd->files, _e_file_selector_selected_cb, _e_file_selector_hilited_cb, sd); evas_object_smart_member_add(sd->files, obj); e_scrollframe_extern_pan_set(sd->frame, sd->files, @@ -231,6 +235,15 @@ _e_file_selector_selected_cb(Evas_Object *obj, char *file, void *data) sd->func(sd->parent, file, sd->func_data); } +_e_file_selector_hilited_cb(Evas_Object *obj, char *file, void *data) +{ + E_Smart_Data *sd; + + sd = data; + if(sd->func_hilite) + sd->func_hilite(sd->parent, file, sd->func_data); +} + /* never need to touch this */ static void diff --git a/src/bin/e_file_selector.h b/src/bin/e_file_selector.h index a9525b6f9..1a4b40580 100644 --- a/src/bin/e_file_selector.h +++ b/src/bin/e_file_selector.h @@ -18,7 +18,7 @@ enum E_File_Selector_View EAPI Evas_Object *e_file_selector_add(Evas *evas); EAPI void e_file_selector_view_set(Evas_Object *object, int view); EAPI int e_file_selector_view_get(Evas_Object *object); -EAPI void e_file_selector_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void *data); +EAPI void e_file_selector_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void (*hilite_func) (Evas_Object *obj, char *file, void *data), void *data); #endif #endif diff --git a/src/bin/e_fileman.c b/src/bin/e_fileman.c index 2b0d2aa9f..d60d118e6 100644 --- a/src/bin/e_fileman.c +++ b/src/bin/e_fileman.c @@ -152,7 +152,7 @@ e_fileman_selector_enable(E_Fileman *fileman, void (*func)(E_Fileman *fileman, c { fileman->selector.func = func; fileman->selector.data = data; - e_fm_selector_enable(fileman->smart, _e_fileman_selector_cb, fileman); + e_fm_selector_enable(fileman->smart, _e_fileman_selector_cb, NULL, fileman); } void diff --git a/src/bin/e_fileman_smart.c b/src/bin/e_fileman_smart.c index 209231894..0225479cc 100644 --- a/src/bin/e_fileman_smart.c +++ b/src/bin/e_fileman_smart.c @@ -180,6 +180,7 @@ struct _E_Fm_Smart_Data int is_selector; void (*selector_func) (Evas_Object *object, char *file, void *data); void *selector_data; + void (*selector_hilite_func) (Evas_Object *object, char *file, void *data); Evas_Coord x, y, w, h; @@ -301,6 +302,7 @@ static int _e_fm_files_sort_modtime_cb (void *d1, void *d2); static int _e_fm_files_sort_layout_name_cb (void *d1, void *d2); static void _e_fm_selector_send_file (E_Fm_Icon *icon); +static void _e_fm_selector_send_hilite_file (E_Fm_Icon *icon); static char *_e_fm_dir_meta_dir_id(char *dir); static int _e_fm_dir_meta_load(E_Fm_Smart_Data *sd); @@ -548,7 +550,7 @@ e_fm_thaw(Evas_Object *object) } void -e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char *file, void *data), void *data) +e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char *file, void *data), void (*hilite_func)(Evas_Object *object, char *file, void *data), void *data) { E_Fm_Smart_Data *sd; @@ -558,6 +560,7 @@ e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char sd->is_selector = 1; sd->selector_func = func; sd->selector_data = data; + sd->selector_hilite_func = hilite_func; } /* This isnt working yet */ @@ -2195,6 +2198,9 @@ _e_fm_icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info } else { + if(icon->sd->is_selector && icon->file->type == E_FM_FILE_TYPE_FILE) + _e_fm_selector_send_hilite_file(icon); + if(icon->sd->win) { icon->sd->drag.start = 1; @@ -3227,6 +3233,12 @@ _e_fm_selector_send_file(E_Fm_Icon *icon) icon->sd->selector_func(icon->sd->object, strdup(icon->file->path), icon->sd->selector_data); } +static void +_e_fm_selector_send_hilite_file(E_Fm_Icon *icon) +{ + icon->sd->selector_hilite_func(icon->sd->object, strdup(icon->file->path), icon->sd->selector_data); +} + static char * _e_fm_dir_meta_dir_id(char *dir) { diff --git a/src/bin/e_fileman_smart.h b/src/bin/e_fileman_smart.h index 1d37fdea0..dc520ddaf 100644 --- a/src/bin/e_fileman_smart.h +++ b/src/bin/e_fileman_smart.h @@ -43,7 +43,7 @@ EAPI void e_fm_geometry_virtual_get(Evas_Object *object, Evas_C EAPI void e_fm_reconfigure_callback_add(Evas_Object *object, void (*func)(void *data, Evas_Object *obj, E_Event_Fm_Reconfigure *ev), void *data); EAPI int e_fm_freeze(Evas_Object *freeze); EAPI int e_fm_thaw(Evas_Object *freeze); -EAPI void e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char *file, void *data), void *data); +EAPI void e_fm_selector_enable(Evas_Object *object, void (*func)(Evas_Object *object, char *file, void *data), void (*hilite_func)(Evas_Object *object, char *file, void *data), void *data); EAPI void e_fm_background_set(Evas_Object *object, Evas_Object *bg); EAPI Evas_Object *e_fm_icon_create(void *data); diff --git a/src/bin/e_icon_canvas.c b/src/bin/e_icon_canvas.c index 5211fd3dd..697187a73 100644 --- a/src/bin/e_icon_canvas.c +++ b/src/bin/e_icon_canvas.c @@ -643,6 +643,8 @@ _e_icon_canvas_tile_hide(E_Icon_Canvas_Tile *t) void _e_icon_canvas_tile_pack(E_Icon_Canvas_Tile *t, E_Icon_Canvas_Item *li) { + if(!t) + return; t->items = evas_list_append(t->items, li); li->tile = t; if(t->visible) diff --git a/src/bin/e_widget_fileman.c b/src/bin/e_widget_fileman.c index 41c45bf31..301a1941d 100644 --- a/src/bin/e_widget_fileman.c +++ b/src/bin/e_widget_fileman.c @@ -16,11 +16,14 @@ struct _E_Widget_Data char **valptr; void (*select_func) (Evas_Object *obj, char *file, void *data); void *select_data; + void (*hilite_func) (Evas_Object *obj, char *file, void *data); + void *hilite_data; }; static void _e_wid_del_hook(Evas_Object *obj); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_wid_fileman_selected_cb(Evas_Object *obj, char *file, void *data); +static void _e_wid_fileman_hilited_cb(Evas_Object *obj, char *file, void *data); /* local subsystem functions */ @@ -49,13 +52,36 @@ _e_wid_fileman_selected_cb(Evas_Object *obj, char *file, void *data) /* this is crashing, see why */ #if 0 E_FREE(*(wd->valptr)); - *(wd->valptr) = strdup(file); -#endif +#endif + if(wd->valptr) + *(wd->valptr) = strdup(file); + if (wd->select_func) wd->select_func(wd->wid, file, wd->select_data); - printf("e_widget_fileman: %s\n", file); + printf("e_widget_fileman (selected) : %s\n", file); +} + +static void +_e_wid_fileman_hilited_cb(Evas_Object *obj, char *file, void *data) +{ + E_Widget_Data *wd; + + wd = data; + +/* this is crashing, see why */ +#if 0 + E_FREE(*(wd->valptr)); +#endif + if(wd->valptr) + *(wd->valptr) = strdup(file); + + + if (wd->hilite_func) + wd->hilite_func(wd->wid, file, wd->select_data); + + printf("e_widget_fileman (hilited): %s\n", file); } /* externally accessible functions */ @@ -76,7 +102,7 @@ e_widget_fileman_add(Evas *evas, char **val) e_widget_data_set(obj, wd); wd->o_fm = e_file_selector_add(evas); - e_file_selector_callback_add(wd->o_fm, _e_wid_fileman_selected_cb, wd); + e_file_selector_callback_add(wd->o_fm, _e_wid_fileman_selected_cb, _e_wid_fileman_hilited_cb, wd); evas_object_show(wd->o_fm); evas_object_resize(wd->o_fm, 300, 200); e_widget_min_size_set(obj, 300, 200); @@ -98,3 +124,13 @@ e_widget_fileman_select_callback_add(Evas_Object *obj, void (*func) (Evas_Object wd->select_func = func; wd->select_data = data; } + +void +e_widget_fileman_hilite_callback_add(Evas_Object *obj, void (*func) (Evas_Object *obj, char *file, void *data), void *data) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + wd->hilite_func = func; + wd->hilite_data = data; +} diff --git a/src/bin/e_widget_iconsel.c b/src/bin/e_widget_iconsel.c index c00a04d7b..942cc3aea 100644 --- a/src/bin/e_widget_iconsel.c +++ b/src/bin/e_widget_iconsel.c @@ -21,6 +21,8 @@ struct _E_Widget_Data void (*select_func) (Evas_Object *obj, char *file, void *data); void *select_data; + void (*hilite_func) (Evas_Object *obj, char *file, void *data); + void *hilite_data; }; static void _e_wid_del_hook(Evas_Object *obj); @@ -31,6 +33,7 @@ static void _e_wid_disable_hook(Evas_Object *obj); static void _e_wid_signal_cb1(void *data, Evas_Object *obj, const char *emission, const char *source); static void _e_wid_focus_steal(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_wid_select_cb(E_File_Dialog *dia, char *file, void *data); +static void _e_wid_hilite_cb(E_File_Dialog *dia, char *file, void *data); /* local subsystem functions */ @@ -53,6 +56,8 @@ e_widget_iconsel_add(Evas *evas, Evas_Object *icon, Evas_Coord minw, Evas_Coord wd->valptr = file; wd->select_func = NULL; wd->select_data = NULL; + wd->hilite_func = NULL; + wd->hilite_data = NULL; wd->obj = obj; e_widget_data_set(obj, wd); @@ -108,7 +113,9 @@ e_widget_iconsel_add_from_file(Evas *evas, char *icon, Evas_Coord minw, Evas_Coo wd = calloc(1, sizeof(E_Widget_Data)); wd->valptr = file; wd->select_func = NULL; - wd->select_data = NULL; + wd->select_data = NULL; + wd->hilite_func = NULL; + wd->hilite_data = NULL; wd->obj = obj; e_widget_data_set(obj, wd); @@ -152,6 +159,16 @@ e_widget_iconsel_select_callback_add(Evas_Object *obj, void (*func)(Evas_Object wd->select_data = data; } +void +e_widget_iconsel_hilite_callback_add(Evas_Object *obj, void (*func)(Evas_Object *obj, char *file, void *data), void *data) +{ + E_Widget_Data *wd; + + wd = e_widget_data_get(obj); + wd->hilite_func = func; + wd->hilite_data = data; +} + static void _e_wid_del_hook(Evas_Object *obj) { @@ -191,6 +208,7 @@ _e_wid_activate_hook(Evas_Object *obj) if (!dia) return; e_file_dialog_title_set(dia, "Select File"); e_file_dialog_select_callback_add(dia, _e_wid_select_cb, wd); + e_file_dialog_hilite_callback_add(dia, _e_wid_hilite_cb, wd); e_file_dialog_show(dia); } @@ -265,3 +283,26 @@ _e_wid_select_cb(E_File_Dialog *dia, char *file, void *data) *(wd->valptr) = strdup(file); e_object_del(E_OBJECT(dia)); } + +static void +_e_wid_hilite_cb(E_File_Dialog *dia, char *file, void *data) +{ + E_Widget_Data *wd; + char *ext; + + wd = data; + + ext = strrchr(file, '.'); + if (!ext) return; + if ((strcasecmp(ext, ".png")) && + (strcasecmp(ext, ".jpg")) && + (strcasecmp(ext, ".jpeg"))) + return; + + if (wd->hilite_func) + wd->hilite_func(wd->obj, file, wd->select_data); + + //e_icon_file_set(wd->o_icon, file); + E_FREE(*(wd->valptr)); + *(wd->valptr) = strdup(file); +} diff --git a/src/bin/e_widget_iconsel.h b/src/bin/e_widget_iconsel.h index 4f58289b1..082491b34 100644 --- a/src/bin/e_widget_iconsel.h +++ b/src/bin/e_widget_iconsel.h @@ -9,6 +9,7 @@ EAPI Evas_Object *e_widget_iconsel_add(Evas *evas, Evas_Object *icon, Evas_Coord minw, Evas_Coord minh, char **file); EAPI Evas_Object *e_widget_iconsel_add_from_file(Evas *evas, char *icon, Evas_Coord minw, Evas_Coord minh, char **file); EAPI void e_widget_iconsel_select_callback_add(Evas_Object *obj, void (*func)(Evas_Object *obj, char *file, void *data), void *data); +EAPI void e_widget_iconsel_hilite_callback_add(Evas_Object *obj, void (*func)(Evas_Object *obj, char *file, void *data), void *data); #endif #endif