diff --git a/legacy/elementary/configure.ac b/legacy/elementary/configure.ac index 1fcc243271..8578d28713 100644 --- a/legacy/elementary/configure.ac +++ b/legacy/elementary/configure.ac @@ -190,6 +190,24 @@ PKG_CHECK_MODULES([ELEMENTARY_EDBUS], ) AC_SUBST(ELM_EDBUS_DEF) +ELM_EFREET_DEF="#undef" +have_elementary_efreet="no" +PKG_CHECK_MODULES([ELEMENTARY_EFREET], + [ + efreet + efreet-mime + efreet-trash + ], + [ + AC_DEFINE(HAVE_ELEMENTARY_EFREET, 1, [Efreet support for Elementary]) + have_elementary_efreet="yes" + ELM_EFREET_DEF="#define" + requirement_elm="efreet efreet-mime efreet-trash ${requirement_elm}" + ], + [have_elementary_efreet="no"] +) +AC_SUBST(ELM_EFREET_DEF) + ELM_ALLOCA_H_DEF="#undef" AC_CHECK_HEADER(alloca.h, [ELM_ALLOCA_H_DEF="#define"]) AC_SUBST(ELM_ALLOCA_H_DEF) @@ -251,6 +269,7 @@ echo " Windows CE....: ${have_elementary_wince}" echo echo "Features:" echo " EDBus.........: ${have_elementary_edbus}" +echo " EFreet........: ${have_elementary_efreet}" echo echo "edje_cc.........: ${edje_cc}" echo diff --git a/legacy/elementary/elementary.pc.in b/legacy/elementary/elementary.pc.in index 5fe7c28cbd..ecf8705a11 100644 --- a/legacy/elementary/elementary.pc.in +++ b/legacy/elementary/elementary.pc.in @@ -8,5 +8,6 @@ Description: Mobile device touchscreen widget library Requires: @requirement_elm@ Version: @VERSION@ Libs: -L${libdir} -lelementary -Libs.private: @dlopen_libs@ @my_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ @ELEMENTARY_WINCE_LIBS@ @ELEMENTARY_EDBUS_LIBS@ -Cflags: -I${includedir} -I${includedir}/elementary @ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@ @ELEMENTARY_WINCE_CFLAGS@ @ELEMENTARY_EDBUS_CFLAGS@ +Libs.private: @dlopen_libs@ @my_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ +@ELEMENTARY_FB_LIBS@ @ELEMENTARY_WINCE_LIBS@ @ELEMENTARY_EDBUS_LIBS@ @ELEMENTARY_EFREET_LIBS@ +Cflags: -I${includedir} -I${includedir}/elementary @ELEMENTARY_CFLAGS@ @ELEMENTARY_X_CFLAGS@ @ELEMENTARY_FB_CFLAGS@ @ELEMENTARY_WINCE_CFLAGS@ @ELEMENTARY_EDBUS_CFLAGS@ @ELEMENTARY_EFREET_CFLAGS@ diff --git a/legacy/elementary/src/bin/Makefile.am b/legacy/elementary/src/bin/Makefile.am index 7d3be9ac69..a6fe54cb7d 100644 --- a/legacy/elementary/src/bin/Makefile.am +++ b/legacy/elementary/src/bin/Makefile.am @@ -13,7 +13,8 @@ AM_CPPFLAGS = \ @ELEMENTARY_FB_CFLAGS@ \ @ELEMENTARY_WIN32_CFLAGS@ \ @ELEMENTARY_WINCE_CFLAGS@ \ -@ELEMENTARY_EDBUS_CFLAGS@ +@ELEMENTARY_EDBUS_CFLAGS@ \ +@ELEMENTARY_EFREET_CFLAGS@ if ELEMENTARY_WINDOWS_BUILD AM_CPPFLAGS += -DELEMENTARY_BUILD @@ -57,7 +58,10 @@ test_separator.c \ test_scroller.c \ test_spinner.c \ test_index.c \ -test_photocam.c +test_photocam.c \ +test_photo.c \ +test_icon_desktops.c + elementary_test_LDADD = $(top_builddir)/src/lib/libelementary.la elementary_test_LDFLAGS = diff --git a/legacy/elementary/src/bin/test.c b/legacy/elementary/src/bin/test.c index f6c4dcf2d6..41f629498a 100644 --- a/legacy/elementary/src/bin/test.c +++ b/legacy/elementary/src/bin/test.c @@ -48,6 +48,8 @@ void test_scroller(void *data, Evas_Object *obj, void *event_info); void test_spinner(void *data, Evas_Object *obj, void *event_info); void test_index(void *data, Evas_Object *obj, void *event_info); void test_photocam(void *data, Evas_Object *obj, void *event_info); +void test_photo(void *data, Evas_Object *obj, void *event_info); +void test_icon_desktops(void *data, Evas_Object *obj, void *event_info); static void my_win_del(void *data, Evas_Object *obj, void *event_info) @@ -177,6 +179,8 @@ my_win_main(void) elm_list_item_append(li, "Spinner", NULL, NULL, test_spinner, NULL); elm_list_item_append(li, "Index", NULL, NULL, test_index, NULL); elm_list_item_append(li, "Photocam", NULL, NULL, test_photocam, NULL); + elm_list_item_append(li, "Photo", NULL, NULL, test_photo, NULL); + elm_list_item_append(li, "Icon Desktops", NULL, NULL, test_icon_desktops, NULL); elm_list_go(li); diff --git a/legacy/elementary/src/bin/test_icon_desktops.c b/legacy/elementary/src/bin/test_icon_desktops.c new file mode 100644 index 0000000000..dae810e84e --- /dev/null +++ b/legacy/elementary/src/bin/test_icon_desktops.c @@ -0,0 +1,112 @@ +#include + +static Elm_Genlist_Item_Class it_desk; + +static char * +desk_gl_label_get(const void *data, Evas_Object *obj, const char *part) +{ +#ifdef ELM_EFREET + Efreet_Desktop *d = (Efreet_Desktop *)data; + return strdup(d->name); +#else + return NULL; +#endif +} +static Evas_Object * +desk_gl_icon_get(const void *data, Evas_Object *obj, const char *part) +{ + // FIXME: elm_icon should grok this +#ifdef ELM_EFREET + Efreet_Desktop *d = (Efreet_Desktop *)data; + char *path; + Evas_Object *ic; + ic = elm_icon_add(obj); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + if (!(!strcmp(part, "elm.swallow.icon"))) return ic; + if (!d->icon) return ic; + path = efreet_icon_path_find("default", d->icon, 48); + if (!path) + { + path = efreet_icon_path_find("hicolor", d->icon, 48); + if (!path) + { + path = efreet_icon_path_find("gnome", d->icon, 48); + if (!path) + { + path = efreet_icon_path_find("Human", d->icon, 48); + } + } + } + if (path) + { + elm_icon_file_set(ic, path, NULL); + free(path); + return ic; + } + return ic; +#else + return NULL; +#endif +} +static void +desk_gl_del(const void *data, Evas_Object *obj) +{ +#ifdef ELM_EFREET + Efreet_Desktop *d = (Efreet_Desktop *)data; + efreet_desktop_free(d); +#endif +} + +static void +desktop_sel(void *data, Evas_Object *obj, void *event_info) +{ + printf("sel\n"); +} + +void +test_icon_desktops(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *gl; + Eina_List *desktops, *l; + + win = elm_win_add(NULL, "icon_desktops", ELM_WIN_BASIC); + elm_win_title_set(win, "Icon Desktops"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + it_desk.item_style = "default"; + it_desk.func.label_get = desk_gl_label_get; + it_desk.func.icon_get = desk_gl_icon_get; + it_desk.func.state_get = NULL; + it_desk.func.del = desk_gl_del; + + gl = elm_genlist_add(win); + evas_object_size_hint_weight_set(gl, 1.0, 1.0); + elm_win_resize_object_add(win, gl); + evas_object_show(gl); + +#ifdef ELM_EFREET + elm_need_efreet(); + desktops = efreet_util_desktop_name_glob_list("*"); + if (desktops) + { + Efreet_Desktop *d; + + EINA_LIST_FOREACH(desktops, l, d) + { + elm_genlist_item_append(gl, &it_desk, d, + NULL, ELM_GENLIST_ITEM_NONE, + desktop_sel, NULL); +// efreet_desktop_free(d); + } + eina_list_free(desktops); + } +#endif + + evas_object_resize(win, 320, 480); + evas_object_show(win); +} diff --git a/legacy/elementary/src/bin/test_photo.c b/legacy/elementary/src/bin/test_photo.c new file mode 100644 index 0000000000..8ff178b999 --- /dev/null +++ b/legacy/elementary/src/bin/test_photo.c @@ -0,0 +1,63 @@ +#include + +void +test_photo(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *win, *bg, *sc, *tb, *ph; + int i, j, n; + char buf[PATH_MAX]; + const char *img[9] = + { + "panel_01.jpg", + "plant_01.jpg", + "rock_01.jpg", + "rock_02.jpg", + "sky_01.jpg", + "sky_02.jpg", + "sky_03.jpg", + "sky_04.jpg", + "wood_01.jpg" + }; + + win = elm_win_add(NULL, "photo", ELM_WIN_BASIC); + elm_win_title_set(win, "Photo"); + elm_win_autodel_set(win, 1); + + bg = elm_bg_add(win); + evas_object_size_hint_weight_set(bg, 1.0, 1.0); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + tb = elm_table_add(win); + evas_object_size_hint_weight_set(tb, 1.0, 1.0); + + n = 0; + for (j = 0; j < 12; j++) + { + for (i = 0; i < 12; i++) + { + ph = elm_photo_add(win); + snprintf(buf, sizeof(buf), "%s/images/%s", + PACKAGE_DATA_DIR, img[n]); + n++; + if (n >= 9) n = 0; + elm_photo_file_set(ph, buf); + evas_object_size_hint_weight_set(ph, 1.0, 1.0); + evas_object_size_hint_align_set(ph, -1.0, -1.0); + elm_photo_size_set(ph, 80); + elm_table_pack(tb, ph, i, j, 1, 1); + evas_object_show(ph); + } + } + + sc = elm_scroller_add(win); + evas_object_size_hint_weight_set(sc, 1.0, 1.0); + elm_win_resize_object_add(win, sc); + + elm_scroller_content_set(sc, tb); + evas_object_show(tb); + evas_object_show(sc); + + evas_object_resize(win, 300, 300); + evas_object_show(win); +} diff --git a/legacy/elementary/src/bin/test_photocam.c b/legacy/elementary/src/bin/test_photocam.c index ad2f23d1ea..6ea046cfc2 100644 --- a/legacy/elementary/src/bin/test_photocam.c +++ b/legacy/elementary/src/bin/test_photocam.c @@ -12,8 +12,8 @@ test_photocam(void *data, Evas_Object *obj, void *event_info) "/home/raster/t3.jpg" }; - win = elm_win_add(NULL, "photo", ELM_WIN_BASIC); - elm_win_title_set(win, "Photo"); + win = elm_win_add(NULL, "photocam", ELM_WIN_BASIC); + elm_win_title_set(win, "Photocam"); elm_win_autodel_set(win, 1); bg = elm_bg_add(win); @@ -25,7 +25,7 @@ test_photocam(void *data, Evas_Object *obj, void *event_info) evas_object_size_hint_weight_set(ph, 1.0, 1.0); elm_win_resize_object_add(win, ph); - elm_photocam_file_set(ph, img[1]); + elm_photocam_file_set(ph, img[2]); evas_object_show(ph); diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index a0165e1122..c7bde1c715 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -15,6 +15,7 @@ @ELM_WIN32_DEF@ ELM_WIN32 @ELM_WINCE_DEF@ ELM_WINCE @ELM_EDBUS_DEF@ ELM_EDBUS +@ELM_EFREET_DEF@ ELM_EFREET @ELM_ALLOCA_H_DEF@ ELM_ALLOCA_H @ELM_LIBINTL_H_DEF@ ELM_LIBINTL_H @@ -75,6 +76,12 @@ # include #endif +#ifdef ELM_EFREET +# include +# include +# include +#endif + #ifdef EAPI # undef EAPI #endif @@ -161,6 +168,9 @@ extern "C" { EAPI void elm_quicklaunch_cleanup(void); EAPI int elm_quicklaunch_fallback(int argc, char **argv); EAPI char *elm_quicklaunch_exe_path_get(const char *exe); + + EAPI void elm_need_efreet(void); + EAPI void elm_need_e_dbus(void); EAPI void elm_object_scale_set(Evas_Object *obj, double scale); EAPI double elm_object_scale_get(const Evas_Object *obj); diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am index a69660a6b1..6f473ebfb1 100644 --- a/legacy/elementary/src/lib/Makefile.am +++ b/legacy/elementary/src/lib/Makefile.am @@ -13,7 +13,8 @@ AM_CPPFLAGS = \ @ELEMENTARY_FB_CFLAGS@ \ @ELEMENTARY_WIN32_CFLAGS@ \ @ELEMENTARY_WINCE_CFLAGS@ \ -@ELEMENTARY_EDBUS_CFLAGS@ +@ELEMENTARY_EDBUS_CFLAGS@ \ +@ELEMENTARY_EFREET_CFLAGS@ if ELEMENTARY_WINDOWS_BUILD AM_CPPFLAGS += -DELEMENTARY_BUILD @@ -79,5 +80,5 @@ els_icon.h libelementary_la_CFLAGS = -libelementary_la_LIBADD = @my_libs@ @dlopen_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ @ELEMENTARY_WIN32_LIBS@ @ELEMENTARY_WINCE_LIBS@ @ELEMENTARY_EDBUS_LIBS@ +libelementary_la_LIBADD = @my_libs@ @dlopen_libs@ @ELEMENTARY_LIBS@ @ELEMENTARY_X_LIBS@ @ELEMENTARY_FB_LIBS@ @ELEMENTARY_WIN32_LIBS@ @ELEMENTARY_WINCE_LIBS@ @ELEMENTARY_EDBUS_LIBS@ @ELEMENTARY_EFREET_LIBS@ libelementary_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ diff --git a/legacy/elementary/src/lib/elm_main.c b/legacy/elementary/src/lib/elm_main.c index 24170a02f7..8db228c53b 100644 --- a/legacy/elementary/src/lib/elm_main.c +++ b/legacy/elementary/src/lib/elm_main.c @@ -348,6 +348,76 @@ elm_shutdown(void) elm_quicklaunch_shutdown(); } +#ifdef ELM_EDBUS +static Eina_Bool _elm_need_e_dbus = 0; +#endif +EAPI void +elm_need_e_dbus(void) +{ +#ifdef ELM_EDBUS + if (_elm_need_e_dbus) return; + _elm_need_e_dbus = 1; + e_dbus_init(); +#endif +} + +static void +_elm_unneed_e_dbus(void) +{ +#ifdef ELM_EDBUS + if (_elm_need_e_dbus) + { + _elm_need_e_dbus = 0; + e_dbus_shutdown(); + } +#endif +} + +#ifdef ELM_EFREET +static Eina_Bool _elm_need_efreet = 0; +#endif +EAPI void +elm_need_efreet(void) +{ +#ifdef ELM_EFREET + if (_elm_need_efreet) return; + _elm_need_efreet = 1; + efreet_init(); + efreet_util_init(); + efreet_mime_init(); + efreet_trash_init(); + /* + { + Eina_List **list; + + list = efreet_icon_extra_list_get(); + if (list) + { + e_user_dir_concat_static(buf, "icons"); + *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf)); + e_prefix_data_concat_static(buf, "data/icons"); + *list = eina_list_prepend(*list, (void *)eina_stringshare_add(buf)); + } + } + */ +#endif +} + +static void +_elm_unneed_efreet(void) +{ +#ifdef ELM_EDBUS + if (_elm_need_efreet) + { + _elm_need_efreet = 0; + efreet_trash_shutdown(); + efreet_mime_shutdown(); + efreet_util_shutdown(); + efreet_shutdown(); + } +#endif +} + EAPI void elm_quicklaunch_init(int argc, char **argv) { @@ -370,7 +440,7 @@ elm_quicklaunch_init(int argc, char **argv) evas_init(); edje_init(); ecore_evas_init(); // FIXME: check errors - + _elm_exit_handler = ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, _elm_signal_exit, NULL); _elm_appname = strdup(ecore_file_file_get(argv[0])); @@ -641,6 +711,8 @@ elm_quicklaunch_shutdown(void) free(_elm_config); free(_elm_appname); + _elm_unneed_efreet(); + _elm_unneed_e_dbus(); ecore_evas_shutdown(); edje_shutdown(); evas_shutdown();